summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Feblot <devnull@localhost>2014-11-12 20:25:39 (GMT)
committerAlexandre Feblot <devnull@localhost>2014-11-12 20:25:39 (GMT)
commita077d347e339f38cd5559252c0234b63370bf567 (patch)
treee4a4827dcafc9cdca7d3e8e54f9c3246cc757fec
parentc60c51f29fa2044ec13b8a3160e2f26bb3531497 (diff)
parent2d510c98fe10cbdc8328da7baea83b2ea74c0788 (diff)
downloadSCons-a077d347e339f38cd5559252c0234b63370bf567.zip
SCons-a077d347e339f38cd5559252c0234b63370bf567.tar.gz
SCons-a077d347e339f38cd5559252c0234b63370bf567.tar.bz2
merge from mainlaine
-rw-r--r--QMTest/TestSCons.py2
-rw-r--r--QMTest/TestSConsMSVS.py2
-rw-r--r--README.rst42
-rw-r--r--ReleaseConfig2
-rw-r--r--SConstruct4
-rw-r--r--debian/changelog6
-rw-r--r--src/Announce.txt6
-rw-r--r--src/CHANGES.txt17
-rw-r--r--src/RELEASE.txt2
-rw-r--r--src/engine/SCons/Environment.py5
-rw-r--r--src/engine/SCons/EnvironmentTests.py10
-rw-r--r--src/engine/SCons/Script/Main.py9
-rw-r--r--src/engine/SCons/Script/SConscript.py3
-rw-r--r--src/engine/SCons/Tool/msvs.py21
-rw-r--r--src/engine/SCons/Tool/msvsTests.py79
-rw-r--r--test/Interactive/configure.py106
16 files changed, 279 insertions, 37 deletions
diff --git a/QMTest/TestSCons.py b/QMTest/TestSCons.py
index 3c94dcd..8635f8e 100644
--- a/QMTest/TestSCons.py
+++ b/QMTest/TestSCons.py
@@ -34,7 +34,7 @@ from TestCmd import PIPE
# here provides some independent verification that what we packaged
# conforms to what we expect.
-default_version = '2.3.3'
+default_version = '2.3.4'
python_version_unsupported = (2, 3, 0)
python_version_deprecated = (2, 7, 0)
diff --git a/QMTest/TestSConsMSVS.py b/QMTest/TestSConsMSVS.py
index c78b452..540d24d 100644
--- a/QMTest/TestSConsMSVS.py
+++ b/QMTest/TestSConsMSVS.py
@@ -709,6 +709,7 @@ expected_vcprojfile_10_0 = """\
\t<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
\t\t<ConfigurationType>Makefile</ConfigurationType>
\t\t<UseOfMfc>false</UseOfMfc>
+\t\t<PlatformToolset>v100</PlatformToolset>
\t</PropertyGroup>
\t<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props" />
\t<ImportGroup Label="ExtensionSettings">
@@ -773,6 +774,7 @@ expected_vcprojfile_11_0 = """\
\t<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
\t\t<ConfigurationType>Makefile</ConfigurationType>
\t\t<UseOfMfc>false</UseOfMfc>
+\t\t<PlatformToolset>v110</PlatformToolset>
\t</PropertyGroup>
\t<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props" />
\t<ImportGroup Label="ExtensionSettings">
diff --git a/README.rst b/README.rst
index 56c48e2..599abaf 100644
--- a/README.rst
+++ b/README.rst
@@ -47,7 +47,7 @@ version at the SCons download page:
Execution Requirements
======================
-Running SCons requires Python version 2.4 or later (Python 3 is not
+Running SCons requires Python version 2.6 or later (Python 3 is not
yet supported). There should be no other dependencies or requirements
to run SCons.
@@ -156,7 +156,7 @@ Or on Windows::
By default, the above commands will do the following:
-- Install the version-numbered "scons-2.0.0" and "sconsign-2.0.0" scripts in
+- Install the version-numbered "scons-2.3.3" and "sconsign-2.3.3" scripts in
the default system script directory (/usr/bin or C:\\Python\*\\Scripts, for
example). This can be disabled by specifying the "--no-version-script"
option on the command line.
@@ -168,23 +168,23 @@ By default, the above commands will do the following:
before making it the default on your system.
On UNIX or Linux systems, you can have the "scons" and "sconsign" scripts be
- hard links or symbolic links to the "scons-2.0.0" and "sconsign-2.0.0"
+ hard links or symbolic links to the "scons-2.3.3" and "sconsign-2.3.3"
scripts by specifying the "--hardlink-scons" or "--symlink-scons" options on
the command line.
-- Install "scons-2.0.0.bat" and "scons.bat" wrapper scripts in the Python
+- Install "scons-2.3.3.bat" and "scons.bat" wrapper scripts in the Python
prefix directory on Windows (C:\\Python\*, for example). This can be disabled
by specifying the "--no-install-bat" option on the command line.
On UNIX or Linux systems, the "--install-bat" option may be specified to
- have "scons-2.0.0.bat" and "scons.bat" files installed in the default system
+ have "scons-2.3.3.bat" and "scons.bat" files installed in the default system
script directory, which is useful if you want to install SCons in a shared
file system directory that can be used to execute SCons from both UNIX/Linux
and Windows systems.
- Install the SCons build engine (a Python module) in an appropriate
- version-numbered SCons library directory (/usr/lib/scons-2.0.0 or
- C:\\Python\*\\scons-2.0.0, for example). See below for more options related to
+ version-numbered SCons library directory (/usr/lib/scons-2.3.3 or
+ C:\\Python\*\\scons-2.3.3, for example). See below for more options related to
installing the build engine library.
- Install the troff-format man pages in an appropriate directory on UNIX or
@@ -462,13 +462,13 @@ running all of "runtest.py -a".
Building Packages
=================
-We use SCons (version 0.96.93 later) to build its own packages. If you
+We use SCons (version 2.3.3 or later) to build its own packages. If you
already have an appropriate version of SCons installed on your system, you can
build everything by simply running it::
$ scons
-If you don't have SCons version 0.96.93 later already installed on your
+If you don't have SCons already installed on your
system, you can use the supplied bootstrap.py script (see the section above
about `Executing SCons Without Installing`_)::
@@ -477,18 +477,18 @@ about `Executing SCons Without Installing`_)::
Depending on the utilities installed on your system, any or all of the
following packages will be built::
- build/dist/scons-2.0.0-1.noarch.rpm
- build/dist/scons-2.0.0-1.src.rpm
- build/dist/scons-2.0.0.linux-i686.tar.gz
- build/dist/scons-2.3.3.tar.gz
- build/dist/scons-2.3.3.win32.exe
- build/dist/scons-2.3.3.zip
- build/dist/scons-doc-2.3.3.tar.gz
- build/dist/scons-local-2.3.3.tar.gz
- build/dist/scons-local-2.3.3.zip
- build/dist/scons-src-2.3.3.tar.gz
- build/dist/scons-src-2.3.3.zip
- build/dist/scons_1.3.0-1_all.deb
+ build/dist/scons-2.3.3-1.noarch.rpm
+ build/dist/scons-2.3.3-1.src.rpm
+ build/dist/scons-2.3.3.linux-i686.tar.gz
+ build/dist/scons-2.3.4.tar.gz
+ build/dist/scons-2.3.4.win32.exe
+ build/dist/scons-2.3.4.zip
+ build/dist/scons-doc-2.3.4.tar.gz
+ build/dist/scons-local-2.3.4.tar.gz
+ build/dist/scons-local-2.3.4.zip
+ build/dist/scons-src-2.3.4.tar.gz
+ build/dist/scons-src-2.3.4.zip
+ build/dist/scons_2.3.3-1_all.deb
The SConstruct file is supposed to be smart enough to avoid trying to build
packages for which you don't have the proper utilities installed. For
diff --git a/ReleaseConfig b/ReleaseConfig
index 9d06967..0735012 100644
--- a/ReleaseConfig
+++ b/ReleaseConfig
@@ -32,7 +32,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
# 'final', the patchlevel is set to the release date. This value is
# mandatory and must be present in this file.
#version_tuple = (2, 2, 0, 'final', 0)
-version_tuple = (2, 3, 4, 'alpha', 0)
+version_tuple = (2, 3, 5, 'alpha', 0)
# Python versions prior to unsupported_python_version cause a fatal error
# when that version is used. Python versions prior to deprecate_python_version
diff --git a/SConstruct b/SConstruct
index d07c6cf..27b07f2 100644
--- a/SConstruct
+++ b/SConstruct
@@ -6,7 +6,7 @@
copyright_years = '2001 - 2014'
# This gets inserted into the man pages to reflect the month of release.
-month_year = 'August 2014'
+month_year = 'September 2014'
#
# __COPYRIGHT__
@@ -43,7 +43,7 @@ import tempfile
import bootstrap
project = 'scons'
-default_version = '2.3.3'
+default_version = '2.3.4'
copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
platform = distutils.util.get_platform()
diff --git a/debian/changelog b/debian/changelog
index 5e4bf60..a39a73b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+scons (2.3.4) unstable; urgency=low
+
+ * Maintenance release.
+
+ -- Gary Oberbrunner <garyo@oberbrunner.com> Sun, 27 Sep 2014 21:00:00 -0500
+
scons (2.3.3) unstable; urgency=low
* Maintenance release.
diff --git a/src/Announce.txt b/src/Announce.txt
index 9ca047d..7c6fdd5 100644
--- a/src/Announce.txt
+++ b/src/Announce.txt
@@ -26,6 +26,12 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
since last release. This announcement highlights only the important
changes.
+ Please note the following important changes since release 2.3.3:
+
+ -- Fix for EnsureSConsVersion regression in 2.3.3.
+
+ -- Fix for interactive mode with Configure contexts
+
Please note the following important changes since release 2.3.2:
-- On Windows, .def files did not work as sources to shared
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index d516131..1372baf 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -6,10 +6,23 @@
RELEASE VERSION/DATE TO BE FILLED IN LATER
- From John Doe:
+ From Dan Pidcock:
+ - Added support for the 'PlatformToolset' tag in VS project files (#2978).
- - Whatever John Doe did.
+ From James McCoy:
+ - Added support for '-isystem' to ParseFlags.
+RELEASE 2.3.4 - Mon, 27 Sep 2014 12:50:35 -0400
+
+ From Bernhard Walle and Dirk Baechle:
+ - Fixed the interactive mode, in connection with
+ Configure contexts (#2971).
+
+ From Anatoly Techtonik:
+ - Fix EnsureSConsVersion warning when running packaged version
+
+ From Russel Winder:
+ - Fix D tools for building shared libraries
RELEASE 2.3.3 - Sun, 24 Aug 2014 21:08:33 -0400
diff --git a/src/RELEASE.txt b/src/RELEASE.txt
index 31c9590..1fa033b 100644
--- a/src/RELEASE.txt
+++ b/src/RELEASE.txt
@@ -1,4 +1,4 @@
- A new SCons checkpoint release, 2.3.4.alpha.yyyymmdd, is now available
+ A new SCons checkpoint release, 2.3.5.alpha.yyyymmdd, is now available
on the SCons download page:
http://www.scons.org/download.php
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 62d6809..5f2c9ff 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -719,6 +719,9 @@ class SubstitutionEnvironment(object):
t = ('-isysroot', arg)
dict['CCFLAGS'].append(t)
dict['LINKFLAGS'].append(t)
+ elif append_next_arg_to == '-isystem':
+ t = ('-isystem', arg)
+ dict['CCFLAGS'].append(t)
elif append_next_arg_to == '-arch':
t = ('-arch', arg)
dict['CCFLAGS'].append(t)
@@ -791,7 +794,7 @@ class SubstitutionEnvironment(object):
elif arg[0] == '+':
dict['CCFLAGS'].append(arg)
dict['LINKFLAGS'].append(arg)
- elif arg in ['-include', '-isysroot', '-arch']:
+ elif arg in ['-include', '-isysroot', '-isystem', '-arch']:
append_next_arg_to = arg
else:
dict['CCFLAGS'].append(arg)
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index b9ef3f2..a0869e8 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -805,7 +805,9 @@ sys.exit(0)
"-pthread " + \
"-fopenmp " + \
"-mno-cygwin -mwindows " + \
- "-arch i386 -isysroot /tmp +DD64 " + \
+ "-arch i386 -isysroot /tmp " + \
+ "-isystem /usr/include/foo " + \
+ "+DD64 " + \
"-DFOO -DBAR=value -D BAZ "
d = env.ParseFlags(s)
@@ -815,6 +817,7 @@ sys.exit(0)
assert d['CCFLAGS'] == ['-X', '-Wa,-as',
'-pthread', '-fopenmp', '-mno-cygwin',
('-arch', 'i386'), ('-isysroot', '/tmp'),
+ ('-isystem', '/usr/include/foo'),
'+DD64'], repr(d['CCFLAGS'])
assert d['CXXFLAGS'] == ['-std=c++0x'], repr(d['CXXFLAGS'])
assert d['CPPDEFINES'] == ['FOO', ['BAR', 'value'], 'BAZ'], d['CPPDEFINES']
@@ -2051,7 +2054,9 @@ def generate(env):
"-F fwd3 " + \
"-pthread " + \
"-mno-cygwin -mwindows " + \
- "-arch i386 -isysroot /tmp +DD64 " + \
+ "-arch i386 -isysroot /tmp " + \
+ "-isystem /usr/include/foo " + \
+ "+DD64 " + \
"-DFOO -DBAR=value")
env.ParseConfig("fake $COMMAND")
assert save_command == ['fake command'], save_command
@@ -2059,6 +2064,7 @@ def generate(env):
assert env['CCFLAGS'] == ['', '-X', '-Wa,-as',
'-pthread', '-mno-cygwin',
('-arch', 'i386'), ('-isysroot', '/tmp'),
+ ('-isystem', '/usr/include/foo'),
'+DD64'], env['CCFLAGS']
assert env['CPPDEFINES'] == ['FOO', ['BAR', 'value']], env['CPPDEFINES']
assert env['CPPFLAGS'] == ['', '-Wp,-cpp'], env['CPPFLAGS']
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py
index 439b869..c7a9d27 100644
--- a/src/engine/SCons/Script/Main.py
+++ b/src/engine/SCons/Script/Main.py
@@ -953,6 +953,14 @@ def _main(parser):
if options.include_dir:
sys.path = options.include_dir + sys.path
+ # If we're about to start SCons in the interactive mode,
+ # inform the FS about this right here. Else, the release_target_info
+ # method could get called on some nodes, like the used "gcc" compiler,
+ # when using the Configure methods within the SConscripts.
+ # This would then cause subtle bugs, as already happened in #2971.
+ if options.interactive:
+ SCons.Node.interactive = True
+
# That should cover (most of) the options. Next, set up the variables
# that hold command-line arguments, so the SConscript files that we
# read and execute have access to them.
@@ -1082,7 +1090,6 @@ def _main(parser):
platform = SCons.Platform.platform_module()
if options.interactive:
- SCons.Node.interactive = True
SCons.Script.Interactive.interact(fs, OptionsParser, options,
targets, target_top)
diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
index 111d091..f4a7f07 100644
--- a/src/engine/SCons/Script/SConscript.py
+++ b/src/engine/SCons/Script/SConscript.py
@@ -461,7 +461,8 @@ class SConsEnvironment(SCons.Environment.Base):
def EnsureSConsVersion(self, major, minor, revision=0):
"""Exit abnormally if the SCons version is not late enough."""
- if SCons.__version__ == '__VERSION__':
+ # split string to avoid replacement during build process
+ if SCons.__version__ == '__' + 'VERSION__':
SCons.Warnings.warn(SCons.Warnings.DevelopmentVersionWarning,
"EnsureSConsVersion is ignored for development version")
return
diff --git a/src/engine/SCons/Tool/msvs.py b/src/engine/SCons/Tool/msvs.py
index 06ce486..cb4ca55 100644
--- a/src/engine/SCons/Tool/msvs.py
+++ b/src/engine/SCons/Tool/msvs.py
@@ -289,9 +289,17 @@ class _DSPGenerator(object):
runfile.append(s)
self.sconscript = env['MSVSSCONSCRIPT']
-
- cmdargs = env.get('cmdargs', '')
-
+
+ if 'cmdargs' not in env or env['cmdargs'] == None:
+ cmdargs = [''] * len(variants)
+ elif SCons.Util.is_String(env['cmdargs']):
+ cmdargs = [env['cmdargs']] * len(variants)
+ elif SCons.Util.is_List(env['cmdargs']):
+ if len(env['cmdargs']) != len(variants):
+ raise SCons.Errors.InternalError("Sizes of 'cmdargs' and 'variant' lists must be the same.")
+ else:
+ cmdargs = env['cmdargs']
+
self.env = env
if 'name' in self.env:
@@ -354,7 +362,7 @@ class _DSPGenerator(object):
print "Adding '" + self.name + ' - ' + config.variant + '|' + config.platform + "' to '" + str(dspfile) + "'"
for i in range(len(variants)):
- AddConfig(self, variants[i], buildtarget[i], outdir[i], runfile[i], cmdargs)
+ AddConfig(self, variants[i], buildtarget[i], outdir[i], runfile[i], cmdargs[i])
self.platforms = []
for key in self.configs.keys():
@@ -892,6 +900,7 @@ V10DSPPropertyGroupCondition = """\
\t<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'" Label="Configuration">
\t\t<ConfigurationType>Makefile</ConfigurationType>
\t\t<UseOfMfc>false</UseOfMfc>
+\t\t<PlatformToolset>%(toolset)s</PlatformToolset>
\t</PropertyGroup>
"""
@@ -972,6 +981,10 @@ class _GenerateV10DSP(_DSPGenerator):
self.file.write('\t<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\n')
+ toolset = ''
+ if 'MSVC_VERSION' in self.env:
+ version_num, suite = msvs_parse_version(self.env['MSVC_VERSION'])
+ toolset = 'v%d' % (version_num * 10)
for kind in confkeys:
variant = self.configs[kind].variant
platform = self.configs[kind].platform
diff --git a/src/engine/SCons/Tool/msvsTests.py b/src/engine/SCons/Tool/msvsTests.py
index 2f4f302..261dbcc 100644
--- a/src/engine/SCons/Tool/msvsTests.py
+++ b/src/engine/SCons/Tool/msvsTests.py
@@ -40,6 +40,7 @@ from SCons.Tool.MSCommon.common import debug
from SCons.Tool.MSCommon import get_default_version, \
query_versions
+from SCons.Tool.msvs import _GenerateV6DSP, _GenerateV7DSP, _GenerateV10DSP
regdata_6a = r'''[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio]
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\6.0]
@@ -591,6 +592,84 @@ class msvsTestCase(unittest.TestCase):
assert not v1 or str(v1[0]) == self.highest_version, \
(v1, self.highest_version)
assert len(v1) == self.number_of_versions, v1
+
+ def test_config_generation(self):
+ """Test _DSPGenerator.__init__(...)"""
+ if not self.highest_version :
+ return
+
+ # Initialize 'static' variables
+ version_num, suite = msvs_parse_version(self.highest_version)
+ if version_num >= 10.0:
+ function_test = _GenerateV10DSP
+ elif version_num >= 7.0:
+ function_test = _GenerateV7DSP
+ else:
+ function_test = _GenerateV6DSP
+
+ str_function_test = str(function_test.__init__)
+ dspfile = 'test.dsp'
+ source = 'test.cpp'
+
+ # Create the cmdargs test list
+ list_variant = ['Debug|Win32','Release|Win32',
+ 'Debug|x64', 'Release|x64']
+ list_cmdargs = ['debug=True target_arch=32',
+ 'debug=False target_arch=32',
+ 'debug=True target_arch=x64',
+ 'debug=False target_arch=x64']
+
+ # Tuple list : (parameter, dictionary of expected result per variant)
+ tests_cmdargs = [(None, dict.fromkeys(list_variant, '')),
+ ('', dict.fromkeys(list_variant, '')),
+ (list_cmdargs[0], dict.fromkeys(list_variant, list_cmdargs[0])),
+ (list_cmdargs, dict(zip(list_variant, list_cmdargs)))]
+
+ # Run the test for each test case
+ for param_cmdargs, expected_cmdargs in tests_cmdargs:
+ debug('Testing %s. with :\n variant = %s \n cmdargs = "%s"' % \
+ (str_function_test, list_variant, param_cmdargs))
+ param_configs = []
+ expected_configs = {}
+ for platform in ['Win32', 'x64']:
+ for variant in ['Debug', 'Release']:
+ variant_platform = '%s|%s' % (variant, platform)
+ runfile = '%s\\%s\\test.exe' % (platform, variant)
+ buildtarget = '%s\\%s\\test.exe' % (platform, variant)
+ outdir = '%s\\%s' % (platform, variant)
+
+ # Create parameter list for this variant_platform
+ param_configs.append([variant_platform, runfile, buildtarget, outdir])
+
+ # Create expected dictionary result for this variant_platform
+ expected_configs[variant_platform] = \
+ {'variant': variant, 'platform': platform,
+ 'runfile': runfile,
+ 'buildtarget': buildtarget,
+ 'outdir': outdir,
+ 'cmdargs': expected_cmdargs[variant_platform]}
+
+ # Create parameter environment with final parameter dictionary
+ param_dict = dict(zip(('variant', 'runfile', 'buildtarget', 'outdir'),
+ [list(l) for l in zip(*param_configs)]))
+ param_dict['cmdargs'] = param_cmdargs
+
+ # Hack to be able to run the test with a 'DummyEnv'
+ class _DummyEnv(DummyEnv):
+ def subst(self, string) :
+ return string
+
+ env = _DummyEnv(param_dict)
+ env['MSVSSCONSCRIPT'] = ''
+ env['MSVS_VERSION'] = self.highest_version
+
+ # Call function to test
+ genDSP = function_test(dspfile, source, env)
+
+ # Check expected result
+ self.assertListEqual(genDSP.configs.keys(), expected_configs.keys())
+ for key in genDSP.configs.keys():
+ self.assertDictEqual(genDSP.configs[key].__dict__, expected_configs[key])
class msvs6aTestCase(msvsTestCase):
"""Test MSVS 6 Registry"""
diff --git a/test/Interactive/configure.py b/test/Interactive/configure.py
new file mode 100644
index 0000000..ceb1aea
--- /dev/null
+++ b/test/Interactive/configure.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+"""
+Verify basic operation of the --interactive command line option to build
+a target, while using a Configure context within the environment.
+
+Also tests that "b" can be used as a synonym for "build".
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+test.write('SConstruct', """\
+import sys
+
+env = Environment()
+
+conf = Configure(env)
+if not conf.CheckCXX():
+ sys.exit(1)
+conf.Finish()
+
+env.Program('foo','foo.cpp')
+""")
+
+test.write('foo.cpp', """\
+#include <stdio.h>
+
+int main (int argc, char *argv[])
+{
+ printf("Hello, World!");
+ return 0;
+}
+""")
+
+
+scons = test.start(arguments = '-Q --interactive')
+# Initial build
+scons.send("build foo\n")
+
+test.wait_for(test.workpath('foo'))
+# Update without any changes -> no action
+scons.send("build foo\n")
+# Changing the source file
+test.write('foo.cpp', """\
+#include <stdio.h>
+
+void foo()
+{
+ ;
+}
+
+int main (int argc, char *argv[])
+{
+ printf("Hello, World!");
+ return 0;
+}
+""")
+
+# Verify that "b" can be used as a synonym for the "build" command.
+scons.send("b foo\n")
+
+scons.send("build foo\n")
+
+expect_stdout = r"""scons>>> .*foo\.cpp.*
+.*foo.*
+scons>>> .*foo\.cpp.*
+.*foo.*
+scons>>> scons: `foo' is up to date.
+scons>>> scons: `foo' is up to date.
+scons>>>\s*
+"""
+
+test.finish(scons, stdout = expect_stdout, match=TestSCons.match_re)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4: