Merged revisions 2867-2879 via svnmerge from
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 19 Apr 2008 02:11:31 +0000 (02:11 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 19 Apr 2008 02:11:31 +0000 (02:11 +0000)
http://scons.tigris.org/svn/scons/branches/core

................
  r2875 | stevenknight | 2008-04-17 21:33:00 -0700 (Thu, 17 Apr 2008) | 4 lines

  Fix the script that looks for uncaught KeyboardInterrupt exceptions to
  expect specific numbers of these from the modules that were recently
  modified to handle KeyboardInterrupt exceptions differently.
................
  r2877 | stevenknight | 2008-04-18 17:31:14 -0700 (Fri, 18 Apr 2008) | 3 lines

  Fix how the packaging tests look for the build packages (I hope,
  we'll know once it gets through buildbot).
................
  r2879 | stevenknight | 2008-04-18 18:43:56 -0700 (Fri, 18 Apr 2008) | 352 lines

  Merged revisions 2777,2779-2873,2875 via svnmerge from
  http://scons.tigris.org/svn/scons/branches/fortran_refactor

  ........
    r2779 | cournape | 2008-04-14 20:52:08 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix tool detection in unit tests for F77 dialect.
  ........
    r2780 | cournape | 2008-04-14 21:02:25 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix tool detection in unit tests for FORTRAN dialect.
  ........
    r2781 | cournape | 2008-04-14 21:18:40 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix tool detection in unit tests for F90 dialect.
  ........
    r2782 | cournape | 2008-04-14 21:32:49 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix tool detection in unit tests for F95 dialect.
  ........
    r2783 | cournape | 2008-04-14 21:34:31 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix *F77FLAGS tool detection.
  ........
    r2784 | cournape | 2008-04-14 21:35:15 -0700 (Mon, 14 Apr 2008) | 1 line

    Do not harcode F77 compiler for unit test.
  ........
    r2785 | cournape | 2008-04-14 21:35:48 -0700 (Mon, 14 Apr 2008) | 1 line

    Do not harcode FORTRAN compiler for unit test.
  ........
    r2786 | cournape | 2008-04-14 21:39:33 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix tool detection for *FORTRANFLAGS unit test.
  ........
    r2787 | cournape | 2008-04-14 21:40:17 -0700 (Mon, 14 Apr 2008) | 1 line

    Fix escaping of fc in F95 unit test.
  ........
    r2791 | cournape | 2008-04-14 22:34:52 -0700 (Mon, 14 Apr 2008) | 1 line

    Refactor emitter for all fortran dialects, such as the same function is used everywhere.
  ........
    r2792 | cournape | 2008-04-14 22:37:20 -0700 (Mon, 14 Apr 2008) | 1 line

    Add new FortranCommon python module in Tools to MANIFEST.in.
  ........
    r2793 | cournape | 2008-04-14 22:44:28 -0700 (Mon, 14 Apr 2008) | 1 line

    Add a function to create all function list generator in a dialect independant way.
  ........
    r2794 | cournape | 2008-04-14 22:47:45 -0700 (Mon, 14 Apr 2008) | 1 line

    Use dialect independant vlg creation in all fortran dialect tools.
  ........
    r2795 | cournape | 2008-04-14 22:49:50 -0700 (Mon, 14 Apr 2008) | 1 line

    Add a dialect independant function to create actions vlg.
  ........
    r2796 | cournape | 2008-04-14 22:50:21 -0700 (Mon, 14 Apr 2008) | 1 line

    Use dialect independant action vlg creator in FORTRAN dialect.
  ........
    r2797 | cournape | 2008-04-14 22:51:44 -0700 (Mon, 14 Apr 2008) | 1 line

    Use dialect independant action vlg creator in F77 dialect.
  ........
    r2798 | cournape | 2008-04-14 22:52:00 -0700 (Mon, 14 Apr 2008) | 1 line

    Use dialect independant action vlg creator in F90 dialect.
  ........
    r2799 | cournape | 2008-04-14 22:52:20 -0700 (Mon, 14 Apr 2008) | 1 line

    Use dialect independant action vlg creator in F95 dialect.
  ........
    r2800 | cournape | 2008-04-14 22:54:18 -0700 (Mon, 14 Apr 2008) | 1 line

    Add function to create all construction variables for every dialect.
  ........
    r2801 | cournape | 2008-04-14 22:56:05 -0700 (Mon, 14 Apr 2008) | 1 line

    f77 tool now uses common implementation for add_to_env.
  ........
    r2802 | cournape | 2008-04-14 22:57:30 -0700 (Mon, 14 Apr 2008) | 1 line

    f90 tool now uses common implementation for add_to_env.
  ........
    r2803 | cournape | 2008-04-14 22:58:13 -0700 (Mon, 14 Apr 2008) | 1 line

    f95 tool now uses common implementation for add_to_env.
  ........
    r2804 | cournape | 2008-04-14 23:00:35 -0700 (Mon, 14 Apr 2008) | 1 line

    fortran tool now uses common implementation for add_to_env.
  ........
    r2805 | cournape | 2008-04-14 23:10:41 -0700 (Mon, 14 Apr 2008) | 1 line

    Handle fortran sources in smart_link in a way similar to C++; we launch an exception if both C++ and fortran sources are used, because this cannot be handled easily in this scheme.
  ........
    r2806 | cournape | 2008-04-14 23:17:54 -0700 (Mon, 14 Apr 2008) | 1 line

    Use f95 specific suffix for F95 compiled unit tests (.f95 instead of .f), plus minor typo to make all F95* tests pass.
  ........
    r2807 | cournape | 2008-04-15 00:47:59 -0700 (Tue, 15 Apr 2008) | 1 line

    Refactor mylink.py generation in fortran tests.
  ........
    r2808 | cournape | 2008-04-15 00:51:11 -0700 (Tue, 15 Apr 2008) | 1 line

    Forgot to add new common.py for  code shared by all fortran tests.
  ........
    r2809 | cournape | 2008-04-15 02:08:44 -0700 (Tue, 15 Apr 2008) | 1 line

    Add a F77FILESUFFIXES and F77PPFILESUFFIXES construction variable to control F77 dialect file extension.
  ........
    r2810 | cournape | 2008-04-15 02:22:26 -0700 (Tue, 15 Apr 2008) | 1 line

    Add a FORTRANFILESUFFIXES and FORTRANPPFILESUFFIXES construction variable to control FORTRAN dialect file extension.
  ........
    r2811 | cournape | 2008-04-15 02:38:11 -0700 (Tue, 15 Apr 2008) | 1 line

    Add a F90FILESUFFIXES and F90PPFILESUFFIXES construction variable to control F90 dialect file extension.
  ........
    r2812 | cournape | 2008-04-15 02:46:31 -0700 (Tue, 15 Apr 2008) | 1 line

    Add a F95FILESUFFIXES and F95PPFILESUFFIXES construction variable to control F95 dialect file extension.
  ........
    r2813 | cournape | 2008-04-15 04:23:25 -0700 (Tue, 15 Apr 2008) | 1 line

    Add tool list initialization for unit test.
  ........
    r2814 | cournape | 2008-04-15 05:16:28 -0700 (Tue, 15 Apr 2008) | 1 line

    Remove use of variable list generator in fortran support. FORTRAN is the default dialect, and its cvar are created by every dialect tool.
  ........
    r2815 | cournape | 2008-04-15 05:18:00 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix FORTRAN* and SHFORTRAN* tests.
  ........
    r2816 | cournape | 2008-04-15 05:38:46 -0700 (Tue, 15 Apr 2008) | 1 line

    Forgot to generate F95* cvar in f95 tool.
  ........
    r2819 | cournape | 2008-04-15 15:14:58 -0700 (Tue, 15 Apr 2008) | 1 line

    Put cvar construction add_to_env func in FortranCommon for all dialect; all dialect cvar are always created for all tools.
  ........
    r2820 | cournape | 2008-04-15 15:34:32 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix unit tests for F77* and SHF77* cvar.
  ........
    r2821 | cournape | 2008-04-15 15:38:26 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix unit tests for F90* and SHF90* cvar.
  ........
    r2822 | cournape | 2008-04-15 15:43:47 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix unit tests for F95* and SHF95* cvar.
  ........
    r2823 | cournape | 2008-04-15 15:50:41 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix compiler name setting in dialect fortran tools.
  ........
    r2824 | cournape | 2008-04-15 15:56:57 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix -fPIC for g77 tool.
  ........
    r2825 | cournape | 2008-04-15 16:07:03 -0700 (Tue, 15 Apr 2008) | 1 line

    Set compiler name in g77 tool for supported dialects.
  ........
    r2826 | cournape | 2008-04-15 18:10:18 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix F77PATH unit test.
  ........
    r2827 | cournape | 2008-04-15 18:11:58 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix typo in f90.py tool.
  ........
    r2828 | cournape | 2008-04-15 18:16:22 -0700 (Tue, 15 Apr 2008) | 1 line

    Adapt gfortran tool to new fortran support.
  ........
    r2829 | cournape | 2008-04-15 18:22:44 -0700 (Tue, 15 Apr 2008) | 1 line

    Adapt ifort tool to new fortran support.
  ........
    r2830 | cournape | 2008-04-15 18:28:50 -0700 (Tue, 15 Apr 2008) | 1 line

    Update cvar set by gfortran tool in xml doc.
  ........
    r2831 | cournape | 2008-04-15 18:31:43 -0700 (Tue, 15 Apr 2008) | 1 line

    Update ifort tool, and add cvar doc in xml doc.
  ........
    r2832 | cournape | 2008-04-15 18:40:51 -0700 (Tue, 15 Apr 2008) | 1 line

    Change fortran tool search order on gnu platforms: first search gfortran, then g77, etc...
  ........
    r2833 | cournape | 2008-04-15 18:42:04 -0700 (Tue, 15 Apr 2008) | 1 line

    Add Sun f77 tool sunf77.
  ........
    r2834 | cournape | 2008-04-15 18:43:40 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix typo in sunf77 doc.
  ........
    r2835 | cournape | 2008-04-15 18:46:38 -0700 (Tue, 15 Apr 2008) | 1 line

    Add Sun f90 tool sunf90.
  ........
    r2836 | cournape | 2008-04-15 18:47:39 -0700 (Tue, 15 Apr 2008) | 1 line

    Add Sun f95 tool sunf95.
  ........
    r2837 | cournape | 2008-04-15 18:50:04 -0700 (Tue, 15 Apr 2008) | 1 line

    Change tool order for fortran compilers on sun OS: use sun specific compilers first, and add gfortran to the list.
  ........
    r2838 | cournape | 2008-04-15 18:50:48 -0700 (Tue, 15 Apr 2008) | 1 line

    Change tool order on win32 for fortran compilers: use gfortran before g77.
  ........
    r2839 | cournape | 2008-04-15 18:51:23 -0700 (Tue, 15 Apr 2008) | 1 line

    Use gfortran first if available on mac os X.
  ........
    r2840 | cournape | 2008-04-15 18:52:09 -0700 (Tue, 15 Apr 2008) | 1 line

    Add sun fortran compilers to the tool list in the manpage.
  ........
    r2841 | cournape | 2008-04-15 18:58:55 -0700 (Tue, 15 Apr 2008) | 1 line

    Add new sun fortran compilers tools to the MANIFEST.in
  ........
    r2842 | cournape | 2008-04-15 19:07:18 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix typo for sun fortran compiler pic flags.
  ........
    r2843 | cournape | 2008-04-15 20:07:32 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix order issue in one f90 unit test.
  ........
    r2844 | cournape | 2008-04-15 20:16:21 -0700 (Tue, 15 Apr 2008) | 1 line

    Fix order issues in one f95 unit test.
  ........
    r2845 | cournape | 2008-04-15 23:47:07 -0700 (Tue, 15 Apr 2008) | 1 line

    Add fortran specific prefix/suffix include flags: this is useful when e.g. mixing VS and mingw fortran compiler.
  ........
    r2846 | cournape | 2008-04-16 00:27:38 -0700 (Wed, 16 Apr 2008) | 1 line

    Set stderr=None on solaris for fortran unit tests because f77 always put junk on stderr.
  ........
    r2847 | cournape | 2008-04-16 00:47:04 -0700 (Wed, 16 Apr 2008) | 1 line

    Do not use fortran_lib anymore in FORTRANPATH unit test.
  ........
    r2848 | cournape | 2008-04-16 01:16:23 -0700 (Wed, 16 Apr 2008) | 1 line

    Set stderr to None on solaris for FORTRANPATH test.
  ........
    r2849 | cournape | 2008-04-16 03:50:35 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix sun fortran compilers detection.
  ........
    r2852 | cournape | 2008-04-16 16:57:44 -0700 (Wed, 16 Apr 2008) | 1 line

    Add a shobj_ variable for shared object preffix (needed for tests on solaris).
  ........
    r2853 | cournape | 2008-04-16 17:15:52 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix some typo for shobj_ in qmtest.
  ........
    r2854 | cournape | 2008-04-16 17:17:43 -0700 (Wed, 16 Apr 2008) | 1 line

    Handle shared object prefix in SHFORTRAN test + KPIC flag for solaris.
  ........
    r2855 | cournape | 2008-04-16 17:28:59 -0700 (Wed, 16 Apr 2008) | 1 line

    Add shobj_prefix for all platforms.
  ........
    r2856 | cournape | 2008-04-16 17:33:15 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix shared object fortran unit test for solaris.
  ........
    r2857 | cournape | 2008-04-16 17:37:14 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix shared object prefix to make fortran unit test pass on solaris.
  ........
    r2858 | cournape | 2008-04-16 17:38:28 -0700 (Wed, 16 Apr 2008) | 1 line

    Use TestSCons facility to get shared object suffix.
  ........
    r2859 | cournape | 2008-04-16 17:42:50 -0700 (Wed, 16 Apr 2008) | 1 line

    Handl shared object prefix in fortran unit test for solaris.
  ........
    r2860 | cournape | 2008-04-16 17:54:27 -0700 (Wed, 16 Apr 2008) | 1 line

    Handle shared object prefix in some fortran unit test.
  ........
    r2861 | cournape | 2008-04-16 17:55:58 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix typo: put shared object prefix at wrong place.
  ........
    r2862 | cournape | 2008-04-16 18:00:42 -0700 (Wed, 16 Apr 2008) | 1 line

    More fix for fortran unit tests on solaris: handle -KPIC flag in wrappers.
  ........
    r2863 | cournape | 2008-04-16 18:03:00 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix SHF77FLAGS test on solaris.
  ........
    r2864 | cournape | 2008-04-16 18:07:39 -0700 (Wed, 16 Apr 2008) | 1 line

    More fix for f90 unit test on solaris.
  ........
    r2865 | cournape | 2008-04-16 18:08:58 -0700 (Wed, 16 Apr 2008) | 1 line

    Fix f95 unit test on solaris.
  ........
    r2867 | cournape | 2008-04-16 18:38:17 -0700 (Wed, 16 Apr 2008) | 1 line

    More fortran unit test fixes for solaris.
  ........
    r2869 | cournape | 2008-04-17 06:42:25 -0700 (Thu, 17 Apr 2008) | 1 line

    Fix SHFORTRAN definition issues for g77, gfortran, ifort and ifl.
  ........
    r2870 | cournape | 2008-04-17 06:43:24 -0700 (Thu, 17 Apr 2008) | 1 line

    Fix SHFORTRAN definition issues for sun fortran compilers.
  ........
    r2871 | stevenknight | 2008-04-17 18:16:55 -0700 (Thu, 17 Apr 2008) | 3 lines

    Test SH{F77,FORTRAN}FLAGS.py by appending the custom test flags,
    not overwriting the -fPIC value that the tools now initialize.
  ........
    r2872 | stevenknight | 2008-04-17 18:22:24 -0700 (Thu, 17 Apr 2008) | 4 lines

    Fix the SH{F90,F95}FLAGS.py test scripts as well by appending our custom
    values to the SH*FLAGS values, so we don't overwrite the -fPIC value
    necessary for building on 64-bit Linux systems.
  ........
    r2873 | stevenknight | 2008-04-17 19:08:43 -0700 (Thu, 17 Apr 2008) | 2 lines

    Remove left-over fortran.* lines.
  ........
................

git-svn-id: http://scons.tigris.org/svn/scons/trunk@2880 fdb21ef1-2011-0410-befe-b5e4ea1792b1

71 files changed:
QMTest/TestCommon.py
QMTest/TestSCons.py
doc/man/scons.1
src/CHANGES.txt
src/RELEASE.txt
src/engine/MANIFEST.in
src/engine/SCons/Tool/FortranCommon.py [new file with mode: 0644]
src/engine/SCons/Tool/__init__.py
src/engine/SCons/Tool/f77.py
src/engine/SCons/Tool/f77.xml
src/engine/SCons/Tool/f90.py
src/engine/SCons/Tool/f90.xml
src/engine/SCons/Tool/f95.py
src/engine/SCons/Tool/f95.xml
src/engine/SCons/Tool/fortran.py
src/engine/SCons/Tool/fortran.xml
src/engine/SCons/Tool/g77.py
src/engine/SCons/Tool/gfortran.py
src/engine/SCons/Tool/gfortran.xml
src/engine/SCons/Tool/ifl.py
src/engine/SCons/Tool/ifort.py
src/engine/SCons/Tool/ifort.xml
src/engine/SCons/Tool/link.py
src/engine/SCons/Tool/sunf77.py [new file with mode: 0644]
src/engine/SCons/Tool/sunf77.xml [new file with mode: 0644]
src/engine/SCons/Tool/sunf90.py [new file with mode: 0644]
src/engine/SCons/Tool/sunf90.xml [new file with mode: 0644]
src/engine/SCons/Tool/sunf95.py [new file with mode: 0644]
src/engine/SCons/Tool/sunf95.xml [new file with mode: 0644]
src/test_interrupts.py
test/Fortran/F77.py
test/Fortran/F77COM.py
test/Fortran/F77COMSTR.py
test/Fortran/F77FILESUFFIXES.py [new file with mode: 0644]
test/Fortran/F77FILESUFFIXES2.py [new file with mode: 0644]
test/Fortran/F77FLAGS.py
test/Fortran/F77PATH.py
test/Fortran/F90.py
test/Fortran/F90COM.py
test/Fortran/F90FILESUFFIXES.py [new file with mode: 0644]
test/Fortran/F90FILESUFFIXES2.py [new file with mode: 0644]
test/Fortran/F90FLAGS.py
test/Fortran/F90PATH.py
test/Fortran/F95.py
test/Fortran/F95COM.py
test/Fortran/F95FILESUFFIXES.py [new file with mode: 0644]
test/Fortran/F95FILESUFFIXES2.py [new file with mode: 0644]
test/Fortran/F95FLAGS.py
test/Fortran/FORTRAN.py
test/Fortran/FORTRANCOM.py
test/Fortran/FORTRANCOMSTR.py
test/Fortran/FORTRANFILESUFFIXES.py [new file with mode: 0644]
test/Fortran/FORTRANFILESUFFIXES2.py [new file with mode: 0644]
test/Fortran/FORTRANFLAGS.py
test/Fortran/FORTRANPATH.py
test/Fortran/SHF77.py
test/Fortran/SHF77COM.py
test/Fortran/SHF77COMSTR.py
test/Fortran/SHF77FLAGS.py
test/Fortran/SHF90.py
test/Fortran/SHF90COM.py
test/Fortran/SHF90FLAGS.py
test/Fortran/SHF95.py
test/Fortran/SHF95COM.py
test/Fortran/SHF95FLAGS.py
test/Fortran/SHFORTRAN.py
test/Fortran/SHFORTRANCOM.py
test/Fortran/SHFORTRANCOMSTR.py
test/Fortran/SHFORTRANFLAGS.py
test/Fortran/common.py [new file with mode: 0644]
test/Fortran/module-subdir.py

index acc63d49266e9afc5818d4b392a5b2cb13697062..8a3ad370864ac82c23d6393136da979b2f94ffc0 100644 (file)
@@ -102,6 +102,7 @@ from TestCmd import __all__
 __all__.extend([ 'TestCommon',
                  'exe_suffix',
                  'obj_suffix',
+                 'shobj_prefix',
                  'shobj_suffix',
                  'lib_prefix',
                  'lib_suffix',
@@ -114,6 +115,7 @@ if sys.platform == 'win32':
     exe_suffix   = '.exe'
     obj_suffix   = '.obj'
     shobj_suffix = '.obj'
+    shobj_prefix = ''
     lib_prefix   = ''
     lib_suffix   = '.lib'
     dll_prefix   = ''
@@ -122,6 +124,7 @@ elif sys.platform == 'cygwin':
     exe_suffix   = '.exe'
     obj_suffix   = '.o'
     shobj_suffix = '.os'
+    shobj_prefix = ''
     lib_prefix   = 'lib'
     lib_suffix   = '.a'
     dll_prefix   = ''
@@ -130,6 +133,7 @@ elif string.find(sys.platform, 'irix') != -1:
     exe_suffix   = ''
     obj_suffix   = '.o'
     shobj_suffix = '.o'
+    shobj_prefix = ''
     lib_prefix   = 'lib'
     lib_suffix   = '.a'
     dll_prefix   = 'lib'
@@ -138,6 +142,16 @@ elif string.find(sys.platform, 'darwin') != -1:
     exe_suffix   = ''
     obj_suffix   = '.o'
     shobj_suffix = '.os'
+    shobj_prefix = ''
+    lib_prefix   = 'lib'
+    lib_suffix   = '.a'
+    dll_prefix   = 'lib'
+    dll_suffix   = '.dylib'
+elif string.find(sys.platform, 'sunos') != -1:
+    exe_suffix   = ''
+    obj_suffix   = '.o'
+    shobj_suffix = '.os'
+    shobj_prefix = 'so_'
     lib_prefix   = 'lib'
     lib_suffix   = '.a'
     dll_prefix   = 'lib'
@@ -146,6 +160,7 @@ else:
     exe_suffix   = ''
     obj_suffix   = '.o'
     shobj_suffix = '.os'
+    shobj_prefix = ''
     lib_prefix   = 'lib'
     lib_suffix   = '.a'
     dll_prefix   = 'lib'
index 62650406883de55a33f68924285203b4dc0094c7..429a6f2c7715e28ba620b0ac6d475090657f9fae 100644 (file)
@@ -46,7 +46,11 @@ default_version = '0.98.0'
 
 copyright_years = '2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008'
 
-SConsVersion = '0.98.0'
+# In the checked-in source, the value of SConsVersion in the following
+# line must remain "__ VERSION __" (without the spaces) so the built
+# version in build/QMTest/TestSCons.py contains the actual version
+# string of the packages that have been built.
+SConsVersion = '__VERSION__'
 if SConsVersion == '__' + 'VERSION' + '__':
     SConsVersion = default_version
 
@@ -56,6 +60,7 @@ __all__.extend([ 'TestSCons',
                  '_exe',
                  '_obj',
                  '_shobj',
+                 'shobj_',
                  'lib_',
                  '_lib',
                  'dll_',
@@ -84,6 +89,7 @@ _python_ = '"' + python_executable + '"'
 _exe = exe_suffix
 _obj = obj_suffix
 _shobj = shobj_suffix
+shobj_ = shobj_prefix
 _lib = lib_suffix
 lib_ = lib_prefix
 _dll = dll_suffix
index 25a17fd8d4aa888901e360ba06072081ee008ff5..c06c447f4d8bf50e7bc87a155f4a9f361e68dff1 100644 (file)
@@ -1730,6 +1730,9 @@ sgilink
 sunar
 sunc++
 suncc
+sunf77
+sunf90
+sunf95
 sunlink
 swig
 tar
index 9550392d6cf1a25729659ee99305e0a63276e1a2..f0187eb386980ea150200e3c8f4c1f55a391b502 100644 (file)
@@ -26,6 +26,26 @@ RELEASE X.XX - XXX
 
   - Fix the ability to use LoadableModule() under MinGW.
 
+  From David Cournapeau:
+
+  - Various missing Fortran-related construction variables have been added.
+
+  - SCons now uses the program specified in the $FORTRAN construction
+    variable to link Fortran object files.
+
+  - Fortran compilers on Linux (Intel, g77 and gfortran) now add the -fPIC
+    option by default when compilling shared objects.
+
+  - New 'sunf77', 'sunf90' and 'sunf95' Tool modules have been added to
+    support Sun Fortran compilers.  On Solaris, the Sun Fortran compilers
+    are used in preference to other compilers by default.
+
+  - Fortran support now uses gfortran in preference to g77.
+
+  - Fortran file suffixes are now configurable through the
+    $F77FILESUFFIXES, $F90FILESUFFIXES, $F95FILESUFFIXES and
+    $FORTRANFILESUFFIXES variables.
+
   From Steven Knight:
 
   - Make the -d, -e, -w and --no-print-directory options "Ignored for
index 7eaaa1cc7f4ffc2f25a8c3a11c6a4b20646c0a97..0cfbc8ee62d1670ca091bcdb5d55fc82fd9b877b 100644 (file)
@@ -56,6 +56,28 @@ RELEASE 0.98.1 - XXX
         will not cause any compilation problems, but the change to the
         command line may cause SCons to rebuild object files.
 
+    --  FORTRAN NOW COMPILES .f FILES WITH gfortran BY DEFAULT
+
+        The Fortran Tool modules have had a major overhaul with the intent
+        of making them work as-is for most configurations.  In general,
+        most configurations that use default settings should not see
+        any noticeable difference.
+
+        One configuration that has changed is if you have both a gfortran
+        and g77 compiler installed.  In this case, previous versions of
+        SCons would, by default, use g77 by default to compile files with
+        a .f suffix, while SCons 0.98.1 will use the gfortran compiler
+        by default.  The old behavior may be preserved by explicitly
+        initializing construction environments with the 'g77' Tool module:
+
+            env = Environment(tools = ['g77', 'default'])
+        
+        The above code is backwards compatible to older versions of SCons.
+
+        If you notice any other changes in the behavior of default
+        Fortran support, please let us know so we can document them in
+        these release notes for other users.
+
   Please note the following important changes since release 0.97.0d20071212:
 
     --  SUPPORT FOR PYTHON VERSIONS BEFORE 2.2 IS NOW DEPRECATED
index e4e80462dbd34b291f9daa86fa07107099cb14b8..4c8b7a7615bf8b686ce8595dfe000417a50603b6 100644 (file)
@@ -83,6 +83,7 @@ SCons/Tool/f90.py
 SCons/Tool/f95.py
 SCons/Tool/filesystem.py
 SCons/Tool/fortran.py
+SCons/Tool/FortranCommon.py
 SCons/Tool/g++.py
 SCons/Tool/g77.py
 SCons/Tool/gas.py
@@ -149,6 +150,9 @@ SCons/Tool/Subversion.py
 SCons/Tool/sunar.py
 SCons/Tool/sunc++.py
 SCons/Tool/suncc.py
+SCons/Tool/sunf77.py
+SCons/Tool/sunf90.py
+SCons/Tool/sunf95.py
 SCons/Tool/sunlink.py
 SCons/Tool/swig.py
 SCons/Tool/tar.py
diff --git a/src/engine/SCons/Tool/FortranCommon.py b/src/engine/SCons/Tool/FortranCommon.py
new file mode 100644 (file)
index 0000000..579b4dd
--- /dev/null
@@ -0,0 +1,242 @@
+"""SCons.Tool.FortranCommon
+
+Stuff for processing Fortran, common to all fortran dialects.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import re
+import string
+import os.path
+
+import SCons.Action
+import SCons.Defaults
+import SCons.Scanner.Fortran
+import SCons.Tool
+import SCons.Util
+
+def isfortran(env, source):
+    """Return 1 if any of code in source has fortran files in it, 0
+    otherwise."""
+    try:
+        fsuffixes = env['FORTRANSUFFIXES']
+    except KeyError:
+        # If no FORTRANSUFFIXES, no fortran tool, so there is no need to look
+        # for fortran sources.
+        return 0
+
+    if not source:
+        # Source might be None for unusual cases like SConf.
+        return 0
+    for s in source:
+        if s.sources:
+            ext = os.path.splitext(str(s.sources[0]))[1]
+            if ext in fsuffixes:
+                return 1
+    return 0
+
+def _fortranEmitter(target, source, env):
+    node = source[0].rfile()
+    if not node.exists() and not node.is_derived():
+       print "Could not locate " + str(node.name)
+       return ([], [])
+    mod_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)"""
+    cre = re.compile(mod_regex,re.M)
+    # Retrieve all USE'd module names
+    modules = cre.findall(node.get_contents())
+    # Remove unique items from the list
+    modules = SCons.Util.unique(modules)
+    # Convert module name to a .mod filename
+    suffix = env.subst('$FORTRANMODSUFFIX', target=target, source=source)
+    moddir = env.subst('$FORTRANMODDIR', target=target, source=source)
+    modules = map(lambda x, s=suffix: string.lower(x) + s, modules)
+    for m in modules:
+       target.append(env.fs.File(m, moddir))
+    return (target, source)
+
+def FortranEmitter(target, source, env):
+    target, source = _fortranEmitter(target, source, env)
+    return SCons.Defaults.StaticObjectEmitter(target, source, env)
+
+def ShFortranEmitter(target, source, env):
+    target, source = _fortranEmitter(target, source, env)
+    return SCons.Defaults.SharedObjectEmitter(target, source, env)
+
+def ComputeFortranSuffixes(suffixes, ppsuffixes):
+    """suffixes are fortran source files, and ppsuffixes the ones to be
+    pre-processed. Both should be sequences, not strings."""
+    assert len(suffixes) > 0
+    s = suffixes[0]
+    sup = string.upper(s)
+    if SCons.Util.case_sensitive_suffixes(s, sup):
+        for i in suffixes:
+            ppsuffixes.append(string.upper(i))
+    else:
+        for i in suffixes:
+            suffixes.append(string.upper(i))
+
+def CreateDialectActions(dialect):
+    """Create dialect specific actions."""
+    CompAction = SCons.Action.Action('$%sCOM ' % dialect, '$%sCOMSTR' % dialect)
+    CompPPAction = SCons.Action.Action('$%sPPCOM ' % dialect, '$%sPPCOMSTR' % dialect)
+    ShCompAction = SCons.Action.Action('$SH%sCOM ' % dialect, '$SH%sCOMSTR' % dialect)
+    ShCompPPAction = SCons.Action.Action('$SH%sPPCOM ' % dialect, '$SH%sPPCOMSTR' % dialect)
+
+    return CompAction, CompPPAction, ShCompAction, ShCompPPAction
+
+def DialectAddToEnv(env, dialect, suffixes, ppsuffixes, support_module = 0):
+    """Add dialect specific construction variables."""
+    ComputeFortranSuffixes(suffixes, ppsuffixes)
+
+    fscan = SCons.Scanner.Fortran.FortranScan("%sPATH" % dialect)
+
+    for suffix in suffixes + ppsuffixes:
+        SCons.Tool.SourceFileScanner.add_scanner(suffix, fscan)
+
+    env.AppendUnique(FORTRANSUFFIXES = suffixes + ppsuffixes)
+
+    compaction, compppaction, shcompaction, shcompppaction = \
+            CreateDialectActions(dialect)
+
+    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
+
+    for suffix in suffixes:
+        static_obj.add_action(suffix, compaction)
+        shared_obj.add_action(suffix, shcompaction)
+        static_obj.add_emitter(suffix, FortranEmitter)
+        shared_obj.add_emitter(suffix, ShFortranEmitter)
+
+    for suffix in ppsuffixes:
+        static_obj.add_action(suffix, compppaction)
+        shared_obj.add_action(suffix, shcompppaction)
+        static_obj.add_emitter(suffix, FortranEmitter)
+        shared_obj.add_emitter(suffix, ShFortranEmitter)
+
+    if not env.has_key('%sFLAGS' % dialect):
+        env['%sFLAGS' % dialect] = SCons.Util.CLVar('')
+
+    if not env.has_key('SH%sFLAGS' % dialect):
+        env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect)
+
+    # If a tool does not define fortran prefix/suffix for include path, use C ones
+    if not env.has_key('INC%sPREFIX' % dialect):
+        env['INC%sPREFIX' % dialect] = '$INCPREFIX'
+
+    if not env.has_key('INC%sSUFFIX' % dialect):
+        env['INC%sSUFFIX' % dialect] = '$INCSUFFIX'
+
+    env['_%sINCFLAGS' % dialect] = '$( ${_concat(INC%sPREFIX, %sPATH, INC%sSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' % (dialect, dialect, dialect)
+
+    if support_module == 1:
+        env['%sCOM' % dialect]     = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
+        env['%sPPCOM' % dialect]   = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
+        env['SH%sCOM' % dialect]    = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
+        env['SH%sPPCOM' % dialect]  = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
+    else:
+        env['%sCOM' % dialect]     = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
+        env['%sPPCOM' % dialect]   = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
+        env['SH%sCOM' % dialect]    = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
+        env['SH%sPPCOM' % dialect]  = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
+
+def add_fortran_to_env(env):
+    """Add Builders and construction variables for Fortran to an Environment."""
+    try:
+        FortranSuffixes = env['FORTRANFILESUFFIXES']
+    except KeyError:
+        FortranSuffixes = ['.f', '.for', '.ftn']
+
+    #print "Adding %s to fortran suffixes" % FortranSuffixes
+    try:
+        FortranPPSuffixes = env['FORTRANPPFILESUFFIXES']
+    except KeyError:
+        FortranPPSuffixes = ['.fpp', '.FPP']
+
+    DialectAddToEnv(env, "FORTRAN", FortranSuffixes,
+                    FortranPPSuffixes, support_module = 1)
+
+    env['FORTRANMODPREFIX'] = ''     # like $LIBPREFIX
+    env['FORTRANMODSUFFIX'] = '.mod' # like $LIBSUFFIX
+
+    env['FORTRANMODDIR'] = ''          # where the compiler should place .mod files
+    env['FORTRANMODDIRPREFIX'] = ''    # some prefix to $FORTRANMODDIR - similar to $INCPREFIX
+    env['FORTRANMODDIRSUFFIX'] = ''    # some suffix to $FORTRANMODDIR - similar to $INCSUFFIX
+    env['_FORTRANMODFLAG'] = '$( ${_concat(FORTRANMODDIRPREFIX, FORTRANMODDIR, FORTRANMODDIRSUFFIX, __env__, RDirs)} $)'
+
+def add_f77_to_env(env):
+    """Add Builders and construction variables for f77 to an Environment."""
+    try:
+        F77Suffixes = env['F77FILESUFFIXES']
+    except KeyError:
+        F77Suffixes = ['.f77']
+
+    #print "Adding %s to f77 suffixes" % F77Suffixes
+    try:
+        F77PPSuffixes = env['F77PPFILESUFFIXES']
+    except KeyError:
+        F77PPSuffixes = []
+
+    DialectAddToEnv(env, "F77", F77Suffixes, F77PPSuffixes)
+
+def add_f90_to_env(env):
+    """Add Builders and construction variables for f90 to an Environment."""
+    try:
+        F90Suffixes = env['F90FILESUFFIXES']
+    except KeyError:
+        F90Suffixes = ['.f90']
+
+    #print "Adding %s to f90 suffixes" % F90Suffixes
+    try:
+        F90PPSuffixes = env['F90PPFILESUFFIXES']
+    except KeyError:
+        F90PPSuffixes = []
+
+    DialectAddToEnv(env, "F90", F90Suffixes, F90PPSuffixes,
+                    support_module = 1)
+
+def add_f95_to_env(env):
+    """Add Builders and construction variables for f95 to an Environment."""
+    try:
+        F95Suffixes = env['F95FILESUFFIXES']
+    except KeyError:
+        F95Suffixes = ['.f95']
+
+    #print "Adding %s to f95 suffixes" % F95Suffixes
+    try:
+        F95PPSuffixes = env['F95PPFILESUFFIXES']
+    except KeyError:
+        F95PPSuffixes = []
+
+    DialectAddToEnv(env, "F95", F95Suffixes, F95PPSuffixes,
+                    support_module = 1)
+
+def add_all_to_env(env):
+    """Add builders and construction variables for all supported fortran
+    dialects."""
+    add_fortran_to_env(env)
+    add_f77_to_env(env)
+    add_f90_to_env(env)
+    add_f95_to_env(env)
index e0ada5e74ec56c52233601ad0bd239929ce03df1..f197b6822ee91053f4f12d360ff7ea3f6d178ad5 100644 (file)
@@ -555,7 +555,7 @@ def tool_list(platform, env):
         c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
         cxx_compilers = ['msvc', 'intelc', 'icc', 'g++', 'c++', 'bcc32' ]
         assemblers = ['masm', 'nasm', 'gas', '386asm' ]
-        fortran_compilers = ['g77', 'ifl', 'cvf', 'f95', 'f90', 'fortran']
+        fortran_compilers = ['gfortran', 'g77', 'ifl', 'cvf', 'f95', 'f90', 'fortran']
         ars = ['mslib', 'ar', 'tlib']
     elif str(platform) == 'os2':
         "prefer IBM tools on OS/2"
@@ -579,7 +579,8 @@ def tool_list(platform, env):
         c_compilers = ['suncc', 'gcc', 'cc']
         cxx_compilers = ['sunc++', 'g++', 'c++']
         assemblers = ['as', 'gas']
-        fortran_compilers = ['f95', 'f90', 'f77', 'g77', 'fortran']
+        fortran_compilers = ['sunf95', 'sunf90', 'sunf77', 'f95', 'f90', 'f77',
+                             'gfortran', 'g77', 'fortran']
         ars = ['sunar']
     elif str(platform) == 'hpux':
         "prefer aCC tools on HP-UX"
@@ -603,7 +604,7 @@ def tool_list(platform, env):
         c_compilers = ['gcc', 'cc']
         cxx_compilers = ['g++', 'c++']
         assemblers = ['as']
-        fortran_compilers = ['f95', 'f90', 'g77']
+        fortran_compilers = ['gfortran', 'f95', 'f90', 'g77']
         ars = ['ar']
     else:
         "prefer GNU tools on all other platforms"
@@ -611,7 +612,7 @@ def tool_list(platform, env):
         c_compilers = ['gcc', 'msvc', 'intelc', 'icc', 'cc']
         cxx_compilers = ['g++', 'msvc', 'intelc', 'icc', 'c++']
         assemblers = ['gas', 'nasm', 'masm']
-        fortran_compilers = ['f95', 'f90', 'g77', 'ifort', 'ifl', 'fortran']
+        fortran_compilers = ['gfortran', 'g77', 'ifort', 'ifl', 'f95', 'f90', 'f77']
         ars = ['ar', 'mslib']
 
     c_compiler = FindTool(c_compilers, env) or c_compilers[0]
index bd1e870eb70e9e03351994307e7c2811fc289fb4..c8da35aa0a1b946958fcfb1d15bea17e170a0b9c 100644 (file)
@@ -37,99 +37,20 @@ import SCons.Defaults
 import SCons.Scanner.Fortran
 import SCons.Tool
 import SCons.Util
-import fortran
+from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
 
 compilers = ['f77']
 
-#
-F77Suffixes = ['.f77']
-F77PPSuffixes = []
-if SCons.Util.case_sensitive_suffixes('.f77', '.F77'):
-    F77PPSuffixes.append('.F77')
-else:
-    F77Suffixes.append('.F77')
-
-#
-F77Scan = SCons.Scanner.Fortran.FortranScan("F77PATH")
-
-for suffix in F77Suffixes + F77PPSuffixes:
-    SCons.Tool.SourceFileScanner.add_scanner(suffix, F77Scan)
-del suffix
-
-#
-fVLG = fortran.VariableListGenerator
-
-F77Generator = fVLG('F77', 'FORTRAN', '_FORTRAND')
-F77FlagsGenerator = fVLG('F77FLAGS', 'FORTRANFLAGS')
-F77CommandGenerator = fVLG('F77COM', 'FORTRANCOM', '_F77COMD')
-F77CommandStrGenerator = fVLG('F77COMSTR', 'FORTRANCOMSTR', '_F77COMSTRD')
-F77PPCommandGenerator = fVLG('F77PPCOM', 'FORTRANPPCOM', '_F77PPCOMD')
-F77PPCommandStrGenerator = fVLG('F77PPCOMSTR', 'FORTRANPPCOMSTR', '_F77PPCOMSTRD')
-ShF77Generator = fVLG('SHF77', 'SHFORTRAN', 'F77', 'FORTRAN', '_FORTRAND')
-ShF77FlagsGenerator = fVLG('SHF77FLAGS', 'SHFORTRANFLAGS')
-ShF77CommandGenerator = fVLG('SHF77COM', 'SHFORTRANCOM', '_SHF77COMD')
-ShF77CommandStrGenerator = fVLG('SHF77COMSTR', 'SHFORTRANCOMSTR', '_SHF77COMSTRD')
-ShF77PPCommandGenerator = fVLG('SHF77PPCOM', 'SHFORTRANPPCOM', '_SHF77PPCOMD')
-ShF77PPCommandStrGenerator = fVLG('SHF77PPCOMSTR', 'SHFORTRANPPCOMSTR', '_SHF77PPCOMSTRD')
-
-del fVLG
-
-#
-F77Action = SCons.Action.Action('$_F77COMG ', '$_F77COMSTRG')
-F77PPAction = SCons.Action.Action('$_F77PPCOMG ', '$_F77PPCOMSTRG')
-ShF77Action = SCons.Action.Action('$_SHF77COMG ', '$_SHF77COMSTRG')
-ShF77PPAction = SCons.Action.Action('$_SHF77PPCOMG ', '$_SHF77PPCOMSTRG')
-
-def add_to_env(env):
-    """Add Builders and construction variables for f77 to an Environment."""
-    env.AppendUnique(FORTRANSUFFIXES = F77Suffixes + F77PPSuffixes)
-
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    for suffix in F77Suffixes:
-        static_obj.add_action(suffix, F77Action)
-        shared_obj.add_action(suffix, ShF77Action)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-
-    for suffix in F77PPSuffixes:
-        static_obj.add_action(suffix, F77PPAction)
-        shared_obj.add_action(suffix, ShF77PPAction)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-
-    env['_F77G']            = F77Generator
-    env['_F77FLAGSG']       = F77FlagsGenerator
-    env['_F77COMG']         = F77CommandGenerator
-    env['_F77PPCOMG']       = F77PPCommandGenerator
-    env['_F77COMSTRG']      = F77CommandStrGenerator
-    env['_F77PPCOMSTRG']    = F77PPCommandStrGenerator
-
-    env['_SHF77G']          = ShF77Generator
-    env['_SHF77FLAGSG']     = ShF77FlagsGenerator
-    env['_SHF77COMG']       = ShF77CommandGenerator
-    env['_SHF77PPCOMG']     = ShF77PPCommandGenerator
-    env['_SHF77COMSTRG']    = ShF77CommandStrGenerator
-    env['_SHF77PPCOMSTRG']  = ShF77PPCommandStrGenerator
-
-    env['_F77INCFLAGS'] = '$( ${_concat(INCPREFIX, F77PATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-
-    env['_F77COMD']     = '$_F77G -o $TARGET -c $_F77FLAGSG $_F77INCFLAGS $SOURCES'
-    env['_F77PPCOMD']   = '$_F77G -o $TARGET -c $_F77FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F77INCFLAGS $SOURCES'
-    env['_SHF77COMD']   = '$_SHF77G -o $TARGET -c $_SHF77FLAGSG $_F77INCFLAGS $SOURCES'
-    env['_SHF77PPCOMD'] = '$_SHF77G -o $TARGET -c $_SHF77FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F77INCFLAGS $SOURCES'
-
 def generate(env):
-    fortran.add_to_env(env)
-
-    import f90
-    import f95
-    f90.add_to_env(env)
-    f95.add_to_env(env)
+    add_all_to_env(env)
+    add_f77_to_env(env)
 
-    add_to_env(env)
+    fcomp = env.Detect(compilers) or 'f77'
+    env['F77']  = fcomp
+    env['SHF77']  = fcomp
 
-    env['_FORTRAND']        = env.Detect(compilers) or 'f77'
+    env['FORTRAN']  = fcomp
+    env['SHFORTRAN']  = fcomp
 
 def exists(env):
     return env.Detect(compilers)
index 3281bd614d1a3f36aba54e550c841429a0f5e789..8e60d71c92e1f041ae33fbfec2ef375d4f4f0006 100644 (file)
@@ -13,6 +13,8 @@ F77
 F77FLAGS
 F77COM
 F77PPCOM
+F77FILESUFFIXES
+F77PPFILESUFFIXES
 FORTRAN
 FORTRANFLAGS
 FORTRANCOM
@@ -60,6 +62,20 @@ for all Fortran versions.
 </summary>
 </cvar>
 
+<cvar name="F77FILESUFFIXES">
+<summary>
+The list of file extensions for which the F77 dialect will be used. By
+default, this is ['.f77']
+</summary>
+</cvar>
+
+<cvar name="F77PPFILESUFFIXES">
+<summary>
+The list of file extensions for which the compilation + preprocessor pass for
+F77 dialect will be used. By default, this is empty
+</summary>
+</cvar>
+
 <cvar name="F77COMSTR">
 <summary>
 The string displayed when a Fortran 77 source file
index fab4ccb9df58046ce0356886f190aad6c9b55216..4eb8f7c3183c878296a0e9c8483a0d5e811b34b5 100644 (file)
@@ -37,96 +37,20 @@ import SCons.Defaults
 import SCons.Scanner.Fortran
 import SCons.Tool
 import SCons.Util
-import fortran
+from SCons.Tool.FortranCommon import add_all_to_env, add_f90_to_env
 
 compilers = ['f90']
 
-#
-F90Suffixes = ['.f90']
-F90PPSuffixes = []
-if SCons.Util.case_sensitive_suffixes('.f90', '.F90'):
-    F90PPSuffixes.append('.F90')
-else:
-    F90Suffixes.append('.F90')
-
-#
-F90Scan = SCons.Scanner.Fortran.FortranScan("F90PATH")
-
-for suffix in F90Suffixes + F90PPSuffixes:
-    SCons.Tool.SourceFileScanner.add_scanner(suffix, F90Scan)
-del suffix
-
-#
-fVLG = fortran.VariableListGenerator
-
-F90Generator = fVLG('F90', 'FORTRAN', '_FORTRAND')
-F90FlagsGenerator = fVLG('F90FLAGS', 'FORTRANFLAGS')
-F90CommandGenerator = fVLG('F90COM', 'FORTRANCOM', '_F90COMD')
-F90CommandStrGenerator = fVLG('F90COMSTR', 'FORTRANCOMSTR', '_F90COMSTRD')
-F90PPCommandGenerator = fVLG('F90PPCOM', 'FORTRANPPCOM', '_F90PPCOMD')
-F90PPCommandStrGenerator = fVLG('F90PPCOMSTR', 'FORTRANPPCOMSTR', '_F90PPCOMSTRD')
-ShF90Generator = fVLG('SHF90', 'SHFORTRAN', 'F90', 'FORTRAN', '_FORTRAND')
-ShF90FlagsGenerator = fVLG('SHF90FLAGS', 'SHFORTRANFLAGS')
-ShF90CommandGenerator = fVLG('SHF90COM', 'SHFORTRANCOM', '_SHF90COMD')
-ShF90CommandStrGenerator = fVLG('SHF90COMSTR', 'SHFORTRANCOMSTR', '_SHF90COMSTRD')
-ShF90PPCommandGenerator = fVLG('SHF90PPCOM', 'SHFORTRANPPCOM', '_SHF90PPCOMD')
-ShF90PPCommandStrGenerator = fVLG('SHF90PPCOMSTR', 'SHFORTRANPPCOMSTR', '_SHF90PPCOMSTRD')
-
-del fVLG
-
-#
-F90Action = SCons.Action.Action('$_F90COMG ', '$_F90COMSTRG')
-F90PPAction = SCons.Action.Action('$_F90PPCOMG ', '$_F90PPCOMSTRG')
-ShF90Action = SCons.Action.Action('$_SHF90COMG ', '$_SHF90COMSTRG')
-ShF90PPAction = SCons.Action.Action('$_SHF90PPCOMG ', '$_SHF90PPCOMSTRG')
-
-def add_to_env(env):
-    """Add Builders and construction variables for f90 to an Environment."""
-    env.AppendUnique(FORTRANSUFFIXES = F90Suffixes + F90PPSuffixes)
-
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    for suffix in F90Suffixes:
-        static_obj.add_action(suffix, F90Action)
-        shared_obj.add_action(suffix, ShF90Action)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-
-    for suffix in F90PPSuffixes:
-        static_obj.add_action(suffix, F90PPAction)
-        shared_obj.add_action(suffix, ShF90PPAction)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-  
-    env['_F90G']            = F90Generator
-    env['_F90FLAGSG']       = F90FlagsGenerator
-    env['_F90COMG']         = F90CommandGenerator
-    env['_F90COMSTRG']      = F90CommandStrGenerator
-    env['_F90PPCOMG']       = F90PPCommandGenerator
-    env['_F90PPCOMSTRG']    = F90PPCommandStrGenerator
-
-    env['_SHF90G']          = ShF90Generator
-    env['_SHF90FLAGSG']     = ShF90FlagsGenerator
-    env['_SHF90COMG']       = ShF90CommandGenerator
-    env['_SHF90COMSTRG']    = ShF90CommandStrGenerator
-    env['_SHF90PPCOMG']     = ShF90PPCommandGenerator
-    env['_SHF90PPCOMSTRG']  = ShF90PPCommandStrGenerator
-
-    env['_F90INCFLAGS'] = '$( ${_concat(INCPREFIX, F90PATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-    env['_F90COMD']     = '$_F90G -o $TARGET -c $_F90FLAGSG $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_F90PPCOMD']   = '$_F90G -o $TARGET -c $_F90FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHF90COMD']   = '$_SHF90G -o $TARGET -c $_SHF90FLAGSG $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHF90PPCOMD'] = '$_SHF90G -o $TARGET -c $_SHF90FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG $SOURCES'
-
 def generate(env):
-    fortran.add_to_env(env)
-
-    import f77
-    f77.add_to_env(env)
+    add_all_to_env(env)
+    add_f90_to_env(env)
 
-    add_to_env(env)
+    fc = env.Detect(compilers) or 'f90'
+    env['F90']  = fc
+    env['SHF90']  = fc
 
-    env['_FORTRAND']        = env.Detect(compilers) or 'f90'
+    env['FORTRAN']  = fc
+    env['SHFORTRAN']  = fc
 
 def exists(env):
     return env.Detect(compilers)
index 18135a34c8da7b702a9f68f6061b6bd9685b8870..4a2884e28c128fde628ad41125629e1a398f8312 100644 (file)
@@ -58,6 +58,20 @@ If this is not set, then &cv-link-F90COM; or &cv-link-FORTRANCOM;
 </summary>
 </cvar>
 
+<cvar name="F90FILESUFFIXES">
+<summary>
+The list of file extensions for which the F90 dialect will be used. By
+default, this is ['.f90']
+</summary>
+</cvar>
+
+<cvar name="F90PPFILESUFFIXES">
+<summary>
+The list of file extensions for which the compilation + preprocessor pass for
+F90 dialect will be used. By default, this is empty
+</summary>
+</cvar>
+
 <cvar name="F90FLAGS">
 <summary>
 General user-specified options that are passed to the Fortran 90 compiler.
index 94786c847f8ca821f36c952d7202d21a884879c6..545894a74a8918a3bf41087cde656e6565886115 100644 (file)
@@ -37,99 +37,21 @@ import SCons.Defaults
 import SCons.Tool
 import SCons.Util
 import fortran
+from SCons.Tool.FortranCommon import add_all_to_env, add_f95_to_env
 
 compilers = ['f95']
 
-#
-F95Suffixes = ['.f95']
-F95PPSuffixes = []
-if SCons.Util.case_sensitive_suffixes('.f95', '.F95'):
-    F95PPSuffixes.append('.F95')
-else:
-    F95Suffixes.append('.F95')
-
-#
-F95Scan = SCons.Scanner.Fortran.FortranScan("F95PATH")
-
-for suffix in F95Suffixes + F95PPSuffixes:
-    SCons.Tool.SourceFileScanner.add_scanner(suffix, F95Scan)
-del suffix
-
-#
-fVLG = fortran.VariableListGenerator
-
-F95Generator = fVLG('F95', 'FORTRAN', '_FORTRAND')
-F95FlagsGenerator = fVLG('F95FLAGS', 'FORTRANFLAGS')
-F95CommandGenerator = fVLG('F95COM', 'FORTRANCOM', '_F95COMD')
-F95CommandStrGenerator = fVLG('F95COMSTR', 'FORTRANCOMSTR', '_F95COMSTRD')
-F95PPCommandGenerator = fVLG('F95PPCOM', 'FORTRANPPCOM', '_F95PPCOMD')
-F95PPCommandStrGenerator = fVLG('F95PPCOMSTR', 'FORTRANPPCOMSTR', '_F95PPCOMSTRD')
-ShF95Generator = fVLG('SHF95', 'SHFORTRAN', 'F95', 'FORTRAN', '_FORTRAND')
-ShF95FlagsGenerator = fVLG('SHF95FLAGS', 'SHFORTRANFLAGS')
-ShF95CommandGenerator = fVLG('SHF95COM', 'SHFORTRANCOM', '_SHF95COMD')
-ShF95CommandStrGenerator = fVLG('SHF95COMSTR', 'SHFORTRANCOMSTR', '_SHF95COMSTRD')
-ShF95PPCommandGenerator = fVLG('SHF95PPCOM', 'SHFORTRANPPCOM', '_SHF95PPCOMD')
-ShF95PPCommandStrGenerator = fVLG('SHF95PPCOMSTR', 'SHFORTRANPPCOMSTR', '_SHF95PPCOMSTRD')
-
-del fVLG
-
-#
-F95Action = SCons.Action.Action('$_F95COMG ', '$_F95COMSTRG')
-F95PPAction = SCons.Action.Action('$_F95PPCOMG ', '$_F95PPCOMSTRG')
-ShF95Action = SCons.Action.Action('$_SHF95COMG ', '$_SHF95COMSTRG')
-ShF95PPAction = SCons.Action.Action('$_SHF95PPCOMG ', '$_SHF95PPCOMSTRG')
-
-def add_to_env(env):
-    """Add Builders and construction variables for f95 to an Environment."""
-    env.AppendUnique(FORTRANSUFFIXES = F95Suffixes + F95PPSuffixes)
-
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    for suffix in F95Suffixes:
-        static_obj.add_action(suffix, F95Action)
-        shared_obj.add_action(suffix, ShF95Action)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-
-    for suffix in F95PPSuffixes:
-        static_obj.add_action(suffix, F95PPAction)
-        shared_obj.add_action(suffix, ShF95PPAction)
-        static_obj.add_emitter(suffix, fortran.FortranEmitter)
-        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
-
-    env['_F95G']           = F95Generator
-    env['_F95FLAGSG']      = F95FlagsGenerator
-    env['_F95COMG']        = F95CommandGenerator
-    env['_F95COMSTRG']     = F95CommandStrGenerator
-    env['_F95PPCOMG']      = F95PPCommandGenerator
-    env['_F95PPCOMSTRG']   = F95PPCommandStrGenerator
-
-    env['_SHF95G']         = ShF95Generator
-    env['_SHF95FLAGSG']    = ShF95FlagsGenerator
-    env['_SHF95COMG']      = ShF95CommandGenerator
-    env['_SHF95COMSTRG']   = ShF95CommandStrGenerator
-    env['_SHF95PPCOMG']    = ShF95PPCommandGenerator
-    env['_SHF95PPCOMSTRG'] = ShF95PPCommandStrGenerator
-
-    env['_F95INCFLAGS'] = '$( ${_concat(INCPREFIX, F95PATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-
-    env['_F95COMD']     = '$_F95G -o $TARGET -c $_F95FLAGSG $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_F95PPCOMD']   = '$_F95G -o $TARGET -c $_F95FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHF95COMD']   = '$_SHF95G -o $TARGET -c $_SHF95FLAGSG $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHF95PPCOMD'] = '$_SHF95G -o $TARGET -c $_SHF95FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
-
 def generate(env):
-    fortran.add_to_env(env)
-
-    import f77
-    f77.add_to_env(env)
+    add_all_to_env(env)
+    add_f95_to_env(env)
 
-    import f90
-    f90.add_to_env(env)
+    fcomp = env.Detect(compilers) or 'f95'
+    env['F95']  = fcomp
+    env['SHF95']  = fcomp
 
-    add_to_env(env)
+    env['FORTRAN']  = fcomp
+    env['SHFORTRAN']  = fcomp
 
-    env['_FORTRAND']        = env.Detect(compilers) or 'f95'
 
 def exists(env):
     return env.Detect(compilers)
index 0882a4546054e2f5888112e3cabe0558fabff5d7..4c2a91a2556b856509c9d74b3d1e1fc573f2a291 100644 (file)
@@ -58,6 +58,20 @@ If this is not set, then &cv-link-F95COM; or &cv-link-FORTRANCOM;
 </summary>
 </cvar>
 
+<cvar name="F95FILESUFFIXES">
+<summary>
+The list of file extensions for which the F95 dialect will be used. By
+default, this is ['.f95']
+</summary>
+</cvar>
+
+<cvar name="F95PPFILESUFFIXES">
+<summary>
+The list of file extensions for which the compilation + preprocessor pass for
+F95 dialect will be used. By default, this is empty
+</summary>
+</cvar>
+
 <cvar name="F95FLAGS">
 <summary>
 General user-specified options that are passed to the Fortran 95 compiler.
index b74830367197af8637e5b2a71d744f927d64b437..d81ba45ad5a7ae9823b12dd7abd6ac194e988286 100644 (file)
@@ -41,146 +41,17 @@ import SCons.Defaults
 import SCons.Scanner.Fortran
 import SCons.Tool
 import SCons.Util
+from SCons.Tool.FortranCommon import add_all_to_env, add_fortran_to_env
 
 compilers = ['f95', 'f90', 'f77']
 
-#
-#  Not yet sure how to deal with fortran pre-processor functions.
-#  Different compilers do this differently in modern fortran.  Some still
-#  rely on the c pre-processor, some (like cvf, ivf) have their own
-#  pre-processor technology and use intermediary suffixes (.i90)
-#
-FortranSuffixes = [".f", ".for", ".ftn", ]
-FortranPPSuffixes = ['.fpp', '.FPP']
-upper_case = [".F", ".FOR", ".FTN"]
-if SCons.Util.case_sensitive_suffixes('.f', '.F'):
-    FortranPPSuffixes.extend(upper_case)
-else:
-    FortranSuffixes.extend(upper_case)
-
-#
-FortranScan = SCons.Scanner.Fortran.FortranScan("FORTRANPATH")
-
-for suffix in FortranSuffixes + FortranPPSuffixes:
-    SCons.Tool.SourceFileScanner.add_scanner(suffix, FortranScan)
-del suffix
-
-#
-def _fortranEmitter(target, source, env):
-    node = source[0].rfile()
-    if not node.exists() and not node.is_derived():
-       print "Could not locate " + str(node.name)
-       return ([], [])
-    mod_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)"""
-    cre = re.compile(mod_regex,re.M)
-    # Retrieve all USE'd module names
-    modules = cre.findall(node.get_contents())
-    # Remove unique items from the list
-    modules = SCons.Util.unique(modules)
-    # Convert module name to a .mod filename
-    suffix = env.subst('$FORTRANMODSUFFIX', target=target, source=source)
-    moddir = env.subst('$FORTRANMODDIR', target=target, source=source)
-    modules = map(lambda x, s=suffix: string.lower(x) + s, modules)
-    for m in modules:
-       target.append(env.fs.File(m, moddir))
-    return (target, source)
-
-def FortranEmitter(target, source, env):
-    target, source = _fortranEmitter(target, source, env)
-    return SCons.Defaults.StaticObjectEmitter(target, source, env)
-
-def ShFortranEmitter(target, source, env):
-    target, source = _fortranEmitter(target, source, env)
-    return SCons.Defaults.SharedObjectEmitter(target, source, env)
-
-class VariableListGenerator:
-    def __init__(self, *variablelist):
-        self.variablelist = variablelist
-    def __call__(self, env, target, source, for_signature=0):
-        for v in self.variablelist:
-            try: return env[v]
-            except KeyError: pass
-        return ''
-
-#
-FortranGenerator = VariableListGenerator('FORTRAN', 'F77', '_FORTRAND')
-FortranFlagsGenerator = VariableListGenerator('FORTRANFLAGS', 'F77FLAGS')
-FortranCommandGenerator = VariableListGenerator('FORTRANCOM', 'F77COM', '_FORTRANCOMD')
-FortranCommandStrGenerator = VariableListGenerator('FORTRANCOMSTR', 'F77COMSTR', '_FORTRANCOMSTRD')
-FortranPPCommandGenerator = VariableListGenerator('FORTRANPPCOM', 'F77PPCOM', '_FORTRANPPCOMD')
-FortranPPCommandStrGenerator = VariableListGenerator('FORTRANPPCOMSTR', 'F77PPCOMSTR', '_FORTRANPPCOMSTRD')
-ShFortranGenerator = VariableListGenerator('SHFORTRAN', 'SHF77', 'FORTRAN', 'F77', '_FORTRAND')
-ShFortranFlagsGenerator = VariableListGenerator('SHFORTRANFLAGS', 'SHF77FLAGS')
-ShFortranCommandGenerator = VariableListGenerator('SHFORTRANCOM', 'SHF77COM', '_SHFORTRANCOMD')
-ShFortranCommandStrGenerator = VariableListGenerator('SHFORTRANCOMSTR', 'SHF77COMSTR', '_SHFORTRANCOMSTRD')
-ShFortranPPCommandGenerator = VariableListGenerator('SHFORTRANPPCOM', 'SHF77PPCOM', '_SHFORTRANPPCOMD')
-ShFortranPPCommandStrGenerator = VariableListGenerator('SHFORTRANPPCOMSTR', 'SHF77PPCOMSTR', '_SHFORTRANPPCOMSTRD')
-
-#
-FortranAction = SCons.Action.Action('$_FORTRANCOMG ', '$_FORTRANCOMSTRG')
-FortranPPAction = SCons.Action.Action('$_FORTRANPPCOMG ', '$_FORTRANPPCOMSTRG')
-ShFortranAction = SCons.Action.Action('$_SHFORTRANCOMG ', '$_SHFORTRANCOMSTRG')
-ShFortranPPAction = SCons.Action.Action('$_SHFORTRANPPCOMG ', '$_SHFORTRANPPCOMSTRG')
-
-def add_to_env(env):
-    """Add Builders and construction variables for Fortran to an Environment."""
-
-    env['_FORTRANG']            = FortranGenerator
-    env['_FORTRANFLAGSG']       = FortranFlagsGenerator
-    env['_FORTRANCOMG']         = FortranCommandGenerator
-    env['_FORTRANCOMSTRG']      = FortranCommandStrGenerator
-    env['_FORTRANPPCOMG']       = FortranPPCommandGenerator
-    env['_FORTRANPPCOMSTRG']    = FortranPPCommandStrGenerator
-
-    env['_SHFORTRANG']          = ShFortranGenerator
-    env['_SHFORTRANFLAGSG']     = ShFortranFlagsGenerator
-    env['_SHFORTRANCOMG']       = ShFortranCommandGenerator
-    env['_SHFORTRANCOMSTRG']    = ShFortranCommandStrGenerator
-    env['_SHFORTRANPPCOMG']     = ShFortranPPCommandGenerator
-    env['_SHFORTRANPPCOMSTRG']  = ShFortranPPCommandStrGenerator
-
-    env['_FORTRANINCFLAGS'] = '$( ${_concat(INCPREFIX, FORTRANPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-
-    env['FORTRANMODPREFIX'] = ''     # like $LIBPREFIX
-    env['FORTRANMODSUFFIX'] = '.mod' # like $LIBSUFFIX
-
-    env['FORTRANMODDIR'] = ''          # where the compiler should place .mod files
-    env['FORTRANMODDIRPREFIX'] = ''    # some prefix to $FORTRANMODDIR - similar to $INCPREFIX
-    env['FORTRANMODDIRSUFFIX'] = ''    # some suffix to $FORTRANMODDIR - similar to $INCSUFFIX
-    env['_FORTRANMODFLAG'] = '$( ${_concat(FORTRANMODDIRPREFIX, FORTRANMODDIR, FORTRANMODDIRSUFFIX, __env__, RDirs)} $)'
-
-    env.AppendUnique(FORTRANSUFFIXES = FortranSuffixes + FortranPPSuffixes)
-
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    for suffix in FortranSuffixes:
-        static_obj.add_action(suffix, FortranAction)
-        shared_obj.add_action(suffix, ShFortranAction)
-        static_obj.add_emitter(suffix, FortranEmitter)
-        shared_obj.add_emitter(suffix, ShFortranEmitter)
-
-    for suffix in FortranPPSuffixes:
-        static_obj.add_action(suffix, FortranPPAction)
-        shared_obj.add_action(suffix, ShFortranPPAction)
-        static_obj.add_emitter(suffix, FortranEmitter)
-        shared_obj.add_emitter(suffix, ShFortranEmitter)
-
-    env['_FORTRANCOMD']     = '$_FORTRANG -o $TARGET -c $_FORTRANFLAGSG $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_FORTRANPPCOMD']   = '$_FORTRANG -o $TARGET -c $_FORTRANFLAGSG $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHFORTRANCOMD']   = '$_SHFORTRANG -o $TARGET -c $_SHFORTRANFLAGSG $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES'
-    env['_SHFORTRANPPCOMD'] = '$_SHFORTRANG -o $TARGET -c $_SHFORTRANFLAGSG $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS $_FORTRANMODFLAG $SOURCES'
-
 def generate(env):
-    import f77
-    import f90
-    import f95
-    f77.add_to_env(env)
-    f90.add_to_env(env)
-    f95.add_to_env(env)
-
-    add_to_env(env)
+    add_all_to_env(env)
+    add_fortran_to_env(env)
 
-    env['_FORTRAND'] = env.Detect(compilers) or 'f77'
+    fc = env.Detect(compilers) or 'f77'
+    env['SHFORTRAN'] = fc
+    env['FORTRAN'] = fc
 
 def exists(env):
     return env.Detect(compilers)
index 6dbe7b0b3bdc783b734dec58d1b84bf2a82ca132..fa8133e34a21160d7ddebf3130dd076dd17f6559 100644 (file)
@@ -54,6 +54,20 @@ If this is not set, then &cv-link-FORTRANCOM;
 </summary>
 </cvar>
 
+<cvar name="FORTRANFILESUFFIXES">
+<summary>
+The list of file extensions for which the FORTRAN dialect will be used. By
+default, this is ['.f', '.for', '.ftn']
+</summary>
+</cvar>
+
+<cvar name="FORTRANPPFILESUFFIXES">
+<summary>
+The list of file extensions for which the compilation + preprocessor pass for
+FORTRAN dialect will be used. By default, this is ['.fpp', '.FPP']
+</summary>
+</cvar>
+
 <cvar name="FORTRANFLAGS">
 <summary>
 General user-specified options that are passed to the Fortran compiler.
index f481546469a094c8f1bac057ee9a648ca9f3d617..058b061d074d1e7c29ecc2afd6ab5a5cdcc07aa3 100644 (file)
@@ -33,15 +33,35 @@ selection method.
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
-import f77
+import SCons.Util
+from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
 
 compilers = ['g77', 'f77']
 
 def generate(env):
     """Add Builders and construction variables for g77 to an Environment."""
-    f77.generate(env)
+    add_all_to_env(env)
+    add_f77_to_env(env)
 
-    env['_FORTRAND'] = env.Detect(compilers) or 'g77'
+    fcomp = env.Detect(compilers) or 'g77'
+    if env['PLATFORM'] in ['cygwin', 'win32']:
+        env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS')
+        env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS')
+    else:
+        env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$SHFORTRANFLAGS -fPIC')
+        env['SHF77FLAGS'] = SCons.Util.CLVar('$SHF77FLAGS -fPIC')
+
+    env['FORTRAN'] = fcomp
+    env['SHFORTRAN'] = '$FORTRAN'
+
+    env['F77'] = fcomp
+    env['SHF77'] = '$F77'
+
+    env['INCFORTRANPREFIX'] = "-I"
+    env['INCFORTRANSUFFIX'] = ""
+
+    env['INCF77PREFIX'] = "-I"
+    env['INCF77SUFFIX'] = ""
 
 def exists(env):
     return env.Detect(compilers)
index f3db6930b8e87ad4112ca5640121bc762ab86642..72f38eecd034e3a619a81d707ba7cfa6fe400d4a 100644 (file)
@@ -43,20 +43,16 @@ def generate(env):
     Environment."""
     fortran.generate(env)
 
-    # which one is the good one ? ifort uses _FORTRAND, ifl FORTRAN,
-    # aixf77 F77 ...
-    #env['_FORTRAND'] = 'gfortran'
-    env['FORTRAN'] = 'gfortran'
-
-    # XXX does this need to be set too ?
-    #env['SHFORTRAN'] = 'gfortran'
-
-    if env['PLATFORM'] in ['cygwin', 'win32']:
-        env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS')
-    else:
-        env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -fPIC')
-
-    # XXX; Link problems: we need to add -lgfortran somewhere...
+    for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
+        env['%s' % dialect] = 'gfortran'
+        env['SH%s' % dialect] = '$%s' % dialect
+        if env['PLATFORM'] in ['cygwin', 'win32']:
+            env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect)
+        else:
+            env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect)
+
+        env['INC%sPREFIX' % dialect] = "-I"
+        env['INC%sSUFFIX' % dialect] = ""
 
 def exists(env):
     return env.Detect('gfortran')
