missing source nodes results in backtrace (instead of error message)
Building this sample code:
def build(bld):
bld.shlib(
target="foo",
source=bld.path.find_node("missing.c"),
)
results in this unfriendly backtrace:
Traceback (most recent call last):
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Scripting.py", line 119, in waf_entry_point
run_commands()
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Scripting.py", line 179, in run_commands
ctx=run_command(cmd_name)
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Scripting.py", line 170, in run_command
ctx.execute()
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Scripting.py", line 367, in execute
return execute_method(self)
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Build.py", line 93, in execute
self.execute_build()
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Build.py", line 96, in execute_build
self.recurse([self.run_dir])
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Context.py", line 126, in recurse
user_function(self)
File "/home/hblancha/work/tmp/buildscripts/wscript", line 19, in build
source=node,
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Configure.py", line 174, in fun
return f(*k,**kw)
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Tools/c_aliases.py", line 51, in shlib
set_features(kw,'shlib')
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Tools/c_aliases.py", line 44, in set_features
kw['features']=Utils.to_list(kw.get('features',[]))+Utils.to_list(sniff_features(**kw))
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Tools/c_aliases.py", line 15, in sniff_features
exts=get_extensions(kw['source'])
File "/home/hblancha/work/tmp/buildscripts/.waf-2.0.10-1a05499fcaee2319a5753809cde814bd/waflib/Tools/c_aliases.py", line 9, in get_extensions
for x in Utils.to_list(lst):
TypeError: 'NoneType' object is not iterable
In contrast, using a string results in a nice error message:
def build(bld):
bld.shlib(
target="foo",
source="missing.c",
)
results in
source not found: 'missing.c' in bld(target='foo, ...)
With variations in the exact backtrace, this seems to happen for all task generators I tried: bld.program, bld.shlib, bld.
Related: I haven't found a way to get an exception when a node I expect to be present is missing. All the node-creation methods seem to return None, so I'd need to check every call.