wscript
changeset 1880 0148d5911946
parent 1858 68e1964c19e8
child 2178 763aa96fffd4
--- a/wscript	Thu Dec 06 13:30:26 2007 +0100
+++ b/wscript	Sun Dec 09 14:39:07 2007 +0000
@@ -144,6 +144,10 @@
     conf.sub_config('src')
     conf.sub_config('utils')
 
+    if Params.g_options.enable_modules:
+        conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
+                                           Params.g_options.enable_modules.split(',')]
+
 
 def create_ns3_program(bld, name, dependencies=('simulator',)):
     program = bld.create_obj('cpp', 'program')
@@ -179,10 +183,56 @@
         raise SystemExit(0)
 
     # process subfolders from here
-    bld.add_subdirs('lib') # first subdirs are processed last by WAF
     bld.add_subdirs('src')
     bld.add_subdirs('samples utils examples tutorial')
 
+    ## if --enabled-modules option was given, we disable building the
+    ## modules that were not enabled, and programs that depend on
+    ## disabled modules.
+    env = bld.env()
+
+    if Params.g_options.enable_modules:
+        Params.warning("the option --enable-modules is being applied to this build only;"
+                       " to make it permanent it needs to be given to waf configure.")
+        env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
+                                      Params.g_options.enable_modules.split(',')]
+
+    if env['NS3_ENABLED_MODULES']:
+        modules = env['NS3_ENABLED_MODULES']
+        changed = True
+        while changed:
+            changed = False
+            for module in modules:
+                module_obj = Object.name_to_obj(module)
+                if module_obj is None:
+                    raise ValueError("module %s not found" % module)
+                for dep in module_obj.add_objects:
+                    if not dep.startswith('ns3-'):
+                        continue
+                    if dep not in modules:
+                        modules.append(dep)
+                        changed = True
+
+        ## remove objects that depend on modules not listed
+        for obj in list(Object.g_allobjs):
+            if hasattr(obj, 'ns3_module_dependencies'):
+                for dep in obj.ns3_module_dependencies:
+                    if dep not in modules:
+                        Object.g_allobjs.remove(obj)
+                        break
+            if obj.name in env['NS3_MODULES'] and obj.name not in modules:
+                Object.g_allobjs.remove(obj)
+
+    ## Create a single ns3 library containing all enabled modules
+    lib = bld.create_obj('cpp', 'shlib')
+    lib.name = 'ns3'
+    lib.target = 'ns3'
+    if env['NS3_ENABLED_MODULES']:
+        lib.add_objects = list(modules)
+    else:
+        lib.add_objects = list(env['NS3_MODULES'])
+
+
 
 
 def shutdown():