| Viewing file:  config_compiler.py (4.27 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
from distutils.core import Commandfrom 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
 
 |