diff options
author | Gary Oberbrunner <garyo@oberbrunner.com> | 2010-07-30 01:21:23 (GMT) |
---|---|---|
committer | Gary Oberbrunner <garyo@oberbrunner.com> | 2010-07-30 01:21:23 (GMT) |
commit | d7625f5f23df951273a3ad1c73c018f8cd6ac27e (patch) | |
tree | 6d0737d40e883bb2a04dcb146120674fb2265a1e /src/engine/SCons/Tool | |
parent | 72107dc14a1eae4176bca11b2fed1c34a5674e15 (diff) | |
download | SCons-d7625f5f23df951273a3ad1c73c018f8cd6ac27e.zip SCons-d7625f5f23df951273a3ad1c73c018f8cd6ac27e.tar.gz SCons-d7625f5f23df951273a3ad1c73c018f8cd6ac27e.tar.bz2 |
Support for Fortran 03, from Luca Falavigna.
Diffstat (limited to 'src/engine/SCons/Tool')
-rw-r--r-- | src/engine/SCons/Tool/FortranCommon.py | 17 | ||||
-rw-r--r-- | src/engine/SCons/Tool/f03.py | 63 | ||||
-rw-r--r-- | src/engine/SCons/Tool/f03.xml | 252 | ||||
-rw-r--r-- | src/engine/SCons/Tool/gfortran.py | 2 |
4 files changed, 333 insertions, 1 deletions
diff --git a/src/engine/SCons/Tool/FortranCommon.py b/src/engine/SCons/Tool/FortranCommon.py index f2c828c..4c5730c 100644 --- a/src/engine/SCons/Tool/FortranCommon.py +++ b/src/engine/SCons/Tool/FortranCommon.py @@ -231,6 +231,22 @@ def add_f95_to_env(env): DialectAddToEnv(env, "F95", F95Suffixes, F95PPSuffixes, support_module = 1) +def add_f03_to_env(env): + """Add Builders and construction variables for f03 to an Environment.""" + try: + F03Suffixes = env['F03FILESUFFIXES'] + except KeyError: + F03Suffixes = ['.f03'] + + #print "Adding %s to f95 suffixes" % F95Suffixes + try: + F03PPSuffixes = env['F03PPFILESUFFIXES'] + except KeyError: + F03PPSuffixes = [] + + DialectAddToEnv(env, "F03", F03Suffixes, F03PPSuffixes, + support_module = 1) + def add_all_to_env(env): """Add builders and construction variables for all supported fortran dialects.""" @@ -238,6 +254,7 @@ def add_all_to_env(env): add_f77_to_env(env) add_f90_to_env(env) add_f95_to_env(env) + add_f03_to_env(env) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Tool/f03.py b/src/engine/SCons/Tool/f03.py new file mode 100644 index 0000000..3aab1c0 --- /dev/null +++ b/src/engine/SCons/Tool/f03.py @@ -0,0 +1,63 @@ +"""engine.SCons.Tool.f03 + +Tool-specific initialization for the generic Posix f03 Fortran compiler. + +There normally shouldn't be any need to import this module directly. +It will usually be imported through the generic SCons.Tool.Tool() +selection method. + +""" + +# +# __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 SCons.Defaults +import SCons.Tool +import SCons.Util +import fortran +from SCons.Tool.FortranCommon import add_all_to_env, add_f03_to_env + +compilers = ['f03'] + +def generate(env): + add_all_to_env(env) + add_f03_to_env(env) + + fcomp = env.Detect(compilers) or 'f03' + env['F03'] = fcomp + env['SHF03'] = fcomp + + env['FORTRAN'] = fcomp + env['SHFORTRAN'] = fcomp + + +def exists(env): + return env.Detect(compilers) + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=4 shiftwidth=4: diff --git a/src/engine/SCons/Tool/f03.xml b/src/engine/SCons/Tool/f03.xml new file mode 100644 index 0000000..ef737de --- /dev/null +++ b/src/engine/SCons/Tool/f03.xml @@ -0,0 +1,252 @@ +<!-- +__COPYRIGHT__ + +This file is processed by the bin/SConsDoc.py module. +See its __doc__ string for a discussion of the format. +--> +<tool name="f03"> +<summary> +Set construction variables for generic POSIX Fortran 03 compilers. +</summary> +<sets> +F03 +F03FLAGS +F03COM +F03PPCOM +SHF03 +SHF03FLAGS +SHF03COM +SHF03PPCOM +_F03INCFLAGS +</sets> +<uses> +F03COMSTR +F03PPCOMSTR +SHF03COMSTR +SHF03PPCOMSTR +</uses> +</tool> + +<cvar name="F03"> +<summary> +The Fortran 03 compiler. +You should normally set the &cv-link-FORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-link-F03; if you need to use a specific compiler +or compiler version for Fortran 03 files. +</summary> +</cvar> + +<cvar name="F03COM"> +<summary> +The command line used to compile a Fortran 03 source file to an object file. +You only need to set &cv-link-F03COM; if you need to use a specific +command line for Fortran 03 files. +You should normally set the &cv-link-FORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. +</summary> +</cvar> + +<cvar name="F03COMSTR"> +<summary> +The string displayed when a Fortran 03 source file +is compiled to an object file. +If this is not set, then &cv-link-F03COM; or &cv-link-FORTRANCOM; +(the command line) is displayed. +</summary> +</cvar> + +<cvar name="F03FILESUFFIXES"> +<summary> +The list of file extensions for which the F03 dialect will be used. By +default, this is ['.f03'] +</summary> +</cvar> + +<cvar name="F03PPFILESUFFIXES"> +<summary> +The list of file extensions for which the compilation + preprocessor pass for +F03 dialect will be used. By default, this is empty +</summary> +</cvar> + +<cvar name="F03FLAGS"> +<summary> +General user-specified options that are passed to the Fortran 03 compiler. +Note that this variable does +<emphasis>not</emphasis> +contain +<option>-I</option> +(or similar) include search path options +that scons generates automatically from &cv-link-F03PATH;. +See +&cv-link-_F03INCFLAGS; +below, +for the variable that expands to those options. +You only need to set &cv-link-F03FLAGS; if you need to define specific +user options for Fortran 03 files. +You should normally set the &cv-link-FORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. +</summary> +</cvar> + +<cvar name="_F03INCFLAGS"> +<summary> +An automatically-generated construction variable +containing the Fortran 03 compiler command-line options +for specifying directories to be searched for include files. +The value of &cv-link-_F03INCFLAGS; is created +by appending &cv-link-INCPREFIX; and &cv-link-INCSUFFIX; +to the beginning and end +of each directory in &cv-link-F03PATH;. +</summary> +</cvar> + +<cvar name="F03PATH"> +<summary> +The list of directories that the Fortran 03 compiler will search for include +directories. The implicit dependency scanner will search these +directories for include files. Don't explicitly put include directory +arguments in &cv-link-F03FLAGS; because the result will be non-portable +and the directories will not be searched by the dependency scanner. Note: +directory names in &cv-link-F03PATH; will be looked-up relative to the SConscript +directory when they are used in a command. To force +&scons; +to look-up a directory relative to the root of the source tree use #: +You only need to set &cv-link-F03PATH; if you need to define a specific +include path for Fortran 03 files. +You should normally set the &cv-link-FORTRANPATH; variable, +which specifies the include path +for the default Fortran compiler +for all Fortran versions. + +<example> +env = Environment(F03PATH='#/include') +</example> + +The directory look-up can also be forced using the +&Dir;() +function: + +<example> +include = Dir('include') +env = Environment(F03PATH=include) +</example> + +The directory list will be added to command lines +through the automatically-generated +&cv-link-_F03INCFLAGS; +construction variable, +which is constructed by +appending the values of the +&cv-link-INCPREFIX; and &cv-link-INCSUFFIX; +construction variables +to the beginning and end +of each directory in &cv-link-F03PATH;. +Any command lines you define that need +the F03PATH directory list should +include &cv-link-_F03INCFLAGS;: + +<example> +env = Environment(F03COM="my_compiler $_F03INCFLAGS -c -o $TARGET $SOURCE") +</example> +</summary> +</cvar> + +<cvar name="F03PPCOM"> +<summary> +The command line used to compile a Fortran 03 source file to an object file +after first running the file through the C preprocessor. +Any options specified in the &cv-link-F03FLAGS; and &cv-link-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-link-F03PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 03 files. +You should normally set the &cv-link-FORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. +</summary> +</cvar> + +<cvar name="F03PPCOMSTR"> +<summary> +The string displayed when a Fortran 03 source file +is compiled to an object file +after first running the file through the C preprocessor. +If this is not set, then &cv-link-F03PPCOM; or &cv-link-FORTRANPPCOM; +(the command line) is displayed. +</summary> +</cvar> + +<cvar name="SHF03"> +<summary> +The Fortran 03 compiler used for generating shared-library objects. +You should normally set the &cv-link-SHFORTRAN; variable, +which specifies the default Fortran compiler +for all Fortran versions. +You only need to set &cv-link-SHF03; if you need to use a specific compiler +or compiler version for Fortran 03 files. +</summary> +</cvar> + +<cvar name="SHF03COM"> +<summary> +The command line used to compile a Fortran 03 source file +to a shared-library object file. +You only need to set &cv-link-SHF03COM; if you need to use a specific +command line for Fortran 03 files. +You should normally set the &cv-link-SHFORTRANCOM; variable, +which specifies the default command line +for all Fortran versions. +</summary> +</cvar> + +<cvar name="SHF03COMSTR"> +<summary> +The string displayed when a Fortran 03 source file +is compiled to a shared-library object file. +If this is not set, then &cv-link-SHF03COM; or &cv-link-SHFORTRANCOM; +(the command line) is displayed. +</summary> +</cvar> + +<cvar name="SHF03FLAGS"> +<summary> +Options that are passed to the Fortran 03 compiler +to generated shared-library objects. +You only need to set &cv-link-SHF03FLAGS; if you need to define specific +user options for Fortran 03 files. +You should normally set the &cv-link-SHFORTRANFLAGS; variable, +which specifies the user-specified options +passed to the default Fortran compiler +for all Fortran versions. +</summary> +</cvar> + +<cvar name="SHF03PPCOM"> +<summary> +The command line used to compile a Fortran 03 source file to a +shared-library object file +after first running the file through the C preprocessor. +Any options specified in the &cv-link-SHF03FLAGS; and &cv-link-CPPFLAGS; construction variables +are included on this command line. +You only need to set &cv-link-SHF03PPCOM; if you need to use a specific +C-preprocessor command line for Fortran 03 files. +You should normally set the &cv-link-SHFORTRANPPCOM; variable, +which specifies the default C-preprocessor command line +for all Fortran versions. +</summary> +</cvar> + +<cvar name="SHF03PPCOMSTR"> +<summary> +The string displayed when a Fortran 03 source file +is compiled to a shared-library object file +after first running the file through the C preprocessor. +If this is not set, then &cv-link-SHF03PPCOM; or &cv-link-SHFORTRANPPCOM; +(the command line) is displayed. +</summary> +</cvar> diff --git a/src/engine/SCons/Tool/gfortran.py b/src/engine/SCons/Tool/gfortran.py index 63414e3..4f3e7e4 100644 --- a/src/engine/SCons/Tool/gfortran.py +++ b/src/engine/SCons/Tool/gfortran.py @@ -43,7 +43,7 @@ def generate(env): Environment.""" fortran.generate(env) - for dialect in ['F77', 'F90', 'FORTRAN', 'F95']: + for dialect in ['F77', 'F90', 'FORTRAN', 'F95', 'F03']: env['%s' % dialect] = 'gfortran' env['SH%s' % dialect] = '$%s' % dialect if env['PLATFORM'] in ['cygwin', 'win32']: |