-
Notifications
You must be signed in to change notification settings - Fork 1
/
wscript
executable file
·146 lines (112 loc) · 4.92 KB
/
wscript
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Context, Logs, Utils
import os, subprocess
VERSION = "0.0.1"
APPNAME = "mguard"
def options(opt):
opt.load(['compiler_c', 'compiler_cxx', 'gnu_dirs'])
opt.load(['default-compiler-flags', 'coverage', 'sanitizers',
'boost'],
tooldir=['.waf-tools'])
optgrp = opt.add_option_group('mguard Options')
optgrp.add_option('--with-examples', action='store_true', default=False,
help='Build examples')
optgrp.add_option('--with-tests', action='store_true', default=False,
help='Build unit tests')
def configure(conf):
conf.load(['compiler_c', 'compiler_cxx', 'gnu_dirs',
'default-compiler-flags', 'boost'])
conf.env.WITH_EXAMPLES = conf.options.with_examples
conf.env.WITH_TESTS = conf.options.with_tests
pkg_config_path = os.environ.get('PKG_CONFIG_PATH', '%s/pkgconfig' % conf.env.LIBDIR)
conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX',
pkg_config_path=pkg_config_path)
conf.check_cfg(package='gtkmm-3.0', args=['--cflags', '--libs'],
uselib_store='gtkmm', pkg_config_path=pkg_config_path)
boost_libs = ['system', 'iostreams', 'filesystem', 'regex']
if conf.env.WITH_TESTS:
boost_libs.append('unit_test_framework')
conf.check_boost(lib=boost_libs, mt=True)
conf.check_cfg(package='libnac-abe', args=['--cflags', '--libs'], uselib_store='NAC-ABE',
pkg_config_path=pkg_config_path)
conf.check_cfg(package='PSync', args=['--cflags', '--libs'], uselib_store='PSYNC',
pkg_config_path=pkg_config_path)
conf.check_compiler_flags()
# Loading "late" to prevent tests from being compiled with profiling flags
conf.load('coverage')
conf.load('sanitizers')
conf.env.prepend_value('STLIBPATH', ['.'])
conf.define_cond('WITH_TESTS', conf.env.WITH_TESTS)
# The config header will contain all defines that were added using conf.define()
# or conf.define_cond(). Everything that was added directly to conf.env.DEFINES
# will not appear in the config header, but will instead be passed directly to the
# compiler on the command line.
conf.write_config_header('src/config.hpp')
def build(bld):
bld.shlib(features="c cshlib",
target='mguard',
vnum=VERSION,
cnum=VERSION,
source=bld.path.ant_glob('src/**/*.cpp'),
use='NDN_CXX BOOST PSYNC NAC-ABE gtkmm',
includes='./src',
export_includes='./src')
if bld.env.WITH_TESTS:
bld.recurse('tests')
if bld.env.WITH_EXAMPLES:
bld.recurse('examples')
# bld.recurse('controller')
headers = bld.path.ant_glob('src/**/*.hpp')
bld.install_files(bld.env.INCLUDEDIR, headers, relative_trick=True)
bld.install_files('${INCLUDEDIR}/',
bld.path.find_resource('src/config.hpp'))
bld(features='subst',
source='mguard.pc.in',
target='mguard.pc',
install_path='${LIBDIR}/pkgconfig',
VERSION=VERSION)
def version(ctx):
# don't execute more than once
if getattr(Context.g_module, 'VERSION_BASE', None):
return
Context.g_module.VERSION_BASE = Context.g_module.VERSION
Context.g_module.VERSION_SPLIT = VERSION_BASE.split('.')
# first, try to get a version string from git
gotVersionFromGit = False
try:
cmd = ['git', 'describe', '--always', '--match', '%s*' % GIT_TAG_PREFIX]
out = subprocess.check_output(cmd, universal_newlines=True).strip()
if out:
gotVersionFromGit = True
if out.startswith(GIT_TAG_PREFIX):
Context.g_module.VERSION = out.lstrip(GIT_TAG_PREFIX)
else:
# no tags matched
Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
except (OSError, subprocess.CalledProcessError):
pass
versionFile = ctx.path.find_node('VERSION')
if not gotVersionFromGit and versionFile is not None:
try:
Context.g_module.VERSION = versionFile.read()
return
except EnvironmentError:
pass
# version was obtained from git, update VERSION file if necessary
if versionFile is not None:
try:
if versionFile.read() == Context.g_module.VERSION:
# already up-to-date
return
except EnvironmentError as e:
Logs.warn('%s exists but is not readable (%s)' % (versionFile, e.strerror))
else:
versionFile = ctx.path.make_node('VERSION')
try:
versionFile.write(Context.g_module.VERSION)
except EnvironmentError as e:
Logs.warn('%s is not writable (%s)' % (versionFile, e.strerror))
def dist(ctx):
version(ctx)
def distcheck(ctx):
version(ctx)