diff --git a/examples/wscript b/examples/wscript index 71efc3a9e..93e8f83d6 100644 --- a/examples/wscript +++ b/examples/wscript @@ -1,19 +1,17 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- -import Params def build(bld): - def create_ns_prog(name, source, deps=['core', 'common', 'simulator']): - obj = bld.create_obj('cpp', 'program') - obj.target = name - obj.uselib_local = ["ns3-%s" % dep for dep in deps] - obj.source = source - return obj - obj = create_ns_prog('simple-global-routing', 'simple-global-routing.cc', - deps=['point-to-point', 'internet-node', 'global-routing']) - obj = create_ns_prog('simple-point-to-point', 'simple-point-to-point.cc', - deps=['point-to-point', 'internet-node']) - obj = create_ns_prog('csma-cd-one-subnet', 'csma-cd-one-subnet.cc', - deps=['csma-cd', 'internet-node']) - obj = create_ns_prog('csma-cd-packet-socket', 'csma-cd-packet-socket.cc', deps=['csma-cd', 'internet-node']) + obj = bld.create_ns3_program('simple-global-routing', + ['point-to-point', 'internet-node', 'global-routing']) + obj.source = 'simple-global-routing.cc' + + obj = bld.create_ns3_program('simple-point-to-point', ['point-to-point', 'internet-node']) + obj.source = 'simple-point-to-point.cc' + + obj = bld.create_ns3_program('csma-cd-one-subnet', ['csma-cd', 'internet-node']) + obj.source = 'csma-cd-one-subnet.cc' + + obj = bld.create_ns3_program('csma-cd-packet-socket', ['csma-cd', 'internet-node']) + obj.source = 'csma-cd-packet-socket.cc' diff --git a/samples/wscript b/samples/wscript index eb4e4f208..0ac6004e1 100644 --- a/samples/wscript +++ b/samples/wscript @@ -1,28 +1,37 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- -import Params def build(bld): - def create_ns_prog(name, source, deps=['core', 'common', 'simulator']): - obj = bld.create_obj('cpp', 'program') - obj.target = name - obj.uselib_local = ["ns3-%s" % dep for dep in deps] - obj.source = source - return obj - - obj = create_ns_prog('main-debug', ['main-debug.cc', 'main-debug-other.cc']) - obj = create_ns_prog('main-callback', 'main-callback.cc') - obj = create_ns_prog('main-ptr', 'main-ptr.cc') - #obj = create_ns_prog('main-trace', 'main-trace.cc') - obj = create_ns_prog('main-simulator', 'main-simulator.cc') - obj = create_ns_prog('main-header', 'main-header.cc') - obj = create_ns_prog('main-test', 'main-test.cc') - obj = create_ns_prog('main-simple', 'main-simple.cc', - deps=['node', 'internet-node', 'applications']) - #obj = create_ns_prog('main-simple-p2p', 'main-simple-p2p.cc', deps=['node', 'point-to-point']) - obj = create_ns_prog('main-default-value', 'main-default-value.cc', - deps=['core', 'simulator', 'node', 'point-to-point']) - obj = create_ns_prog('main-grid-topology', 'main-grid-topology.cc', - deps=['core', 'simulator', 'mobility', 'internet-node']) - obj = create_ns_prog('main-random-topology', 'main-random-topology.cc', - deps=['core', 'simulator', 'mobility']) + obj = bld.create_ns3_program('main-debug') + obj.source = ['main-debug.cc', 'main-debug-other.cc'] + + obj = bld.create_ns3_program('main-callback') + obj.source = 'main-callback.cc' + + obj = bld.create_ns3_program('main-ptr') + obj.source = 'main-ptr.cc' + + obj = bld.create_ns3_program('main-simulator') + obj.source = 'main-simulator.cc' + + obj = bld.create_ns3_program('main-header', ['common', 'simulator']) + obj.source = 'main-header.cc' + + obj = bld.create_ns3_program('main-test') + obj.source = 'main-test.cc' + + obj = bld.create_ns3_program('main-simple', + ['node', 'internet-node', 'applications']) + obj.source = 'main-simple.cc' + + obj = bld.create_ns3_program('main-default-value', + ['core', 'simulator', 'node', 'point-to-point']) + obj.source = 'main-default-value.cc' + + obj = bld.create_ns3_program('main-grid-topology', + ['core', 'simulator', 'mobility', 'internet-node']) + obj.source = 'main-grid-topology.cc' + + obj = bld.create_ns3_program('main-random-topology', + ['core', 'simulator', 'mobility']) + obj.source = 'main-random-topology.cc' diff --git a/src/applications/wscript b/src/applications/wscript index 0874d58ab..02aa11f7f 100644 --- a/src/applications/wscript +++ b/src/applications/wscript @@ -1,10 +1,7 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - obj = bld.create_obj('cpp', 'shlib') - obj.name = 'ns3-applications' - obj.target = obj.name - obj.uselib_local = ['ns3-node'] + obj = bld.create_ns3_module('applications', ['node']) obj.source = [ 'onoff-application.cc', ] diff --git a/src/common/wscript b/src/common/wscript index c1165026a..5f3df68b9 100644 --- a/src/common/wscript +++ b/src/common/wscript @@ -1,10 +1,7 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - common = bld.create_obj('cpp', 'shlib') - common.name = 'ns3-common' - common.target = common.name - common.uselib_local = ['ns3-core', 'ns3-simulator'] + common = bld.create_ns3_module('common', ['core', 'simulator']) common.source = [ 'buffer.cc', 'chunk.cc', diff --git a/src/core/wscript b/src/core/wscript index 139f1c56b..bba53ae71 100644 --- a/src/core/wscript +++ b/src/core/wscript @@ -26,9 +26,7 @@ def configure(conf): def build(bld): - core = bld.create_obj('cpp', 'shlib') - core.name = 'ns3-core' - core.target = core.name + core = bld.create_ns3_module('core') core.source = [ 'callback-test.cc', 'debug.cc', diff --git a/src/devices/csma-cd/wscript b/src/devices/csma-cd/wscript index 31497fd51..e82c41b58 100644 --- a/src/devices/csma-cd/wscript +++ b/src/devices/csma-cd/wscript @@ -2,10 +2,7 @@ def build(bld): - obj = bld.create_obj('cpp', 'shlib') - obj.name = 'ns3-csma-cd' - obj.target = obj.name - obj.uselib_local = ['ns3-node'] + obj = bld.create_ns3_module('csma-cd', ['node']) obj.source = [ 'backoff.cc', 'csma-cd-net-device.cc', diff --git a/src/devices/point-to-point/wscript b/src/devices/point-to-point/wscript index 77c26fd80..c788a7880 100644 --- a/src/devices/point-to-point/wscript +++ b/src/devices/point-to-point/wscript @@ -2,10 +2,7 @@ def build(bld): - module = bld.create_obj('cpp', 'shlib') - module.name = 'ns3-point-to-point' - module.target = module.name - module.uselib_local = ['ns3-node'] + module = bld.create_ns3_module('point-to-point', ['node']) module.source = [ 'point-to-point-net-device.cc', 'point-to-point-channel.cc', diff --git a/src/internet-node/wscript b/src/internet-node/wscript index e0af13434..6dbc4f164 100644 --- a/src/internet-node/wscript +++ b/src/internet-node/wscript @@ -2,10 +2,7 @@ def build(bld): - obj = bld.create_obj('cpp', 'shlib') - obj.name = 'ns3-internet-node' - obj.target = obj.name - obj.uselib_local = ['ns3-node', 'ns3-applications'] + obj = bld.create_ns3_module('internet-node', ['node', 'applications']) obj.source = [ 'internet-node.cc', 'ipv4-l4-demux.cc', diff --git a/src/mobility/wscript b/src/mobility/wscript index b20c5af67..66d9dfb4f 100644 --- a/src/mobility/wscript +++ b/src/mobility/wscript @@ -1,10 +1,7 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - mobility = bld.create_obj('cpp', 'shlib') - mobility.name = 'ns3-mobility' - mobility.target = mobility.name - mobility.uselib_local = ['ns3-core', 'ns3-simulator'] + mobility = bld.create_ns3_module('mobility', ['core', 'simulator']) mobility.source = [ 'grid-topology.cc', 'hierarchical-mobility-model.cc', diff --git a/src/node/wscript b/src/node/wscript index 17714f897..b9fd9552a 100644 --- a/src/node/wscript +++ b/src/node/wscript @@ -1,10 +1,7 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - node = bld.create_obj('cpp', 'shlib') - node.name = 'ns3-node' - node.target = node.name - node.uselib_local = ['ns3-core', 'ns3-common', 'ns3-simulator'] + node = bld.create_ns3_module('node', ['core', 'common', 'simulator']) node.source = [ 'address.cc', 'eui48-address.cc', diff --git a/src/routing/global-routing/wscript b/src/routing/global-routing/wscript index 787ef9308..b14a5c502 100644 --- a/src/routing/global-routing/wscript +++ b/src/routing/global-routing/wscript @@ -1,10 +1,7 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - module = bld.create_obj('cpp', 'shlib') - module.name = 'ns3-global-routing' - module.target = module.name - module.uselib_local = ['ns3-node'] + module = bld.create_ns3_module('global-routing', ['node']) module.source = [ 'global-router-interface.cc', 'global-route-manager.cc', diff --git a/src/simulator/wscript b/src/simulator/wscript index 9c7925f22..970a43aea 100644 --- a/src/simulator/wscript +++ b/src/simulator/wscript @@ -47,11 +47,7 @@ def configure(conf): def build(bld): - sim = bld.create_obj('cpp', 'shlib') - sim.name = 'ns3-simulator' - sim.target = sim.name - sim.uselib_local = ['ns3-core'] - + sim = bld.create_ns3_module('simulator', ['core']) sim.source = [ 'high-precision.cc', 'time.cc', diff --git a/src/wscript b/src/wscript index 092c7f4c8..3f42d122e 100644 --- a/src/wscript +++ b/src/wscript @@ -2,6 +2,7 @@ import os, os.path import shutil +import types import Action import Common @@ -47,10 +48,18 @@ def configure(conf): ## Used to link the 'run-tests' program with all of ns-3 code conf.env['NS3_MODULES'] = ['ns3-' + module.split('/')[-1] for module in all_modules] +def create_ns3_module(bld, name, dependencies=()): + module = bld.create_obj('cpp', 'shlib') + module.name = 'ns3-' + name + module.target = module.name + module.uselib_local = ['ns3-' + dep for dep in dependencies] + return module + def build(bld): Object.register('ns3header', Ns3Header) Action.Action('ns3header', func=_ns3_headers_inst, color='BLUE') + bld.create_ns3_module = types.MethodType(create_ns3_module, bld) bld.add_subdirs(list(all_modules)) diff --git a/utils/wscript b/utils/wscript index 27c509c01..68385e0d6 100644 --- a/utils/wscript +++ b/utils/wscript @@ -4,20 +4,15 @@ def build(bld): env = bld.env_of_name('default') - def create_ns_prog(name, source): - obj = bld.create_obj('cpp', 'program') - obj.target = name - obj.source = source - return obj - - unit_tests = create_ns_prog('run-tests', 'run-tests.cc') + unit_tests = bld.create_ns3_program('run-tests') unit_tests.install_var = 0 # do not install unit_tests.unit_test = 1 # runs on 'waf check' + unit_tests.source = 'run-tests.cc' ## link unit test program with all ns3 modules unit_tests.uselib_local = env['NS3_MODULES'] - obj = create_ns_prog('bench-simulator', 'bench-simulator.cc') - obj.uselib_local = "ns3-core ns3-common ns3-simulator" + obj = bld.create_ns3_program('bench-simulator', ['simulator']) + obj.source = 'bench-simulator.cc' - obj = create_ns_prog('replay-simulation', 'replay-simulation.cc') - obj.uselib_local = "ns3-core ns3-common ns3-simulator" + obj = bld.create_ns3_program('replay-simulation', ['simulator']) + obj.source = 'replay-simulation.cc' diff --git a/wscript b/wscript index 2241433dd..12600338c 100644 --- a/wscript +++ b/wscript @@ -2,12 +2,13 @@ import sys import shlex import shutil +import types +import optparse +import os.path import Params import Object import pproc as subprocess -import optparse -import os.path Params.g_autoconfig = 1 @@ -135,7 +136,17 @@ def configure(conf): conf.sub_config('src') +def create_ns3_program(bld, name, dependencies=('simulator',)): + program = bld.create_obj('cpp', 'program') + program.name = name + program.target = program.name + program.uselib_local = ['ns3-' + dep for dep in dependencies] + return program + + def build(bld): + bld.create_ns3_program = types.MethodType(create_ns3_program, bld) + variant_name = bld.env_of_name('default')['NS3_ACTIVE_VARIANT'] variant_env = bld.env_of_name(variant_name) bld.m_allenvs['default'] = variant_env # switch to the active variant