1#!/usr/bin/env python 2# encoding: utf-8 3# Carlos Rafael Giani, 2007 (dv) 4# Thomas Nagy, 2016-2018 (ita) 5 6""" 7Try 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 16Only 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 23import re 24from waflib import Utils, Logs 25 26d_compiler = { 27'default' : ['gdc', 'dmd', 'ldc2'] 28} 29""" 30Dict 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 36def 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 41def 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 72def 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 86