You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					108 lines
				
				3.5 KiB
			
		
		
			
		
	
	
					108 lines
				
				3.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"""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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Avoid assert statements checking that sources contains strings:
							 | 
						||
| 
								 | 
							
								        self.sources = sources
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Python 2.4 distutils new features
							 | 
						||
| 
								 | 
							
								        self.swig_opts = swig_opts or []
							 | 
						||
| 
								 | 
							
								        # swig_opts is assumed to be a list. Here we handle the case where it
							 | 
						||
| 
								 | 
							
								        # is specified as a string instead.
							 | 
						||
| 
								 | 
							
								        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()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Python 2.3 distutils new features
							 | 
						||
| 
								 | 
							
								        self.depends = depends or []
							 | 
						||
| 
								 | 
							
								        self.language = language
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # numpy_distutils features
							 | 
						||
| 
								 | 
							
								        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):
							 | 
						||
| 
								 | 
							
								        for source in self.sources:
							 | 
						||
| 
								 | 
							
								            if cxx_ext_re(str(source)):
							 | 
						||
| 
								 | 
							
								                return True
							 | 
						||
| 
								 | 
							
								        return False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def has_f2py_sources(self):
							 | 
						||
| 
								 | 
							
								        for source in self.sources:
							 | 
						||
| 
								 | 
							
								            if fortran_pyf_ext_re(source):
							 | 
						||
| 
								 | 
							
								                return True
							 | 
						||
| 
								 | 
							
								        return False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# class Extension
							 |