1def CheckPKGConfig(context, version):
2    context.Message('Checking for pkg-config... ')
3    ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
4    context.Result(ret)
5    return ret
6
7def CheckPKG(context, name):
8    context.Message('Checking for %s...' % name)
9    ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
10    context.Result(ret)
11    return ret
12
13# class Options is for Nexenta/Hardy. scons from Hardy is outdated.
14opts = Options('custom.py')
15#opts = Variables('custom.py')
16
17#opts.Add('OS', 'Set to current OS: linux, freebsd, nexenta.', 0)
18opts.Add('PROFILE', 'Set to 1 to build profiled version', 0)
19opts.Add('RELEASE', 'Set to 1 to build release', 0)
20opts.Add('STATIC', 'Set to 1 to build static executable', 0)
21opts.Add('ARCH', 'Set to target architecture', 'generic')
22
23env = Environment(variables = opts)
24
25Help(opts.GenerateHelpText(env))
26
27conf = Configure(env, custom_tests = {'CheckPKGConfig' : CheckPKGConfig,
28                                       'CheckPKG' : CheckPKG})
29
30if not conf.CheckPKGConfig('0.18.1'):
31    print 'pkg-config >= 0.18.1 not found.'
32    Exit(1)
33
34if not conf.CheckPKG('libxml++-2.6 >= 2.5.0'):
35    print 'libxml++-2.6 >= 2.5.0 not found.'
36    Exit(1)
37
38env = conf.Finish()
39
40#OS = ARGUMENTS.get('OS', 'linux')
41ARCH = ARGUMENTS.get('ARCH', 'generic')
42RELEASE = ARGUMENTS.get('RELEASE', 0)
43STATIC = ARGUMENTS.get('STATIC', 0)
44PROFILE = ARGUMENTS.get('PROFILE', 0)
45
46env.ParseConfig('pkg-config --cflags --libs libxml++-2.6')
47
48#
49CANDIDATE_ART_FORCE_CAST_FOR_ARTUINT64TOSTR = \
50   ARGUMENTS.get('ART_FORCE_CAST_FOR_ARTUINT64TOSTR', 1)
51
52ART_DEBUG_INSERT_DEVEL_COMMENT = \
53   ARGUMENTS.get('ART_DEBUG_INSERT_DEVEL_COMMENT', 0)
54#
55
56if int(PROFILE):
57    env.Append(CCFLAGS = '-pg')
58    env.Append(LINKFLAGS = '-pg')
59
60if int(RELEASE):
61    if int(PROFILE):
62        env.Append(CCFLAGS = '-O3')
63        env.Append(CCFLAGS = '-pipe')
64    else:
65        env.Append(CCFLAGS = '-O3')
66        env.Append(CCFLAGS = '--omit-frame-pointer')
67        env.Append(CCFLAGS = '-pipe')
68
69    if ARCH != "generic":
70        env.Append(CCFLAGS = '-march=' + ARCH)
71    else:
72        env.Append(CCFLAGS = '-mtune=generic')
73
74else:
75    env.Append(CCFLAGS = '-g')
76    env.Append(CCFLAGS = '-ggdb')
77    env.Append(CCFLAGS = '-Wall')
78    env.Append(CCFLAGS = '-W')
79    env.Append(CCFLAGS = '-Wextra')
80    env.Append(CCFLAGS = '-Werror')
81    env.Append(CCFLAGS = '-O0')
82    env.Append(CCFLAGS = '-DART_DEBUG')
83# no -pedantic, as long long is used, but it doesn't exist in ISO C++ 1998
84
85if int(STATIC):
86    env.Append(LINKFLAGS = '-static')
87
88#
89if int(CANDIDATE_ART_FORCE_CAST_FOR_ARTUINT64TOSTR):
90    env.Append(CCFLAGS = '-DART_FORCE_CAST_FOR_ARTUINT64TOSTR')
91
92if int(ART_DEBUG_INSERT_DEVEL_COMMENT):
93    env.Append(CCFLAGS = '-DART_DEBUG_INSERT_DEVEL_COMMENT')
94#
95
96Export('env')
97
98env.SConscript('libs/liblinefetch/SConscript')
99env.SConscript('libs/libtplreader/SConscript')
100env.SConscript('artlibgen/src/SConscript')
101env.SConscript('artrepgen/SConscript')
102#env.SConscript('artrepgen/SConscript', 'OS')
103
104SConsignFile("signatures");
105