Spaces:
Paused
Paused
| 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 | |