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