~ubuntu-branches/ubuntu/utopic/scons/utopic-proposed

« back to all changes in this revision

Viewing changes to engine/SCons/Tool/f90.py

  • Committer: Bazaar Package Importer
  • Author(s): Mark Brown
  • Date: 2004-08-24 08:57:22 UTC
  • mfrom: (0.2.1 upstream) (1.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20040824085722-hfk4f0pjbyu0ebxv
Tags: 0.96.1-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""engine.SCons.Tool.f90
 
2
 
 
3
Tool-specific initialization for the generic Posix f90 Fortran compiler.
 
4
 
 
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()
 
7
selection method.
 
8
 
 
9
"""
 
10
 
 
11
#
 
12
# Copyright (c) 2001, 2002, 2003, 2004 The SCons Foundation
 
13
#
 
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:
 
21
#
 
22
# The above copyright notice and this permission notice shall be included
 
23
# in all copies or substantial portions of the Software.
 
24
#
 
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.
 
32
#
 
33
 
 
34
__revision__ = "/home/scons/scons/branch.0/baseline/src/engine/SCons/Tool/f90.py 0.96.1.D001 2004/08/23 09:55:29 knight"
 
35
 
 
36
import SCons.Defaults
 
37
import SCons.Scanner.Fortran
 
38
import SCons.Tool
 
39
import SCons.Util
 
40
import fortran
 
41
 
 
42
compilers = ['f90']
 
43
 
 
44
#
 
45
F90Suffixes = ['.f90']
 
46
F90PPSuffixes = []
 
47
if SCons.Util.case_sensitive_suffixes('.f90', '.F90'):
 
48
    F90PPSuffixes.append('.F90')
 
49
else:
 
50
    F90Suffixes.append('.F90')
 
51
 
 
52
#
 
53
F90Scan = SCons.Scanner.Fortran.FortranScan("F90PATH")
 
54
 
 
55
for suffix in F90Suffixes + F90PPSuffixes:
 
56
    SCons.Defaults.ObjSourceScan.add_scanner(suffix, F90Scan)
 
57
 
 
58
#
 
59
fVLG = fortran.VariableListGenerator
 
60
 
 
61
F90Generator = fVLG('F90', 'FORTRAN', '_FORTRAND')
 
62
F90FlagsGenerator = fVLG('F90FLAGS', 'FORTRANFLAGS')
 
63
F90CommandGenerator = fVLG('F90COM', 'FORTRANCOM', '_F90COMD')
 
64
F90PPCommandGenerator = fVLG('F90PPCOM', 'FORTRANPPCOM', '_F90PPCOMD')
 
65
ShF90Generator = fVLG('SHF90', 'SHFORTRAN', 'F90', 'FORTRAN', '_FORTRAND')
 
66
ShF90FlagsGenerator = fVLG('SHF90FLAGS', 'SHFORTRANFLAGS')
 
67
ShF90CommandGenerator = fVLG('SHF90COM', 'SHFORTRANCOM', '_SHF90COMD')
 
68
ShF90PPCommandGenerator = fVLG('SHF90PPCOM', 'SHFORTRANPPCOM', '_SHF90PPCOMD')
 
69
 
 
70
del fVLG
 
71
 
 
72
#
 
73
F90Action = SCons.Action.Action('$_F90COMG ')
 
74
F90PPAction = SCons.Action.Action('$_F90PPCOMG ')
 
75
ShF90Action = SCons.Action.Action('$_SHF90COMG ')
 
76
ShF90PPAction = SCons.Action.Action('$_SHF90PPCOMG ')
 
77
 
 
78
def add_to_env(env):
 
79
    """Add Builders and construction variables for f90 to an Environment."""
 
80
    env.AppendUnique(FORTRANSUFFIXES = F90Suffixes + F90PPSuffixes)
 
81
 
 
82
    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
83
 
 
84
    for suffix in F90Suffixes:
 
85
        static_obj.add_action(suffix, F90Action)
 
86
        shared_obj.add_action(suffix, ShF90Action)
 
87
        static_obj.add_emitter(suffix, fortran.FortranEmitter)
 
88
        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
 
89
 
 
90
    for suffix in F90PPSuffixes:
 
91
        static_obj.add_action(suffix, F90PPAction)
 
92
        shared_obj.add_action(suffix, ShF90PPAction)
 
93
        static_obj.add_emitter(suffix, fortran.FortranEmitter)
 
94
        shared_obj.add_emitter(suffix, fortran.ShFortranEmitter)
 
95
  
 
96
    env['_F90G']        = F90Generator
 
97
    env['_F90FLAGSG']   = F90FlagsGenerator
 
98
    env['_F90COMG']     = F90CommandGenerator
 
99
    env['_F90PPCOMG']   = F90PPCommandGenerator
 
100
 
 
101
    env['_SHF90G']      = ShF90Generator
 
102
    env['_SHF90FLAGSG'] = ShF90FlagsGenerator
 
103
    env['_SHF90COMG']   = ShF90CommandGenerator
 
104
    env['_SHF90PPCOMG'] = ShF90PPCommandGenerator
 
105
 
 
106
    env['_F90INCFLAGS'] = '$( ${_concat(INCPREFIX, F90PATH, INCSUFFIX, __env__, RDirs)} $)'
 
107
    env['_F90COMD']     = '$_F90G $_F90FLAGSG $_F90INCFLAGS $_FORTRANMODFLAG -c -o $TARGET $SOURCES'
 
108
    env['_F90PPCOMD']   = '$_F90G $_F90FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG -c -o $TARGET $SOURCES'
 
109
    env['_SHF90COMD']   = '$_SHF90G $_SHF90FLAGSG $_F90INCFLAGS $_FORTRANMODFLAG -c -o $TARGET $SOURCES'
 
110
    env['_SHF90PPCOMD'] = '$_SHF90G $_SHF90FLAGSG $CPPFLAGS $_CPPDEFFLAGS $_F90INCFLAGS $_FORTRANMODFLAG -c -o $TARGET $SOURCES'
 
111
 
 
112
def generate(env):
 
113
    fortran.add_to_env(env)
 
114
    add_to_env(env)
 
115
 
 
116
    env['_FORTRAND']        = env.Detect(compilers) or 'f90'
 
117
 
 
118
def exists(env):
 
119
    return env.Detect(compilers)