waf

FORK: waf with some random patches
git clone https://git.neptards.moe/neptards/waf.git
Log | Files | Refs | README

compiler_fc.py (2162B)


      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 
      4 import re
      5 from waflib import Utils, Logs
      6 from waflib.Tools import fc
      7 
      8 fc_compiler = {
      9 	'win32'  : ['gfortran','ifort'],
     10 	'darwin' : ['gfortran', 'g95', 'ifort'],
     11 	'linux'  : ['gfortran', 'g95', 'ifort'],
     12 	'java'   : ['gfortran', 'g95', 'ifort'],
     13 	'default': ['gfortran'],
     14 	'aix'    : ['gfortran']
     15 }
     16 """
     17 Dict mapping the platform names to lists of names of Fortran compilers to try, in order of preference::
     18 
     19 	from waflib.Tools.compiler_c import c_compiler
     20 	c_compiler['linux'] = ['gfortran', 'g95', 'ifort']
     21 """
     22 
     23 def default_compilers():
     24 	build_platform = Utils.unversioned_sys_platform()
     25 	possible_compiler_list = fc_compiler.get(build_platform, fc_compiler['default'])
     26 	return ' '.join(possible_compiler_list)
     27 
     28 def configure(conf):
     29 	"""
     30 	Detects a suitable Fortran compiler
     31 
     32 	:raises: :py:class:`waflib.Errors.ConfigurationError` when no suitable compiler is found
     33 	"""
     34 	try:
     35 		test_for_compiler = conf.options.check_fortran_compiler or default_compilers()
     36 	except AttributeError:
     37 		conf.fatal("Add options(opt): opt.load('compiler_fc')")
     38 	for compiler in re.split('[ ,]+', test_for_compiler):
     39 		conf.env.stash()
     40 		conf.start_msg('Checking for %r (Fortran compiler)' % compiler)
     41 		try:
     42 			conf.load(compiler)
     43 		except conf.errors.ConfigurationError as e:
     44 			conf.env.revert()
     45 			conf.end_msg(False)
     46 			Logs.debug('compiler_fortran: %r', e)
     47 		else:
     48 			if conf.env.FC:
     49 				conf.end_msg(conf.env.get_flat('FC'))
     50 				conf.env.COMPILER_FORTRAN = compiler
     51 				conf.env.commit()
     52 				break
     53 			conf.env.revert()
     54 			conf.end_msg(False)
     55 	else:
     56 		conf.fatal('could not configure a Fortran compiler!')
     57 
     58 def options(opt):
     59 	"""
     60 	This is how to provide compiler preferences on the command-line::
     61 
     62 		$ waf configure --check-fortran-compiler=ifort
     63 	"""
     64 	test_for_compiler = default_compilers()
     65 	opt.load_special_tools('fc_*.py')
     66 	fortran_compiler_opts = opt.add_option_group('Configuration options')
     67 	fortran_compiler_opts.add_option('--check-fortran-compiler', default=None,
     68 			help='list of Fortran compiler to try [%s]' % test_for_compiler,
     69 		dest="check_fortran_compiler")
     70 
     71 	for x in test_for_compiler.split():
     72 		opt.load('%s' % x)
     73