Change to SConscript directory when reading it. (Steve Leblanc)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 11 Apr 2002 18:24:32 +0000 (18:24 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 11 Apr 2002 18:24:32 +0000 (18:24 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@327 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Script/SConscript.py

index b3ed1413f796a4a37af1ced22e5874196c262f11..543a259c3fcb9b9c3864a462513c0b7a09d3df55 100644 (file)
@@ -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 )
 
index 5fb3c0095c87a9fa3cb47468b81cf149754d2725..f7de1c830a9b21f4223b695545ab0affef8da0d3 100644 (file)
@@ -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.
index 55520150d81bf5139830fe4629ee5246f8097502..eb1a13e9bbabc9d24b2b5ca00af9858426c9f013 100644 (file)
@@ -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