WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
authorGustavo J. A. M. Carneiro <gjc@inescporto.pt>
Wed, 08 Aug 2007 15:10:36 +0100
changeset 1217 2f7791ae388d
parent 1214 1297ae2f7ab6
child 1218 0d8d40279cb5
WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
examples/wscript
samples/wscript
src/applications/wscript
src/common/wscript
src/core/wscript
src/devices/csma-cd/wscript
src/devices/point-to-point/wscript
src/internet-node/wscript
src/mobility/wscript
src/node/wscript
src/routing/global-routing/wscript
src/simulator/wscript
src/wscript
utils/wscript
wscript
--- a/examples/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/examples/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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'
+
--- a/samples/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/samples/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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'
+
--- a/src/applications/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/applications/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
         ]
--- a/src/common/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/common/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/core/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/core/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -26,9 +26,7 @@
 
 
 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',
--- a/src/devices/csma-cd/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/devices/csma-cd/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/devices/point-to-point/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/devices/point-to-point/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/internet-node/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/internet-node/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/mobility/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/mobility/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/node/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/node/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/routing/global-routing/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/routing/global-routing/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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',
--- a/src/simulator/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/simulator/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -47,11 +47,7 @@
 
 
 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',
--- a/src/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/src/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -2,6 +2,7 @@
 
 import os, os.path
 import shutil
+import types
 
 import Action
 import Common
@@ -47,10 +48,18 @@
     ## 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))
 
--- a/utils/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/utils/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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'
--- a/wscript	Wed Aug 08 14:11:29 2007 +0100
+++ b/wscript	Wed Aug 08 15:10:36 2007 +0100
@@ -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 @@
     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