This is a massive upgrade removing almost all pre-waf 1.6 script code. In addition, this does away with custom pkgconfig.py script for making .pc files and replaces it with waf's builtin mechanism. Massive thanks to Alex Afanasyev for ideas and bugfixing, to Alina Quereilhac for bugfixing and testing, and to Tom Henderson for thorough testing.
106 lines
3.8 KiB
Python
106 lines
3.8 KiB
Python
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
|
|
|
import os
|
|
|
|
from waflib import Options
|
|
|
|
|
|
def options(opt):
|
|
opt.add_option('--with-brite',
|
|
help=('Use BRITE integration support, given by the indicated path,'
|
|
' to allow the use of the BRITE topology generator'),
|
|
default=False, dest='with_brite')
|
|
|
|
def configure(conf):
|
|
conf.env['ENABLE_BRITE'] = False
|
|
|
|
if Options.options.with_brite:
|
|
if os.path.isdir(Options.options.with_brite):
|
|
conf.msg("Checking BRITE location", ("%s (given)" % Options.options.with_brite))
|
|
conf.env['WITH_BRITE'] = os.path.abspath(Options.options.with_brite)
|
|
else:
|
|
brite_dir = os.path.join('..','BRITE')
|
|
if os.path.isdir(brite_dir):
|
|
conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_dir))
|
|
conf.env['WITH_BRITE'] = os.path.abspath(brite_dir)
|
|
del brite_dir
|
|
if not conf.env['WITH_BRITE']:
|
|
conf.msg("Checking for BRITE location", False)
|
|
conf.report_optional_feature("brite", "BRITE Integration", False,
|
|
"BRITE not found (see option --with-brite)")
|
|
# Add this module to the list of modules that won't be built
|
|
# if they are enabled.
|
|
conf.env['MODULES_NOT_BUILT'].append('brite')
|
|
|
|
return
|
|
else:
|
|
conf.report_optional_feature("brite", "BRITE Integration", False, 'BRITE not enabled (see option --with-brite)')
|
|
|
|
# Add this module to the list of modules that won't be built
|
|
# if they are enabled.
|
|
conf.env['MODULES_NOT_BUILT'].append('brite')
|
|
|
|
return
|
|
|
|
test_code = '''
|
|
#include "Brite.h"
|
|
|
|
int main()
|
|
{
|
|
return 0;
|
|
}
|
|
'''
|
|
|
|
conf.env['DL'] = conf.check(mandatory=True, lib='dl', define_name='DL', uselib='DL')
|
|
|
|
conf.env.append_value('NS3_MODULE_PATH',os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.')))
|
|
|
|
conf.env['INCLUDES_BRITE'] = os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.'))
|
|
|
|
conf.env['CPPPATH_BRITE'] = [
|
|
os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.')),
|
|
os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'Models'))
|
|
]
|
|
conf.env['LIBPATH_BRITE'] = [os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.'))]
|
|
|
|
conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
|
|
conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
|
|
|
|
conf.env['BRITE'] = conf.check(fragment=test_code, lib='brite', libpath=conf.env['LIBPATH_BRITE'], use='BRITE DL')
|
|
conf.report_optional_feature("brite", "BRITE Integration",
|
|
conf.env['BRITE'], "BRITE library not found")
|
|
|
|
if conf.env['BRITE']:
|
|
conf.env['ENABLE_BRITE'] = True
|
|
conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
|
|
conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
|
|
|
|
def build(bld):
|
|
# Don't do anything for this module if brite's not enabled.
|
|
if 'brite' in bld.env['MODULES_NOT_BUILT']:
|
|
return
|
|
|
|
module = bld.create_ns3_module('brite', ['network', 'core', 'internet', 'point-to-point'])
|
|
module.source = [
|
|
]
|
|
|
|
module_test = bld.create_ns3_module_test_library('brite')
|
|
module_test.source = [
|
|
]
|
|
|
|
if bld.env['BRITE'] and bld.env['DL']:
|
|
module.uselib = 'BRITE DL'
|
|
|
|
headers = bld(features='ns3header')
|
|
headers.module = 'brite'
|
|
headers.source = [
|
|
]
|
|
|
|
if bld.env['ENABLE_BRITE']:
|
|
module.source.append ('helper/brite-topology-helper.cc')
|
|
headers.source.append ('helper/brite-topology-helper.h')
|
|
module_test.source.append('test/brite-test-topology.cc')
|
|
|
|
if bld.env['ENABLE_EXAMPLES'] and bld.env['ENABLE_BRITE']:
|
|
bld.recurse('examples')
|