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.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							4.3 KiB
						
					
					
				from distutils.core import Command
 | 
						|
from numpy.distutils import log
 | 
						|
 | 
						|
#XXX: Linker flags
 | 
						|
 | 
						|
def show_fortran_compilers(_cache=None):
 | 
						|
    # Using cache to prevent infinite recursion.
 | 
						|
    if _cache:
 | 
						|
        return
 | 
						|
    elif _cache is None:
 | 
						|
        _cache = []
 | 
						|
    _cache.append(1)
 | 
						|
    from numpy.distutils.fcompiler import show_fcompilers
 | 
						|
    import distutils.core
 | 
						|
    dist = distutils.core._setup_distribution
 | 
						|
    show_fcompilers(dist)
 | 
						|
 | 
						|
class config_fc(Command):
 | 
						|
    """ Distutils command to hold user specified options
 | 
						|
    to Fortran compilers.
 | 
						|
 | 
						|
    config_fc command is used by the FCompiler.customize() method.
 | 
						|
    """
 | 
						|
 | 
						|
    description = "specify Fortran 77/Fortran 90 compiler information"
 | 
						|
 | 
						|
    user_options = [
 | 
						|
        ('fcompiler=', None, "specify Fortran compiler type"),
 | 
						|
        ('f77exec=', None, "specify F77 compiler command"),
 | 
						|
        ('f90exec=', None, "specify F90 compiler command"),
 | 
						|
        ('f77flags=', None, "specify F77 compiler flags"),
 | 
						|
        ('f90flags=', None, "specify F90 compiler flags"),
 | 
						|
        ('opt=', None, "specify optimization flags"),
 | 
						|
        ('arch=', None, "specify architecture specific optimization flags"),
 | 
						|
        ('debug', 'g', "compile with debugging information"),
 | 
						|
        ('noopt', None, "compile without optimization"),
 | 
						|
        ('noarch', None, "compile without arch-dependent optimization"),
 | 
						|
        ]
 | 
						|
 | 
						|
    help_options = [
 | 
						|
        ('help-fcompiler', None, "list available Fortran compilers",
 | 
						|
         show_fortran_compilers),
 | 
						|
        ]
 | 
						|
 | 
						|
    boolean_options = ['debug', 'noopt', 'noarch']
 | 
						|
 | 
						|
    def initialize_options(self):
 | 
						|
        self.fcompiler = None
 | 
						|
        self.f77exec = None
 | 
						|
        self.f90exec = None
 | 
						|
        self.f77flags = None
 | 
						|
        self.f90flags = None
 | 
						|
        self.opt = None
 | 
						|
        self.arch = None
 | 
						|
        self.debug = None
 | 
						|
        self.noopt = None
 | 
						|
        self.noarch = None
 | 
						|
 | 
						|
    def finalize_options(self):
 | 
						|
        log.info('unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options')
 | 
						|
        build_clib = self.get_finalized_command('build_clib')
 | 
						|
        build_ext = self.get_finalized_command('build_ext')
 | 
						|
        config = self.get_finalized_command('config')
 | 
						|
        build = self.get_finalized_command('build')
 | 
						|
        cmd_list = [self, config, build_clib, build_ext, build]
 | 
						|
        for a in ['fcompiler']:
 | 
						|
            l = []
 | 
						|
            for c in cmd_list:
 | 
						|
                v = getattr(c, a)
 | 
						|
                if v is not None:
 | 
						|
                    if not isinstance(v, str): v = v.compiler_type
 | 
						|
                    if v not in l: l.append(v)
 | 
						|
            if not l: v1 = None
 | 
						|
            else: v1 = l[0]
 | 
						|
            if len(l)>1:
 | 
						|
                log.warn('  commands have different --%s options: %s'\
 | 
						|
                         ', using first in list as default' % (a, l))
 | 
						|
            if v1:
 | 
						|
                for c in cmd_list:
 | 
						|
                    if getattr(c, a) is None: setattr(c, a, v1)
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        # Do nothing.
 | 
						|
        return
 | 
						|
 | 
						|
class config_cc(Command):
 | 
						|
    """ Distutils command to hold user specified options
 | 
						|
    to C/C++ compilers.
 | 
						|
    """
 | 
						|
 | 
						|
    description = "specify C/C++ compiler information"
 | 
						|
 | 
						|
    user_options = [
 | 
						|
        ('compiler=', None, "specify C/C++ compiler type"),
 | 
						|
        ]
 | 
						|
 | 
						|
    def initialize_options(self):
 | 
						|
        self.compiler = None
 | 
						|
 | 
						|
    def finalize_options(self):
 | 
						|
        log.info('unifing config_cc, config, build_clib, build_ext, build commands --compiler options')
 | 
						|
        build_clib = self.get_finalized_command('build_clib')
 | 
						|
        build_ext = self.get_finalized_command('build_ext')
 | 
						|
        config = self.get_finalized_command('config')
 | 
						|
        build = self.get_finalized_command('build')
 | 
						|
        cmd_list = [self, config, build_clib, build_ext, build]
 | 
						|
        for a in ['compiler']:
 | 
						|
            l = []
 | 
						|
            for c in cmd_list:
 | 
						|
                v = getattr(c, a)
 | 
						|
                if v is not None:
 | 
						|
                    if not isinstance(v, str): v = v.compiler_type
 | 
						|
                    if v not in l: l.append(v)
 | 
						|
            if not l: v1 = None
 | 
						|
            else: v1 = l[0]
 | 
						|
            if len(l)>1:
 | 
						|
                log.warn('  commands have different --%s options: %s'\
 | 
						|
                         ', using first in list as default' % (a, l))
 | 
						|
            if v1:
 | 
						|
                for c in cmd_list:
 | 
						|
                    if getattr(c, a) is None: setattr(c, a, v1)
 | 
						|
        return
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        # Do nothing.
 | 
						|
        return
 |