From cbcb2de0d8fe9687a7c0e1ffbaadec849c87a189 Mon Sep 17 00:00:00 2001 From: stevenknight Date: Fri, 17 Oct 2008 02:20:50 +0000 Subject: [PATCH] Issue 1568: fix a stack trace when --debug=include tries to handle a library as an argument. git-svn-id: http://scons.tigris.org/svn/scons/trunk@3694 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- src/CHANGES.txt | 3 +++ src/engine/SCons/Node/__init__.py | 5 ++++- test/option/debug-includes.py | 24 ++++++++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 8a16c8c8..4c89805c 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -24,6 +24,9 @@ RELEASE 1.X - XXX - Fix use of VariantDir when the -n option is used and doesn't, therefore, actually create the variant directory. + - Fix a stack trace from the --debug=includes option when passed a + static or shared library as an argument. + RELEASE 1.1.0 - Thu, 09 Oct 2008 08:33:47 -0700 diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 3a92b33c..871efff3 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -1104,7 +1104,10 @@ class Node: env = self.get_build_env() for s in self.sources: scanner = self.get_source_scanner(s) - path = self.get_build_scanner_path(scanner) + if scanner: + path = self.get_build_scanner_path(scanner) + else: + path = None def f(node, env=env, scanner=scanner, path=path): return node.get_found_includes(env, scanner, path) return SCons.Util.render_tree(s, f, 1) diff --git a/test/option/debug-includes.py b/test/option/debug-includes.py index 70857e66..41e5a842 100644 --- a/test/option/debug-includes.py +++ b/test/option/debug-includes.py @@ -38,8 +38,16 @@ import time test = TestSCons.TestSCons() test.write('SConstruct', """ -env = Environment(OBJSUFFIX = '.ooo', PROGSUFFIX = '.xxx') -env.Program('foo', Split('foo.c bar.c')) +env = Environment(OBJSUFFIX = '.obj', + SHOBJSUFFIX = '.shobj', + LIBPREFIX = '', + LIBSUFFIX = '.lib', + SHLIBPREFIX = '', + SHLIBSUFFIX = '.shlib', + ) +env.Program('foo.exe', ['foo.c', 'bar.c']) +env.StaticLibrary('foo', ['foo.c', 'bar.c']) +env.SharedLibrary('foo', ['foo.c', 'bar.c']) """) test.write('foo.c', r""" @@ -78,7 +86,7 @@ includes = """ +-foo.h +-bar.h """ -test.run(arguments = "--debug=includes foo.ooo") +test.run(arguments = "--debug=includes foo.obj") if string.find(test.stdout(), includes) == -1: print "Did not find expected string in standard output." @@ -88,6 +96,8 @@ if string.find(test.stdout(), includes) == -1: print test.stdout() test.fail_test() + + # In an ideal world, --debug=includes would also work when there's a build # failure, but this would require even more complicated logic to scan # all of the intermediate nodes that get skipped when the build failure @@ -102,14 +112,20 @@ if string.find(test.stdout(), includes) == -1: #THIS SHOULD CAUSE A BUILD FAILURE #""") -#test.run(arguments = "--debug=includes foo.xxx", +#test.run(arguments = "--debug=includes foo.exe", # status = 2, # stderr = None) #test.fail_test(string.find(test.stdout(), includes) == -1) + + # These shouldn't print out anything in particular, but # they shouldn't crash either: test.run(arguments = "--debug=includes .") test.run(arguments = "--debug=includes foo.c") +test.run(arguments = "--debug=includes foo.lib") +test.run(arguments = "--debug=includes foo.shlib") + + test.pass_test() -- 2.26.2