scons
scons copied to clipboard
Moving a target into a subdir of its current location with same name as target yields stacktrace
Describe the bug Here's a sample SConstruct which demonstrates the issue.
env=Environment()
if ARGUMENTS.get('dir', 0):
env.Program('dir1/main/main','main.c')
else:
env.Program('dir1/main','main.c')
If you run as
scons
# followed by
scons dir=1
Or the reverse
You'll get a stack trace.
Required information
- Link to SCons Users thread discussing your issue.
- Version of SCons Any
- Version of Python Any
- Which python distribution if applicable (python.org, cygwin, anaconda, macports, brew,etc) Any
- How you installed SCons N/A
- What Platform are you on? (Linux/Windows and which version) N/A
- How to reproduce your issue? Please include a small self contained reproducer. Likely a SConstruct should do for most issues. See description above
- How you invoke scons (The command line you're using "scons --flags some_arguments") See description above
See https://github.com/bdbaddog/scons-bugswork/tree/main/4282 for a downloadable example
Sample Stacktrace:
TypeError: Directory /work/mongo/build/debug/mongo/tools/mongobridge found where file expected.:
File "/work/mongo/SConstruct", line 5558:
env.SConscript(
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 597:
return _SConscript(self.fs, *files, **subst_kw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 286:
exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
File "/work/mongo/src/SConscript", line 37:
env.SConscript('mongo/SConscript', exports=['env'])
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 597:
return _SConscript(self.fs, *files, **subst_kw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 286:
exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
File "/work/mongo/src/mongo/SConscript", line 24:
env.SConscript(
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 597:
return _SConscript(self.fs, *files, **subst_kw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Script/SConscript.py", line 286:
exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
File "/work/mongo/src/mongo/tools/SConscript", line 11:
mongobridge = env.Program(
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Environment.py", line 255:
return MethodWrapper.__call__(self, target, source, *args, **kw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Environment.py", line 219:
return self.method(*nargs, **kwargs)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Builder.py", line 653:
return self._execute(env, target, source, OverrideWarner(kw), ekw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Builder.py", line 563:
tlist, slist = self._create_nodes(env, target, source)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Builder.py", line 508:
tlist = env.arg2nodes(target, target_factory, target=target, source=source)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Environment.py", line 478:
v = node_factory(self.subst(v, **kw))
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 1382:
return self._lookup(name, directory, File, create)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 1361:
return root._lookup_abs(p, fsclass, create)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 2398:
result.diskcheck_match()
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 2630:
diskcheck_match(self, self.isdir,
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 393:
return self.func(*args, **kw)
File "/work/mongo/src/third_party/scons-3.1.2/scons-local-3.1.2/SCons/Node/FS.py", line 414:
raise TypeError(errorfmt % node.get_abspath())