Add Fortran COMSTR variables for output customizability.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 20 Nov 2004 05:14:15 +0000 (05:14 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 20 Nov 2004 05:14:15 +0000 (05:14 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1168 fdb21ef1-2011-0410-befe-b5e4ea1792b1

16 files changed:
doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Builder.py
src/engine/SCons/Environment.py
src/engine/SCons/Tool/f77.py
src/engine/SCons/Tool/f90.py
src/engine/SCons/Tool/f95.py
src/engine/SCons/Tool/fortran.py
test/Fortran/F77COMSTR.py [new file with mode: 0644]
test/Fortran/F90COMSTR.py [new file with mode: 0644]
test/Fortran/F95COMSTR.py [new file with mode: 0644]
test/Fortran/FORTRANCOMSTR.py [new file with mode: 0644]
test/Fortran/SHF77COMSTR.py [new file with mode: 0644]
test/Fortran/SHF90COMSTR.py [new file with mode: 0644]
test/Fortran/SHF95COMSTR.py [new file with mode: 0644]
test/Fortran/SHFORTRANCOMSTR.py [new file with mode: 0644]

index 035af89594d48bebcbbc2c5459aa35f1f894ea6d..08887fae97547471f85377dc0e81e782426a83fd 100644 (file)
@@ -4933,6 +4933,11 @@ You should normally set the $FORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP F77COMSTR
+The string displayed when a Fortran 77 source file
+is compiled to an object file.
+If this is not set, then $F77COM or $FORTRANCOM (the command line) is displayed.
+
 .IP F77FLAGS
 General user-specified options that are passed to the Fortran 77 compiler.
 Note that this variable does
@@ -5038,6 +5043,12 @@ You should normally set the $FORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP F90COMSTR
+The string displayed when a Fortran 90 source file
+is compiled to an object file.
+If this is not set, then $F90COM or $FORTRANCOM
+(the command line) is displayed.
+
 .IP F90FLAGS
 General user-specified options that are passed to the Fortran 90 compiler.
 Note that this variable does
@@ -5143,6 +5154,12 @@ You should normally set the $FORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP F95COMSTR
+The string displayed when a Fortran 95 source file
+is compiled to an object file.
+If this is not set, then $F95COM or $FORTRANCOM
+(the command line) is displayed.
+
 .IP F95FLAGS
 General user-specified options that are passed to the Fortran 95 compiler.
 Note that this variable does
@@ -5243,6 +5260,12 @@ in the $FORTRANFLAGS, $CPPFLAGS, $_CPPDEFFLAGS,
 $_FORTRANMODFLAG, and $_FORTRANINCFLAGS construction variables
 are included on this command line.
 
+.IP FORTRANCOMSTR
+The string displayed when a Fortran source file
+is compiled to an object file.
+If this is not set, then $FORTRANCOM
+(the command line) is displayed.
+
 .IP FORTRANFLAGS
 General user-specified options that are passed to the Fortran compiler.
 Note that this variable does
@@ -6354,6 +6377,12 @@ You should normally set the $SHFORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP SHF77COMSTR
+The string displayed when a Fortran 77 source file
+is compiled to a shared-library object file.
+If this is not set, then $SHF77COM or $SHFORTRANCOM
+(the command line) is displayed.
+
 .IP SHF77FLAGS
 Options that are passed to the Fortran 77 compiler
 to generated shared-library objects.
@@ -6393,6 +6422,12 @@ You should normally set the $SHFORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP SHF90COMSTR
+The string displayed when a Fortran 90 source file
+is compiled to a shared-library object file.
+If this is not set, then $SHF90COM or $SHFORTRANCOM
+(the command line) is displayed.
+
 .IP SHF90FLAGS
 Options that are passed to the Fortran 90 compiler
 to generated shared-library objects.
@@ -6432,6 +6467,12 @@ You should normally set the $SHFORTRANCOM variable,
 which specifies the default command line
 for all Fortran versions.
 
+.IP SHF95COMSTR
+The string displayed when a Fortran 95 source file
+is compiled to a shared-library object file.
+If this is not set, then $SHF95COM or $SHFORTRANCOM
+(the command line) is displayed.
+
 .IP SHF95FLAGS
 Options that are passed to the Fortran 95 compiler
 to generated shared-library objects.
@@ -6461,6 +6502,12 @@ The default Fortran compiler used for generating shared-library objects.
 The command line used to compile a Fortran source file
 to a shared-library object file.
 
+.IP FORTRANCOMSTR
+The string displayed when a Fortran source file
+is compiled to a shared-library object file.
+If this is not set, then $SHFORTRANCOM
+(the command line) is displayed.
+
 .IP SHFORTRANFLAGS
 Options that are passed to the Fortran compiler
 to generate shared-library objects.
index 5a5c466277d1edab451b07c77782457b95b9d24b..80f4ed7d0da9448b763de41096c7c0edafbdc3ab 100644 (file)
@@ -130,10 +130,12 @@ RELEASE 0.97 - XXX
   - Fix expansion of env.Command() overrides within target and
     source file names.
 
-  - Support easier configurability of what's displayed by various default
-    actions by adding new construction variables:  $ARCOMSTR, $ASCOMSTR,
-    $ASPPCOMSTR, $CCCOMSTR, $CXXCOMSTR, $LEXCOMSTR, $LINKCOMSTR,
-    $SHCCCOMSTR, $SHCXXCOMSTR, $SHLINKCOMSTR and $YACCCOMSTR.
+  - Support easier customization of what's displayed by various
+    default actions by adding new construction variables:  $ARCOMSTR,
+    $ASCOMSTR, $ASPPCOMSTR, $CCCOMSTR, $CXXCOMSTR, $F77COMSTR,
+    $F90COMSTR, $F95COMSTR, $FORTRANCOMSTR, $LEXCOMSTR, $LINKCOMSTR,
+    $SHCCCOMSTR, $SHCXXCOMSTR, $SHF77COMSTR, $SHF90COMSTR, $SHF95COMSTR,
+    $SHFORTRANCOMSTR, $SHLINKCOMSTR and $YACCCOMSTR.
 
   From Wayne Lee:
 
@@ -298,6 +300,9 @@ RELEASE 0.97 - XXX
 
   - Improve the performance of the --debug={tree,dtree} options.
 
+  - Add --debug=objects logging of creation of OverrideWarner,
+    EnvironmentCopy and EnvironmentOverride objects.
+
   From Levi Stephen:
 
   - Allow $JARCHDIR to be expanded to other construction variables.
index 95c6bd28c874a15e5f658ba972c84e2e23646af7..1144dfe9563610d71ac132b0d216c10ca69ca34d 100644 (file)
@@ -222,6 +222,7 @@ class OverrideWarner(UserDict.UserDict):
     """
     def __init__(self, dict):
         UserDict.UserDict.__init__(self, dict)
+        if __debug__: logInstanceCreation(self)
         self.already_warned = None
     def warn(self):
         if self.already_warned:
index 740297bcd98f3846f69947e7714542a23f4411b2..7de630746456a65e1c6101865e3bce61e7ccdb68 100644 (file)
@@ -655,6 +655,7 @@ class Base:
         for key, value in kw.items():
             new[key] = SCons.Util.scons_subst_once(value, self, key)
         apply(clone.Replace, (), new)
+        if __debug__: logInstanceCreation(self, 'EnvironmentCopy')
         return clone
 
     def Detect(self, progs):
@@ -733,6 +734,7 @@ class Base:
             for key, value in overrides.items():
                 new[key] = SCons.Util.scons_subst_once(value, self, key)
             env._dict.update(new)
+            if __debug__: logInstanceCreation(self, 'EnvironmentOverride')
             return env
         else:
             return self
index e0473a1c129f8e414ac5bd4aea89c4020dc131d1..87c8c9ae175c65ec1a80bbfac718e34eafad78b0 100644 (file)
@@ -61,19 +61,23 @@ 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 ')
-F77PPAction = SCons.Action.Action('$_F77PPCOMG ')
-ShF77Action = SCons.Action.Action('$_SHF77COMG ')
-ShF77PPAction = SCons.Action.Action('$_SHF77PPCOMG ')
+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."""
@@ -93,15 +97,19 @@ def add_to_env(env):
         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['_SHF77G']      = ShF77Generator
-    env['_SHF77FLAGSG'] = ShF77FlagsGenerator
-    env['_SHF77COMG']   = ShF77CommandGenerator
-    env['_SHF77PPCOMG'] = ShF77PPCommandGenerator
+    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)} $)'
 
