|
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 |
|
|