Add --debug=dtree option (Anthony Roach)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 5 Apr 2002 02:24:25 +0000 (02:24 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 5 Apr 2002 02:24:25 +0000 (02:24 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@319 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/engine/SCons/Script/__init__.py
test/option--debug.py

index 77dedc5c33bd63883fccf61825969f0f2cd0f2ab..3ce7f45b0d108261b423bb066379656bda1c79c6 100644 (file)
@@ -320,7 +320,14 @@ to the SCons invocation run by the debugger.
 .TP
 .RI --debug=tree
 Print the dependency tree
-after each top-level target is built.
+after each top-level target is built. This prints out the complete
+dependency tree including implicit dependencies and ignored
+dependencies.
+
+.TP
+.RI --debug=dtree
+Print the dependency tree
+after each top-level target is built. This prints out only derived files.
 
 .TP
 -e, --environment-overrides
index bd4f2ae853d7010d50f4696b9d91dc2534182702..143fa19e8a3c3d332fd5a851155bfb974600bb15 100644 (file)
@@ -88,7 +88,10 @@ class BuildTask(SCons.Taskmaster.Task):
         # this method is serialized, but execute isn't:
         if print_tree and self.top:
             print
-            print SCons.Util.render_tree(self.targets[0], get_children)
+            print SCons.Util.render_tree(self.targets[0], get_all_children)
+       if print_dtree and self.top:
+           print
+           print SCons.Util.render_tree(self.targets[0], get_derived_children)
 
     def failed(self):
         global exit_status
@@ -149,13 +152,18 @@ ignore_errors = 0
 keep_going_on_error = 0
 help_option = None
 print_tree = 0
+print_dtree = 0
 climb_up = 0
 target_top = None
 exit_status = 0 # exit status, assume success by default
 
 # utility functions
 
-def get_children(node): return node.all_children(None)
+def get_all_children(node): return node.all_children(None)
+
+def get_derived_children(node): 
+    children = node.all_children(None)
+    return filter(lambda x: x.builder, children)
 
 def _scons_syntax_error(e):
     """Handle syntax errors. Print out a message and show where the error
@@ -391,6 +399,7 @@ def options_init():
 
     def opt_debug(opt, arg):
         global print_tree
+        global print_dtree
         if arg == "pdb":
             args = [ sys.executable, "pdb.py" ] + \
                      filter(lambda x: x != "--debug=pdb", sys.argv)
@@ -405,6 +414,8 @@ def options_init():
                 os.execvpe(args[0], args, os.environ)
         elif arg == "tree":
             print_tree = 1
+        elif arg == "dtree":
+            print_dtree = 1
         else:
             sys.stderr.write("Warning:  %s is not a valid debug type\n"
                              % arg)
index 42274c45e0ef101807a811a7a6a1289278b5d1c5..ff791f0fe536b471212a8afce065b38aeee769c0 100644 (file)
@@ -90,6 +90,16 @@ test.fail_test(string.find(test.stdout(), tree) == -1)
 test.run(arguments = "--debug=tree " + foo)
 test.fail_test(string.find(test.stdout(), tree) == -1)
 
+
+tree = """
++-%s
+  +-foo%s
+  +-bar%s
+""" % (foo, obj,obj)
+
+test.run(arguments = "--debug=dtree " + foo)
+test.fail_test(string.find(test.stdout(), tree) == -1)
+
 tree = """scons: \".\" is up to date.
 
 +-.