From: stevenknight Date: Sat, 15 Mar 2003 05:30:41 +0000 (+0000) Subject: Change the default SConscriptChdir() behavior to NOT chdir to the SConscript directory. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=c4468302bd27612a7cdfe89abdf07f7a8cb1e5c5;p=scons.git Change the default SConscriptChdir() behavior to NOT chdir to the SConscript directory. git-svn-id: http://scons.tigris.org/svn/scons/trunk@614 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- diff --git a/doc/man/scons.1 b/doc/man/scons.1 index f0845d64..6d846383 100644 --- a/doc/man/scons.1 +++ b/doc/man/scons.1 @@ -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 diff --git a/src/CHANGES.txt b/src/CHANGES.txt index a6406a7c..ca480deb 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -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. diff --git a/src/RELEASE.txt b/src/RELEASE.txt index 535384d8..8ae7dfb9 100644 --- a/src/RELEASE.txt +++ b/src/RELEASE.txt @@ -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 diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index ab071e02..8dd4ef34 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -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