scons icon indicating copy to clipboard operation
scons copied to clipboard

Moving a target into a subdir of its current location with same name as target yields stacktrace

Open bdbaddog opened this issue 3 years ago • 2 comments

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

bdbaddog avatar Dec 19 '22 17:12 bdbaddog

See https://github.com/bdbaddog/scons-bugswork/tree/main/4282 for a downloadable example

bdbaddog avatar Dec 19 '22 17:12 bdbaddog

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())

bdbaddog avatar Dec 20 '22 18:12 bdbaddog