summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-06-10 14:48:53 (GMT)
committerSteven Knight <knight@baldmt.com>2003-06-10 14:48:53 (GMT)
commit19a3c78db2cdd47cc38df41c014c30072c1ac461 (patch)
tree0062bbecd0c31906eff05c339458537df9ac7a29
parente2386c6ee94cca68e90eb9faee33b7f4d425b39f (diff)
downloadSCons-19a3c78db2cdd47cc38df41c014c30072c1ac461.zip
SCons-19a3c78db2cdd47cc38df41c014c30072c1ac461.tar.gz
SCons-19a3c78db2cdd47cc38df41c014c30072c1ac461.tar.bz2
Fix use of SConf with SConscriptChdir(). (David Snopek, Christoph Wiedemann)
-rw-r--r--src/CHANGES.txt31
-rw-r--r--src/engine/SCons/SConf.py6
-rw-r--r--test/Configure.py41
3 files changed, 42 insertions, 36 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index b4d409c..b86c2de 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -10,20 +10,6 @@
RELEASE 0.15 - XXX
- From Matt Balvin:
-
- - Fix handling of library prefixes when the subdirectory matches
- the prefix.
-
- From Timothee Bessett:
-
- - Add an M4 Builder.
-
- From Charles Crain:
-
- - Use '.lnk' as the suffix on the temporary file for linking long
- command lines (necessary for the Phar Lap linkloc linker).
-
From Steven Knight:
- SCons now enforces (with an error) that construction variables
@@ -35,27 +21,10 @@ RELEASE 0.15 - XXX
- Eliminate a dependency on the distutils.fancy_getopt module by
copying and pasting its wrap_text() function directly.
- - Make the Script.Options() subclass match the underlying base class
- implementation.
-
- From Steve Leblanc:
-
- - Don't update the .sconsign files when run with -n.
-
From David Snopek and Christoph Wiedemann
- Fix use of the SConf subsystem with SConscriptChdir().
- From Greg Spencer
-
- - Check for the existence of MS Visual Studio on disk before using it,
- to avoid getting fooled by leftover junk in the registry.
-
- - Add support for MSVC++ .NET.
-
- - Add support for MS Visual Studio project files (DSP, DSW,
- SLN and VCPROJ files).
-
RELEASE 0.14 - Wed, 21 May 2003 05:16:32 -0500
diff --git a/src/engine/SCons/SConf.py b/src/engine/SCons/SConf.py
index 1546fb1..d01ce7e 100644
--- a/src/engine/SCons/SConf.py
+++ b/src/engine/SCons/SConf.py
@@ -163,6 +163,11 @@ class SConf:
sys.stdout = self.logstream
oldStderr = sys.stderr
sys.stderr = self.logstream
+
+ # the engine assumes the current path is the SConstruct directory ...
+ oldcwd = os.getcwd()
+ os.chdir(SConfFS.pathTop)
+
self._setCache( nodes )
ret = 1
@@ -190,6 +195,7 @@ class SConf:
# the node could not be built. we return 0 in this case
ret = 0
finally:
+ os.chdir(oldcwd)
if self.logstream != None:
# restore stdout / stderr
sys.stdout = oldStdout
diff --git a/test/Configure.py b/test/Configure.py
index 97333ab..eeb040d 100644
--- a/test/Configure.py
+++ b/test/Configure.py
@@ -27,6 +27,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
import os
import re
import sys
+import shutil
import TestCmd
import TestSCons
@@ -64,7 +65,7 @@ def checkLog( test, logfile, numUpToDate, numCache ):
test.fail_test( len( re.findall( "is up to date", log ) ) != numUpToDate )
test.fail_test( len( re.findall( "\(cached\): Building \S+ failed in a previous run.", log ) ) != numCache )
except:
- #print "contents of log ", test.workpath(logfile), "\n", log
+ print "contents of log ", test.workpath(logfile), "\n", log
raise
@@ -218,10 +219,16 @@ Checking for C header no_std_c_header.h ... failed
# 2.3 test that Configure calls in SConscript files work
# even if BuildDir is set
reset()
-
test.subdir( 'sub' )
test.write( 'SConstruct', """
+opts = Options()
+opts.Add('chdir')
+env = Environment(options=opts)
+if env['chdir'] == 'yes':
+ SConscriptChdir(1)
+else:
+ SConscriptChdir(0)
BuildDir( 'build', '.' )
SConscript( 'build/SConscript' )
""")
@@ -233,7 +240,10 @@ env = Environment()
import os
env['ENV']['PATH'] = os.environ['PATH']
conf = Configure( env )
-conf.CheckCHeader( 'math.h' )
+if not conf.CheckCHeader( 'math.h' ):
+ Exit(1)
+if conf.CheckCHeader( 'no_std_c_header.h' ):
+ Exit(1)
env = conf.Finish()
env.Program( 'TestProgram', 'TestProgram.c' )
""")
@@ -248,13 +258,34 @@ int main() {
printf( "Hello\\n" );
}
""")
- test.run()
+ required_stdout = test.wrap_stdout(build_str='.*',
+ read_str=
+ """Checking for C header math.h ... ok
+Checking for C header no_std_c_header.h ... failed
+""")
+ # first with SConscriptChdir(0)
+ test.run(stdout = required_stdout, arguments='chdir=no')
checkFiles( test, [".sconf_temp/.cache", "config.log"] )
+ checkLog( test, 'config.log', 0, 0 )
+
+ test.run(stdout = required_stdout, arguments='chdir=no')
+ checkFiles( test, [".sconf_temp/.cache", "config.log"] )
+ checkLog( test, 'config.log', 3, 1 )
+
+ shutil.rmtree(test.workpath(".sconf_temp"))
+
+ # now with SConscriptChdir(1)
+ test.run(stdout = required_stdout, arguments='chdir=yes')
+ checkFiles( test, [".sconf_temp/.cache", "config.log"] )
+ checkLog( test, 'config.log', 0, 0 )
+
+ test.run(stdout = required_stdout, arguments='chdir=yes')
+ checkFiles( test, [".sconf_temp/.cache", "config.log"] )
+ checkLog( test, 'config.log', 3, 1 )
# 3.1 test custom tests
reset()
-
compileOK = '#include <stdio.h>\\nint main() {printf("Hello");return 0;}'
compileFAIL = "syntax error"
linkOK = compileOK