index ba0fe76a37b0f89675984cd24ea4419bd00ddfdc..21666ea9e16b3e920fa3ef515359a5e98f815457 100644 (file)
@@ -10,6 +10,16 @@ Sets construction variables for the GNU F95/F2003 GNU compiler.
 </summary>
 <sets>
 FORTRAN
+F77
+F90
+F95
+SHFORTRAN
+SHF77
+SHF90
+SHF95
 SHFORTRANFLAGS
+SHF77FLAGS
+SHF90FLAGS
+SHF95FLAGS
 </sets>
 </tool>
index b8b20124b153d620368a2604d7ec4c06e6f72005..b3a3fc82d8b8cd5064e07758fff46ffb04bb7224 100644 (file)
@@ -34,16 +34,29 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
-
-import fortran
+from SCons.Scanner.Fortran import FortranScan
+from FortranCommon import add_all_to_env
 
 def generate(env):
     """Add Builders and construction variables for ifl to an Environment."""
-    SCons.Tool.SourceFileScanner.add_scanner('.i90', fortran.FortranScan)
-    fortran.FortranSuffixes.extend(['.i90'])
-    fortran.generate(env)
+    fscan = FortranScan("FORTRANPATH")
+    SCons.Tool.SourceFileScanner.add_scanner('.i', fscan)
+    SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan)
+
+    if not env.has_key('FORTRANFILESUFFIXES'):
+        env['FORTRANFILESUFFIXES'] = ['.i']
+    else:
+        env['FORTRANFILESUFFIXES'].append('.i')
+
+    if not env.has_key('F90FILESUFFIXES'):
+        env['F90FILESUFFIXES'] = ['.i90']
+    else:
+        env['F90FILESUFFIXES'].append('.i90')
+
+    add_all_to_env(env)
 
     env['FORTRAN']        = 'ifl'
