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
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
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
$_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
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.
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.
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.
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.
- 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:
- 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.
"""
def __init__(self, dict):
UserDict.UserDict.__init__(self, dict)
+ if __debug__: logInstanceCreation(self)
self.already_warned = None
def warn(self):
if self.already_warned:
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):
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
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."""
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)} $)'
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."""
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'
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."""
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)} $)'
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
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)} $)'
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()
--- /dev/null
+#!/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()