Change the default SConscriptChdir() behavior to NOT chdir to the SConscript directory.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 15 Mar 2003 05:30:41 +0000 (05:30 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 15 Mar 2003 05:30:41 +0000 (05:30 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@614 fdb21ef1-2011-0410-befe-b5e4ea1792b1

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

index f0845d644632f73cf27ada797870367824fceef7..6d84638329ca48d3a41d79c688e7acefa38f953f 100644 (file)
@@ -3386,24 +3386,34 @@ SConscript('bld/SConscript', src_dir='src', exports='env')
 
 .TP
 .RI SConscriptChdir( value )
-When a non-zero
-.I value
-is specified,
-this instructs
+By default,
 .B scons
-to change its working directory (chdir)
-to the directory in which each subsidiary
-SConscript file lives.
-Note that you may enable and disable
+changes its working directory
+to the directory in which each
+subsidiary SConscript file lives.
+This behavior may be disabled
+by specifying:
+.ES
+SConscriptChdir(0)
+.EE
+in which case
+.B scons
+will stay in the top-level directory
+while reading all SConscript files.
+(This may be necessary when building from repositories,
+when all the directories in which SConscript files may be found
+don't necessarily exist locally.)
+
+You may enable and disable
 this ability by calling
 SConscriptChdir()
 multiple times:
 
 .ES
-SConscriptChdir(1)
-SConscript('foo/SConscript')   # will chdir to foo
 SConscriptChdir(0)
-SConscript('bar/SConscript')   # will not chdir to bar
+SConscript('foo/SConscript')   # will not chdir to foo
+SConscriptChdir(1)
+SConscript('bar/SConscript')   # will chdir to bar
 .EE
 
 .TP 
index a6406a7c5242e7b0bed677f170b85de3c4658b9b..ca480deb3524c45f0dadc0dfd43998d15723efd7 100644 (file)
@@ -75,6 +75,9 @@ RELEASE 0.12 - XXX
     This allows you to build in another directory by simply changing
     there and pointing at the SConstruct file in another directory.
 
+  - Change the default SConscriptChdir() behavior to change to the
+    SConscript directory while it's being read.
+
   From Lachlan O'Dea:
 
   - Add SharedObject() support to the masm tool.
index 535384d835ebb3016c1a26802ede172fd7b0b3c8..8ae7dfb96023a8611fed229123af35ba702991d8 100644 (file)
@@ -25,6 +25,15 @@ RELEASE 0.12 - XXX
   This is the twelfth alpha release of SCons.  Please consult the
   CHANGES.txt file for a list of specific changes since last release.
 
+  Please note the following important changes since release 0.11:
+
+  - The default behavior of SCons is now to change to the directory in
+    which an SConscript file resides while reading the SConscript file.
+    To disable this and restore the previous behavior of staying in the
+    top-level directory, specify the following in your SConstruct file:
+
+        SConscriptChdir(0)
+
   Please note the following important changes since release 0.10:
 
     - The default suffix for shared object files when using gcc has
index ab071e0248bd1a767603ea8575d6c6b2e3ac79dd..8dd4ef34d37d80a9c7727c422ca8955cd86320c1 100644 (file)
@@ -61,7 +61,7 @@ launch_dir = os.path.abspath(os.curdir)
 global_exports = {}
 
 # chdir flag
-sconscript_chdir = 0
+sconscript_chdir = 1
 
 def SConscriptChdir(flag):
     global sconscript_chdir
@@ -232,7 +232,16 @@ def SConscript(*ls, **kw):
                     # in different Repositories.  For now, cross that
                     # bridge when someone comes to it.
                     ldir = default_fs.Dir(f.dir.get_path(sd))
-                    default_fs.chdir(ldir, change_os_dir=sconscript_chdir)
+                    try:
+                        default_fs.chdir(ldir, change_os_dir=sconscript_chdir)
+                    except OSError:
+                        # There was no local directory, so we should be
+                        # able to chdir to the Repository directory.
+                        # Note that we do this directly, not through
+                        # default_fs.chdir(), because we still need to
+                        # interpret the stuff within the SConscript file
+                        # relative to where we are logically.
+                        os.chdir(f.rfile().dir.abspath)
 
                     # Append the SConscript directory to the beginning
                     # of sys.path so Python modules in the SConscript