+    env['SHFORTRAN']      = '$FORTRAN'
     env['FORTRANCOM']     = '$FORTRAN $FORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
     env['FORTRANPPCOM']   = '$FORTRAN $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
     env['SHFORTRANCOM']   = '$SHFORTRAN $SHFORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
index 7681f385d3f536fbe0955a4a445cf16c1dd9a66d..d017658bc33040c0bad5c41fd49f7ffe4f10e9d0 100644 (file)
@@ -37,37 +37,44 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 import string
 
 import SCons.Defaults
-
-import fortran
+from SCons.Scanner.Fortran import FortranScan
+from FortranCommon import add_all_to_env
 
 def generate(env):
     """Add Builders and construction variables for ifort to an Environment."""
     # ifort supports Fortran 90 and Fortran 95
     # Additionally, ifort recognizes more file extensions.
-    SCons.Tool.SourceFileScanner.add_scanner('.i', fortran.FortranScan)
-    SCons.Tool.SourceFileScanner.add_scanner('.i90', fortran.FortranScan)
-    fortran.FortranSuffixes.extend(['.i', '.i90'])
-    fortran.generate(env)
+    fscan = FortranScan("FORTRANPATH")
+    SCons.Tool.SourceFileScanner.add_scanner('.i', fscan)
+    SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan)
+     
+    if not env.has_key('FORTRANFILESUFFIXES'):
+        env['FORTRANFILESUFFIXES'] = ['.i']
+    else:
+        env['FORTRANFILESUFFIXES'].append('.i')
+
+    if not env.has_key('F90FILESUFFIXES'):
+        env['F90FILESUFFIXES'] = ['.i90']
+    else:
+        env['F90FILESUFFIXES'].append('.i90')
 
