| from distutils.core import Command |
| from numpy.distutils import log |
|
|
| |
|
|
| def show_fortran_compilers(_cache=None): |
| |
| 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('unifying 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): |
| |
| 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('unifying 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): |
| |
| return |
|
|