waf

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

compiler_d.py (2265B)


      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 # Carlos Rafael Giani, 2007 (dv)
      4 # Thomas Nagy, 2016-2018 (ita)
      5 
      6 """
      7 Try to detect a D compiler from the list of supported compilers::
      8 
      9 	def options(opt):
     10 		opt.load('compiler_d')
     11 	def configure(cnf):
     12 		cnf.load('compiler_d')
     13 	def build(bld):
     14 		bld.program(source='main.d', target='app')
     15 
     16 Only three D compilers are really present at the moment:
     17 
     18 * gdc
     19 * dmd, the ldc compiler having a very similar command-line interface
     20 * ldc2
     21 """
     22 
     23 import re
     24 from waflib import Utils, Logs
     25 
     26 d_compiler = {
     27 'default' : ['gdc', 'dmd', 'ldc2']
     28 }
     29 """
     30 Dict mapping the platform names to lists of names of D compilers to try, in order of preference::
     31 
     32 	from waflib.Tools.compiler_d import d_compiler
     33 	d_compiler['default'] = ['gdc', 'dmd', 'ldc2']
     34 """
     35 
     36 def default_compilers():
     37 	build_platform = Utils.unversioned_sys_platform()
     38 	possible_compiler_list = d_compiler.get(build_platform, d_compiler['default'])
     39 	return ' '.join(possible_compiler_list)
     40 
     41 def configure(conf):
     42 	"""
     43 	Detects a suitable D compiler
     44 
     45 	:raises: :py:class:`waflib.Errors.ConfigurationError` when no suitable compiler is found
     46 	"""
     47 	try:
     48 		test_for_compiler = conf.options.check_d_compiler or default_compilers()
     49 	except AttributeError:
     50 		conf.fatal("Add options(opt): opt.load('compiler_d')")
     51 
     52 	for compiler in re.split('[ ,]+', test_for_compiler):
     53 		conf.env.stash()
     54 		conf.start_msg('Checking for %r (D compiler)' % compiler)
     55 		try:
     56 			conf.load(compiler)
     57 		except conf.errors.ConfigurationError as e:
     58 			conf.env.revert()
     59 			conf.end_msg(False)
     60 			Logs.debug('compiler_d: %r', e)
     61 		else:
     62 			if conf.env.D:
     63 				conf.end_msg(conf.env.get_flat('D'))
     64 				conf.env.COMPILER_D = compiler
     65 				conf.env.commit()
     66 				break
     67 			conf.env.revert()
     68 			conf.end_msg(False)
     69 	else:
     70 		conf.fatal('could not configure a D compiler!')
     71 
     72 def options(opt):
     73 	"""
     74 	This is how to provide compiler preferences on the command-line::
     75 
     76 		$ waf configure --check-d-compiler=dmd
     77 	"""
     78 	test_for_compiler = default_compilers()
     79 	d_compiler_opts = opt.add_option_group('Configuration options')
     80 	d_compiler_opts.add_option('--check-d-compiler', default=None,
     81 		help='list of D compilers to try [%s]' % test_for_compiler, dest='check_d_compiler')
     82 
     83 	for x in test_for_compiler.split():
     84 		opt.load('%s' % x)
     85