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
			| 
								 
											3 years ago
										 
									 | 
							
								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
							 |