1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#! /usr/bin/env python
# encoding: utf-8
#! /usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2006 (ita)
# Ralf Habacker, 2006 (rh)
import os, optparse
import Utils, Action, Params, Configure
import ccroot, ar
def find_cxx(conf):
v = conf.env
cc = None
if v['CXX']: cc = v['CXX']
elif 'CXX' in os.environ: cc = os.environ['CXX']
#if not cc: cc = conf.find_program('g++', var='CXX')
if not cc: cc = conf.find_program('c++', var='CXX')
if not cc: conf.fatal('sunc++ was not found')
v['CXX'] = cc
def common_flags(conf):
v = conf.env
# CPPFLAGS CXXDEFINES _CXXINCFLAGS _CXXDEFFLAGS _LIBDIRFLAGS _LIBFLAGS
v['CXX_SRC_F'] = ''
v['CXX_TGT_F'] = '-c -o '
v['CPPPATH_ST'] = '-I%s' # template for adding include paths
# linker
if not v['LINK_CXX']: v['LINK_CXX'] = v['CXX']
v['CXXLNK_SRC_F'] = ''
v['CXXLNK_TGT_F'] = '-o '
v['LIB_ST'] = '-l%s' # template for adding libs
v['LIBPATH_ST'] = '-L%s' # template for adding libpaths
v['STATICLIB_ST'] = '-l%s'
v['STATICLIBPATH_ST'] = '-L%s'
v['CXXDEFINES_ST'] = '-D%s'
v['SHLIB_MARKER'] = '-Bdynamic'
v['STATICLIB_MARKER'] = '-Bstatic'
# program
v['program_PATTERN'] = '%s'
# shared library
v['shlib_CXXFLAGS'] = ['-Kpic', '-DPIC']
v['shlib_LINKFLAGS'] = ['-G']
v['shlib_PATTERN'] = 'lib%s.so'
# static lib
v['staticlib_LINKFLAGS'] = ['-Bstatic']
v['staticlib_PATTERN'] = 'lib%s.a'
def modifier_debug(conf):
v = conf.env
v['CXXFLAGS'] = ['']
if conf.check_flags('-O2'):
v['CXXFLAGS_OPTIMIZED'] = ['-O2']
v['CXXFLAGS_RELEASE'] = ['-O2']
if conf.check_flags('-g -DDEBUG'):
v['CXXFLAGS_DEBUG'] = ['-g', '-DDEBUG']
if conf.check_flags('-g3 -O0 -DDEBUG'):
v['CXXFLAGS_ULTRADEBUG'] = ['-g3', '-O0', '-DDEBUG']
try:
debug_level = Params.g_options.debug_level.upper()
except AttributeError:
debug_level = ccroot.DEBUG_LEVELS.CUSTOM
v.append_value('CXXFLAGS', v['CXXFLAGS_'+debug_level])
def detect(conf):
find_cxx(conf)
ar.find_cpp(conf)
ar.find_ar(conf)
conf.check_tool('cxx')
common_flags(conf)
conf.check_tool('checks')
conf.check_features(kind='cpp')
modifier_debug(conf)
conf.add_os_flags('CXXFLAGS')
conf.add_os_flags('CPPFLAGS')
conf.add_os_flags('LINKFLAGS')
def set_options(opt):
try:
opt.add_option('-d', '--debug-level',
action = 'store',
default = ccroot.DEBUG_LEVELS.RELEASE,
help = "Specify the debug level, does nothing if CFLAGS is set in the environment. [Allowed Values: '%s']" % "', '".join(ccroot.DEBUG_LEVELS.ALL),
choices = ccroot.DEBUG_LEVELS.ALL,
dest = 'debug_level')
except optparse.OptionConflictError:
# the suncc tool might have added that option already
pass
|