Make emu and template modules not be built if not appropriate
authorMitch Watrous <watrous@u.washington.edu>
Fri, 27 May 2011 14:48:14 -0700
changeset 7291 d39c09dbc3d9
parent 7290 54af69b941fd
child 7292 34619df084fd
Make emu and template modules not be built if not appropriate
src/emu/wscript
src/flow-monitor/examples/wifi-olsr-flowmon.py
src/wscript
wscript
--- a/src/emu/wscript	Thu May 26 22:32:18 2011 +0100
+++ b/src/emu/wscript	Fri May 27 14:48:14 2011 -0700
@@ -20,26 +20,23 @@
         conf.env.append_value('NS3_EXECUTABLE_PATH', emucreatordir)
 
 def build(bld):
+    # Don't do anything for this module if emu's not enabled.
+    if not bld.env['ENABLE_EMU']:
+        return
+
     module = bld.create_ns3_module('emu', ['network'])
     module.source = [
+            'model/emu-net-device.cc',
+            'model/emu-encode-decode.cc',
+            'helper/emu-helper.cc',
         ]
+
     headers = bld.new_task_gen('ns3header')
     headers.module = 'emu'
     headers.source = [
-        ]
-
-    if not bld.env['ENABLE_EMU']:
-        return
-
-    module.source.extend([
-            'model/emu-net-device.cc',
-            'model/emu-encode-decode.cc',
-            'helper/emu-helper.cc',
-            ])
-    headers.source.extend([
             'model/emu-net-device.h',
             'helper/emu-helper.h',
-            ])
+        ]
 
     obj = bld.create_suid_program('emu-sock-creator')
     obj.source = [
--- a/src/flow-monitor/examples/wifi-olsr-flowmon.py	Thu May 26 22:32:18 2011 +0100
+++ b/src/flow-monitor/examples/wifi-olsr-flowmon.py	Fri May 27 14:48:14 2011 -0700
@@ -108,6 +108,7 @@
     flowmon_helper = ns.flow_monitor.FlowMonitorHelper()
     #flowmon_helper.SetMonitorAttribute("StartTime", ns.core.TimeValue(ns.core.Seconds(31)))
     monitor = flowmon_helper.InstallAll()
+    monitor = flowmon_helper.GetMonitor()
     monitor.SetAttribute("DelayBinWidth", ns.core.DoubleValue(0.001))
     monitor.SetAttribute("JitterBinWidth", ns.core.DoubleValue(0.001))
     monitor.SetAttribute("PacketSizeBinWidth", ns.core.DoubleValue(20))
--- a/src/wscript	Thu May 26 22:32:18 2011 +0100
+++ b/src/wscript	Fri May 27 14:48:14 2011 -0700
@@ -1,6 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 import os, os.path
+import sys
 import shutil
 import types
 import warnings
@@ -20,7 +21,7 @@
 except NameError:
     from sets import Set as set # Python 2.3 fallback
 
-all_modules = (
+all_modules = [
     'core',
     'network',
     'config-store',
@@ -60,7 +61,7 @@
     'point-to-point-layout',
     'csma-layout',
     'template',
-    )
+    ]
 
 def set_options(opt):
     opt.sub_options('core')
@@ -282,6 +283,21 @@
     bld.create_obj = types.MethodType(create_obj, bld)
     bld.ns3_python_bindings = types.MethodType(ns3_python_bindings, bld)
     
+    # Remove the emu module from the list of all modules if it
+    # is there and emu is not enabled.
+    emu_module_name = 'emu'
+    if emu_module_name in all_modules:
+        if not bld.env['ENABLE_EMU']:
+            all_modules.remove(emu_module_name)
+
+    # Remove the template module from the list of all modules if this
+    # is a static build on Darwin because they don't work there for
+    # the template module.  This is probably because it is empty.
+    template_module_name = 'template'
+    if template_module_name in all_modules:
+        if bld.env['ENABLE_STATIC_NS3'] and sys.platform == 'darwin':
+            all_modules.remove(template_module_name)
+
     bld.add_subdirs(list(all_modules))
 
     for module in all_modules:
--- a/wscript	Thu May 26 22:32:18 2011 +0100
+++ b/wscript	Fri May 27 14:48:14 2011 -0700
@@ -102,6 +102,24 @@
     shutil.rmtree("doc/latex", True)
     shutil.rmtree("nsc", True)
 
+# Print the module names without prefixes, sorted, and in columns.
+def print_module_names(names):
+    # Get the sorted list of module names without the "ns3-" prefix.
+    names_without_prefix =[name[len('ns3-'):] for name in names]
+    names_without_prefix.sort()
+
+    # Print the list of module names in 3 columns.
+    i = 1
+    for name in names_without_prefix:
+        print name.ljust(25),
+        if i == 3:
+                print
+                i = 0
+        i = i+1
+
+    if i != 1:
+        print
+
 def set_options(opt):
     # options provided by the modules
     opt.tool_options('compiler_cc')
@@ -293,6 +311,36 @@
             if conf.check_compilation_flag('-Wl,--soname=foo'):
                 env['WL_SONAME_SUPPORTED'] = True
 
+    env['ENABLE_STATIC_NS3'] = False
+    if Options.options.enable_static:
+        if env['PLATFORM'].startswith('linux') and \
+                env['CXX_NAME'] in ['gcc', 'icc']:
+            if re.match('i[3-6]86', os.uname()[4]):
+                conf.report_optional_feature("static", "Static build", True, '')
+                env['ENABLE_STATIC_NS3'] = True
+            elif os.uname()[4] == 'x86_64':
+                if env['ENABLE_PYTHON_BINDINGS'] and \
+                        not conf.check_compilation_flag('-mcmodel=large'):
+                    conf.report_optional_feature("static", "Static build", False,
+                                                 "Can't enable static builds because " + \
+                                                     "no -mcmodel=large compiler " \
+                                                     "option. Try --disable-python or upgrade your " \
+                                                     "compiler to at least gcc 4.3.x.")
+                else:
+                    conf.report_optional_feature("static", "Static build", True, '')
+                    env['ENABLE_STATIC_NS3'] = True                    
+        elif env['CXX_NAME'] == 'gcc' and \
+                (env['PLATFORM'].startswith('darwin') or \
+                     env['PLATFORM'].startswith('cygwin')):
+                conf.report_optional_feature("static", "Static build", True, '')
+                env['ENABLE_STATIC_NS3'] = True
+        else:
+            conf.report_optional_feature("static", "Static build", False,
+                                         "Unsupported platform")
+    else:
+        conf.report_optional_feature("static", "Static build", False,
+                                     "option --enable-static not selected")
+
     conf.sub_config('src')
 
     # Set the list of enabled modules.
@@ -309,6 +357,29 @@
             # Enable the modules from the list.
             conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
                                                modules_enabled]
