forked from named-data/ndn-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwscript
143 lines (115 loc) · 4.65 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
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Context, Logs, Utils
import os, subprocess
VERSION = '22.02'
APPNAME = 'ndn-tools'
GIT_TAG_PREFIX = 'ndn-tools-'
def options(opt):
opt.load(['compiler_cxx', 'gnu_dirs'])
opt.load(['default-compiler-flags',
'coverage', 'sanitizers', 'boost',
'sphinx_build'],
tooldir=['.waf-tools'])
optgrp = opt.add_option_group('Tools Options')
optgrp.add_option('--with-tests', action='store_true', default=False,
help='Build unit tests')
opt.recurse('tools')
def configure(conf):
conf.load(['compiler_cxx', 'gnu_dirs',
'default-compiler-flags', 'boost',
'sphinx_build'])
conf.env.WITH_TESTS = conf.options.with_tests
pkg_config_path = os.environ.get('PKG_CONFIG_PATH', f'{conf.env.LIBDIR}/pkgconfig')
conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.8.0', '--cflags', '--libs'],
uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
boost_libs = ['system', 'program_options', 'filesystem']
if conf.env.WITH_TESTS:
boost_libs.append('unit_test_framework')
conf.define('WITH_TESTS', 1)
conf.check_boost(lib=boost_libs, mt=True)
if conf.env.BOOST_VERSION_NUMBER < 106501:
conf.fatal('The minimum supported version of Boost is 1.65.1.\n'
'Please upgrade your distribution or manually install a newer version of Boost.\n'
'For more information, see https://redmine.named-data.net/projects/nfd/wiki/Boost')
conf.recurse('tools')
conf.check_compiler_flags()
# Loading "late" to prevent tests from being compiled with profiling flags
conf.load('coverage')
conf.load('sanitizers')
conf.msg('Tools to build', ', '.join(conf.env.BUILD_TOOLS))
def build(bld):
version(bld)
bld(features='subst',
name='version.cpp',
source='core/version.cpp.in',
target='core/version.cpp',
VERSION_BUILD=VERSION)
bld.objects(
target='core-objects',
source=bld.path.find_node('core').ant_glob('*.cpp') + ['core/version.cpp'],
use='NDN_CXX BOOST',
includes='.',
export_includes='.')
bld.recurse('tools')
bld.recurse('tests')
if Utils.unversioned_sys_platform() == 'linux':
systemd_units = bld.path.ant_glob('systemd/*.in')
bld(features='subst',
name='systemd-units',
source=systemd_units,
target=[u.change_ext('') for u in systemd_units])
if bld.env.SPHINX_BUILD:
bld(features='sphinx',
name='manpages',
builder='man',
config='manpages/conf.py',
outdir='manpages',
source=bld.path.ant_glob('manpages/*.rst'),
install_path='${MANDIR}',
version=VERSION_BASE,
release=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.info')
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.info')
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)