-    env['_FORTRAND'] = 'ifort'
+    add_all_to_env(env)
 
-    # If files are compiled into objects, the Intel Fortran Compiler must use
-    # ld to link shared libraries.
-    env['SHLINK'] = 'ld'
+    fc = 'ifort'
 
-    # Additionally, no symbols can be defined in an archive file; to use
-    # Intel Fortran to create shared libraries, all external symbols must
-    # be in shared libraries.
-    env['SHLINKFLAGS'] = '-shared -no_archive'
+    for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
+        env['%s' % dialect] = fc
+        env['SH%s' % dialect] = '$%s' % dialect
+        env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect)
 
-    #
     if env['PLATFORM'] == 'win32':
         # On Windows, the ifort compiler specifies the object on the
         # command line with -object:, not -o.  Massage the necessary
         # command-line construction variables.
-        for var in ['_FORTRANCOMD', '_FORTRANPPCOMD',
-                    '_SHFORTRANCOMD', '_SHFORTRANPPCOMD']:
-            env[var] = string.replace(env[var], '-o $TARGET', '-object:$TARGET')
+        for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
+            for var in ['%sCOM' % dialect, '%sPPCOM' % dialect,
+                        'SH%sCOM' % dialect, 'SH%sPPCOM' % dialect]:
+                env[var] = string.replace(env[var], '-o $TARGET', '-object:$TARGET')
 
 def exists(env):
     return env.Detect('ifort')
index 20950f80260e53f20c530082115cb2b802192004..834708fe2719bdc0b04535da257f89dea876ddda 100644 (file)
@@ -10,7 +10,17 @@ Sets construction variables for newer versions
 of the Intel Fortran compiler for Linux.
 </summary>
 <sets>
-SHLINK
-SHLINKFLAGS
+FORTRAN
+F77
+F90
+F95
+SHFORTRAN
+SHF77
+SHF90
+SHF95
+SHFORTRANFLAGS
+SHF77FLAGS
+SHF90FLAGS
+SHF95FLAGS
 </sets>
 </tool>
index b60aa8753290f844025ac544bdb6666ab1270499..866df08925e5605b1a67de39373ed24cce085495 100644 (file)
@@ -36,11 +36,21 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 import SCons.Defaults
 import SCons.Tool
 import SCons.Util
+import SCons.Errors
+
+from SCons.Tool.FortranCommon import isfortran
 
 cplusplus = __import__('c++', globals(), locals(), [])
 
 def smart_link(source, target, env, for_signature):
-    if cplusplus.iscplusplus(source):
+    has_cplusplus = cplusplus.iscplusplus(source)
+    has_fortran = isfortran(env, source)
+    if has_cplusplus and has_fortran:
+        raise SCons.Errors.InternalError(
+                "Sorry, scons cannot yet link c++ and fortran code together.")
+    elif has_fortran:
+        return '$FORTRAN'
+    elif has_cplusplus:
         return '$CXX'
     return '$CC'
 
diff --git a/src/engine/SCons/Tool/sunf77.py b/src/engine/SCons/Tool/sunf77.py
new file mode 100644 (file)
index 0000000..4c2fe1c
--- /dev/null
@@ -0,0 +1,57 @@
+"""SCons.Tool.sunf77
+
+Tool-specific initialization for sunf77, the Sun Studio F77 compiler.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import SCons.Util
+
+from FortranCommon import add_all_to_env
+
+compilers = ['sunf77', 'f77']
+
+def generate(env):
+    """Add Builders and construction variables for sunf77 to an Environment."""
+    add_all_to_env(env)
+
+    fcomp = env.Detect(compilers) or 'f77'
+    env['FORTRAN']  = fcomp
+    env['F77']      = fcomp
+
+    env['SHFORTRAN']  = '$FORTRAN'
+    env['SHF77']      = '$F77'
+
+    env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
+    env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS -KPIC')
+
+def exists(env):
+    return env.Detect(compilers)
diff --git a/src/engine/SCons/Tool/sunf77.xml b/src/engine/SCons/Tool/sunf77.xml
new file mode 100644 (file)
index 0000000..3f02163
--- /dev/null
@@ -0,0 +1,19 @@
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+<tool name="sunf77">
+<summary>
+Set construction variables for the Sun &f77; Fortran compiler.
+</summary>
+<sets>
+FORTRAN
+F77
+SHFORTRAN
+SHF77
+SHFORTRANFLAGS
+SHF77FLAGS
+</sets>
+</tool>
diff --git a/src/engine/SCons/Tool/sunf90.py b/src/engine/SCons/Tool/sunf90.py
new file mode 100644 (file)
index 0000000..92aecc6
--- /dev/null
@@ -0,0 +1,58 @@
+"""SCons.Tool.sunf90
+
+Tool-specific initialization for sunf90, the Sun Studio F90 compiler.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import SCons.Util
+
+from FortranCommon import add_all_to_env
+
+compilers = ['sunf90', 'f90']
+
+def generate(env):
+    """Add Builders and construction variables for sun f90 compiler to an
+    Environment."""
+    add_all_to_env(env)
+
+    fcomp = env.Detect(compilers) or 'f90'
+    env['FORTRAN']  = fcomp
+    env['F90']      = fcomp
+
+    env['SHFORTRAN']  = '$FORTRAN'
+    env['SHF90']      = '$F90'
+
+    env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
+    env['SHF90FLAGS'] = SCons.Util.CLVar('$F90FLAGS -KPIC')
+
+def exists(env):
+    return env.Detect(compilers)
diff --git a/src/engine/SCons/Tool/sunf90.xml b/src/engine/SCons/Tool/sunf90.xml
new file mode 100644 (file)
index 0000000..1d51846
--- /dev/null
@@ -0,0 +1,19 @@
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+<tool name="sunf90">
+<summary>
+Set construction variables for the Sun &f90; Fortran compiler.
+</summary>
+<sets>
+FORTRAN
+F90
+SHFORTRAN
+SHF90
+SHFORTRANFLAGS
+SHF90FLAGS
+</sets>
+</tool>
diff --git a/src/engine/SCons/Tool/sunf95.py b/src/engine/SCons/Tool/sunf95.py
new file mode 100644 (file)
index 0000000..8e02655
--- /dev/null
@@ -0,0 +1,58 @@
+"""SCons.Tool.sunf95
+
+Tool-specific initialization for sunf95, the Sun Studio F95 compiler.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import SCons.Util
+
+from FortranCommon import add_all_to_env
+
+compilers = ['sunf95', 'f95']
+
+def generate(env):
+    """Add Builders and construction variables for sunf95 to an
+    Environment."""
+    add_all_to_env(env)
+
+    fcomp = env.Detect(compilers) or 'f95'
+    env['FORTRAN']  = fcomp
+    env['F95']      = fcomp
+
+    env['SHFORTRAN']  = '$FORTRAN'
+    env['SHF95']      = '$F95'
+
+    env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
+    env['SHF95FLAGS'] = SCons.Util.CLVar('$F95FLAGS -KPIC')
+
+def exists(env):
+    return env.Detect(compilers)
diff --git a/src/engine/SCons/Tool/sunf95.xml b/src/engine/SCons/Tool/sunf95.xml
new file mode 100644 (file)
index 0000000..be6cdb7
--- /dev/null
@@ -0,0 +1,19 @@
+<!--
+__COPYRIGHT__
+
+This file is processed by the bin/SConsDoc.py module.
+See its __doc__ string for a discussion of the format.
+-->
+<tool name="sunf95">
+<summary>
+Set construction variables for the Sun &f95; Fortran compiler.
+</summary>
+<sets>
+FORTRAN
+F95
+SHFORTRAN
+SHF95
+SHFORTRANFLAGS
+SHF95FLAGS
+</sets>
+</tool>
index 9e91cc5088a6aef358ce35c5af38c6e66bc51c86..6fb82b4664f171580f7196eef25a700c3e3098e9 100644 (file)
@@ -62,6 +62,15 @@ else:
     scons_lib_dir = os.path.join(cwd, 'build', 'scons')
     MANIFEST = os.path.join(scons_lib_dir, 'MANIFEST')
 
+# We expect precisely this many uncaught KeyboardInterrupt exceptions
+# from the files in the following dictionary.
+
+expected_uncaught = {
+    'engine/SCons/Job.py' :             5,
+    'engine/SCons/Script/Main.py' :     1,
+    'engine/SCons/Taskmaster.py' :      3,
+}
+
 try:
     fp = open(MANIFEST)
 except IOError:
@@ -94,6 +103,7 @@ for f in files:
         line_num = 1 + string.count(contents[:match.start()], '\n')
         indent_list.append( (line_num, match.group('try_or_except') ) )
         try_except_lines[match.group('indent')] = indent_list
+    uncaught_this_file = []
     for indent in try_except_lines.keys():
         exc_keyboardint_seen = 0
         exc_all_seen = 0
@@ -103,8 +113,7 @@ for f in files:
             m2 = exceptall_pat.match(statement)
             if string.find(statement, indent + 'try') == 0:
                 if exc_all_seen and not exc_keyboardint_seen:
-                    uncaughtKeyboardInterrupt = 1
-                    print "File %s:%d: Uncaught KeyboardInterrupt!" % (f,line)
+                    uncaught_this_file.append(line)
                 exc_keyboardint_seen = 0
                 exc_all_seen = 0
                 line = l
@@ -118,6 +127,13 @@ for f in files:
             else:
                 pass
                 #print "Warning: unknown statement %s" % statement
+    expected_num = expected_uncaught.get(f, 0)
+    if expected_num != len(uncaught_this_file):
+        uncaughtKeyboardInterrupt = 1
+        msg = "%s:  expected %d uncaught interrupts, got %d:"
+        print msg % (f, expected_num, len(uncaught_this_file))
+        for line in uncaught_this_file:
+            print "  File %s:%d: Uncaught KeyboardInterrupt!" % (f,line)
 
 test.fail_test(uncaughtKeyboardInterrupt)
 
index 536483d8d3b6b9253aa9ba7f1a7fd3b16a33a666..0f28b7e8d879d2ce34d753007a35813edaf13501 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -102,23 +68,6 @@ env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
 env.Program(target = 'test09', source = 'test09.f77')
 env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
-env2 = Environment(LINK = r'%(_python_)s mylink.py',
-                   LINKFLAGS = [],
-                   F77 = r'%(_python_)s myfortran.py g77')
-env2.Program(target = 'test21', source = 'test21.f')
-env2.Program(target = 'test22', source = 'test22.F')
-env2.Program(target = 'test23', source = 'test23.for')
-env2.Program(target = 'test24', source = 'test24.FOR')
-env2.Program(target = 'test25', source = 'test25.ftn')
-env2.Program(target = 'test26', source = 'test26.FTN')
-env2.Program(target = 'test27', source = 'test27.fpp')
-env2.Program(target = 'test28', source = 'test28.FPP')
-env2.Program(target = 'test29', source = 'test29.f77')
-env2.Program(target = 'test30', source = 'test30.F77')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -131,21 +80,6 @@ test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
 test.write('test09.f77', "This is a .f77 file.\n#link\n#g77\n")
 test.write('test10.F77', "This is a .F77 file.\n#link\n#g77\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortran\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortran\n")
-
-test.write('test21.f',   "This is a .f file.\n#link\n#g77\n")
-test.write('test22.F',   "This is a .F file.\n#link\n#g77\n")
-test.write('test23.for', "This is a .for file.\n#link\n#g77\n")
-test.write('test24.FOR', "This is a .FOR file.\n#link\n#g77\n")
-test.write('test25.ftn', "This is a .ftn file.\n#link\n#g77\n")
-test.write('test26.FTN', "This is a .FTN file.\n#link\n#g77\n")
-test.write('test27.fpp', "This is a .fpp file.\n#link\n#g77\n")
-test.write('test28.FPP', "This is a .FPP file.\n#link\n#g77\n")
-test.write('test29.f77', "This is a .f77 file.\n#link\n#g77\n")
-test.write('test30.F77', "This is a .F77 file.\n#link\n#g77\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -159,28 +93,11 @@ test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
 test.must_match('test09' + _exe, "This is a .f77 file.\n")
 test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
-
-test.must_match('test21' + _exe, "This is a .f file.\n")
-test.must_match('test22' + _exe, "This is a .F file.\n")
-test.must_match('test23' + _exe, "This is a .for file.\n")
-test.must_match('test24' + _exe, "This is a .FOR file.\n")
-test.must_match('test25' + _exe, "This is a .ftn file.\n")
-test.must_match('test26' + _exe, "This is a .FTN file.\n")
-test.must_match('test27' + _exe, "This is a .fpp file.\n")
-test.must_match('test28' + _exe, "This is a .FPP file.\n")
-test.must_match('test29' + _exe, "This is a .f77 file.\n")
-test.must_match('test30' + _exe, "This is a .F77 file.\n")
-
-
 
-g77 = test.detect('F77', 'g77')
-FTN_LIB = TestSCons.fortran_lib
+fc  = 'f77'
+f77 = test.detect_tool(fc)
 
-if g77:
+if f77:
 
     test.write("wrapper.py",
 """import os
@@ -191,7 +108,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(F77 = '%(fc)s', tools = ['default', 'f77'], F77FILESUFFIXES = ['.f'])
 f77 = foo.Dictionary('F77')
 bar = foo.Clone(F77 = r'%(_python_)s wrapper.py ' + f77)
 foo.Program(target = 'foo', source = 'foo.f')
@@ -219,7 +136,11 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
     test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
 
index c566d88e52ba1ffd5dfabcce5a2241b9920972b4..54565026ad084f1a5714119418ad3cccf9bbf9ce 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import sys
@@ -100,24 +66,6 @@ env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
 env.Program(target = 'test09', source = 'test09.f77')
 env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
-env2 = Environment(LINK = r'%(_python_)s mylink.py',
-                   LINKFLAGS = [],
-                   F77COM = r'%(_python_)s myfortran.py f77 $TARGET $SOURCES',
-                   F77PPCOM = r'%(_python_)s myfortran.py f77pp $TARGET $SOURCES')
-env2.Program(target = 'test21', source = 'test21.f')
-env2.Program(target = 'test22', source = 'test22.F')
-env2.Program(target = 'test23', source = 'test23.for')
-env2.Program(target = 'test24', source = 'test24.FOR')
-env2.Program(target = 'test25', source = 'test25.ftn')
-env2.Program(target = 'test26', source = 'test26.FTN')
-env2.Program(target = 'test27', source = 'test27.fpp')
-env2.Program(target = 'test28', source = 'test28.FPP')
-env2.Program(target = 'test29', source = 'test29.f77')
-env2.Program(target = 'test30', source = 'test30.F77')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -130,21 +78,6 @@ test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortranpp\n")
 test.write('test09.f77', "This is a .f77 file.\n#link\n#f77\n")
 test.write('test10.F77', "This is a .F77 file.\n#link\n#f77pp\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortranpp\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortranpp\n")
