| """distutils.extension |
| |
| Provides the Extension class, used to describe C/C++ extension |
| modules in setup scripts. |
| |
| Overridden to support f2py. |
| |
| """ |
| import re |
| from distutils.extension import Extension as old_Extension |
|
|
|
|
| cxx_ext_re = re.compile(r'.*\.(cpp|cxx|cc)\Z', re.I).match |
| fortran_pyf_ext_re = re.compile(r'.*\.(f90|f95|f77|for|ftn|f|pyf)\Z', re.I).match |
|
|
|
|
| class Extension(old_Extension): |
| """ |
| Parameters |
| ---------- |
| name : str |
| Extension name. |
| sources : list of str |
| List of source file locations relative to the top directory of |
| the package. |
| extra_compile_args : list of str |
| Extra command line arguments to pass to the compiler. |
| extra_f77_compile_args : list of str |
| Extra command line arguments to pass to the fortran77 compiler. |
| extra_f90_compile_args : list of str |
| Extra command line arguments to pass to the fortran90 compiler. |
| """ |
| def __init__( |
| self, name, sources, |
| include_dirs=None, |
| define_macros=None, |
| undef_macros=None, |
| library_dirs=None, |
| libraries=None, |
| runtime_library_dirs=None, |
| extra_objects=None, |
| extra_compile_args=None, |
| extra_link_args=None, |
| export_symbols=None, |
| swig_opts=None, |
| depends=None, |
| language=None, |
| f2py_options=None, |
| module_dirs=None, |
| extra_c_compile_args=None, |
| extra_cxx_compile_args=None, |
| extra_f77_compile_args=None, |
| extra_f90_compile_args=None,): |
|
|
| old_Extension.__init__( |
| self, name, [], |
| include_dirs=include_dirs, |
| define_macros=define_macros, |
| undef_macros=undef_macros, |
| library_dirs=library_dirs, |
| libraries=libraries, |
| runtime_library_dirs=runtime_library_dirs, |
| extra_objects=extra_objects, |
| extra_compile_args=extra_compile_args, |
| extra_link_args=extra_link_args, |
| export_symbols=export_symbols) |
|
|
| |
| self.sources = sources |
|
|
| |
| self.swig_opts = swig_opts or [] |
| |
| |
| if isinstance(self.swig_opts, str): |
| import warnings |
| msg = "swig_opts is specified as a string instead of a list" |
| warnings.warn(msg, SyntaxWarning, stacklevel=2) |
| self.swig_opts = self.swig_opts.split() |
|
|
| |
| self.depends = depends or [] |
| self.language = language |
|
|
| |
| self.f2py_options = f2py_options or [] |
| self.module_dirs = module_dirs or [] |
| self.extra_c_compile_args = extra_c_compile_args or [] |
| self.extra_cxx_compile_args = extra_cxx_compile_args 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): |
| return any(cxx_ext_re(str(source)) for source in self.sources) |
|
|
| def has_f2py_sources(self): |
| return any(fortran_pyf_ext_re(source) for source in self.sources) |
|
|
| |
|
|