Chris@87: """distutils.extension Chris@87: Chris@87: Provides the Extension class, used to describe C/C++ extension Chris@87: modules in setup scripts. Chris@87: Chris@87: Overridden to support f2py. Chris@87: Chris@87: """ Chris@87: from __future__ import division, absolute_import, print_function Chris@87: Chris@87: import sys Chris@87: import re Chris@87: from distutils.extension import Extension as old_Extension Chris@87: Chris@87: if sys.version_info[0] >= 3: Chris@87: basestring = str Chris@87: Chris@87: Chris@87: cxx_ext_re = re.compile(r'.*[.](cpp|cxx|cc)\Z', re.I).match Chris@87: fortran_pyf_ext_re = re.compile(r'.*[.](f90|f95|f77|for|ftn|f|pyf)\Z', re.I).match Chris@87: Chris@87: class Extension(old_Extension): Chris@87: def __init__ (self, name, sources, Chris@87: include_dirs=None, Chris@87: define_macros=None, Chris@87: undef_macros=None, Chris@87: library_dirs=None, Chris@87: libraries=None, Chris@87: runtime_library_dirs=None, Chris@87: extra_objects=None, Chris@87: extra_compile_args=None, Chris@87: extra_link_args=None, Chris@87: export_symbols=None, Chris@87: swig_opts=None, Chris@87: depends=None, Chris@87: language=None, Chris@87: f2py_options=None, Chris@87: module_dirs=None, Chris@87: extra_f77_compile_args=None, Chris@87: extra_f90_compile_args=None, Chris@87: ): Chris@87: old_Extension.__init__(self, name, [], Chris@87: include_dirs, Chris@87: define_macros, Chris@87: undef_macros, Chris@87: library_dirs, Chris@87: libraries, Chris@87: runtime_library_dirs, Chris@87: extra_objects, Chris@87: extra_compile_args, Chris@87: extra_link_args, Chris@87: export_symbols) Chris@87: # Avoid assert statements checking that sources contains strings: Chris@87: self.sources = sources Chris@87: Chris@87: # Python 2.4 distutils new features Chris@87: self.swig_opts = swig_opts or [] Chris@87: # swig_opts is assumed to be a list. Here we handle the case where it Chris@87: # is specified as a string instead. Chris@87: if isinstance(self.swig_opts, basestring): Chris@87: import warnings Chris@87: msg = "swig_opts is specified as a string instead of a list" Chris@87: warnings.warn(msg, SyntaxWarning) Chris@87: self.swig_opts = self.swig_opts.split() Chris@87: Chris@87: # Python 2.3 distutils new features Chris@87: self.depends = depends or [] Chris@87: self.language = language Chris@87: Chris@87: # numpy_distutils features Chris@87: self.f2py_options = f2py_options or [] Chris@87: self.module_dirs = module_dirs or [] Chris@87: self.extra_f77_compile_args = extra_f77_compile_args or [] Chris@87: self.extra_f90_compile_args = extra_f90_compile_args or [] Chris@87: Chris@87: return Chris@87: Chris@87: def has_cxx_sources(self): Chris@87: for source in self.sources: Chris@87: if cxx_ext_re(str(source)): Chris@87: return True Chris@87: return False Chris@87: Chris@87: def has_f2py_sources(self): Chris@87: for source in self.sources: Chris@87: if fortran_pyf_ext_re(source): Chris@87: return True Chris@87: return False Chris@87: Chris@87: # class Extension