index 47be38f046fd32777073c4b68ed00321e7497eec..272f40e1a82bab75992782f81e2a60a45aebd194 100644 (file)
@@ -61,19 +61,23 @@ 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 ')
-F90PPAction = SCons.Action.Action('$_F90PPCOMG ')
-ShF90Action = SCons.Action.Action('$_SHF90COMG ')
-ShF90PPAction = SCons.Action.Action('$_SHF90PPCOMG ')
+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."""
@@ -93,15 +97,19 @@ def add_to_env(env):
         static_obj.add_emitter(suffix, fortran.FortranEmitter)
         shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
   
-    env['_F90G']        = F90Generator
-    env['_F90FLAGSG']   = F90FlagsGenerator
-    env['_F90COMG']     = F90CommandGenerator
-    env['_F90PPCOMG']   = F90PPCommandGenerator
-
-    env['_SHF90G']      = ShF90Generator
-    env['_SHF90FLAGSG'] = ShF90FlagsGenerator
-    env['_SHF90COMG']   = ShF90CommandGenerator
-    env['_SHF90PPCOMG'] = ShF90PPCommandGenerator
+    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)} $)'
     env['_F90COMD']     = '$_F90G $_F90FLAGSG $_F90INCFLAGS $_FORTRANMODFLAG -c -o $TARGET $SOURCES'
index 4f413a000d0e868b77034092a87057085d6dfa0b..7121011d926a2dd11efd39d90afade1f2c50298e 100644 (file)
@@ -60,19 +60,23 @@ 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 ')
-F95PPAction = SCons.Action.Action('$_F95PPCOMG ')
-ShF95Action = SCons.Action.Action('$_SHF95COMG ')
-ShF95PPAction = SCons.Action.Action('$_SHF95PPCOMG ')
+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."""
@@ -92,15 +96,19 @@ def add_to_env(env):
         static_obj.add_emitter(suffix, fortran.FortranEmitter)
         shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
 
