import os.path, SCons
-# SCons is at #/scons/scons-<v>/engine/SCons/__init__.py
+# SCons is at #/tools/scons-<v>/engine/SCons/__init__.py
# site_init is at #/site_scons/site_init.py
-sconsbase = os.path.join(os.path.dirname(os.path.dirname(__file__)),"scons")
-sconsbase = os.path.abspath(os.path.join(sconsbase, sorted(os.listdir(sconsbase))[-1]))
+sconsbase = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),"tools")
+sconsbase = os.path.join(
+ sconsbase,sorted((f for f in os.listdir(sconsbase) if f.startswith("scons-")))[-1])
sconsengine = os.path.join(sconsbase, 'engine')
-sconsscript = os.path.join(os.path.join(sconsbase, 'script'),'scons')
+sconsscript = os.path.join(sconsbase, 'script', 'scons')
-if os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(SCons.__file__)))) != sconsbase:
+if os.path.dirname(os.path.dirname(os.path.abspath(SCons.__file__))) != sconsengine:
import os, sys, SCons.Util
SCons.Util.display("scons: Switching version")
frame = sys._getframe()
target_top = marker = []
while frame and target_top is marker:
- target_top = frame.f_locals.get('target_top',marker)
frame = frame.f_back
+ if frame : target_top = frame.f_locals.get('target_top',marker)
if target_top is marker:
SCons.Util.display("scons: WARNING: scons -u <target> will probably fail")
if not target_top:
target_top = '.'
+ if frame:
+ cdir = frame.f_locals.get('cdir', '.')
# END HACK
-
+
os.chdir(target_top)
+ cdir = os.path.normpath(cdir)
+ if cdir.startswith('../'):
+ SCons.Util.display("scons: WARNING: failed to undo -C option")
+ elif cdir != '.' and not cdir.startswith('/'):
+ os.chdir('/'.join(('..' for _ in cdir.split('/'))))
os.environ['SCONS_LIB_DIR'] = sconsengine
os.execv(sconsscript, sys.argv)