diff options
author | Steven Knight <knight@baldmt.com> | 2003-02-26 17:40:22 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2003-02-26 17:40:22 (GMT) |
commit | c98c5391f5afa134589db88ebe986368a1b6097f (patch) | |
tree | 1a7e0f06222b16f346e09b1dcfc185e470fbd3e5 /src/engine/SCons/Script/SConscript.py | |
parent | 8a816e6362b715a238183ae25551dbb6df7cddc3 (diff) | |
download | SCons-c98c5391f5afa134589db88ebe986368a1b6097f.zip SCons-c98c5391f5afa134589db88ebe986368a1b6097f.tar.gz SCons-c98c5391f5afa134589db88ebe986368a1b6097f.tar.bz2 |
Fix str(Node.FS) in an SConscript file, and add a separate src_dir argument to SConscript(). (Charles Crain)
Diffstat (limited to 'src/engine/SCons/Script/SConscript.py')
-rw-r--r-- | src/engine/SCons/Script/SConscript.py | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index 4c54879..dfcfe5b 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -163,7 +163,17 @@ def GetSConscriptFilenames(ls, kw): if not src_dir: src_dir, fname = os.path.split(str(files[0])) else: - fname = os.path.split(files[0])[1] + if not isinstance(src_dir, SCons.Node.Node): + src_dir = SCons.Node.FS.default_fs.Dir(src_dir) + fn = files[0] + if not isinstance(fn, SCons.Node.Node): + fn = SCons.Node.FS.default_fs.File(fn) + if fn.is_under(src_dir): + # Get path relative to the source directory. + fname = fn.get_path(src_dir) + else: + # Fast way to only get the terminal path component of a Node. + fname = fn.get_path(fn.dir) BuildDir(build_dir, src_dir, duplicate) files = [os.path.join(str(build_dir), fname)] @@ -187,7 +197,13 @@ def SConscript(*ls, **kw): else: f = SCons.Node.FS.default_fs.File(str(fn)) _file_ = None + old_dir = SCons.Node.FS.default_fs.getcwd() + SCons.Node.FS.default_fs.chdir(SCons.Node.FS.default_fs.Dir('#'), + change_os_dir=1) if f.rexists(): + # Change directory to top of source tree to make sure + # the os's cwd and the cwd of SCons.Node.FS.default_fs + # match so we can open the SConscript. _file_ = open(f.rstr(), "r") elif f.has_builder(): # The SConscript file apparently exists in a source @@ -199,17 +215,13 @@ def SConscript(*ls, **kw): s = str(f) if os.path.exists(s): _file_ = open(s, "r") - if _file_: - SCons.Node.FS.default_fs.chdir(f.dir) - if sconscript_chdir: - old_dir = os.getcwd() - os.chdir(str(f.dir)) - + SCons.Node.FS.default_fs.chdir(f.dir, + change_os_dir=sconscript_chdir) # prepend the SConscript directory to sys.path so # that Python modules in the SConscript directory can # be easily imported - sys.path = [os.path.abspath(str(f.dir))] + sys.path + sys.path = [ f.dir.abspath ] + sys.path # This is the magic line that actually reads up and # executes the stuff in the SConscript file. We @@ -227,7 +239,8 @@ def SConscript(*ls, **kw): frame = stack.pop() SCons.Node.FS.default_fs.chdir(frame.prev_dir) if old_dir: - os.chdir(old_dir) + SCons.Node.FS.default_fs.chdir(old_dir, + change_os_dir=sconscript_chdir) results.append(frame.retval) @@ -390,11 +403,10 @@ def Clean(target, files): else: nodes.extend(SCons.Node.arg2nodes(f, SCons.Node.FS.default_fs.Entry)) - s = str(target) - if clean_targets.has_key(s): - clean_targets[s].extend(nodes) - else: - clean_targets[s] = nodes + try: + clean_targets[target].extend(nodes) + except KeyError: + clean_targets[target] = nodes def AddPreAction(files, action): nodes = SCons.Node.arg2nodes(files, SCons.Node.FS.default_fs.Entry) |