-    env['_F95G']        = F95Generator
-    env['_F95FLAGSG']   = F95FlagsGenerator
-    env['_F95COMG']     = F95CommandGenerator
-    env['_F95PPCOMG']   = F95PPCommandGenerator
-
-    env['_SHF95G']      = ShF95Generator
-    env['_SHF95FLAGSG'] = ShF95FlagsGenerator
-    env['_SHF95COMG']   = ShF95CommandGenerator
-    env['_SHF95PPCOMG'] = ShF95PPCommandGenerator
+    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)} $)'
 
index 42a597e93e17e0f5e77a666127dafaa8cb2b7b14..7f6a88b237f55e13f46ae0e4907cc1b30210249d 100644 (file)
@@ -94,7 +94,7 @@ def ShFortranEmitter(target, source, env):
 class VariableListGenerator:
     def __init__(self, *variablelist):
         self.variablelist = variablelist
-    def __call__(self, env, target, source, for_signature):
+    def __call__(self, env, target, source, for_signature=0):
         for v in self.variablelist:
             try: return env[v]
             except KeyError: pass
@@ -104,30 +104,38 @@ class VariableListGenerator:
 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 ')
-FortranPPAction = SCons.Action.Action('$_FORTRANPPCOMG ')
-ShFortranAction = SCons.Action.Action('$_SHFORTRANCOMG ')
-ShFortranPPAction = SCons.Action.Action('$_SHFORTRANPPCOMG ')
+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['_FORTRANPPCOMG']   = FortranPPCommandGenerator
-
-    env['_SHFORTRANG']      = ShFortranGenerator
-    env['_SHFORTRANFLAGSG'] = ShFortranFlagsGenerator
-    env['_SHFORTRANCOMG']   = ShFortranCommandGenerator
-    env['_SHFORTRANPPCOMG'] = ShFortranPPCommandGenerator
+    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)} $)'
 
