forked from named-data/ndnSIM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwscript
139 lines (107 loc) · 5.54 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
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
import os
from waflib import Logs, Utils, Options, TaskGen, Task
from waflib.Errors import WafError
import wutils
REQUIRED_BOOST_LIBS = ['graph', 'unit_test_framework']
def required_boost_libs(conf):
conf.env.REQUIRED_BOOST_LIBS += REQUIRED_BOOST_LIBS
def options(opt):
opt.load(['dependency-checker',
'doxygen', 'sphinx_build', 'type_traits', 'compiler-features'],
tooldir=['%s/.waf-tools' % opt.path.abspath()])
def configure(conf):
conf.load(['dependency-checker',
'doxygen', 'sphinx_build', 'type_traits', 'compiler-features'])
conf.env['ENABLE_NDNSIM']=False
if not os.environ.has_key('PKG_CONFIG_PATH'):
os.environ['PKG_CONFIG_PATH'] = ':'.join([
'/usr/local/lib/pkgconfig',
'/usr/local/lib64/pkgconfig',
'/usr/local/lib32/pkgconfig',
'/opt/local/lib/pkgconfig'])
conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'],
uselib_store='NDN_CXX', mandatory=True)
if not conf.env['LIB_BOOST']:
conf.report_optional_feature("ndnSIM", "ndnSIM", False,
"Required boost libraries not found")
Logs.error ("ndnSIM will not be build as it requires boost libraries of version at least 1.48")
conf.env['MODULES_NOT_BUILT'].append('ndnSIM')
return
else:
present_boost_libs = []
for boost_lib_name in conf.env['LIB_BOOST']:
if boost_lib_name.startswith("boost_"):
boost_lib_name = boost_lib_name[6:]
if boost_lib_name.endswith("-mt"):
boost_lib_name = boost_lib_name[:-3]
present_boost_libs.append(boost_lib_name)
missing_boost_libs = [lib for lib in REQUIRED_BOOST_LIBS if lib not in present_boost_libs]
if missing_boost_libs != []:
conf.report_optional_feature("ndnSIM", "ndnSIM", False,
"ndnSIM requires boost libraries: %s" % ' '.join(missing_boost_libs))
conf.env['MODULES_NOT_BUILT'].append('ndnSIM')
Logs.error ("ndnSIM will not be build as it requires boost libraries: %s" % ' '.join(missing_boost_libs))
Logs.error ("Please upgrade your distribution or install custom boost libraries (http://ndnsim.net/faq.html#boost-libraries)")
return
boost_version = conf.env.BOOST_VERSION.split('_')
if int(boost_version[0]) < 1 or int(boost_version[1]) < 48:
conf.report_optional_feature("ndnSIM", "ndnSIM", False,
"ndnSIM requires at least boost version 1.48")
conf.env['MODULES_NOT_BUILT'].append('ndnSIM')
Logs.error ("ndnSIM will not be build as it requires boost libraries of version at least 1.48")
Logs.error ("Please upgrade your distribution or install custom boost libraries (http://ndnsim.net/faq.html#boost-libraries)")
return
conf.env['ENABLE_NDNSIM']=True;
conf.env['MODULES_BUILT'].append('ndnSIM')
conf.report_optional_feature("ndnSIM", "ndnSIM", True, "")
def build(bld):
deps = ['core', 'network', 'point-to-point', 'topology-read', 'mobility', 'internet']
if 'ns3-visualizer' in bld.env['NS3_ENABLED_MODULES']:
deps.append('visualizer')
if bld.env.ENABLE_EXAMPLES:
deps += ['point-to-point-layout', 'csma', 'applications', 'wifi']
module = bld.create_ns3_module ('ndnSIM', deps)
module.module = 'ndnSIM'
module.features += ' ns3fullmoduleheaders'
module.use += ['NDN_CXX', 'BOOST']
module.includes = [".", "./NFD", "./NFD/daemon", "./NFD/core"]
module.export_includes = [".", "./NFD", "./NFD/daemon", "./NFD/core"]
headers = bld (features='ns3header')
headers.module = 'ndnSIM'
headers.source = ["ndn-all.hpp"]
if not bld.env['ENABLE_NDNSIM']:
bld.env['MODULES_NOT_BUILT'].append('ndnSIM')
return
module_dirs = ['NFD', 'apps', 'helper', 'model', 'utils']
module.source = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in module_dirs],
excl=['model/ip-faces/*'])
module.full_headers = [p.path_from(bld.path) for p in bld.path.ant_glob(
['%s/**/*.hpp' % dir for dir in module_dirs])]
if bld.env.ENABLE_EXAMPLES:
bld.recurse('examples')
if bld.env.ENABLE_TESTS:
bld.recurse('tests')
bld.ns3_python_bindings()
@TaskGen.feature('ns3fullmoduleheaders')
@TaskGen.after_method('process_rule')
def apply_ns3fullmoduleheaders(self):
# ## get all of the ns3 headers
ns3_dir_node = self.bld.path.find_or_declare("ns3")
mode = getattr(self, "mode", "install")
for filename in set(self.to_list(self.full_headers)):
src_node = self.path.find_resource(filename)
if src_node is None:
raise WafError("source ns3 header file %s not found" % (filename,))
dst_node = ns3_dir_node.find_or_declare(src_node.path_from(self.bld.path.find_dir('src')))
assert dst_node is not None
relpath = src_node.parent.path_from(self.bld.path.find_dir('src'))
task = self.create_task('ns3header')
task.mode = getattr(self, 'mode', 'install')
if task.mode == 'install':
self.bld.install_files('${INCLUDEDIR}/%s%s/ns3/%s' % (wutils.APPNAME, wutils.VERSION, relpath),
[src_node])
task.set_inputs([src_node])
task.set_outputs([dst_node])
else:
task.header_to_remove = dst_node