-
-test.write('test21.f',   "This is a .f file.\n#link\n#f77\n")
-test.write('test22.F',   "This is a .F file.\n#link\n#f77pp\n")
-test.write('test23.for', "This is a .for file.\n#link\n#f77\n")
-test.write('test24.FOR', "This is a .FOR file.\n#link\n#f77pp\n")
-test.write('test25.ftn', "This is a .ftn file.\n#link\n#f77\n")
-test.write('test26.FTN', "This is a .FTN file.\n#link\n#f77pp\n")
-test.write('test27.fpp', "This is a .fpp file.\n#link\n#f77pp\n")
-test.write('test28.FPP', "This is a .FPP file.\n#link\n#f77pp\n")
-test.write('test29.f77', "This is a .f77 file.\n#link\n#f77\n")
-test.write('test30.F77', "This is a .F77 file.\n#link\n#f77pp\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -158,20 +91,5 @@ test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
 test.must_match('test09' + _exe, "This is a .f77 file.\n")
 test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
-
-test.must_match('test21' + _exe, "This is a .f file.\n")
-test.must_match('test22' + _exe, "This is a .F file.\n")
-test.must_match('test23' + _exe, "This is a .for file.\n")
-test.must_match('test24' + _exe, "This is a .FOR file.\n")
-test.must_match('test25' + _exe, "This is a .ftn file.\n")
-test.must_match('test26' + _exe, "This is a .FTN file.\n")
-test.must_match('test27' + _exe, "This is a .fpp file.\n")
-test.must_match('test28' + _exe, "This is a .FPP file.\n")
-test.must_match('test29' + _exe, "This is a .f77 file.\n")
-test.must_match('test30' + _exe, "This is a .F77 file.\n")
 
 test.pass_test()
index b8a5e44a195c8538c0a9036bc77c3f46270b6ceb..af0cb4d89235e33d0227d454f48dcd7de9e6b506 100644 (file)
@@ -57,50 +57,18 @@ env = Environment(F77COM = r'%(_python_)s myfc.py f77 $TARGET $SOURCES',
                   F77PPCOM = r'%(_python_)s myfc.py f77pp $TARGET $SOURCES',
                   F77PPCOMSTR = 'Building f77pp $TARGET from $SOURCES',
                   OBJSUFFIX='.obj')
-env.Object(source = 'test01.f')
-env.Object(source = 'test02.F')
-env.Object(source = 'test03.for')
-env.Object(source = 'test04.FOR')
-env.Object(source = 'test05.ftn')
-env.Object(source = 'test06.FTN')
-env.Object(source = 'test07.fpp')
-env.Object(source = 'test08.FPP')
 env.Object(source = 'test09.f77')
 env.Object(source = 'test10.F77')
 """ % locals())
 
-test.write('test01.f',          "A .f file.\n#f77\n")
-test.write('test02.F',          "A .F file.\n#%s\n" % f77pp)
-test.write('test03.for',        "A .for file.\n#f77\n")
-test.write('test04.FOR',        "A .FOR file.\n#%s\n" % f77pp)
-test.write('test05.ftn',        "A .ftn file.\n#f77\n")
-test.write('test06.FTN',        "A .FTN file.\n#%s\n" % f77pp)
-test.write('test07.fpp',        "A .fpp file.\n#f77pp\n")
-test.write('test08.FPP',        "A .FPP file.\n#f77pp\n")
 test.write('test09.f77',        "A .f77 file.\n#f77\n")
 test.write('test10.F77',        "A .F77 file.\n#%s\n" % f77pp)
 
 test.run(stdout = test.wrap_stdout("""\
-Building f77 test01.obj from test01.f
-Building %(f77pp)s test02.obj from test02.F
-Building f77 test03.obj from test03.for
-Building %(f77pp)s test04.obj from test04.FOR
-Building f77 test05.obj from test05.ftn
-Building %(f77pp)s test06.obj from test06.FTN
-Building f77pp test07.obj from test07.fpp
-Building f77pp test08.obj from test08.FPP
 Building f77 test09.obj from test09.f77
 Building %(f77pp)s test10.obj from test10.F77
 """ % locals()))
 
-test.must_match('test01.obj', "A .f file.\n")
-test.must_match('test02.obj', "A .F file.\n")
-test.must_match('test03.obj', "A .for file.\n")
-test.must_match('test04.obj', "A .FOR file.\n")
-test.must_match('test05.obj', "A .ftn file.\n")
-test.must_match('test06.obj', "A .FTN file.\n")
-test.must_match('test07.obj', "A .fpp file.\n")
-test.must_match('test08.obj', "A .FPP file.\n")
 test.must_match('test09.obj', "A .f77 file.\n")
 test.must_match('test10.obj', "A .F77 file.\n")
 
diff --git a/test/Fortran/F77FILESUFFIXES.py b/test/Fortran/F77FILESUFFIXES.py
new file mode 100644 (file)
index 0000000..fedbb53
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test default file suffix: .f77/.F77 for F77
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F77 = r'%(_python_)s myfortran.py g77',
+                  FORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.for')
+env.Program(target = 'test04', source = 'test04.FOR')
+env.Program(target = 'test05', source = 'test05.ftn')
+env.Program(target = 'test06', source = 'test06.FTN')
+env.Program(target = 'test07', source = 'test07.fpp')
+env.Program(target = 'test08', source = 'test08.FPP')
+env.Program(target = 'test09', source = 'test09.f77')
+env.Program(target = 'test10', source = 'test10.F77')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#fortran\n")
+test.write('test03.for', "This is a .for file.\n#link\n#fortran\n")
+test.write('test04.FOR', "This is a .FOR file.\n#link\n#fortran\n")
+test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
+test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
+test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
+test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
+test.write('test09.f77', "This is a .f77 file.\n#link\n#g77\n")
+test.write('test10.F77', "This is a .F77 file.\n#link\n#g77\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .for file.\n")
+test.must_match('test04' + _exe, "This is a .FOR file.\n")
+test.must_match('test05' + _exe, "This is a .ftn file.\n")
+test.must_match('test06' + _exe, "This is a .FTN file.\n")
+test.must_match('test07' + _exe, "This is a .fpp file.\n")
+test.must_match('test08' + _exe, "This is a .FPP file.\n")
+test.must_match('test09' + _exe, "This is a .f77 file.\n")
+test.must_match('test10' + _exe, "This is a .F77 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/F77FILESUFFIXES2.py b/test/Fortran/F77FILESUFFIXES2.py
new file mode 100644 (file)
index 0000000..bde1200
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test non-default file suffix: .f/.F for F77
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F77 = r'%(_python_)s myfortran.py g77',
+                  F95 = r'%(_python_)s myfortran.py f95',
+                  F77FILESUFFIXES = ['.f', '.F'],
+                  tools = ['default', 'f77'])
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test05', source = 'test05.f95')
+env.Program(target = 'test06', source = 'test06.F95')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#g77\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#g77\n")
+test.write('test05.f95', "This is a .f95 file.\n#link\n#f95\n")
+test.write('test06.F95', "This is a .F95 file.\n#link\n#f95\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test05' + _exe, "This is a .f95 file.\n")
+test.must_match('test06' + _exe, "This is a .F95 file.\n")
+
+test.pass_test()
index cd25167f28e124ccb69527317efb51df71987af1..a358507be1364d2e760ecf80d6ae5978cd25c96c 100644 (file)
@@ -29,46 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 
 test = TestSCons.TestSCons()
 _exe = TestSCons._exe
 
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myg77.py', r"""
 import getopt
@@ -94,46 +62,21 @@ env = Environment(LINK = r'%(_python_)s mylink.py',
                   LINKFLAGS = [],
                   F77 = r'%(_python_)s myg77.py',
                   F77FLAGS = '-x')
-env.Program(target = 'test01', source = 'test01.f')
-env.Program(target = 'test02', source = 'test02.F')
-env.Program(target = 'test03', source = 'test03.for')
-env.Program(target = 'test04', source = 'test04.FOR')
-env.Program(target = 'test05', source = 'test05.ftn')
-env.Program(target = 'test06', source = 'test06.FTN')
-env.Program(target = 'test07', source = 'test07.fpp')
-env.Program(target = 'test08', source = 'test08.FPP')
 env.Program(target = 'test09', source = 'test09.f77')
 env.Program(target = 'test10', source = 'test10.F77')
 """ % locals())
 
-test.write('test01.f',   "This is a .f file.\n#link\n#g77\n")
-test.write('test02.F',   "This is a .F file.\n#link\n#g77\n")
-test.write('test03.for', "This is a .for file.\n#link\n#g77\n")
-test.write('test04.FOR', "This is a .FOR file.\n#link\n#g77\n")
-test.write('test05.ftn', "This is a .ftn file.\n#link\n#g77\n")
-test.write('test06.FTN', "This is a .FTN file.\n#link\n#g77\n")
-test.write('test07.fpp', "This is a .fpp file.\n#link\n#g77\n")
-test.write('test08.FPP', "This is a .FPP file.\n#link\n#g77\n")
 test.write('test09.f77', "This is a .f77 file.\n#link\n#g77\n")
 test.write('test10.F77', "This is a .F77 file.\n#link\n#g77\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _exe, " -c -x\nThis is a .f file.\n")
-test.must_match('test02' + _exe, " -c -x\nThis is a .F file.\n")
-test.must_match('test03' + _exe, " -c -x\nThis is a .for file.\n")
-test.must_match('test04' + _exe, " -c -x\nThis is a .FOR file.\n")
-test.must_match('test05' + _exe, " -c -x\nThis is a .ftn file.\n")
-test.must_match('test06' + _exe, " -c -x\nThis is a .FTN file.\n")
-test.must_match('test07' + _exe, " -c -x\nThis is a .fpp file.\n")
-test.must_match('test08' + _exe, " -c -x\nThis is a .FPP file.\n")
 test.must_match('test09' + _exe, " -c -x\nThis is a .f77 file.\n")
 test.must_match('test10' + _exe, " -c -x\nThis is a .F77 file.\n")
 
 
-
-g77 = test.detect('F77', 'g77')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f77'
+g77 = test.detect_tool(fc)
 
 if g77:
 
@@ -146,7 +89,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %FTN_LIBs)
+foo = Environment(F77 = '%(fc)s', tools = ['default', 'f77'], F77FILESUFFIXES = [".f"])
 f77 = foo.Dictionary('F77')
 bar = foo.Clone(F77 = r'%(_python_)s wrapper.py ' + f77, F77FLAGS = '-Ix')
 foo.Program(target = 'foo', source = 'foo.f')
@@ -174,7 +117,11 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
     test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
 
index 738954f02edd88373c0a313ce8d819b89a5bd242..b8856f3a9cd4e26767694b4f2834311bc37851e7 100644 (file)
@@ -29,7 +29,6 @@ import sys
 import TestSCons
 
 _exe = TestSCons._exe
-FTN_LIB = TestSCons.fortran_lib
 prog = 'prog' + _exe
 subdir_prog = os.path.join('subdir', 'prog' + _exe)
 variant_prog = os.path.join('variant', 'prog' + _exe)
@@ -38,8 +37,9 @@ args = prog + ' ' + variant_prog + ' ' + subdir_prog
 
 test = TestSCons.TestSCons()
 
-if not test.detect('_F77G', 'g77'):
-    test.skip_test('Could not find a $F77 tool; skipping test.\n')
+fc = 'f77'
+if not test.detect_tool(fc):
+    test.skip_test('Could not find a f77 tool; skipping test.\n')
     
 test.subdir('include',
             'subdir',
@@ -50,8 +50,8 @@ test.subdir('include',
 
 
 test.write('SConstruct', """
-env = Environment(F77PATH = ['$FOO', '${TARGET.dir}', '${SOURCE.dir}'],
-                  LIBS = %s,
+env = Environment(F77 = '%s',
+                  F77PATH = ['$FOO', '${TARGET.dir}', '${SOURCE.dir}'],
                   FOO='include',
                   F77FLAGS = '-x f77')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f77')
@@ -60,11 +60,11 @@ SConscript('subdir/SConscript', "env")
 
 VariantDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(F77PATH=[include, '#foobar', '#subdir'],
-                  LIBS = %s,
+env = Environment(F77 = '%s',
+                  F77PATH=[include, '#foobar', '#subdir'],
                   F77FLAGS = '-x f77')
 SConscript('variant/SConscript', "env")
-""" % (FTN_LIB, FTN_LIB))
+""" % (fc, fc))
 
 test.write(['subdir', 'SConscript'],
 """
@@ -239,8 +239,8 @@ test.up_to_date(arguments = args)
 
 # Change F77PATH and make sure we don't rebuild because of it.
 test.write('SConstruct', """
-env = Environment(F77PATH = Split('inc2 include ${TARGET.dir} ${SOURCE.dir}'),
-                  LIBS = %s,
+env = Environment(F77 = '%s',
+                  F77PATH = Split('inc2 include ${TARGET.dir} ${SOURCE.dir}'),
                   F77FLAGS = '-x f77')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f77')
 env.Program(target='prog', source=obj)
@@ -248,11 +248,11 @@ SConscript('subdir/SConscript', "env")
 
 VariantDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(F77PATH=['inc2', include, '#foobar', '#subdir'],
-                  LIBS = %s,
+env = Environment(F77 = '%s',
+                  F77PATH=['inc2', include, '#foobar', '#subdir'],
                   F77FLAGS = '-x f77')
 SConscript('variant/SConscript', "env")
-""" % (FTN_LIB, FTN_LIB))
+""" % (fc, fc))
 
 test.up_to_date(arguments = args)
 
@@ -298,9 +298,9 @@ test.up_to_date(arguments = args)
 
 # Check that a null-string F77PATH doesn't blow up.
 test.write('SConstruct', """
-env = Environment(F77PATH = '', LIBS = %s, F77FLAGS = '-x f77')
+env = Environment(tools = ['f77'], F77PATH = '', F77FLAGS = '-x f77')
 env.Object('foo', source = 'empty.f77')
-""" % FTN_LIB)
+""")
 
 test.write('empty.f77', '')
 
index cadfb016331e8b670821f0db93b68125e91dc886..ad73d9f7caff178abd26cd026e37b2c3669ba161 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -101,12 +67,8 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
 env.Program(target = 'test11', source = 'test11.f90')
 env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -117,12 +79,8 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortran\n")
 test.write('test11.f90', "This is a .f90 file.\n#link\n#f90\n")
 test.write('test12.F90', "This is a .F90 file.\n#link\n#f90\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -134,17 +92,12 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
 test.must_match('test11' + _exe, "This is a .f90 file.\n")
 test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
 
-
-g90 = test.detect('F90', 'g90')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f90'
+g90 = test.detect_tool(fc)
 
 if g90:
 
@@ -157,57 +110,38 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(F90 = '%(fc)s')
 f90 = foo.Dictionary('F90')
 bar = foo.Clone(F90 = r'%(_python_)s wrapper.py ' + f90)
-foo.Program(target = 'foo', source = 'foo.f')
-bar.Program(target = 'bar', source = 'bar.f')
+foo.Program(target = 'foo', source = 'foo.f90')
+bar.Program(target = 'bar', source = 'bar.f90')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f90', r"""
       PROGRAM FOO
-      USE MOD_BAR
-      PRINT *,'foo.f'
-      CALL P
-      STOP
+      PRINT *,'foo.f90'
       END
-      MODULE MOD_BAR
-         IMPLICIT NONE
-         CONTAINS
-         SUBROUTINE P
-            PRINT *,'mod_bar'
-         END SUBROUTINE P
-      END MODULE MOD_BAR
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f90', r"""
       PROGRAM BAR
-      USE MOD_FOO
-      PRINT *,'bar.f'
-      CALL P
-      STOP
+      PRINT *,'bar.f90'
       END
 """)
 
-    test.write('foo_mod.f', r"""
-      MODULE MOD_FOO
-         IMPLICIT NONE
-         CONTAINS
-         SUBROUTINE P
-            PRINT *,'mod_foo'
-         END SUBROUTINE P
-      END MODULE MOD_FOO
-""")
-
     test.run(arguments = 'foo' + _exe, stderr = None)
 
-    test.run(program = test.workpath('foo'), stdout =  " foo.f\n")
+    test.run(program = test.workpath('foo'), stdout =  " foo.f90\n")
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
-    test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
+    test.run(program = test.workpath('bar'), stdout =  " bar.f90\n")
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 7a206da8f569e9ab34ae7bb8055d2f742b43e627..1b33c73dfc92ff41308aa32230742c69ea14b465 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import sys
@@ -98,12 +64,8 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
 env.Program(target = 'test11', source = 'test11.f90')
 env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 env2 = Environment(LINK = r'%(_python_)s mylink.py',
                    LINKFLAGS = [],
                    F90COM = r'%(_python_)s myfortran.py f90 $TARGET $SOURCES',
@@ -120,12 +82,8 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortranpp\n")
 test.write('test11.f90', "This is a .f90 file.\n#link\n#f90\n")
 test.write('test12.F90', "This is a .F90 file.\n#link\n#f90pp\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortranpp\n")
 
 test.write('test21.f90', "This is a .f90 file.\n#link\n#f90\n")
 test.write('test22.F90', "This is a .F90 file.\n#link\n#f90pp\n")
@@ -140,12 +98,8 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
 test.must_match('test11' + _exe, "This is a .f90 file.\n")
 test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
 test.must_match('test21' + _exe, "This is a .f90 file.\n")
 test.must_match('test22' + _exe, "This is a .F90 file.\n")
diff --git a/test/Fortran/F90FILESUFFIXES.py b/test/Fortran/F90FILESUFFIXES.py
new file mode 100644 (file)
index 0000000..ac4126a
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test default file suffix: .f90/.F90 for F90
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F90 = r'%(_python_)s myfortran.py f90',
+                  FORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.for')
+env.Program(target = 'test04', source = 'test04.FOR')
+env.Program(target = 'test05', source = 'test05.ftn')
+env.Program(target = 'test06', source = 'test06.FTN')
+env.Program(target = 'test07', source = 'test07.fpp')
+env.Program(target = 'test08', source = 'test08.FPP')
+env.Program(target = 'test09', source = 'test09.f90')
+env.Program(target = 'test10', source = 'test10.F90')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#fortran\n")
+test.write('test03.for', "This is a .for file.\n#link\n#fortran\n")
+test.write('test04.FOR', "This is a .FOR file.\n#link\n#fortran\n")
+test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
+test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
+test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
+test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
+test.write('test09.f90', "This is a .f90 file.\n#link\n#f90\n")
+test.write('test10.F90', "This is a .F90 file.\n#link\n#f90\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .for file.\n")
+test.must_match('test04' + _exe, "This is a .FOR file.\n")
+test.must_match('test05' + _exe, "This is a .ftn file.\n")
+test.must_match('test06' + _exe, "This is a .FTN file.\n")
+test.must_match('test07' + _exe, "This is a .fpp file.\n")
+test.must_match('test08' + _exe, "This is a .FPP file.\n")
+test.must_match('test09' + _exe, "This is a .f90 file.\n")
+test.must_match('test10' + _exe, "This is a .F90 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/F90FILESUFFIXES2.py b/test/Fortran/F90FILESUFFIXES2.py
new file mode 100644 (file)
index 0000000..658eda3
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test non-default file suffix: .f/.F for F90
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F77 = r'%(_python_)s myfortran.py f77',
+                  F90 = r'%(_python_)s myfortran.py f90',
+                  F90FILESUFFIXES = ['.f', '.F', '.f90', '.F90'],
+                  tools = ['default', 'f90'])
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.f90')
+env.Program(target = 'test04', source = 'test04.F90')
+env.Program(target = 'test05', source = 'test05.f77')
+env.Program(target = 'test06', source = 'test06.F77')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#f90\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#f90\n")
+test.write('test03.f90', "This is a .f90 file.\n#link\n#f90\n")
+test.write('test04.F90', "This is a .F90 file.\n#link\n#f90\n")
+test.write('test05.f77', "This is a .f77 file.\n#link\n#f77\n")
+test.write('test06.F77', "This is a .F77 file.\n#link\n#f77\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .f90 file.\n")
+test.must_match('test04' + _exe, "This is a .F90 file.\n")
+test.must_match('test05' + _exe, "This is a .f77 file.\n")
+test.must_match('test06' + _exe, "This is a .F77 file.\n")
+
+test.pass_test()
index 2243ba63961380e9e7eea3616287021e364ebfc6..8e42ed58e4adf6ecad87169b7a2def1dc488ec4b 100644 (file)
@@ -30,46 +30,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 
 test = TestSCons.TestSCons()
 _exe = TestSCons._exe
 
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -105,12 +73,8 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
 env.Program(target = 'test11', source = 'test11.f90')
 env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -121,12 +85,8 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortran\n")
 test.write('test11.f90', "This is a .f90 file.\n#link\n#g90\n")
 test.write('test12.F90', "This is a .F90 file.\n#link\n#g90\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -138,17 +98,13 @@ test.must_match('test05' + _exe, " -c -y\nThis is a .ftn file.\n")
 test.must_match('test06' + _exe, " -c -y\nThis is a .FTN file.\n")
 test.must_match('test07' + _exe, " -c -y\nThis is a .fpp file.\n")
 test.must_match('test08' + _exe, " -c -y\nThis is a .FPP file.\n")
-test.must_match('test09' + _exe, " -c -y\nThis is a .f77 file.\n")
-test.must_match('test10' + _exe, " -c -y\nThis is a .F77 file.\n")
 test.must_match('test11' + _exe, " -c -x\nThis is a .f90 file.\n")
 test.must_match('test12' + _exe, " -c -x\nThis is a .F90 file.\n")
-test.must_match('test13' + _exe, " -c -y\nThis is a .f95 file.\n")
-test.must_match('test14' + _exe, " -c -y\nThis is a .F95 file.\n")
 
 
 
-g90 = test.detect('F90', 'g90')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f90'
+g90 = test.detect_tool(fc)
 
 if g90:
 
@@ -161,57 +117,38 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(F90 = '%(fc)s')
 f90 = foo.Dictionary('F90')
-bar = foo.Clone(F90 = r'%(_python_)s wrapper.py ' + f90, F90FLAGS = '-Ix')
-foo.Program(target = 'foo', source = 'foo.f')
-bar.Program(target = 'bar', source = 'bar.f')
+bar = foo.Clone(F90 = r'%(_python_)s wrapper.py ' + f90)
+foo.Program(target = 'foo', source = 'foo.f90')
+bar.Program(target = 'bar', source = 'bar.f90')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f90', r"""
       PROGRAM FOO
-      USE MOD_BAR
-      PRINT *,'foo.f'
-      CALL P
-      STOP
+      PRINT *,'foo.f90'
       END
-      MODULE MOD_BAR
-         IMPLICIT NONE
-         CONTAINS
-         SUBROUTINE P
-            PRINT *,'mod_bar'
-         END SUBROUTINE P
-      END MODULE MOD_BAR
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f90', r"""
       PROGRAM BAR
-      USE MOD_FOO
-      PRINT *,'bar.f'
-      CALL P
-      STOP
+      PRINT *,'bar.f90'
       END
 """)
 
-    test.write('foo_mod.f', r"""
-      MODULE MOD_FOO
-         IMPLICIT NONE
-         CONTAINS
-         SUBROUTINE P
-            PRINT *,'mod_foo'
-         END SUBROUTINE P
-      END MODULE MOD_FOO
-""")
-
     test.run(arguments = 'foo' + _exe, stderr = None)
 
-    test.run(program = test.workpath('foo'), stdout =  " foo.f\n")
+    test.run(program = test.workpath('foo'), stdout =  " foo.f90\n")
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
-    test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
+    test.run(program = test.workpath('bar'), stdout =  " bar.f90\n")
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index fb159cfb9cd87e96bf2272bfe6016e8317811aeb..e5fca9936d4020e149febc03217fa5194264cbb0 100644 (file)
@@ -31,7 +31,6 @@ import sys
 import TestSCons
 
 _exe = TestSCons._exe
-FTN_LIB = TestSCons.fortran_lib
 prog = 'prog' + _exe
 subdir_prog = os.path.join('subdir', 'prog' + _exe)
 variant_prog = os.path.join('variant', 'prog' + _exe)
@@ -40,24 +39,9 @@ args = prog + ' ' + subdir_prog + ' ' + variant_prog
 
 test = TestSCons.TestSCons()
 
-baselist = [
-    '/opt/intel_fc_80',
-    '/opt/intel/fc/9.0',
-]
-
-F90 = None
-for base in baselist:
-    ifort = os.path.join(base, 'bin', 'ifort')
-    if os.path.exists(ifort):
-        F90 = ifort
-
-if not F90:
-    l = string.join(baselist, '\n\t')
-    test.skip_test('No (hard-coded) F90 compiler under:' + l + '\n')
-
-LIBPATH = os.path.join(base, 'lib')
-LIBS = ['irc']
-os.environ['LD_LIBRARY_PATH'] = LIBPATH
+fc = 'f90'
+if not test.detect_tool(fc):
+    test.skip_test('Could not find a f90 tool; skipping test.\n')
     
 test.subdir('include',
             'subdir',
@@ -71,8 +55,6 @@ test.write('SConstruct', """
 env = Environment(F90 = r'%s',
                   F90PATH = ['$FOO', '${TARGET.dir}', '${SOURCE.dir}'],
                   LINK = '$F90',
-                  LIBPATH = %s,
-                  LIBS = %s,
                   FOO='include')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f90')
 env.Program(target='prog', source=obj)
@@ -82,11 +64,9 @@ VariantDir('variant', 'subdir', 0)
 include = Dir('include')
 env = Environment(F90 = r'%s',
                   F90PATH=[include, '#foobar', '#subdir'],
-                  LINK = '$F90',
-                  LIBPATH = %s,
-                  LIBS = %s)
+                  LINK = '$F90')
 SConscript('variant/SConscript', "env")
-""" % (F90, repr(LIBPATH), LIBS, F90, repr(LIBPATH), LIBS))
+""" % (fc, fc, ))
 
 test.write(['subdir', 'SConscript'],
 """
@@ -263,9 +243,7 @@ test.up_to_date(arguments = args)
 test.write('SConstruct', """
 env = Environment(F90 = r'%s',
                   F90PATH = Split('inc2 include ${TARGET.dir} ${SOURCE.dir}'),
-                  LINK = '$F90',
-                  LIBPATH = %s,
-                  LIBS = %s)
+                  LINK = '$F90')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f90')
 env.Program(target='prog', source=obj)
 SConscript('subdir/SConscript', "env")
@@ -274,11 +252,9 @@ VariantDir('variant', 'subdir', 0)
 include = Dir('include')
 env = Environment(F90 = r'%s',
                   F90PATH=['inc2', include, '#foobar', '#subdir'],
-                  LINK = '$F90',
-                  LIBPATH = %s,
-                  LIBS = %s)
+                  LINK = '$F90')
 SConscript('variant/SConscript', "env")
-""" % (F90, repr(LIBPATH), LIBS, F90, repr(LIBPATH), LIBS))
+""" % (fc, fc))
 
 test.up_to_date(arguments = args)
 
index 767a3b449114a022cae3220de8f1c677cda3cde0..0a5d8536084f64313f51d6f360d51e6e2f6b9e79 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -101,10 +67,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
 env.Program(target = 'test13', source = 'test13.f95')
 env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
