def show_fcompilers(dist = None): """ Print list of available compilers (used by the "--help-fcompiler" option to "config_fc"). """ if dist is None: from dist import Distribution dist = Distribution() dist.script_name = os.path.basename(sys.argv[0]) dist.script_args = ['config_fc'] + sys.argv[1:] dist.cmdclass['config_fc'] = config_fc dist.parse_config_files() dist.parse_command_line() compilers = [] compilers_na = [] compilers_ni = [] for compiler in fcompiler_class.keys(): v = 'N/A' try: c = new_fcompiler(compiler=compiler) c.customize(dist) v = c.get_version() except DistutilsModuleError: pass except Exception, msg: log.warn(msg) if v is None: compilers_na.append(("fcompiler="+compiler, None, fcompiler_class[compiler][2])) elif v=='N/A': compilers_ni.append(("fcompiler="+compiler, None, fcompiler_class[compiler][2])) else: compilers.append(("fcompiler="+compiler, None, fcompiler_class[compiler][2] + ' (%s)' % v))
def customize(self, dist=None): """ Customize Fortran compiler. This method gets Fortran compiler specific information from (i) class definition, (ii) environment, (iii) distutils config files, and (iv) command line. This method should be always called after constructing a compiler instance. But not in __init__ because Distribution instance is needed for (iii) and (iv). """ log.info('customize %s' % (self.__class__.__name__)) if dist is None: # These hooks are for testing only! from dist import Distribution dist = Distribution() dist.script_name = os.path.basename(sys.argv[0]) dist.script_args = ['config_fc'] + sys.argv[1:] dist.cmdclass['config_fc'] = config_fc dist.parse_config_files() dist.parse_command_line() conf = dist.get_option_dict('config_fc') noopt = conf.get('noopt',[None,0])[1] if 0: # change to `if 1:` when making release. # Don't use architecture dependent compiler flags: noarch = 1 else: noarch = conf.get('noarch',[None,noopt])[1] debug = conf.get('debug',[None,0])[1] f77 = self.__get_cmd('compiler_f77','F77',(conf,'f77exec')) f90 = self.__get_cmd('compiler_f90','F90',(conf,'f90exec')) # Temporarily setting f77,f90 compilers so that # version_cmd can use their executables. if f77: self.set_executables(compiler_f77=[f77]) if f90: self.set_executables(compiler_f90=[f90]) # Must set version_cmd before others as self.get_flags* # methods may call self.get_version. vers_cmd = self.__get_cmd(self.get_version_cmd) if vers_cmd: vflags = self.__get_flags(self.get_flags_version) self.set_executables(version_cmd=[vers_cmd]+vflags) if f77: f77flags = self.__get_flags(self.get_flags_f77,'F77FLAGS', (conf,'f77flags')) if f90: f90flags = self.__get_flags(self.get_flags_f90,'F90FLAGS', (conf,'f90flags')) freeflags = self.__get_flags(self.get_flags_free,'FREEFLAGS', (conf,'freeflags')) # XXX Assuming that free format is default for f90 compiler. fix = self.__get_cmd('compiler_fix','F90',(conf,'f90exec')) if fix: fixflags = self.__get_flags(self.get_flags_fix) + f90flags oflags,aflags,dflags = [],[],[] if not noopt: oflags = self.__get_flags(self.get_flags_opt,'FOPT',(conf,'opt')) if f77 and self.get_flags_opt is not self.get_flags_opt_f77: f77flags += self.__get_flags(self.get_flags_opt_f77) if f90 and self.get_flags_opt is not self.get_flags_opt_f90: f90flags += self.__get_flags(self.get_flags_opt_f90) if fix and self.get_flags_opt is not self.get_flags_opt_f90: fixflags += self.__get_flags(self.get_flags_opt_f90) if not noarch: aflags = self.__get_flags(self.get_flags_arch,'FARCH', (conf,'arch')) if f77 and self.get_flags_arch is not self.get_flags_arch_f77: f77flags += self.__get_flags(self.get_flags_arch_f77) if f90 and self.get_flags_arch is not self.get_flags_arch_f90: f90flags += self.__get_flags(self.get_flags_arch_f90) if fix and self.get_flags_arch is not self.get_flags_arch_f90: fixflags += self.__get_flags(self.get_flags_arch_f90) if debug: dflags = self.__get_flags(self.get_flags_debug,'FDEBUG') if f77 and self.get_flags_debug is not self.get_flags_debug_f77: f77flags += self.__get_flags(self.get_flags_debug_f77) if f90 and self.get_flags_debug is not self.get_flags_debug_f90: f90flags += self.__get_flags(self.get_flags_debug_f90) if fix and self.get_flags_debug is not self.get_flags_debug_f90: fixflags += self.__get_flags(self.get_flags_debug_f90) fflags = self.__get_flags(self.get_flags,'FFLAGS') \ + dflags + oflags + aflags if f77: self.set_executables(compiler_f77=[f77]+f77flags+fflags) if f90: self.set_executables(compiler_f90=[f90]+freeflags+f90flags+fflags) if fix: self.set_executables(compiler_fix=[fix]+fixflags+fflags) #XXX: Do we need LDSHARED->SOSHARED, LDFLAGS->SOFLAGS linker_so = self.__get_cmd(self.get_linker_so,'LDSHARED') if linker_so: linker_so_flags = self.__get_flags(self.get_flags_linker_so,'LDFLAGS') self.set_executables(linker_so=[linker_so]+linker_so_flags) ar = self.__get_cmd('archiver','AR') if ar: arflags = self.__get_flags(self.get_flags_ar,'ARFLAGS') self.set_executables(archiver=[ar]+arflags) ranlib = self.__get_cmd('ranlib','RANLIB') if ranlib: self.set_executables(ranlib=[ranlib]) self.set_library_dirs(self.get_library_dirs()) self.set_libraries(self.get_libraries()) verbose = conf.get('verbose',[None,0])[1] if verbose: self.dump_properties() return