1 """engine.SCons.Tool.f95
3 Tool-specific initialization for the generic Posix f95 Fortran compiler.
5 There normally shouldn't be any need to import this module directly.
6 It will usually be imported through the generic SCons.Tool.Tool()
14 # Permission is hereby granted, free of charge, to any person obtaining
15 # a copy of this software and associated documentation files (the
16 # "Software"), to deal in the Software without restriction, including
17 # without limitation the rights to use, copy, modify, merge, publish,
18 # distribute, sublicense, and/or sell copies of the Software, and to
19 # permit persons to whom the Software is furnished to do so, subject to
20 # the following conditions:
22 # The above copyright notice and this permission notice shall be included
23 # in all copies or substantial portions of the Software.
25 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
26 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
27 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
44 F95Suffixes = ['.f95']
46 if SCons.Util.case_sensitive_suffixes('.f95', '.F95'):
47 F95PPSuffixes.append('.F95')
49 F95Suffixes.append('.F95')
52 F95Scan = SCons.Scanner.Fortran.FortranScan("F95PATH")
54 for suffix in F95Suffixes + F95PPSuffixes:
55 SCons.Tool.SourceFileScanner.add_scanner(suffix, F95Scan)
58 fVLG = fortran.VariableListGenerator
60 F95Generator = fVLG('F95', 'FORTRAN', '_FORTRAND')
61 F95FlagsGenerator = fVLG('F95FLAGS', 'FORTRANFLAGS')
62 F95CommandGenerator = fVLG('F95COM', 'FORTRANCOM', '_F95COMD')
63 F95CommandStrGenerator = fVLG('F95COMSTR', 'FORTRANCOMSTR', '_F95COMSTRD')
64 F95PPCommandGenerator = fVLG('F95PPCOM', 'FORTRANPPCOM', '_F95PPCOMD')
65 F95PPCommandStrGenerator = fVLG('F95PPCOMSTR', 'FORTRANPPCOMSTR', '_F95PPCOMSTRD')
66 ShF95Generator = fVLG('SHF95', 'SHFORTRAN', 'F95', 'FORTRAN', '_FORTRAND')
67 ShF95FlagsGenerator = fVLG('SHF95FLAGS', 'SHFORTRANFLAGS')
68 ShF95CommandGenerator = fVLG('SHF95COM', 'SHFORTRANCOM', '_SHF95COMD')
69 ShF95CommandStrGenerator = fVLG('SHF95COMSTR', 'SHFORTRANCOMSTR', '_SHF95COMSTRD')
70 ShF95PPCommandGenerator = fVLG('SHF95PPCOM', 'SHFORTRANPPCOM', '_SHF95PPCOMD')
71 ShF95PPCommandStrGenerator = fVLG('SHF95PPCOMSTR', 'SHFORTRANPPCOMSTR', '_SHF95PPCOMSTRD')
76 F95Action = SCons.Action.Action('$_F95COMG ', '$_F95COMSTRG')
77 F95PPAction = SCons.Action.Action('$_F95PPCOMG ', '$_F95PPCOMSTRG')
78 ShF95Action = SCons.Action.Action('$_SHF95COMG ', '$_SHF95COMSTRG')
79 ShF95PPAction = SCons.Action.Action('$_SHF95PPCOMG ', '$_SHF95PPCOMSTRG')
82 """Add Builders and construction variables for f95 to an Environment."""
83 env.AppendUnique(FORTRANSUFFIXES = F95Suffixes + F95PPSuffixes)
85 static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
87 for suffix in F95Suffixes:
88 static_obj.add_action(suffix, F95Action)
89 shared_obj.add_action(suffix, ShF95Action)
90 static_obj.add_emitter(suffix, fortran.FortranEmitter)
91 shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
93 for suffix in F95PPSuffixes:
94 static_obj.add_action(suffix, F95PPAction)
95 shared_obj.add_action(suffix, ShF95PPAction)
96 static_obj.add_emitter(suffix, fortran.FortranEmitter)
97 shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
99 env['_F95G'] = F95Generator
100 env['_F95FLAGSG'] = F95FlagsGenerator
101 env['_F95COMG'] = F95CommandGenerator
102 env['_F95COMSTRG'] = F95CommandStrGenerator
103 env['_F95PPCOMG'] = F95PPCommandGenerator
104 env['_F95PPCOMSTRG'] = F95PPCommandStrGenerator
106 env['_SHF95G'] = ShF95Generator
107 env['_SHF95FLAGSG'] = ShF95FlagsGenerator
108 env['_SHF95COMG'] = ShF95CommandGenerator
109 env['_SHF95COMSTRG'] = ShF95CommandStrGenerator
110 env['_SHF95PPCOMG'] = ShF95PPCommandGenerator
111 env['_SHF95PPCOMSTRG'] = ShF95PPCommandStrGenerator
113 env['_F95INCFLAGS'] = '$( ${_concat(INCPREFIX, F95PATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
115 env['_F95COMD'] = '$_F95G -o $TARGET -c $_F95FLAGSG $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
116 env['_F95PPCOMD'] = '$_F95G -o $TARGET -c $_F95FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
117 env['_SHF95COMD'] = '$_SHF95G -o $TARGET -c $_SHF95FLAGSG $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
118 env['_SHF95PPCOMD'] = '$_SHF95G -o $TARGET -c $_SHF95FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F95INCFLAGS $_FORTRANMODFLAG $SOURCES'
121 fortran.add_to_env(env)
124 env['_FORTRAND'] = env.Detect(compilers) or 'f95'
127 return env.Detect(compilers)