summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2008-10-17 02:20:50 (GMT)
committerSteven Knight <knight@baldmt.com>2008-10-17 02:20:50 (GMT)
commit0a99af4232a3be2d11a255c395e4ad757638c492 (patch)
tree9f16c8e29ffb2466c50b267a7d6f4c7c186729df
parent594f48886dfb67c4c2d232561007583bbceb3238 (diff)
downloadSCons-0a99af4232a3be2d11a255c395e4ad757638c492.zip
SCons-0a99af4232a3be2d11a255c395e4ad757638c492.tar.gz
SCons-0a99af4232a3be2d11a255c395e4ad757638c492.tar.bz2
Issue 1568: fix a stack trace when --debug=include tries to handle
a library as an argument.
-rw-r--r--src/CHANGES.txt3
-rw-r--r--src/engine/SCons/Node/__init__.py5
-rw-r--r--test/option/debug-includes.py24
3 files changed, 27 insertions, 5 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 8a16c8c..4c89805 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 3a92b33..871efff 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 70857e6..41e5a84 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()