@@ -117,10 +79,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortran\n")
 test.write('test13.f95', "This is a .f95 file.\n#link\n#f95\n")
 test.write('test14.F95', "This is a .F95 file.\n#link\n#f95\n")
 
@@ -134,17 +92,12 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
 test.must_match('test13' + _exe, "This is a .f95 file.\n")
 test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
 
-
-g95 = test.detect('F95', 'g95')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f95'
+g95 = test.detect_tool(fc)
 
 if g95:
 
@@ -157,23 +110,23 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(F95 = '%(fc)s')
 f95 = foo.Dictionary('F95')
 bar = foo.Clone(F95 = r'%(_python_)s wrapper.py ' + f95)
-foo.Program(target = 'foo', source = 'foo.f')
-bar.Program(target = 'bar', source = 'bar.f')
+foo.Program(target = 'foo', source = 'foo.f95')
+bar.Program(target = 'bar', source = 'bar.f95')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f95', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f95'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f95', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f95'
       STOP
       END
 """)
@@ -181,13 +134,17 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.run(arguments = 'foo' + _exe, stderr = None)
 
-    test.run(program = test.workpath('foo'), stdout =  " foo.f\n")
+    test.run(program = test.workpath('foo'), stdout =  " foo.f95\n")
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
-    test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
+    test.run(program = test.workpath('bar'), stdout =  " bar.f95\n")
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 016230a9b6ea144dbd10cbe872f94ef3d3ee123b..71585caad0909979c83dd2be75373c0bf17ac48a 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import sys
@@ -98,10 +64,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
 env.Program(target = 'test13', source = 'test13.f95')
 env.Program(target = 'test14', source = 'test14.F95')
 env2 = Environment(LINK = r'%(_python_)s mylink.py',
@@ -120,10 +82,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortranpp\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortranpp\n")
 test.write('test13.f95', "This is a .f95 file.\n#link\n#f95\n")
 test.write('test14.F95', "This is a .F95 file.\n#link\n#f95pp\n")
 
@@ -140,10 +98,6 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
 test.must_match('test13' + _exe, "This is a .f95 file.\n")
 test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
diff --git a/test/Fortran/F95FILESUFFIXES.py b/test/Fortran/F95FILESUFFIXES.py
new file mode 100644 (file)
index 0000000..f42d236
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test default file suffix: .f90/.F90 for F90
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F95 = r'%(_python_)s myfortran.py f95',
+                  FORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.for')
+env.Program(target = 'test04', source = 'test04.FOR')
+env.Program(target = 'test05', source = 'test05.ftn')
+env.Program(target = 'test06', source = 'test06.FTN')
+env.Program(target = 'test07', source = 'test07.fpp')
+env.Program(target = 'test08', source = 'test08.FPP')
+env.Program(target = 'test09', source = 'test09.f95')
+env.Program(target = 'test10', source = 'test10.F95')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#fortran\n")
+test.write('test03.for', "This is a .for file.\n#link\n#fortran\n")
+test.write('test04.FOR', "This is a .FOR file.\n#link\n#fortran\n")
+test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
+test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
+test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
+test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
+test.write('test09.f95', "This is a .f95 file.\n#link\n#f95\n")
+test.write('test10.F95', "This is a .F95 file.\n#link\n#f95\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .for file.\n")
+test.must_match('test04' + _exe, "This is a .FOR file.\n")
+test.must_match('test05' + _exe, "This is a .ftn file.\n")
+test.must_match('test06' + _exe, "This is a .FTN file.\n")
+test.must_match('test07' + _exe, "This is a .fpp file.\n")
+test.must_match('test08' + _exe, "This is a .FPP file.\n")
+test.must_match('test09' + _exe, "This is a .f95 file.\n")
+test.must_match('test10' + _exe, "This is a .F95 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/F95FILESUFFIXES2.py b/test/Fortran/F95FILESUFFIXES2.py
new file mode 100644 (file)
index 0000000..2f31152
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test non-default file suffix: .f/.F for F95
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F77 = r'%(_python_)s myfortran.py f77',
+                  F95 = r'%(_python_)s myfortran.py f95',
+                  F95FILESUFFIXES = ['.f', '.F', '.f95', '.F95'],
+                  tools = ['default', 'f95'])
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.f95')
+env.Program(target = 'test04', source = 'test04.F95')
+env.Program(target = 'test05', source = 'test05.f77')
+env.Program(target = 'test06', source = 'test06.F77')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#f95\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#f95\n")
+test.write('test03.f95', "This is a .f95 file.\n#link\n#f95\n")
+test.write('test04.F95', "This is a .F95 file.\n#link\n#f95\n")
+test.write('test05.f77', "This is a .f77 file.\n#link\n#f77\n")
+test.write('test06.F77', "This is a .F77 file.\n#link\n#f77\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .f95 file.\n")
+test.must_match('test04' + _exe, "This is a .F95 file.\n")
+test.must_match('test05' + _exe, "This is a .f77 file.\n")
+test.must_match('test06' + _exe, "This is a .F77 file.\n")
+
+test.pass_test()
index 7d324197c27d1c2f11bd301b19a174f810b5390f..d43d8f58f92bfd137bb0f57f1fb15212969167c3 100644 (file)
@@ -29,46 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 
 test = TestSCons.TestSCons()
 _exe = TestSCons._exe
 
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -105,10 +73,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
 env.Program(target = 'test13', source = 'test13.f95')
 env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
@@ -121,10 +85,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortran\n")
 test.write('test13.f95', "This is a .f95 file.\n#link\n#g95\n")
 test.write('test14.F95', "This is a .F95 file.\n#link\n#g95\n")
 
@@ -138,17 +98,13 @@ test.must_match('test05' + _exe, " -c -y\nThis is a .ftn file.\n")
 test.must_match('test06' + _exe, " -c -y\nThis is a .FTN file.\n")
 test.must_match('test07' + _exe, " -c -y\nThis is a .fpp file.\n")
 test.must_match('test08' + _exe, " -c -y\nThis is a .FPP file.\n")
-test.must_match('test09' + _exe, " -c -y\nThis is a .f77 file.\n")
-test.must_match('test10' + _exe, " -c -y\nThis is a .F77 file.\n")
-test.must_match('test11' + _exe, " -c -y\nThis is a .f90 file.\n")
-test.must_match('test12' + _exe, " -c -y\nThis is a .F90 file.\n")
 test.must_match('test13' + _exe, " -c -x\nThis is a .f95 file.\n")
 test.must_match('test14' + _exe, " -c -x\nThis is a .F95 file.\n")
 
 
+fc = 'f95'
+g95 = test.detect_tool(fc)
 
-g95 = test.detect('F95', 'g95')
-FTN_LIB = TestSCons.fortran_lib
 
 if g95:
 
@@ -161,23 +117,23 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(F95 = '%(fc)s')
 f95 = foo.Dictionary('F95')
 bar = foo.Clone(F95 = r'%(_python_)s wrapper.py ' + f95, F95FLAGS = '-Ix')
-foo.Program(target = 'foo', source = 'foo.f')
-bar.Program(target = 'bar', source = 'bar.f')
+foo.Program(target = 'foo', source = 'foo.f95')
+bar.Program(target = 'bar', source = 'bar.f95')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f95', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f95'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f95', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f95'
       STOP
       END
 """)
@@ -185,13 +141,17 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.run(arguments = 'foo' + _exe, stderr = None)
 
-    test.run(program = test.workpath('foo'), stdout =  " foo.f\n")
+    test.run(program = test.workpath('foo'), stdout =  " foo.f95\n")
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
-    test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
+    test.run(program = test.workpath('bar'), stdout =  " bar.f95\n")
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 235de74c88219b8e0e4356311d41f5487c668a4d..768ff91744ef88a5894e9bdbebeaab9aad3c6b3b 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myg77.py', r"""
 import getopt
@@ -98,12 +64,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#g77\n")
@@ -114,12 +74,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#g77\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#g77\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#g77\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#g77\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#g77\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#g77\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#g77\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#g77\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#g77\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#g77\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -131,19 +85,14 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
 
 
-g77 = test.detect('FORTRAN', 'g77')
+fc = 'f77'
+f77 = test.detect_tool(fc)
 FTN_LIB = TestSCons.fortran_lib
 
