diff options
| author | Steven Knight <knight@baldmt.com> | 2002-04-11 18:24:32 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2002-04-11 18:24:32 (GMT) |
| commit | 0bf9bbc298b57b985bb84f8c60bbc70eca71bbaa (patch) | |
| tree | 10a6357ff5391b94c429748a5cac121562551307 | |
| parent | e7578889702d1be9231592a0b2a39050f3702c51 (diff) | |
| download | SCons-0bf9bbc298b57b985bb84f8c60bbc70eca71bbaa.zip SCons-0bf9bbc298b57b985bb84f8c60bbc70eca71bbaa.tar.gz SCons-0bf9bbc298b57b985bb84f8c60bbc70eca71bbaa.tar.bz2 | |
Change to SConscript directory when reading it. (Steve Leblanc)
| -rw-r--r-- | doc/man/scons.1 | 22 | ||||
| -rw-r--r-- | src/CHANGES.txt | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Script/SConscript.py | 15 |
3 files changed, 41 insertions, 0 deletions
diff --git a/doc/man/scons.1 b/doc/man/scons.1 index b3ed141..543a259 100644 --- a/doc/man/scons.1 +++ b/doc/man/scons.1 @@ -1347,6 +1347,28 @@ SConscript('dir/SConscript') foo = SConscript('subdir/SConscript', "env") .EE +.TP +.RI SConscriptChdir( value ) +When a non-negative +.I value +is specified, +this instructs +.B scons +to change its working directory (chdir) +to the directory in which each subsidiary +configure (SConscript) file lives. +Note that you may enable and disable +this ability by calling +.R SConscriptChdir() +multiple times: + +.ES +SConscriptChdir(1) +SConscript('foo/SConscript') # will chdir to foo +SConscriptChdir(0) +SConscript('bar/SConscript') # will not chdir to bar +.EE + .TP .RI SetCommandHandler( function ) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 5fb3c00..f7de1c8 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -20,6 +20,10 @@ RELEASE 0.07 - - Man page: Add a hierarchical libraries + Program example. + From Steve Leblanc: + + - Add the SConscriptChdir() method. + From Anthony Roach: - Fix --debug=tree when used with directory targets. diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index 5552015..eb1a13e 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -38,6 +38,7 @@ import SCons.Node import SCons.Node.FS import SCons.Util +import os import string import sys @@ -48,6 +49,13 @@ arguments = {} # global exports set by Export(): global_exports = {} +# chdir flag +sconscript_chdir = 0 + +def SConscriptChdir(flag): + global sconscript_chdir + sconscript_chdir = flag + def _scons_add_args(alist): global arguments for arg in alist: @@ -98,6 +106,7 @@ def SConscript(script, exports=[]): # push: stack.append(Frame(exports)) + old_dir = None try: # call: if script == "-": @@ -108,6 +117,9 @@ def SConscript(script, exports=[]): if script.exists(): file = open(str(script), "r") SCons.Node.FS.default_fs.chdir(script.dir) + if sconscript_chdir: + old_dir = os.getcwd() + os.chdir(str(script.dir)) exec file in stack[-1].globals else: sys.stderr.write("Ignoring missing SConscript '%s'\n" % script.path) @@ -115,6 +127,8 @@ def SConscript(script, exports=[]): # pop: frame = stack.pop() SCons.Node.FS.default_fs.chdir(frame.prev_dir) + if old_dir: + os.chdir(old_dir) return frame.retval @@ -188,6 +202,7 @@ def BuildDefaultGlobals(): globals['Return'] = Return globals['Scanner'] = SCons.Scanner.Base globals['SConscript'] = SConscript + globals['SConscriptChdir'] = SConscriptChdir globals['SetCommandHandler'] = SCons.Action.SetCommandHandler globals['WhereIs'] = SCons.Util.WhereIs return globals |
