diff options
-rw-r--r-- | doc/DISTUTILS.rst.txt | 14 | ||||
-rw-r--r-- | numpy/distutils/command/build_clib.py | 4 | ||||
-rw-r--r-- | numpy/distutils/command/build_ext.py | 3 | ||||
-rw-r--r-- | numpy/distutils/extension.py | 6 | ||||
-rw-r--r-- | numpy/distutils/fcompiler/__init__.py | 15 | ||||
-rw-r--r-- | numpy/distutils/misc_util.py | 6 |
6 files changed, 40 insertions, 8 deletions
diff --git a/doc/DISTUTILS.rst.txt b/doc/DISTUTILS.rst.txt index b86274447..a2ac0b986 100644 --- a/doc/DISTUTILS.rst.txt +++ b/doc/DISTUTILS.rst.txt @@ -226,7 +226,8 @@ in writing setup scripts: ``define_macros``, ``undef_macros``, ``library_dirs``, ``libraries``, ``runtime_library_dirs``, ``extra_objects``, ``extra_compile_args``, ``extra_link_args``, ``export_symbols``, ``swig_opts``, ``depends``, - ``language``, ``f2py_options``, ``module_dirs``, ``extra_info``. + ``language``, ``f2py_options``, ``module_dirs``, ``extra_info``, + ``extra_f77_compile_args``, ``extra_compile_f90_args``. Note that ``config.paths`` method is applied to all lists that may contain paths. ``extra_info`` is a dictionary or a list @@ -261,11 +262,12 @@ in writing setup scripts: The second argument gives a path to a build directory that must be used when creating files to a disk. -+ ``config.add_library(name, sources, **build_info)`` --- add - a library to ``libraries`` list. Allowed keywords arguments - are ``depends``, ``macros``, ``include_dirs``, - ``extra_compiler_args``, ``f2py_options``. See ``.add_extension()`` - method for more information on arguments. ++ ``config.add_library(name, sources, **build_info)`` --- add a + library to ``libraries`` list. Allowed keywords arguments are + ``depends``, ``macros``, ``include_dirs``, ``extra_compiler_args``, + ``f2py_options``, ``extra_f77_compile_args``, + ``extra_compile_f90_args``. See ``.add_extension()`` method for + more information on arguments. + ``config.have_f77c()`` --- return True if Fortran 77 compiler is available (read: a simple Fortran 77 code compiled succesfully). diff --git a/numpy/distutils/command/build_clib.py b/numpy/distutils/command/build_clib.py index 68f52b26e..d9cfca73e 100644 --- a/numpy/distutils/command/build_clib.py +++ b/numpy/distutils/command/build_clib.py @@ -177,6 +177,10 @@ class build_clib(old_build_clib): raise DistutilsError("library %s has Fortran sources"\ " but no Fortran compiler found" % (lib_name)) + if fcompiler is not None: + fcompiler.extra_f77_compile_args = build_info.get('extra_f77_compile_args') or [] + fcompiler.extra_f90_compile_args = build_info.get('extra_f90_compile_args') or [] + macros = build_info.get('macros') include_dirs = build_info.get('include_dirs') if include_dirs is None: diff --git a/numpy/distutils/command/build_ext.py b/numpy/distutils/command/build_ext.py index 840d43716..f63d5249c 100644 --- a/numpy/distutils/command/build_ext.py +++ b/numpy/distutils/command/build_ext.py @@ -299,6 +299,9 @@ class build_ext (old_build_ext): fcompiler = self._f77_compiler else: # in case ext.language is c++, for instance fcompiler = self._f90_compiler or self._f77_compiler + if fcompiler is not None: + fcompiler.extra_f77_compile_args = ext.extra_f77_compile_args or [] + fcompiler.extra_f90_compile_args = ext.extra_f90_compile_args or [] cxx_compiler = self._cxx_compiler # check for the availability of required compilers diff --git a/numpy/distutils/extension.py b/numpy/distutils/extension.py index 9f28263d8..2fc29f6d5 100644 --- a/numpy/distutils/extension.py +++ b/numpy/distutils/extension.py @@ -31,6 +31,8 @@ class Extension(old_Extension): language=None, f2py_options=None, module_dirs=None, + extra_f77_compile_args=None, + extra_f90_compile_args=None, ): old_Extension.__init__(self,name, [], include_dirs, @@ -63,7 +65,9 @@ class Extension(old_Extension): # numpy_distutils features self.f2py_options = f2py_options or [] self.module_dirs = module_dirs or [] - + self.extra_f77_compile_args = extra_f77_compile_args or [] + self.extra_f90_compile_args = extra_f90_compile_args or [] + return def has_cxx_sources(self): diff --git a/numpy/distutils/fcompiler/__init__.py b/numpy/distutils/fcompiler/__init__.py index 69d9d68d3..550ae208a 100644 --- a/numpy/distutils/fcompiler/__init__.py +++ b/numpy/distutils/fcompiler/__init__.py @@ -213,6 +213,10 @@ class FCompiler(CCompiler): # command/{build_ext.py, build_clib.py, config.py} files. c_compiler = None + # extra_{f77,f90}_compile_args are set by build_ext.build_extension method + extra_f77_compile_args = [] + extra_f90_compile_args = [] + def __init__(self, *args, **kw): CCompiler.__init__(self, *args, **kw) self.distutils_vars = self.distutils_vars.clone(self._environment_hook) @@ -560,18 +564,21 @@ class FCompiler(CCompiler): flavor = ':f77' compiler = self.compiler_f77 src_flags = get_f77flags(src) + extra_compile_args = self.extra_f77_compile_args or [] elif is_free_format(src): flavor = ':f90' compiler = self.compiler_f90 if compiler is None: raise DistutilsExecError('f90 not supported by %s needed for %s'\ % (self.__class__.__name__,src)) + extra_compile_args = self.extra_f90_compile_args or [] else: flavor = ':fix' compiler = self.compiler_fix if compiler is None: raise DistutilsExecError('f90 (fixed) not supported by %s needed for %s'\ % (self.__class__.__name__,src)) + extra_compile_args = self.extra_f90_compile_args or [] if self.object_switch[-1]==' ': o_args = [self.object_switch.strip(),obj] else: @@ -580,13 +587,17 @@ class FCompiler(CCompiler): assert self.compile_switch.strip() s_args = [self.compile_switch, src] + if extra_compile_args: + log.info('extra %s options: %r' \ + % (flavor[1:], ' '.join(extra_compile_args))) + extra_flags = src_flags.get(self.compiler_type,[]) if extra_flags: log.info('using compile options from source: %r' \ % ' '.join(extra_flags)) command = compiler + cc_args + extra_flags + s_args + o_args \ - + extra_postargs + + extra_postargs + extra_compile_args display = '%s: %s' % (os.path.basename(compiler[0]) + flavor, src) @@ -961,5 +972,7 @@ def get_f77flags(src): f.close() return flags +# TODO: implement get_f90flags and use it in _compile similarly to get_f77flags + if __name__ == '__main__': show_fcompilers() diff --git a/numpy/distutils/misc_util.py b/numpy/distutils/misc_util.py index 53ef87373..2e4ed27f3 100644 --- a/numpy/distutils/misc_util.py +++ b/numpy/distutils/misc_util.py @@ -1403,6 +1403,8 @@ class Configuration(object): extra_objects: extra_compile_args: extra_link_args: + extra_f77_compile_args: + extra_f90_compile_args: export_symbols: swig_opts: depends: @@ -1497,6 +1499,8 @@ class Configuration(object): * macros * include_dirs * extra_compiler_args + * extra_f77_compiler_args + * extra_f90_compiler_args * f2py_options * language @@ -1548,6 +1552,8 @@ class Configuration(object): * macros * include_dirs * extra_compiler_args + * extra_f77_compiler_args + * extra_f90_compiler_args * f2py_options * language |