-if g77:
+if f77:
 
     test.write("wrapper.py",
 """import os
@@ -154,7 +103,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(FORTRAN = '%(fc)s')
 f77 = foo.Dictionary('FORTRAN')
 bar = foo.Clone(FORTRAN = r'%(_python_)s wrapper.py ' + f77)
 foo.Program(target = 'foo', source = 'foo.f')
@@ -182,7 +131,11 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
     test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
 
index 3e3fcb2dd17bf95087c35c4eae07da82b4a99556..c20f230ffbd41e10b4996d8af8ac33f7d71b10fd 100644 (file)
@@ -29,48 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 _exe   = TestSCons._exe
 
 test = TestSCons.TestSCons()
 
-
-
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import sys
@@ -96,12 +62,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -112,12 +72,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortranpp\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortranpp\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortranpp\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -129,11 +83,5 @@ test.must_match('test05' + _exe, "This is a .ftn file.\n")
 test.must_match('test06' + _exe, "This is a .FTN file.\n")
 test.must_match('test07' + _exe, "This is a .fpp file.\n")
 test.must_match('test08' + _exe, "This is a .FPP file.\n")
-test.must_match('test09' + _exe, "This is a .f77 file.\n")
-test.must_match('test10' + _exe, "This is a .F77 file.\n")
-test.must_match('test11' + _exe, "This is a .f90 file.\n")
-test.must_match('test12' + _exe, "This is a .F90 file.\n")
-test.must_match('test13' + _exe, "This is a .f95 file.\n")
-test.must_match('test14' + _exe, "This is a .F95 file.\n")
 
 test.pass_test()
index f942669d6dbb75871126b9cbce9a674a3b2dd652..e71c516cfd6b0cff40816fbdbec61590d07e657a 100644 (file)
@@ -65,12 +65,6 @@ env.Object(source = 'test05.ftn')
 env.Object(source = 'test06.FTN')
 env.Object(source = 'test07.fpp')
 env.Object(source = 'test08.FPP')
-env.Object(source = 'test09.f77')
-env.Object(source = 'test10.F77')
-env.Object(source = 'test11.f90')
-env.Object(source = 'test12.F90')
-env.Object(source = 'test13.f95')
-env.Object(source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',          "A .f file.\n#fortran\n")
@@ -81,12 +75,6 @@ test.write('test05.ftn',        "A .ftn file.\n#fortran\n")
 test.write('test06.FTN',        "A .FTN file.\n#%s\n" % fortranpp)
 test.write('test07.fpp',        "A .fpp file.\n#fortranpp\n")
 test.write('test08.FPP',        "A .FPP file.\n#fortranpp\n")
-test.write('test09.f77',        "A .f77 file.\n#fortran\n")
-test.write('test10.F77',        "A .F77 file.\n#%s\n" % fortranpp)
-test.write('test11.f90',        "A .f90 file.\n#fortran\n")
-test.write('test12.F90',        "A .F90 file.\n#%s\n" % fortranpp)
-test.write('test13.f95',        "A .f95 file.\n#fortran\n")
-test.write('test14.F95',        "A .F95 file.\n#%s\n" % fortranpp)
 
 test.run(stdout = test.wrap_stdout("""\
 Building fortran test01.obj from test01.f
@@ -97,12 +85,6 @@ Building fortran test05.obj from test05.ftn
 Building %(fortranpp)s test06.obj from test06.FTN
 Building fortranpp test07.obj from test07.fpp
 Building fortranpp test08.obj from test08.FPP
-Building fortran test09.obj from test09.f77
-Building %(fortranpp)s test10.obj from test10.F77
-Building fortran test11.obj from test11.f90
-Building %(fortranpp)s test12.obj from test12.F90
-Building fortran test13.obj from test13.f95
-Building %(fortranpp)s test14.obj from test14.F95
 """ % locals()))
 
 test.must_match('test01.obj', "A .f file.\n")
@@ -113,11 +95,5 @@ test.must_match('test05.obj', "A .ftn file.\n")
 test.must_match('test06.obj', "A .FTN file.\n")
 test.must_match('test07.obj', "A .fpp file.\n")
 test.must_match('test08.obj', "A .FPP file.\n")
-test.must_match('test09.obj', "A .f77 file.\n")
-test.must_match('test10.obj', "A .F77 file.\n")
-test.must_match('test11.obj', "A .f90 file.\n")
-test.must_match('test12.obj', "A .F90 file.\n")
-test.must_match('test13.obj', "A .f95 file.\n")
-test.must_match('test14.obj', "A .F95 file.\n")
 
 test.pass_test()
diff --git a/test/Fortran/FORTRANFILESUFFIXES.py b/test/Fortran/FORTRANFILESUFFIXES.py
new file mode 100644 (file)
index 0000000..01642e0
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test default file suffix: .f/.F for FORTRAN
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  FORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.F')
+env.Program(target = 'test03', source = 'test03.for')
+env.Program(target = 'test04', source = 'test04.FOR')
+env.Program(target = 'test05', source = 'test05.ftn')
+env.Program(target = 'test06', source = 'test06.FTN')
+env.Program(target = 'test07', source = 'test07.fpp')
+env.Program(target = 'test08', source = 'test08.FPP')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
+test.write('test02.F',   "This is a .F file.\n#link\n#fortran\n")
+test.write('test03.for', "This is a .for file.\n#link\n#fortran\n")
+test.write('test04.FOR', "This is a .FOR file.\n#link\n#fortran\n")
+test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
+test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
+test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
+test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .F file.\n")
+test.must_match('test03' + _exe, "This is a .for file.\n")
+test.must_match('test04' + _exe, "This is a .FOR file.\n")
+test.must_match('test05' + _exe, "This is a .ftn file.\n")
+test.must_match('test06' + _exe, "This is a .FTN file.\n")
+test.must_match('test07' + _exe, "This is a .fpp file.\n")
+test.must_match('test08' + _exe, "This is a .FPP file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/FORTRANFILESUFFIXES2.py b/test/Fortran/FORTRANFILESUFFIXES2.py
new file mode 100644 (file)
index 0000000..4cfcc07
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os
+import string
+import sys
+import TestSCons
+
+from common import write_fake_link
+
+_python_ = TestSCons._python_
+_exe   = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+write_fake_link(test)
+
+test.write('myfortran.py', r"""
+import getopt
+import sys
+comment = '#' + sys.argv[1]
+opts, args = getopt.getopt(sys.argv[2:], 'co:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:len(comment)] != comment:
+        outfile.write(l)
+sys.exit(0)
+""")
+
+# Test non default file suffix: .f, .f90 and .f95 for FORTRAN
+test.write('SConstruct', """
+env = Environment(LINK = r'%(_python_)s mylink.py',
+                  LINKFLAGS = [],
+                  F77 = r'%(_python_)s myfortran.py g77',
+                  FORTRAN = r'%(_python_)s myfortran.py fortran',
+                  FORTRANFILESUFFIXES = ['.f', '.f95', '.f90', '.ffake'],
+                  tools = ['default', 'fortran'])
+#print env.Dump()
+env.Program(target = 'test01', source = 'test01.f')
+env.Program(target = 'test02', source = 'test02.f90')
+env.Program(target = 'test03', source = 'test03.f95')
+env.Program(target = 'test04', source = 'test04.ffake')
+env.Program(target = 'test05', source = 'test05.f77')
+""" % locals())
+
+test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
+test.write('test02.f90',   "This is a .f90 file.\n#link\n#fortran\n")
+test.write('test03.f95', "This is a .f95 file.\n#link\n#fortran\n")
+test.write('test04.ffake', "This is a .ffake file.\n#link\n#fortran\n")
+test.write('test05.f77', "This is a .f77 file.\n#link\n#g77\n")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test01' + _exe, "This is a .f file.\n")
+test.must_match('test02' + _exe, "This is a .f90 file.\n")
+test.must_match('test03' + _exe, "This is a .f95 file.\n")
+test.must_match('test04' + _exe, "This is a .ffake file.\n")
+test.must_match('test05' + _exe, "This is a .f77 file.\n")
+
+test.pass_test()
index 8ae00f8906a903cab7e2f064bb354069956a0cb0..e3a8c9b39635ededd497bcd274489676a25534ee 100644 (file)
@@ -29,46 +29,14 @@ import string
 import sys
 import TestSCons
 
+from common import write_fake_link
+
 _python_ = TestSCons._python_
 
 test = TestSCons.TestSCons()
 _exe = TestSCons._exe
 
-if sys.platform == 'win32':
-
-    test.write('mylink.py', r"""
-import string
-import sys
-args = sys.argv[1:]
-while args:
-    a = args[0]
-    if a[0] != '/':
-        break
-    args = args[1:]
-    if string.lower(a[:5]) == '/out:': out = a[5:]
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
-
-else:
-
-    test.write('mylink.py', r"""
-import getopt
-import sys
-opts, args = getopt.getopt(sys.argv[1:], 'o:')
-for opt, arg in opts:
-    if opt == '-o': out = arg
-infile = open(args[0], 'rb')
-outfile = open(out, 'wb')
-for l in infile.readlines():
-    if l[:5] != '#link':
-        outfile.write(l)
-sys.exit(0)
-""")
+write_fake_link(test)
 
 test.write('myfortran.py', r"""
 import getopt
@@ -102,12 +70,6 @@ env.Program(target = 'test05', source = 'test05.ftn')
 env.Program(target = 'test06', source = 'test06.FTN')
 env.Program(target = 'test07', source = 'test07.fpp')
 env.Program(target = 'test08', source = 'test08.FPP')
-env.Program(target = 'test09', source = 'test09.f77')
-env.Program(target = 'test10', source = 'test10.F77')
-env.Program(target = 'test11', source = 'test11.f90')
-env.Program(target = 'test12', source = 'test12.F90')
-env.Program(target = 'test13', source = 'test13.f95')
-env.Program(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#link\n#fortran\n")
@@ -118,12 +80,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#link\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#link\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#link\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#link\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#link\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#link\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#link\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#link\n#fortran\n")
-test.write('test13.f95', "This is a .f95 file.\n#link\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#link\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
@@ -135,17 +91,10 @@ test.must_match('test05' + _exe, " -c -x\nThis is a .ftn file.\n")
 test.must_match('test06' + _exe, " -c -x\nThis is a .FTN file.\n")
 test.must_match('test07' + _exe, " -c -x\nThis is a .fpp file.\n")
 test.must_match('test08' + _exe, " -c -x\nThis is a .FPP file.\n")
-test.must_match('test09' + _exe, " -c -x\nThis is a .f77 file.\n")
-test.must_match('test10' + _exe, " -c -x\nThis is a .F77 file.\n")
-test.must_match('test11' + _exe, " -c -x\nThis is a .f90 file.\n")
-test.must_match('test12' + _exe, " -c -x\nThis is a .F90 file.\n")
-test.must_match('test13' + _exe, " -c -x\nThis is a .f95 file.\n")
-test.must_match('test14' + _exe, " -c -x\nThis is a .F95 file.\n")
-
 
 
-g77 = test.detect('FORTRAN', 'g77')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f77'
+g77 = test.detect_tool(fc)
 
 if g77:
 
@@ -158,7 +107,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(FORTRAN = '%(fc)s')
 f77 = foo.Dictionary('FORTRAN')
 bar = foo.Clone(FORTRAN = r'%(_python_)s wrapper.py ' + f77, FORTRANFLAGS = '-Ix')
 foo.Program(target = 'foo', source = 'foo.f')
@@ -186,7 +135,11 @@ bar.Program(target = 'bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar' + _exe)
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar' + _exe, stderr = None)
+    else:
+        test.run(arguments = 'bar' + _exe)
 
     test.run(program = test.workpath('bar'), stdout =  " bar.f\n")
 
index 5f9d02255fffc9e30cbbd41426d2db199f9fc884..d5f2cb1c8ff23435a8eedc5c288cd01d00847b04 100644 (file)
@@ -29,7 +29,6 @@ import sys
 import TestSCons
 
 _exe = TestSCons._exe
-FTN_LIB = TestSCons.fortran_lib
 prog = 'prog' + _exe
 subdir_prog = os.path.join('subdir', 'prog' + _exe)
 variant_prog = os.path.join('variant', 'prog' + _exe)
@@ -38,8 +37,9 @@ args = prog + ' ' + subdir_prog + ' ' + variant_prog
 
 test = TestSCons.TestSCons()
 
-if not test.detect('_FORTRANG', 'g77'):
-    test.skip_test('Could not find a $F77 tool; skipping test.\n')
+fc = 'f77'
+if not test.detect_tool(fc):
+    test.skip_test('Could not find a f77 tool; skipping test.\n')
     
 test.subdir('include',
             'subdir',
@@ -50,18 +50,19 @@ test.subdir('include',
 
 
 test.write('SConstruct', """
-env = Environment(FORTRANPATH = ['$FOO', '${TARGET.dir}', '${SOURCE.dir}'],
-                  LIBS = %s, FOO='include')
+env = Environment(FORTRAN = '%s',
+                  FORTRANPATH = ['$FOO', '${TARGET.dir}', '${SOURCE.dir}'],
+                  FOO='include')
 obj = env.Object(target='foobar/prog', source='subdir/prog.f')
 env.Program(target='prog', source=obj)
 SConscript('subdir/SConscript', "env")
 
 VariantDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(FORTRANPATH=[include, '#foobar', '#subdir'],
-                  LIBS = %s)
+env = Environment(FORTRAN = '%s',
+                  FORTRANPATH=[include, '#foobar', '#subdir'])
 SConscript('variant/SConscript', "env")
-""" % (FTN_LIB, FTN_LIB))
+""" % (fc, fc))
 
 test.write(['subdir', 'SConscript'],
 """
@@ -113,8 +114,12 @@ r"""
 """)
 
 
-
-test.run(arguments = args)
+import sys
+if sys.platform[:5] == 'sunos':
+    # Sun f77 always put some junk in stderr
+    test.run(arguments = args, stderr = None)
+else:
+    test.run(arguments = args)
 
 test.run(program = test.workpath(prog),
          stdout = """\
@@ -156,7 +161,11 @@ r"""
       INCLUDE 'bar.f'
 """)
 
-test.run(arguments = args)
+if sys.platform[:5] == 'sunos':
+    # Sun f77 always put some junk in stderr
+    test.run(arguments = args, stderr = None)
+else:
+    test.run(arguments = args)
 
 test.run(program = test.workpath(prog),
          stdout = """\
@@ -198,7 +207,12 @@ r"""
       PRINT *, 'include/bar.f 2'
 """)
 
-test.run(arguments = args)
+if sys.platform[:5] == 'sunos':
+    # Sun f77 always put some junk in stderr
+    test.run(arguments = args, stderr = None)
+else:
+    test.run(arguments = args)
+
 
 test.run(program = test.workpath(prog),
          stdout = """\
@@ -236,18 +250,18 @@ test.up_to_date(arguments = args)
 
 # Change FORTRANPATH and make sure we don't rebuild because of it.
 test.write('SConstruct', """
-env = Environment(FORTRANPATH = Split('inc2 include ${TARGET.dir} ${SOURCE.dir}'),
-                  LIBS = %s)
+env = Environment(FORTRAN = '%s',
+                  FORTRANPATH = Split('inc2 include ${TARGET.dir} ${SOURCE.dir}'))
 obj = env.Object(target='foobar/prog', source='subdir/prog.f')
 env.Program(target='prog', source=obj)
 SConscript('subdir/SConscript', "env")
 
 VariantDir('variant', 'subdir', 0)
 include = Dir('include')
-env = Environment(FORTRANPATH=['inc2', include, '#foobar', '#subdir'],
-                  LIBS = %s)
+env = Environment(FORTRAN = '%s',
+                  FORTRANPATH=['inc2', include, '#foobar', '#subdir'])
 SConscript('variant/SConscript', "env")
-""" % (FTN_LIB, FTN_LIB))
+""" % (fc, fc))
 
 test.up_to_date(arguments = args)
 
@@ -260,7 +274,12 @@ r"""
       INCLUDE 'bar.f'
 """)
 
-test.run(arguments = args)
+if sys.platform[:5] == 'sunos':
+    # Sun f77 always put some junk in stderr
+    test.run(arguments = args, stderr = None)
+else:
+    test.run(arguments = args)
+
 
 test.run(program = test.workpath(prog),
          stdout = """\
@@ -295,14 +314,16 @@ test.up_to_date(arguments = args)
 
 # Check that a null-string FORTRANPATH doesn't blow up.
 test.write('SConstruct', """
-env = Environment(FORTRANPATH = '', LIBS = %s)
+env = Environment(FORTRANPATH = '')
 env.Object('foo', source = 'empty.f')
-""" % FTN_LIB)
+""")
 
 test.write('empty.f', '')
 
-test.run(arguments = '.')
-
-
+if sys.platform[:5] == 'sunos':
+    # Sun f77 always put some junk in stderr
+    test.run(arguments = '.', stderr = None)
+else:
+    test.run(arguments = '.')
 
 test.pass_test()
index 3f1f7e7c2348d239f66b8423262e371f2baa7c7b..36714490ce3261ea109cc7b46e0025452b3b9bf8 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -40,7 +41,7 @@ test.write('myfortran.py', r"""
 import getopt
 import sys
 comment = '#' + sys.argv[1]
-opts, args = getopt.getopt(sys.argv[2:], 'cf:o:')
+opts, args = getopt.getopt(sys.argv[2:], 'cf:o:K:')
 for opt, arg in opts:
     if opt == '-o': out = arg
 infile = open(args[0], 'rb')
@@ -66,19 +67,6 @@ env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
 env.SharedObject(target = 'test09', source = 'test09.f77')
 env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
-env2 = Environment(SHF77 = r'%(_python_)s myfortran.py g77')
-env2.SharedObject(target = 'test21', source = 'test21.f')
-env2.SharedObject(target = 'test22', source = 'test22.F')
-env2.SharedObject(target = 'test23', source = 'test23.for')
-env2.SharedObject(target = 'test24', source = 'test24.FOR')
-env2.SharedObject(target = 'test25', source = 'test25.ftn')
-env2.SharedObject(target = 'test26', source = 'test26.FTN')
-env2.SharedObject(target = 'test27', source = 'test27.fpp')
-env2.SharedObject(target = 'test28', source = 'test28.FPP')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -91,51 +79,23 @@ test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
 test.write('test09.f77', "This is a .f77 file.\n#g77\n")
 test.write('test10.F77', "This is a .F77 file.\n#g77\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortran\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortran\n")
-
-test.write('test21.f',   "This is a .f file.\n#g77\n")
-test.write('test22.F',   "This is a .F file.\n#g77\n")
-test.write('test23.for', "This is a .for file.\n#g77\n")
-test.write('test24.FOR', "This is a .FOR file.\n#g77\n")
-test.write('test25.ftn', "This is a .ftn file.\n#g77\n")
-test.write('test26.FTN', "This is a .FTN file.\n#g77\n")
-test.write('test27.fpp', "This is a .fpp file.\n#g77\n")
-test.write('test28.FPP', "This is a .FPP file.\n#g77\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test09' + _obj, "This is a .f77 file.\n")
 
-test.must_match('test21' + _obj, "This is a .f file.\n")
-test.must_match('test22' + _obj, "This is a .F file.\n")
-test.must_match('test23' + _obj, "This is a .for file.\n")
-test.must_match('test24' + _obj, "This is a .FOR file.\n")
-test.must_match('test25' + _obj, "This is a .ftn file.\n")
-test.must_match('test26' + _obj, "This is a .FTN file.\n")
-test.must_match('test27' + _obj, "This is a .fpp file.\n")
-test.must_match('test28' + _obj, "This is a .FPP file.\n")
+fc  = 'f77'
+f77 = test.detect_tool(fc)
 
-
-
-g77 = test.detect('F77', 'g77')
-
-if g77:
+if f77:
 
     test.write("wrapper.py",
 """import os
@@ -146,9 +106,9 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = 'g2c')
+foo = Environment(SHF77 = '%(fc)s')
 shf77 = foo.Dictionary('SHF77')
-bar = foo.Clone(SHF77 = r'%(_python_)s wrapper.py ' + shf77)
+bar = foo.Clone(SHF77 = r'%(_python_)s wrapper.py ' + shf77, tools = ['default', 'f77'], F77FILESUFFIXES = ['.f'])
 foo.SharedObject(target = 'foo/foo', source = 'foo.f')
 bar.SharedObject(target = 'bar/bar', source = 'bar.f')
 """ % locals())
@@ -172,7 +132,11 @@ bar.SharedObject(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 75192dfe97b88b9c15e1a2f04ee7f2e25d15bbb4..fcb25e592c39f98ffe8b4eaa0e1ea232a9a4c27d 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -64,22 +65,6 @@ env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
 env.SharedObject(target = 'test09', source = 'test09.f77')
 env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
-env2 = Environment(SHF77COM = r'%(_python_)s myfortran.py f77 $TARGET $SOURCES',
-                   SHF77PPCOM = r'%(_python_)s myfortran.py f77pp $TARGET $SOURCES')
-env2.SharedObject(target = 'test21', source = 'test21.f')
-env2.SharedObject(target = 'test22', source = 'test22.F')
-env2.SharedObject(target = 'test23', source = 'test23.for')
-env2.SharedObject(target = 'test24', source = 'test24.FOR')
-env2.SharedObject(target = 'test25', source = 'test25.ftn')
-env2.SharedObject(target = 'test26', source = 'test26.FTN')
-env2.SharedObject(target = 'test27', source = 'test27.fpp')
-env2.SharedObject(target = 'test28', source = 'test28.FPP')
-env2.SharedObject(target = 'test29', source = 'test29.f77')
-env2.SharedObject(target = 'test30', source = 'test30.F77')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -92,48 +77,18 @@ test.write('test07.fpp', "This is a .fpp file.\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortranpp\n")
 test.write('test09.f77', "This is a .f77 file.\n#f77\n")
 test.write('test10.F77', "This is a .F77 file.\n#f77pp\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortranpp\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortranpp\n")
-
-test.write('test21.f',   "This is a .f file.\n#f77\n")
-test.write('test22.F',   "This is a .F file.\n#f77pp\n")
-test.write('test23.for', "This is a .for file.\n#f77\n")
-test.write('test24.FOR', "This is a .FOR file.\n#f77pp\n")
-test.write('test25.ftn', "This is a .ftn file.\n#f77\n")
-test.write('test26.FTN', "This is a .FTN file.\n#f77pp\n")
-test.write('test27.fpp', "This is a .fpp file.\n#f77pp\n")
-test.write('test28.FPP', "This is a .FPP file.\n#f77pp\n")
-test.write('test29.f77', "This is a .f77 file.\n#f77\n")
-test.write('test30.F77', "This is a .F77 file.\n#f77pp\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
-
-test.must_match('test21' + _obj, "This is a .f file.\n")
-test.must_match('test22' + _obj, "This is a .F file.\n")
-test.must_match('test23' + _obj, "This is a .for file.\n")
-test.must_match('test24' + _obj, "This is a .FOR file.\n")
-test.must_match('test25' + _obj, "This is a .ftn file.\n")
-test.must_match('test26' + _obj, "This is a .FTN file.\n")
-test.must_match('test27' + _obj, "This is a .fpp file.\n")
-test.must_match('test28' + _obj, "This is a .FPP file.\n")
-test.must_match('test29' + _obj, "This is a .f77 file.\n")
-test.must_match('test30' + _obj, "This is a .F77 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test09' + _obj, "This is a .f77 file.\n")
+test.must_match(obj_ + 'test10' + _obj, "This is a .F77 file.\n")
 
 test.pass_test()
index 4f08e264409bf61c2897d35f041154e8fa0111b1..7a8cbe14502933d7b0087985c9f6d1af3cc4e13f 100644 (file)
@@ -57,14 +57,6 @@ env = Environment(SHF77COM = r'%(_python_)s myfc.py f77 $TARGET $SOURCES',
                   SHF77PPCOM = r'%(_python_)s myfc.py f77pp $TARGET $SOURCES',
                   SHF77PPCOMSTR = 'Building f77pp $TARGET from $SOURCES',
                   SHOBJPREFIX='', SHOBJSUFFIX='.shobj')
-env.SharedObject(source = 'test01.f')
-env.SharedObject(source = 'test02.F')
-env.SharedObject(source = 'test03.for')
-env.SharedObject(source = 'test04.FOR')
-env.SharedObject(source = 'test05.ftn')
-env.SharedObject(source = 'test06.FTN')
-env.SharedObject(source = 'test07.fpp')
-env.SharedObject(source = 'test08.FPP')
 env.SharedObject(source = 'test09.f77')
 env.SharedObject(source = 'test10.F77')
 """ % locals())
@@ -81,26 +73,10 @@ test.write('test09.f77',        "A .f77 file.\n#f77\n")
 test.write('test10.F77',        "A .F77 file.\n#%s\n" % f77pp)
 
 test.run(stdout = test.wrap_stdout("""\
-Building f77 test01.shobj from test01.f
-Building %(f77pp)s test02.shobj from test02.F
-Building f77 test03.shobj from test03.for
-Building %(f77pp)s test04.shobj from test04.FOR
-Building f77 test05.shobj from test05.ftn
-Building %(f77pp)s test06.shobj from test06.FTN
-Building f77pp test07.shobj from test07.fpp
-Building f77pp test08.shobj from test08.FPP
 Building f77 test09.shobj from test09.f77
 Building %(f77pp)s test10.shobj from test10.F77
 """ % locals()))
 
-test.must_match('test01.shobj', "A .f file.\n")
-test.must_match('test02.shobj', "A .F file.\n")
-test.must_match('test03.shobj', "A .for file.\n")
-test.must_match('test04.shobj', "A .FOR file.\n")
-test.must_match('test05.shobj', "A .ftn file.\n")
-test.must_match('test06.shobj', "A .FTN file.\n")
-test.must_match('test07.shobj', "A .fpp file.\n")
-test.must_match('test08.shobj', "A .FPP file.\n")
 test.must_match('test09.shobj', "A .f77 file.\n")
 test.must_match('test10.shobj', "A .F77 file.\n")
 
index 5099edf72a3a1573565d594c8889ae322905a69f..4570ebce4872281922c3ac80e5a31bf360873d4e 100644 (file)
@@ -31,13 +31,8 @@ import TestSCons
 
 _python_ = TestSCons._python_
 
-if sys.platform == 'win32':
-    _obj = '.obj'
-else:
-    if string.find(sys.platform, 'irix') > -1:
-        _obj = '.o'
-    else:
-        _obj = '.os'
+_obj = TestSCons._shobj
+obj_ = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -46,11 +41,11 @@ test = TestSCons.TestSCons()
 test.write('myg77.py', r"""
 import getopt
 import sys
-opts, args = getopt.getopt(sys.argv[1:], 'co:x')
+opts, args = getopt.getopt(sys.argv[1:], 'cf:o:x')
 optstring = ''
 for opt, arg in opts:
     if opt == '-o': out = arg
-    else: optstring = optstring + ' ' + opt
+    elif opt != '-f': optstring = optstring + ' ' + opt
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 outfile.write(optstring + "\n")
@@ -63,48 +58,23 @@ sys.exit(0)
 
 
 test.write('SConstruct', """
-env = Environment(SHF77 = r'%(_python_)s myg77.py',
-                  SHF77FLAGS = '-x')
-env.SharedObject(target = 'test01', source = 'test01.f')
-env.SharedObject(target = 'test02', source = 'test02.F')
-env.SharedObject(target = 'test03', source = 'test03.for')
-env.SharedObject(target = 'test04', source = 'test04.FOR')
-env.SharedObject(target = 'test05', source = 'test05.ftn')
-env.SharedObject(target = 'test06', source = 'test06.FTN')
-env.SharedObject(target = 'test07', source = 'test07.fpp')
-env.SharedObject(target = 'test08', source = 'test08.FPP')
+env = Environment(SHF77 = r'%(_python_)s myg77.py')
+env.Append(SHF77FLAGS = '-x')
 env.SharedObject(target = 'test09', source = 'test09.f77')
 env.SharedObject(target = 'test10', source = 'test10.F77')
 """ % locals())
 
-test.write('test01.f',   "This is a .f file.\n#g77\n")
-test.write('test02.F',   "This is a .F file.\n#g77\n")
-test.write('test03.for', "This is a .for file.\n#g77\n")
-test.write('test04.FOR', "This is a .FOR file.\n#g77\n")
-test.write('test05.ftn', "This is a .ftn file.\n#g77\n")
-test.write('test06.FTN', "This is a .FTN file.\n#g77\n")
-test.write('test07.fpp', "This is a .fpp file.\n#g77\n")
-test.write('test08.FPP', "This is a .FPP file.\n#g77\n")
 test.write('test09.f77', "This is a .f77 file.\n#g77\n")
 test.write('test10.F77', "This is a .F77 file.\n#g77\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, " -c -x\nThis is a .f file.\n")
-test.must_match('test02' + _obj, " -c -x\nThis is a .F file.\n")
-test.must_match('test03' + _obj, " -c -x\nThis is a .for file.\n")
-test.must_match('test04' + _obj, " -c -x\nThis is a .FOR file.\n")
-test.must_match('test05' + _obj, " -c -x\nThis is a .ftn file.\n")
-test.must_match('test06' + _obj, " -c -x\nThis is a .FTN file.\n")
-test.must_match('test07' + _obj, " -c -x\nThis is a .fpp file.\n")
-test.must_match('test08' + _obj, " -c -x\nThis is a .FPP file.\n")
-test.must_match('test09' + _obj, " -c -x\nThis is a .f77 file.\n")
-test.must_match('test10' + _obj, " -c -x\nThis is a .F77 file.\n")
-
+test.must_match(obj_ + 'test09' + _obj, " -c -x\nThis is a .f77 file.\n")
+test.must_match(obj_ + 'test10' + _obj, " -c -x\nThis is a .F77 file.\n")
 
 
-g77 = test.detect('F77', 'g77')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f77'
+g77 = test.detect_tool(fc)
 
 if g77:
 
@@ -117,9 +87,11 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(SHF77 = '%(fc)s')
 shf77 = foo.Dictionary('SHF77')
-bar = foo.Clone(SHF77 = r'%(_python_)s wrapper.py ' + shf77, SHF77FLAGS = '-Ix')
+bar = foo.Clone(SHF77 = r'%(_python_)s wrapper.py ' + shf77,
+                tools = ["default", 'f77'], F77FILESUFFIXES = [".f"])
+bar.Append(SHF77FLAGS = '-Ix')
 foo.SharedLibrary(target = 'foo/foo', source = 'foo.f')
 bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 """ % locals())
@@ -143,7 +115,11 @@ bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 36d0a318da3a2b7aa701a8c4400c84008ea43d0a..a045acf233fa536478de9d76d634abcc6c1b1c57 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -40,7 +41,7 @@ test.write('myfortran.py', r"""
 import getopt
 import sys
 comment = '#' + sys.argv[1]
-opts, args = getopt.getopt(sys.argv[2:], 'cf:o:')
+opts, args = getopt.getopt(sys.argv[2:], 'cf:o:K:')
 for opt, arg in opts:
     if opt == '-o': out = arg
 infile = open(args[0], 'rb')
@@ -64,12 +65,8 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
 env.SharedObject(target = 'test11', source = 'test11.f90')
 env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -80,33 +77,25 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
 test.write('test11.f90', "This is a .f90 file.\n#g90\n")
 test.write('test12.F90', "This is a .F90 file.\n#g90\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test11' + _obj, "This is a .f90 file.\n")
+test.must_match(obj_ + 'test12' + _obj, "This is a .F90 file.\n")
 
 
-
-g90 = test.detect('F90', 'g90')
+fc = 'f90'
+g90 = test.detect_tool(fc)
 
 if g90:
 
@@ -119,23 +108,23 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = 'g2c')
+foo = Environment(SHF90 = '%(fc)s')
 shf90 = foo.Dictionary('SHF90')
 bar = foo.Clone(SHF90 = r'%(_python_)s wrapper.py ' + shf90)
-foo.SharedObject(target = 'foo/foo', source = 'foo.f')
-bar.SharedObject(target = 'bar/bar', source = 'bar.f')
+foo.SharedObject(target = 'foo/foo', source = 'foo.f90')
+bar.SharedObject(target = 'bar/bar', source = 'bar.f90')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f90', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f90'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f90', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f90'
       STOP
       END
 """)
@@ -145,7 +134,11 @@ bar.SharedObject(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 13d9978af1d8d3a39a6a570af2465f15cedc1c81..3c36f04062f5f0937c5f6f0035249509c388c475 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -62,12 +63,8 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
 env.SharedObject(target = 'test11', source = 'test11.f90')
 env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 env2 = Environment(SHF90COM = r'%(_python_)s myfortran.py f90 $TARGET $SOURCES',
                    SHF90PPCOM = r'%(_python_)s myfortran.py f90pp $TARGET $SOURCES')
 env2.SharedObject(target = 'test21', source = 'test21.f90')
@@ -82,34 +79,26 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortranpp\n")
 test.write('test11.f90', "This is a .f90 file.\n#f90\n")
 test.write('test12.F90', "This is a .F90 file.\n#f90pp\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortranpp\n")
 
 test.write('test21.f90', "This is a .f90 file.\n#f90\n")
 test.write('test22.F90', "This is a .F90 file.\n#f90pp\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
-
-test.must_match('test21' + _obj, "This is a .f90 file.\n")
-test.must_match('test22' + _obj, "This is a .F90 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test11' + _obj, "This is a .f90 file.\n")
+test.must_match(obj_ + 'test12' + _obj, "This is a .F90 file.\n")
+
+test.must_match(obj_ + 'test21' + _obj, "This is a .f90 file.\n")
+test.must_match(obj_ + 'test22' + _obj, "This is a .F90 file.\n")
 
 test.pass_test()
index daf6366049b763f89b686c387f9d505504011684..d98709c28a61d0a7057ea841031d1bfe525e5d14 100644 (file)
@@ -31,13 +31,8 @@ import TestSCons
 
 _python_ = TestSCons._python_
 
-if sys.platform == 'win32':
-    _obj = '.obj'
-else:
-    if string.find(sys.platform, 'irix') > -1:
-        _obj = '.o'
-    else:
-        _obj = '.os'
+_obj = TestSCons._shobj
+obj_ = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -47,11 +42,11 @@ test.write('myfortran.py', r"""
 import getopt
 import sys
 comment = '#' + sys.argv[1]
-opts, args = getopt.getopt(sys.argv[2:], 'co:xy')
+opts, args = getopt.getopt(sys.argv[2:], 'cf:o:xy')
 optstring = ''
 for opt, arg in opts:
     if opt == '-o': out = arg
-    else: optstring = optstring + ' ' + opt
+    elif opt != '-f': optstring = optstring + ' ' + opt
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 outfile.write(optstring + "\n")
@@ -65,9 +60,9 @@ sys.exit(0)
 
 test.write('SConstruct', """
 env = Environment(SHF90 = r'%(_python_)s myfortran.py g90',
-                  SHF90FLAGS = '-x',
-                  SHFORTRAN = r'%(_python_)s myfortran.py fortran',
-                  SHFORTRANFLAGS = '-y')
+                  SHFORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Append(SHF90FLAGS = '-x',
+           SHFORTRANFLAGS = '-y')
 env.SharedObject(target = 'test01', source = 'test01.f')
 env.SharedObject(target = 'test02', source = 'test02.F')
 env.SharedObject(target = 'test03', source = 'test03.for')
@@ -76,12 +71,8 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
 env.SharedObject(target = 'test11', source = 'test11.f90')
 env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -92,34 +83,24 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
 test.write('test11.f90', "This is a .f90 file.\n#g90\n")
 test.write('test12.F90', "This is a .F90 file.\n#g90\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, " -c -y\nThis is a .f file.\n")
-test.must_match('test02' + _obj, " -c -y\nThis is a .F file.\n")
-test.must_match('test03' + _obj, " -c -y\nThis is a .for file.\n")
-test.must_match('test04' + _obj, " -c -y\nThis is a .FOR file.\n")
-test.must_match('test05' + _obj, " -c -y\nThis is a .ftn file.\n")
-test.must_match('test06' + _obj, " -c -y\nThis is a .FTN file.\n")
-test.must_match('test07' + _obj, " -c -y\nThis is a .fpp file.\n")
-test.must_match('test08' + _obj, " -c -y\nThis is a .FPP file.\n")
-test.must_match('test09' + _obj, " -c -y\nThis is a .f77 file.\n")
-test.must_match('test10' + _obj, " -c -y\nThis is a .F77 file.\n")
-test.must_match('test11' + _obj, " -c -x\nThis is a .f90 file.\n")
-test.must_match('test12' + _obj, " -c -x\nThis is a .F90 file.\n")
-test.must_match('test13' + _obj, " -c -y\nThis is a .f95 file.\n")
-test.must_match('test14' + _obj, " -c -y\nThis is a .F95 file.\n")
-
+test.must_match(obj_ + 'test01' + _obj, " -c -y\nThis is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, " -c -y\nThis is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, " -c -y\nThis is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, " -c -y\nThis is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, " -c -y\nThis is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, " -c -y\nThis is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, " -c -y\nThis is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, " -c -y\nThis is a .FPP file.\n")
+test.must_match(obj_ + 'test11' + _obj, " -c -x\nThis is a .f90 file.\n")
+test.must_match(obj_ + 'test12' + _obj, " -c -x\nThis is a .F90 file.\n")
 
-
-g90 = test.detect('F90', 'g90')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f90'
+g90 = test.detect_tool(fc)
 
 if g90:
 
@@ -132,23 +113,24 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(SHF90 = '%(fc)s')
 shf90 = foo.Dictionary('SHF90')
-bar = foo.Clone(SHF90 = r'%(_python_)s wrapper.py ' + shf90, SHF90FLAGS = '-Ix')
-foo.SharedLibrary(target = 'foo/foo', source = 'foo.f')
-bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
+bar = foo.Clone(SHF90 = r'%(_python_)s wrapper.py ' + shf90)
+bar.Append(SHF90FLAGS = '-Ix')
+foo.SharedLibrary(target = 'foo/foo', source = 'foo.f90')
+bar.SharedLibrary(target = 'bar/bar', source = 'bar.f90')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f90', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f90'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f90', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f90'
       STOP
       END
 """)
@@ -158,7 +140,11 @@ bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index b9db6bad3a62ed7ebee361c977faacd9673ecfee..bf338e740fc7d10443f2bb75f74ab6c17e5e5593 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -40,7 +41,7 @@ test.write('myfortran.py', r"""
 import getopt
 import sys
 comment = '#' + sys.argv[1]
-opts, args = getopt.getopt(sys.argv[2:], 'cf:o:')
+opts, args = getopt.getopt(sys.argv[2:], 'cf:o:K:')
 for opt, arg in opts:
     if opt == '-o': out = arg
 infile = open(args[0], 'rb')
@@ -64,10 +65,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
 env.SharedObject(target = 'test13', source = 'test13.f95')
 env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
@@ -80,33 +77,24 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortran\n")
 test.write('test13.f95', "This is a .f95 file.\n#g95\n")
 test.write('test14.F95', "This is a .F95 file.\n#g95\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test13' + _obj, "This is a .f95 file.\n")
+test.must_match(obj_ + 'test14' + _obj, "This is a .F95 file.\n")
 
-
-
-g95 = test.detect('F95', 'g95')
+fc = 'f95'
+g95 = test.detect_tool(fc)
 
 if g95:
 
@@ -119,23 +107,23 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = 'g2c')
+foo = Environment(SHF95 = '%(fc)s')
 shf95 = foo.Dictionary('SHF95')
 bar = foo.Clone(SHF95 = r'%(_python_)s wrapper.py ' + shf95)
-foo.SharedObject(target = 'foo/foo', source = 'foo.f')
-bar.SharedObject(target = 'bar/bar', source = 'bar.f')
+foo.SharedObject(target = 'foo/foo', source = 'foo.f95')
+bar.SharedObject(target = 'bar/bar', source = 'bar.f95')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f95', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f95'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f95', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f95'
       STOP
       END
 """)
@@ -145,7 +133,11 @@ bar.SharedObject(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index b11933a07bacf3b726a515feb35c8d5faf1662f2..e02c26460b466faa1f5eb48e8a7922fad01a5f7c 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -62,10 +63,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
 env.SharedObject(target = 'test13', source = 'test13.f95')
 env.SharedObject(target = 'test14', source = 'test14.F95')
 env2 = Environment(SHF95COM = r'%(_python_)s myfortran.py f95 $TARGET $SOURCES',
@@ -82,10 +79,6 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortranpp\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortranpp\n")
 test.write('test13.f95', "This is a .f95 file.\n#f95\n")
 test.write('test14.F95', "This is a .F95 file.\n#f95pp\n")
 
@@ -94,22 +87,18 @@ test.write('test22.F95', "This is a .F95 file.\n#f95pp\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
-
-test.must_match('test21' + _obj, "This is a .f95 file.\n")
-test.must_match('test22' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
+test.must_match(obj_ + 'test13' + _obj, "This is a .f95 file.\n")
+test.must_match(obj_ + 'test14' + _obj, "This is a .F95 file.\n")
+
+test.must_match(obj_ + 'test21' + _obj, "This is a .f95 file.\n")
+test.must_match(obj_ + 'test22' + _obj, "This is a .F95 file.\n")
 
 test.pass_test()
index 09f9b9812e91ade3dd27e125c9aaa16b67ce7842..9da4afc962a364812b9044f897965be2f1394108 100644 (file)
@@ -31,13 +31,8 @@ import TestSCons
 
 _python_ = TestSCons._python_
 
-if sys.platform == 'win32':
-    _obj = '.obj'
-else:
-    if string.find(sys.platform, 'irix') > -1:
-        _obj = '.o'
-    else:
-        _obj = '.os'
+_obj = TestSCons._shobj
+obj_ = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -47,11 +42,11 @@ test.write('myfortran.py', r"""
 import getopt
 import sys
 comment = '#' + sys.argv[1]
-opts, args = getopt.getopt(sys.argv[2:], 'co:xy')
+opts, args = getopt.getopt(sys.argv[2:], 'cf:o:xy')
 optstring = ''
 for opt, arg in opts:
     if opt == '-o': out = arg
-    else: optstring = optstring + ' ' + opt
+    elif opt != '-f': optstring = optstring + ' ' + opt
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 outfile.write(optstring + "\n")
@@ -65,9 +60,9 @@ sys.exit(0)
 
 test.write('SConstruct', """
 env = Environment(SHF95 = r'%(_python_)s myfortran.py g95',
-                  SHF95FLAGS = '-x',
-                  SHFORTRAN = r'%(_python_)s myfortran.py fortran',
-                  SHFORTRANFLAGS = '-y')
+                  SHFORTRAN = r'%(_python_)s myfortran.py fortran')
+env.Append(SHF95FLAGS = '-x',
+           SHFORTRANFLAGS = '-y')
 env.SharedObject(target = 'test01', source = 'test01.f')
 env.SharedObject(target = 'test02', source = 'test02.F')
 env.SharedObject(target = 'test03', source = 'test03.for')
@@ -76,10 +71,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
 env.SharedObject(target = 'test13', source = 'test13.f95')
 env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
@@ -92,34 +83,26 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortran\n")
 test.write('test13.f95', "This is a .f95 file.\n#g95\n")
 test.write('test14.F95', "This is a .F95 file.\n#g95\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, " -c -y\nThis is a .f file.\n")
-test.must_match('test02' + _obj, " -c -y\nThis is a .F file.\n")
-test.must_match('test03' + _obj, " -c -y\nThis is a .for file.\n")
-test.must_match('test04' + _obj, " -c -y\nThis is a .FOR file.\n")
-test.must_match('test05' + _obj, " -c -y\nThis is a .ftn file.\n")
-test.must_match('test06' + _obj, " -c -y\nThis is a .FTN file.\n")
-test.must_match('test07' + _obj, " -c -y\nThis is a .fpp file.\n")
-test.must_match('test08' + _obj, " -c -y\nThis is a .FPP file.\n")
-test.must_match('test09' + _obj, " -c -y\nThis is a .f77 file.\n")
-test.must_match('test10' + _obj, " -c -y\nThis is a .F77 file.\n")
-test.must_match('test11' + _obj, " -c -y\nThis is a .f90 file.\n")
-test.must_match('test12' + _obj, " -c -y\nThis is a .F90 file.\n")
-test.must_match('test13' + _obj, " -c -x\nThis is a .f95 file.\n")
-test.must_match('test14' + _obj, " -c -x\nThis is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, " -c -y\nThis is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, " -c -y\nThis is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, " -c -y\nThis is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, " -c -y\nThis is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, " -c -y\nThis is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, " -c -y\nThis is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, " -c -y\nThis is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, " -c -y\nThis is a .FPP file.\n")
+test.must_match(obj_ + 'test13' + _obj, " -c -x\nThis is a .f95 file.\n")
+test.must_match(obj_ + 'test14' + _obj, " -c -x\nThis is a .F95 file.\n")
 
 
 
-g95 = test.detect('F95', 'g95')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f95'
+g95 = test.detect_tool(fc)
 
 if g95:
 
@@ -132,23 +115,24 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(SHF95 = '%(fc)s')
 shf95 = foo.Dictionary('SHF95')
-bar = foo.Clone(SHF95 = r'%(_python_)s wrapper.py ' + shf95, SHF95FLAGS = '-Ix')
-foo.SharedLibrary(target = 'foo/foo', source = 'foo.f')
-bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
+bar = foo.Clone(SHF95 = r'%(_python_)s wrapper.py ' + shf95)
+bar.Append(SHF95FLAGS = '-Ix')
+foo.SharedLibrary(target = 'foo/foo', source = 'foo.f95')
+bar.SharedLibrary(target = 'bar/bar', source = 'bar.f95')
 """ % locals())
 
-    test.write('foo.f', r"""
+    test.write('foo.f95', r"""
       PROGRAM FOO
-      PRINT *,'foo.f'
+      PRINT *,'foo.f95'
       STOP
       END
 """)
 
-    test.write('bar.f', r"""
+    test.write('bar.f95', r"""
       PROGRAM BAR
-      PRINT *,'bar.f'
+      PRINT *,'bar.f95'
       STOP
       END
 """)
@@ -158,7 +142,11 @@ bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 5b9cfc6cb369b84d95eb52219f72116c6e537895..ad575ddab4b8b9691f7fb1d5134b9ad3b9816eed 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -39,7 +40,7 @@ test = TestSCons.TestSCons()
 test.write('myfortran.py', r"""
 import getopt
 import sys
-opts, args = getopt.getopt(sys.argv[1:], 'cf:o:')
+opts, args = getopt.getopt(sys.argv[1:], 'cf:o:K:')
 for opt, arg in opts:
     if opt == '-o': out = arg
 infile = open(args[0], 'rb')
@@ -62,12 +63,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -78,33 +73,22 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortran\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
 
 
 
-fortran = test.detect('FORTRAN', 'g77')
+fc = 'f77'
+fortran = test.detect_tool(fc)
 
 if fortran:
 
@@ -117,7 +101,7 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = 'g2c')
+foo = Environment(SHFORTRAN = '%(fc)s')
 shfortran = foo.Dictionary('SHFORTRAN')
 bar = foo.Clone(SHFORTRAN = r'%(_python_)s wrapper.py ' + shfortran)
 foo.SharedObject(target = 'foo/foo', source = 'foo.f')
@@ -141,9 +125,13 @@ bar.SharedObject(target = 'bar/bar', source = 'bar.f')
 
     test.run(arguments = 'foo', stderr = None)
 
-    test.must_exist('wrapper.out')
+    test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
index 21942cfa01c5c79a9cf681969c87738b10859679..3aca02cde5595a08ab498adeefc3227908c61fc1 100644 (file)
@@ -31,6 +31,7 @@ import TestSCons
 
 _python_ = TestSCons._python_
 _obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -60,12 +61,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -76,28 +71,16 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortranpp\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortranpp\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortranpp\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortranpp\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortranpp\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortranpp\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, "This is a .f file.\n")
-test.must_match('test02' + _obj, "This is a .F file.\n")
-test.must_match('test03' + _obj, "This is a .for file.\n")
-test.must_match('test04' + _obj, "This is a .FOR file.\n")
-test.must_match('test05' + _obj, "This is a .ftn file.\n")
-test.must_match('test06' + _obj, "This is a .FTN file.\n")
-test.must_match('test07' + _obj, "This is a .fpp file.\n")
-test.must_match('test08' + _obj, "This is a .FPP file.\n")
-test.must_match('test09' + _obj, "This is a .f77 file.\n")
-test.must_match('test10' + _obj, "This is a .F77 file.\n")
-test.must_match('test11' + _obj, "This is a .f90 file.\n")
-test.must_match('test12' + _obj, "This is a .F90 file.\n")
-test.must_match('test13' + _obj, "This is a .f95 file.\n")
-test.must_match('test14' + _obj, "This is a .F95 file.\n")
+test.must_match(obj_ + 'test01' + _obj, "This is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, "This is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, "This is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, "This is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, "This is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, "This is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, "This is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, "This is a .FPP file.\n")
 
 test.pass_test()
index 13e76e3acfe54cdc79591521e1db5becb84108e6..e0e17b5c932a9c680a37301b9ab5d472da1b53e1 100644 (file)
@@ -65,12 +65,6 @@ env.SharedObject(source = 'test05.ftn')
 env.SharedObject(source = 'test06.FTN')
 env.SharedObject(source = 'test07.fpp')
 env.SharedObject(source = 'test08.FPP')
-env.SharedObject(source = 'test09.f77')
-env.SharedObject(source = 'test10.F77')
-env.SharedObject(source = 'test11.f90')
-env.SharedObject(source = 'test12.F90')
-env.SharedObject(source = 'test13.f95')
-env.SharedObject(source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',          "A .f file.\n#fortran\n")
@@ -81,12 +75,6 @@ test.write('test05.ftn',        "A .ftn file.\n#fortran\n")
 test.write('test06.FTN',        "A .FTN file.\n#%s\n" % fortranpp)
 test.write('test07.fpp',        "A .fpp file.\n#fortranpp\n")
 test.write('test08.FPP',        "A .FPP file.\n#fortranpp\n")
-test.write('test09.f77',        "A .f77 file.\n#fortran\n")
-test.write('test10.F77',        "A .F77 file.\n#%s\n" % fortranpp)
-test.write('test11.f90',        "A .f90 file.\n#fortran\n")
-test.write('test12.F90',        "A .F90 file.\n#%s\n" % fortranpp)
-test.write('test13.f95',        "A .f95 file.\n#fortran\n")
-test.write('test14.F95',        "A .F95 file.\n#%s\n" % fortranpp)
 
 test.run(stdout = test.wrap_stdout("""\
 Building fortran test01.shobj from test01.f
@@ -97,12 +85,6 @@ Building fortran test05.shobj from test05.ftn
 Building %(fortranpp)s test06.shobj from test06.FTN
 Building fortranpp test07.shobj from test07.fpp
 Building fortranpp test08.shobj from test08.FPP
-Building fortran test09.shobj from test09.f77
-Building %(fortranpp)s test10.shobj from test10.F77
-Building fortran test11.shobj from test11.f90
-Building %(fortranpp)s test12.shobj from test12.F90
-Building fortran test13.shobj from test13.f95
-Building %(fortranpp)s test14.shobj from test14.F95
 """ % locals()))
 
 test.must_match('test01.shobj', "A .f file.\n")
@@ -113,11 +95,5 @@ test.must_match('test05.shobj', "A .ftn file.\n")
 test.must_match('test06.shobj', "A .FTN file.\n")
 test.must_match('test07.shobj', "A .fpp file.\n")
 test.must_match('test08.shobj', "A .FPP file.\n")
-test.must_match('test09.shobj', "A .f77 file.\n")
-test.must_match('test10.shobj', "A .F77 file.\n")
-test.must_match('test11.shobj', "A .f90 file.\n")
-test.must_match('test12.shobj', "A .F90 file.\n")
-test.must_match('test13.shobj', "A .f95 file.\n")
-test.must_match('test14.shobj', "A .F95 file.\n")
 
 test.pass_test()
index ec74061f6540b1de9f3b820d7e8d00316e86b157..1369cdd1c3108bf40e22d994f2ae96244add9dff 100644 (file)
@@ -30,14 +30,8 @@ import sys
 import TestSCons
 
 _python_ = TestSCons._python_
-
-if sys.platform == 'win32':
-    _obj = '.obj'
-else:
-    if string.find(sys.platform, 'irix') > -1:
-        _obj = '.o'
-    else:
-        _obj = '.os'
+_obj   = TestSCons._shobj
+obj_   = TestSCons.shobj_
 
 test = TestSCons.TestSCons()
 
@@ -46,11 +40,11 @@ test = TestSCons.TestSCons()
 test.write('myfortran.py', r"""
 import getopt
 import sys
-opts, args = getopt.getopt(sys.argv[1:], 'co:x')
+opts, args = getopt.getopt(sys.argv[1:], 'cf:o:x')
 optstring = ''
 for opt, arg in opts:
     if opt == '-o': out = arg
-    else: optstring = optstring + ' ' + opt
+    elif opt != '-f': optstring = optstring + ' ' + opt
 infile = open(args[0], 'rb')
 outfile = open(out, 'wb')
 outfile.write(optstring + "\n")
@@ -63,8 +57,8 @@ sys.exit(0)
 
 
 test.write('SConstruct', """
-env = Environment(SHFORTRAN = r'%(_python_)s myfortran.py',
-                  SHFORTRANFLAGS = '-x')
+env = Environment(SHFORTRAN = r'%(_python_)s myfortran.py')
+env.Append(SHFORTRANFLAGS = '-x')
 env.SharedObject(target = 'test01', source = 'test01.f')
 env.SharedObject(target = 'test02', source = 'test02.F')
 env.SharedObject(target = 'test03', source = 'test03.for')
@@ -73,12 +67,6 @@ env.SharedObject(target = 'test05', source = 'test05.ftn')
 env.SharedObject(target = 'test06', source = 'test06.FTN')
 env.SharedObject(target = 'test07', source = 'test07.fpp')
 env.SharedObject(target = 'test08', source = 'test08.FPP')
-env.SharedObject(target = 'test09', source = 'test09.f77')
-env.SharedObject(target = 'test10', source = 'test10.F77')
-env.SharedObject(target = 'test11', source = 'test11.f90')
-env.SharedObject(target = 'test12', source = 'test12.F90')
-env.SharedObject(target = 'test13', source = 'test13.f95')
-env.SharedObject(target = 'test14', source = 'test14.F95')
 """ % locals())
 
 test.write('test01.f',   "This is a .f file.\n#fortran\n")
@@ -89,34 +77,20 @@ test.write('test05.ftn', "This is a .ftn file.\n#fortran\n")
 test.write('test06.FTN', "This is a .FTN file.\n#fortran\n")
 test.write('test07.fpp', "This is a .fpp file.\n#fortran\n")
 test.write('test08.FPP', "This is a .FPP file.\n#fortran\n")
-test.write('test09.f77', "This is a .f77 file.\n#fortran\n")
-test.write('test10.F77', "This is a .F77 file.\n#fortran\n")
-test.write('test11.f90', "This is a .f90 file.\n#fortran\n")
-test.write('test12.F90', "This is a .F90 file.\n#fortran\n")
-test.write('test13.f95', "This is a .f95 file.\n#fortran\n")
-test.write('test14.F95', "This is a .F95 file.\n#fortran\n")
 
 test.run(arguments = '.', stderr = None)
 
-test.must_match('test01' + _obj, " -c -x\nThis is a .f file.\n")
-test.must_match('test02' + _obj, " -c -x\nThis is a .F file.\n")
-test.must_match('test03' + _obj, " -c -x\nThis is a .for file.\n")
-test.must_match('test04' + _obj, " -c -x\nThis is a .FOR file.\n")
-test.must_match('test05' + _obj, " -c -x\nThis is a .ftn file.\n")
-test.must_match('test06' + _obj, " -c -x\nThis is a .FTN file.\n")
-test.must_match('test07' + _obj, " -c -x\nThis is a .fpp file.\n")
-test.must_match('test08' + _obj, " -c -x\nThis is a .FPP file.\n")
-test.must_match('test09' + _obj, " -c -x\nThis is a .f77 file.\n")
-test.must_match('test10' + _obj, " -c -x\nThis is a .F77 file.\n")
-test.must_match('test11' + _obj, " -c -x\nThis is a .f90 file.\n")
-test.must_match('test12' + _obj, " -c -x\nThis is a .F90 file.\n")
-test.must_match('test13' + _obj, " -c -x\nThis is a .f95 file.\n")
-test.must_match('test14' + _obj, " -c -x\nThis is a .F95 file.\n")
-
+test.must_match(obj_ + 'test01' + _obj, " -c -x\nThis is a .f file.\n")
+test.must_match(obj_ + 'test02' + _obj, " -c -x\nThis is a .F file.\n")
+test.must_match(obj_ + 'test03' + _obj, " -c -x\nThis is a .for file.\n")
+test.must_match(obj_ + 'test04' + _obj, " -c -x\nThis is a .FOR file.\n")
+test.must_match(obj_ + 'test05' + _obj, " -c -x\nThis is a .ftn file.\n")
+test.must_match(obj_ + 'test06' + _obj, " -c -x\nThis is a .FTN file.\n")
+test.must_match(obj_ + 'test07' + _obj, " -c -x\nThis is a .fpp file.\n")
+test.must_match(obj_ + 'test08' + _obj, " -c -x\nThis is a .FPP file.\n")
 
-
-fortran = test.detect('FORTRAN', 'g77')
-FTN_LIB = TestSCons.fortran_lib
+fc = 'f77'
+fortran = test.detect_tool(fc)
 
 if fortran:
 
@@ -129,10 +103,10 @@ os.system(string.join(sys.argv[1:], " "))
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment(LIBS = %(FTN_LIB)s)
+foo = Environment(SHFORTRAN = '%(fc)s')
 shfortran = foo.Dictionary('SHFORTRAN')
-bar = foo.Clone(SHFORTRAN = r'%(_python_)s wrapper.py ' + shfortran,
-                SHFORTRANFLAGS = '-Ix')
+bar = foo.Clone(SHFORTRAN = r'%(_python_)s wrapper.py ' + shfortran)
+bar.Append(SHFORTRANFLAGS = '-Ix')
 foo.SharedLibrary(target = 'foo/foo', source = 'foo.f')
 bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 """ % locals())
@@ -156,7 +130,11 @@ bar.SharedLibrary(target = 'bar/bar', source = 'bar.f')
 
     test.must_not_exist('wrapper.out')
 
-    test.run(arguments = 'bar')
+    import sys
+    if sys.platform[:5] == 'sunos':
+        test.run(arguments = 'bar', stderr = None)
+    else:
+        test.run(arguments = 'bar')
 
     test.must_match('wrapper.out', "wrapper.py\n")
 
diff --git a/test/Fortran/common.py b/test/Fortran/common.py
new file mode 100644 (file)
index 0000000..0d991b6
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+
+"""This module implements common code to all fortran tests."""
+
+import sys
+
+def write_fake_link(t):
+    """Writes a mylink.py script to remove the link step for 'fake' (e.g.
+    non-compiled) tests."""
+    if sys.platform == 'win32':
+        t.write('mylink.py', r"""
+import string
+import sys
+args = sys.argv[1:]
+while args:
+    a = args[0]
+    if a[0] != '/':
+        break
+    args = args[1:]
+    if string.lower(a[:5]) == '/out:': out = a[5:]
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:5] != '#link':
+        outfile.write(l)
+sys.exit(0)
+    """)
+    else:
+        t.write('mylink.py', r"""
+import getopt
+import sys
+opts, args = getopt.getopt(sys.argv[1:], 'o:')
+for opt, arg in opts:
+    if opt == '-o': out = arg
+infile = open(args[0], 'rb')
+outfile = open(out, 'wb')
+for l in infile.readlines():
+    if l[:5] != '#link':
+        outfile.write(l)
+sys.exit(0)
+    """)
index 88d08880320da367189b1caaf2fae7f502ea3471..35f3c6fd7503c5d24ad86c7f03bcc30faddc1af4 100644 (file)
@@ -75,7 +75,6 @@ sys.exit(0)
 test.write('SConstruct', """\
 env = Environment(FORTRANMODDIRPREFIX = '-M',
                   FORTRANMODDIR = 'modules',
-                  F90 = r'%(_python_)s myfortran.py f90',
                   FORTRAN = r'%(_python_)s myfortran.py fortran',
                   AR = 'myar.py',
                   ARCOM = r'%(_python_)s $AR $TARGET $SOURCES',
@@ -89,13 +88,13 @@ test.write(['subdir', 'SConscript'], """\
 Import('env')
 
 env['FORTRANMODDIR'] = 'build'
-sources = ['src/modfile.f90']
+sources = ['src/modfile.f']
 objs = env.Object(sources)
 Return("objs")
 """)
 
-test.write(['subdir', 'src', 'modfile.f90'], """\
-#f90 comment
+test.write(['subdir', 'src', 'modfile.f'], """\
+#fortran comment
 module somemodule
 
 integer :: nothing