diff --git a/test/Fortran/F77COMSTR.py b/test/Fortran/F77COMSTR.py
new file mode 100644 (file)
index 0000000..721551d
--- /dev/null
@@ -0,0 +1,107 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f77pp = 'f77'
+else:
+    f77pp = 'f77pp'
+
+
+test.write('SConstruct', """
+env = Environment(F77COM = r'%(python)s myfc.py f77 $TARGET $SOURCES',
+                  F77COMSTR = 'Building f77 $TARGET from $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")
+
+test.pass_test()
diff --git a/test/Fortran/F90COMSTR.py b/test/Fortran/F90COMSTR.py
new file mode 100644 (file)
index 0000000..bf7451c
--- /dev/null
@@ -0,0 +1,75 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f90pp = 'f90'
+else:
+    f90pp = 'f90pp'
+
+
+test.write('SConstruct', """
+env = Environment(F90COM = r'%(python)s myfc.py f90 $TARGET $SOURCES',
+                  F90COMSTR = 'Building f90 $TARGET from $SOURCES',
+                  F90PPCOM = r'%(python)s myfc.py f90pp $TARGET $SOURCES',
+                  F90PPCOMSTR = 'Building f90pp $TARGET from $SOURCES',
+                  OBJSUFFIX='.obj')
+env.Object(source = 'test01.f90')
+env.Object(source = 'test02.F90')
+""" % locals())
+
+test.write('test01.f90',        "A .f90 file.\n#f90\n")
+test.write('test02.F90',        "A .F90 file.\n#%s\n" % f90pp)
+
+test.run(stdout = test.wrap_stdout("""\
+Building f90 test01.obj from test01.f90
+Building %(f90pp)s test02.obj from test02.F90
+""" % locals()))
+
+test.must_match('test01.obj', "A .f90 file.\n")
+test.must_match('test02.obj', "A .F90 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/F95COMSTR.py b/test/Fortran/F95COMSTR.py
new file mode 100644 (file)
index 0000000..823ade6
--- /dev/null
@@ -0,0 +1,75 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f95pp = 'f95'
+else:
+    f95pp = 'f95pp'
+
+
+test.write('SConstruct', """
+env = Environment(F95COM = r'%(python)s myfc.py f95 $TARGET $SOURCES',
+                  F95COMSTR = 'Building f95 $TARGET from $SOURCES',
+                  F95PPCOM = r'%(python)s myfc.py f95pp $TARGET $SOURCES',
+                  F95PPCOMSTR = 'Building f95pp $TARGET from $SOURCES',
+                  OBJSUFFIX='.obj')
+env.Object(source = 'test01.f95')
+env.Object(source = 'test02.F95')
+""" % locals())
+
+test.write('test01.f95',        "A .f95 file.\n#f95\n")
+test.write('test02.F95',        "A .F95 file.\n#%s\n" % f95pp)
+
+test.run(stdout = test.wrap_stdout("""\
+Building f95 test01.obj from test01.f95
+Building %(f95pp)s test02.obj from test02.F95
+""" % locals()))
+
+test.must_match('test01.obj', "A .f95 file.\n")
+test.must_match('test02.obj', "A .F95 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/FORTRANCOMSTR.py b/test/Fortran/FORTRANCOMSTR.py
new file mode 100644 (file)
index 0000000..db75d43
--- /dev/null
@@ -0,0 +1,123 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    fortranpp = 'fortran'
+else:
+    fortranpp = 'fortranpp'
+
+
+test.write('SConstruct', """
+env = Environment(FORTRANCOM = r'%(python)s myfc.py fortran $TARGET $SOURCES',
+                  FORTRANCOMSTR = 'Building fortran $TARGET from $SOURCES',
+                  FORTRANPPCOM = r'%(python)s myfc.py fortranpp $TARGET $SOURCES',
+                  FORTRANPPCOMSTR = 'Building fortranpp $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')
+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")
+test.write('test02.F',          "A .F file.\n#%s\n" % fortranpp)
+test.write('test03.for',        "A .for file.\n#fortran\n")
+test.write('test04.FOR',        "A .FOR file.\n#%s\n" % fortranpp)
+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
+Building %(fortranpp)s test02.obj from test02.F
+Building fortran test03.obj from test03.for
+Building %(fortranpp)s test04.obj from test04.FOR
+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")
+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")
+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/SHF77COMSTR.py b/test/Fortran/SHF77COMSTR.py
new file mode 100644 (file)
index 0000000..fdb81c1
--- /dev/null
@@ -0,0 +1,107 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f77pp = 'f77'
+else:
+    f77pp = 'f77pp'
+
+
+test.write('SConstruct', """
+env = Environment(SHF77COM = r'%(python)s myfc.py f77 $TARGET $SOURCES',
+                  SHF77COMSTR = 'Building f77 $TARGET from $SOURCES',
+                  SHF77PPCOM = r'%(python)s myfc.py f77pp $TARGET $SOURCES',
+                  SHF77PPCOMSTR = 'Building f77pp $TARGET from $SOURCES',
+                  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())
+
+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.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")
+
+test.pass_test()
diff --git a/test/Fortran/SHF90COMSTR.py b/test/Fortran/SHF90COMSTR.py
new file mode 100644 (file)
index 0000000..f0e44d3
--- /dev/null
@@ -0,0 +1,75 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f90pp = 'f90'
+else:
+    f90pp = 'f90pp'
+
+
+test.write('SConstruct', """
+env = Environment(SHF90COM = r'%(python)s myfc.py f90 $TARGET $SOURCES',
+                  SHF90COMSTR = 'Building f90 $TARGET from $SOURCES',
+                  SHF90PPCOM = r'%(python)s myfc.py f90pp $TARGET $SOURCES',
+                  SHF90PPCOMSTR = 'Building f90pp $TARGET from $SOURCES',
+                  SHOBJSUFFIX='.shobj')
+env.SharedObject(source = 'test01.f90')
+env.SharedObject(source = 'test02.F90')
+""" % locals())
+
+test.write('test01.f90',        "A .f90 file.\n#f90\n")
+test.write('test02.F90',        "A .F90 file.\n#%s\n" % f90pp)
+
+test.run(stdout = test.wrap_stdout("""\
+Building f90 test01.shobj from test01.f90
+Building %(f90pp)s test02.shobj from test02.F90
+""" % locals()))
+
+test.must_match('test01.shobj', "A .f90 file.\n")
+test.must_match('test02.shobj', "A .F90 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/SHF95COMSTR.py b/test/Fortran/SHF95COMSTR.py
new file mode 100644 (file)
index 0000000..461d7ff
--- /dev/null
@@ -0,0 +1,75 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    f95pp = 'f95'
+else:
+    f95pp = 'f95pp'
+
+
+test.write('SConstruct', """
+env = Environment(SHF95COM = r'%(python)s myfc.py f95 $TARGET $SOURCES',
+                  SHF95COMSTR = 'Building f95 $TARGET from $SOURCES',
+                  SHF95PPCOM = r'%(python)s myfc.py f95pp $TARGET $SOURCES',
+                  SHF95PPCOMSTR = 'Building f95pp $TARGET from $SOURCES',
+                  SHOBJSUFFIX='.shobj')
+env.SharedObject(source = 'test01.f95')
+env.SharedObject(source = 'test02.F95')
+""" % locals())
+
+test.write('test01.f95',        "A .f95 file.\n#f95\n")
+test.write('test02.F95',        "A .F95 file.\n#%s\n" % f95pp)
+
+test.run(stdout = test.wrap_stdout("""\
+Building f95 test01.shobj from test01.f95
+Building %(f95pp)s test02.shobj from test02.F95
+""" % locals()))
+
+test.must_match('test01.shobj', "A .f95 file.\n")
+test.must_match('test02.shobj', "A .F95 file.\n")
+
+test.pass_test()
diff --git a/test/Fortran/SHFORTRANCOMSTR.py b/test/Fortran/SHFORTRANCOMSTR.py
new file mode 100644 (file)
index 0000000..8ad3b14
--- /dev/null
@@ -0,0 +1,123 @@
+#!/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
+
+python = TestSCons.python
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfc.py', r"""
+import sys
+fline = '#'+sys.argv[1]+'\n'
+outfile = open(sys.argv[2], 'wb')
+infile = open(sys.argv[3], 'rb')
+for l in filter(lambda l, fl=fline: l != fl, infile.readlines()):
+    outfile.write(l)
+sys.exit(0)
+""")
+
+if os.path.normcase('.f') == os.path.normcase('.F'):
+    fortranpp = 'fortran'
+else:
+    fortranpp = 'fortranpp'
+
+
+test.write('SConstruct', """
+env = Environment(SHFORTRANCOM = r'%(python)s myfc.py fortran $TARGET $SOURCES',
+                  SHFORTRANCOMSTR = 'Building fortran $TARGET from $SOURCES',
+                  SHFORTRANPPCOM = r'%(python)s myfc.py fortranpp $TARGET $SOURCES',
+                  SHFORTRANPPCOMSTR = 'Building fortranpp $TARGET from $SOURCES',
+                  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')
+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")
+test.write('test02.F',          "A .F file.\n#%s\n" % fortranpp)
+test.write('test03.for',        "A .for file.\n#fortran\n")
+test.write('test04.FOR',        "A .FOR file.\n#%s\n" % fortranpp)
+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
+Building %(fortranpp)s test02.shobj from test02.F
+Building fortran test03.shobj from test03.for
+Building %(fortranpp)s test04.shobj from test04.FOR
+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")
+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")
+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()