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)