Bug #609: --check and --regression should build only the required binaries
authorGustavo J. A. M. Carneiro <gjc@inescporto.pt>
Mon, 07 Sep 2009 11:59:10 +0100
changeset 4760 f774ff724ee4
parent 4759 a18ac083ec51
child 4761 8c0b3a413f4b
Bug #609: --check and --regression should build only the required binaries
regression.py
wscript
--- a/regression.py	Mon Sep 07 11:45:05 2009 +0200
+++ b/regression.py	Mon Sep 07 11:59:10 2009 +0100
@@ -91,10 +91,32 @@
         self.env = env
         super(regression_test_task, self).__init__(generator=self, env=env)
         self.test_name = test_name
+
+        assert self.test_name.startswith('test-')
+        short_name = self.test_name[len('test-'):]
+
         self.test_scripts_dir = test_scripts_dir
         self.build_traces_dir = build_traces_dir
         self.reference_traces_dir = reference_traces
 
+        sys.path.insert(0, self.test_scripts_dir)
+        try:
+            mod = __import__(self.test_name, globals(), locals(), [])
+        finally:
+            sys.path.remove(self.test_scripts_dir)
+        self.mod = mod
+        if hasattr(mod, 'may_run'):
+            reason_cannot_run = mod.may_run(self.env, Options.options)
+        else:
+            reason_cannot_run = None
+        if not reason_cannot_run:
+            pyscript = getattr(mod, "pyscript", None)
+            if pyscript:
+                Options.options.compile_targets += ',ns3module'
+            else:
+                program = getattr(mod, "program", short_name)
+                Options.options.compile_targets += ',' + program
+
     def __str__(self):
         return 'regression-test (%s)\n' % self.test_name
 
@@ -103,15 +125,9 @@
 
     def run(self):
         """Run a single test"""
-        sys.path.insert(0, self.test_scripts_dir)
-        try:
-            mod = __import__(self.test_name, globals(), locals(), [])
-        finally:
-            sys.path.remove(self.test_scripts_dir)
-
         assert self.test_name.startswith('test-')
         short_name = self.test_name[len('test-'):]
-
+        mod = self.mod
         trace_dir_name = getattr(mod, "trace_dir_name", None)
         if trace_dir_name is None:
             trace_dir_name = "%s.ref" % short_name
--- a/wscript	Mon Sep 07 11:45:05 2009 +0200
+++ b/wscript	Mon Sep 07 11:59:10 2009 +0100
@@ -542,11 +542,10 @@
         # When --run'ing a program, tell WAF to only build that program,
         # nothing more; this greatly speeds up compilation when all you
         # want to do is run a test program.
-        if not Options.options.compile_targets:
-            Options.options.compile_targets = os.path.basename(program_name)
-            for gen in bld.all_task_gen:
-                if type(gen).__name__ in ['ns3header_taskgen', 'ns3moduleheader_taskgen']:
-                    gen.post()
+        Options.options.compile_targets += ',' + os.path.basename(program_name)
+        for gen in bld.all_task_gen:
+            if type(gen).__name__ in ['ns3header_taskgen', 'ns3moduleheader_taskgen']:
+                gen.post()
 
     if Options.options.regression or Options.options.regression_generate:
         regression_traces = env['REGRESSION_TRACES']
@@ -556,6 +555,7 @@
         regression.run_regression(bld, regression_traces)
 
     if Options.options.check:
+        Options.options.compile_targets += ',run-tests,ns3module'
         _run_check(bld)