+
+    # Remove the emu module from the list of enabled modules if it
+    # is there and emu is not enabled.
+    conf.env['NS3_ENABLED_MODULES_NOT_BUILT'] = []
+    emu_module_name = 'ns3-emu'
+    if emu_module_name in conf.env['NS3_ENABLED_MODULES']:
+        if not conf.env['ENABLE_EMU']:
+            conf.env['NS3_ENABLED_MODULES'].remove(emu_module_name)
+            conf.env['NS3_ENABLED_MODULES_NOT_BUILT'].append(emu_module_name)
+            if not conf.env['NS3_ENABLED_MODULES']:
+                raise Utils.WafError("Exiting because the emu module can not be built and it was the only one enabled.")
+
+    # Remove the template module from the list of enabled modules if
+    # this is a static build on Darwin because they don't work there
+    # for the template module.  This is probably because it is empty.
+    template_module_name = 'ns3-template'
+    if template_module_name in conf.env['NS3_ENABLED_MODULES']:
+        if conf.env['ENABLE_STATIC_NS3'] and sys.platform == 'darwin':
+            conf.env['NS3_ENABLED_MODULES'].remove(template_module_name)
+            conf.env['NS3_ENABLED_MODULES_NOT_BUILT'].append(template_module_name)
+            if not conf.env['NS3_ENABLED_MODULES']:
+                raise Utils.WafError("Exiting because the template module can not be built and it was the only one enabled.")
+
     conf.sub_config('bindings/python')
 
     conf.sub_config('src/mpi')
@@ -380,36 +451,6 @@
 
     conf.find_program('valgrind', var='VALGRIND')
 
-    env['ENABLE_STATIC_NS3'] = False
-    if Options.options.enable_static:
-        if env['PLATFORM'].startswith('linux') and \
-                env['CXX_NAME'] in ['gcc', 'icc']:
-            if re.match('i[3-6]86', os.uname()[4]):
-                conf.report_optional_feature("static", "Static build", True, '')
-                env['ENABLE_STATIC_NS3'] = True
-            elif os.uname()[4] == 'x86_64':
-                if env['ENABLE_PYTHON_BINDINGS'] and \
-                        not conf.check_compilation_flag('-mcmodel=large'):
-                    conf.report_optional_feature("static", "Static build", False,
-                                                 "Can't enable static builds because " + \
-                                                     "no -mcmodel=large compiler " \
-                                                     "option. Try --disable-python or upgrade your " \
-                                                     "compiler to at least gcc 4.3.x.")
-                else:
-                    conf.report_optional_feature("static", "Static build", True, '')
-                    env['ENABLE_STATIC_NS3'] = True                    
-        elif env['CXX_NAME'] == 'gcc' and \
-                (env['PLATFORM'].startswith('darwin') or \
-                     env['PLATFORM'].startswith('cygwin')):
-                conf.report_optional_feature("static", "Static build", True, '')
-                env['ENABLE_STATIC_NS3'] = True
-        else:
-            conf.report_optional_feature("static", "Static build", False,
-                                         "Unsupported platform")
-    else:
-        conf.report_optional_feature("static", "Static build", False,
-                                     "option --enable-static not selected")
-
     # These flags are used for the implicitly dependent modules.
     if env['ENABLE_STATIC_NS3']:
         if sys.platform == 'darwin':
@@ -733,25 +774,20 @@
         return
     env = bld.env
 
-    # Don't print the list if this a clean or distribution clean.
+    # Don't print the lists if this a clean or distribution clean.
     if ('clean' not in Options.arg_line) and ('distclean' not in Options.arg_line):
 
-        # Get the sorted list of built modules without the "ns3-" in their name.
-        modules_without_prefix =[mod[len('ns3-'):] for mod in env['NS3_ENABLED_MODULES']]
-        modules_without_prefix.sort()
-
-        # Print the list of built modules in 3 columns.
+        # Print the list of built modules.
         print
         print 'Modules built:'
-        i = 1
-        for mod in modules_without_prefix:
-            print mod.ljust(25),
-            if i == 3:
-                    print
-                    i = 0
-            i = i+1
+        print_module_names(env['NS3_ENABLED_MODULES'])
         print
-        print
+
+        # Print the list of enabled modules that were not built.
+        if env['NS3_ENABLED_MODULES_NOT_BUILT']:
+            print 'Modules not built:'
+            print_module_names(env['NS3_ENABLED_MODULES_NOT_BUILT'])
+            print
 
     # Write the build status file.
     build_status_file = os.path.join (env['NS3_BUILDDIR'], env['NS3_ACTIVE_VARIANT'], 'build-status.py')