Modify the generic compiler tools to use the "Configuration options" group.

Add a mechanism to set the compiler precedence for D, for consistency.
This commit is contained in:
Krzysztof Kosiński 2014-01-25 18:47:15 +01:00
parent cffbb89cb4
commit ca60d62bed
4 changed files with 47 additions and 28 deletions

View File

@ -48,7 +48,7 @@ c_compiler = {
'default':['gcc'],
}
"""
Dict mapping the platform names to waf tools finding specific compilers::
Dict mapping the platform names to Waf tools finding specific C compilers::
from waflib.Tools.compiler_c import c_compiler
c_compiler['linux'] = ['gcc', 'icc', 'suncc']
@ -60,9 +60,10 @@ def configure(conf):
"""
try: test_for_compiler = conf.options.check_c_compiler
except AttributeError: conf.fatal("Add options(opt): opt.load('compiler_c')")
for compiler in test_for_compiler.split():
for compiler in re.split('[ ,]+', test_for_compiler):
conf.env.stash()
conf.start_msg('Checking for %r (c compiler)' % compiler)
conf.start_msg('Checking for %r (C compiler)' % compiler)
try:
conf.load(compiler)
except conf.errors.ConfigurationError as e:
@ -76,7 +77,7 @@ def configure(conf):
break
conf.end_msg(False)
else:
conf.fatal('could not configure a c compiler!')
conf.fatal('could not configure a C compiler!')
def options(opt):
"""
@ -89,9 +90,9 @@ def options(opt):
build_platform = Utils.unversioned_sys_platform()
possible_compiler_list = c_compiler[build_platform in c_compiler and build_platform or 'default']
test_for_compiler = ' '.join(possible_compiler_list)
cc_compiler_opts = opt.add_option_group("C Compiler Options")
cc_compiler_opts.add_option('--check-c-compiler', default="%s" % test_for_compiler,
help='On this platform (%s) the following C-Compiler will be checked by default: "%s"' % (build_platform, test_for_compiler),
cc_compiler_opts = opt.add_option_group('Configuration options')
cc_compiler_opts.add_option('--check-c-compiler', default=test_for_compiler,
help='list of C compilers to try [%s]' % test_for_compiler,
dest="check_c_compiler")
for x in test_for_compiler.split():
opt.load('%s' % x)

View File

@ -30,7 +30,7 @@ Not all compilers need to have a specific tool. For example, the clang compilers
"""
import os, sys, imp, types
import os, sys, imp, types, re
from waflib.Tools import ccroot
from waflib import Utils, Configure
from waflib.Logs import debug
@ -49,7 +49,7 @@ cxx_compiler = {
'default': ['g++']
}
"""
Dict mapping the platform names to waf tools finding specific compilers::
Dict mapping the platform names to Waf tools finding specific C++ compilers::
from waflib.Tools.compiler_cxx import cxx_compiler
cxx_compiler['linux'] = ['gxx', 'icpc', 'suncxx']
@ -63,9 +63,9 @@ def configure(conf):
try: test_for_compiler = conf.options.check_cxx_compiler
except AttributeError: conf.fatal("Add options(opt): opt.load('compiler_cxx')")
for compiler in test_for_compiler.split():
for compiler in re.split('[ ,]+', test_for_compiler):
conf.env.stash()
conf.start_msg('Checking for %r (c++ compiler)' % compiler)
conf.start_msg('Checking for %r (C++ compiler)' % compiler)
try:
conf.load(compiler)
except conf.errors.ConfigurationError as e:
@ -79,7 +79,7 @@ def configure(conf):
break
conf.end_msg(False)
else:
conf.fatal('could not configure a c++ compiler!')
conf.fatal('could not configure a C++ compiler!')
def options(opt):
"""
@ -92,9 +92,9 @@ def options(opt):
build_platform = Utils.unversioned_sys_platform()
possible_compiler_list = cxx_compiler[build_platform in cxx_compiler and build_platform or 'default']
test_for_compiler = ' '.join(possible_compiler_list)
cxx_compiler_opts = opt.add_option_group('C++ Compiler Options')
cxx_compiler_opts.add_option('--check-cxx-compiler', default="%s" % test_for_compiler,
help='On this platform (%s) the following C++ Compiler will be checked by default: "%s"' % (build_platform, test_for_compiler),
cxx_compiler_opts = opt.add_option_group('Configuration options')
cxx_compiler_opts.add_option('--check-cxx-compiler', default=test_for_compiler,
help='list of C++ compilers to try [%s]' % test_for_compiler,
dest="check_cxx_compiler")
for x in test_for_compiler.split():

View File

@ -20,16 +20,26 @@ Only three D compilers are really present at the moment:
* ldc2
"""
import os, sys, imp, types
import os, sys, imp, types, re
from waflib import Utils, Configure, Options, Logs
d_compiler = {
'default' : ['gdc', 'dmd', 'ldc2']
}
"""
Dict mapping the platform names to lists of names of D compilers to try, in order of preference::
from waflib.Tools.compiler_d import d_compiler
d_compiler['default'] = ['gdc', 'dmd', 'ldc2']
"""
def configure(conf):
"""
Try to find a suitable D compiler or raise a :py:class:`waflib.Errors.ConfigurationError`.
"""
for compiler in conf.options.dcheck.split(','):
for compiler in re.split('[ ,]+', conf.options.dcheck):
conf.env.stash()
conf.start_msg('Checking for %r (d compiler)' % compiler)
conf.start_msg('Checking for %r (D compiler)' % compiler)
try:
conf.load(compiler)
except conf.errors.ConfigurationError as e:
@ -51,9 +61,12 @@ def options(opt):
$ waf configure --check-d-compiler=dmd
"""
d_compiler_opts = opt.add_option_group('D Compiler Options')
d_compiler_opts.add_option('--check-d-compiler', default='gdc,dmd,ldc2', action='store',
help='check for the compiler [Default:gdc,dmd,ldc2]', dest='dcheck')
build_platform = Utils.unversioned_sys_platform()
possible_compiler_list = d_compiler[build_platform in cxx_compiler and build_platform or 'default']
test_for_compiler = ' '.join(possible_compiler_list)
d_compiler_opts = opt.add_option_group('Configuration options')
d_compiler_opts.add_option('--check-d-compiler', default=test_for_compiler, action='store',
help='list of D compilers to try [%s]' % test_for_compiler, dest='dcheck')
for d_compiler in ('gdc', 'dmd', 'ldc2'):
opt.load('%s' % d_compiler)

View File

@ -13,6 +13,12 @@ fc_compiler = {
'default': ['gfortran'],
'aix' : ['gfortran']
}
"""
Dict mapping the platform names to lists of names of Fortran compilers to try, in order of preference::
from waflib.Tools.compiler_c import c_compiler
c_compiler['linux'] = ['gfortran', 'g95', 'ifort']
"""
def __list_possible_compiler(platform):
try:
@ -26,9 +32,9 @@ def configure(conf):
"""
try: test_for_compiler = conf.options.check_fc
except AttributeError: conf.fatal("Add options(opt): opt.load('compiler_fc')")
for compiler in test_for_compiler.split():
for compiler in re.split('[ ,]+', test_for_compiler):
conf.env.stash()
conf.start_msg('Checking for %r (fortran compiler)' % compiler)
conf.start_msg('Checking for %r (Fortran compiler)' % compiler)
try:
conf.load(compiler)
except conf.errors.ConfigurationError as e:
@ -52,13 +58,12 @@ def options(opt):
"""
opt.load_special_tools('fc_*.py')
build_platform = Utils.unversioned_sys_platform()
detected_platform = Options.platform
possible_compiler_list = __list_possible_compiler(detected_platform)
possible_compiler_list = fc_compiler[build_platform in cxx_compiler and build_platform or 'default']
test_for_compiler = ' '.join(possible_compiler_list)
fortran_compiler_opts = opt.add_option_group("Fortran Compiler Options")
fortran_compiler_opts = opt.add_option_group('Configuration options')
fortran_compiler_opts.add_option('--check-fortran-compiler',
default="%s" % test_for_compiler,
help='On this platform (%s) the following Fortran Compiler will be checked by default: "%s"' % (detected_platform, test_for_compiler),
default=test_for_compiler,
help='list of Fortran compiler to try [%s]' % test_for_compiler,
dest="check_fc")
for compiler in test_for_compiler.split():