summaryrefslogtreecommitdiffstats
path: root/test/Deprecated/Options
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2015-09-21 17:03:12 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2015-09-21 17:03:12 (GMT)
commit0941093e0e5a030faa49968457638a3a6aee7ad8 (patch)
tree6d33513c14eb6eac0531dd050de0ecca4c39bd79 /test/Deprecated/Options
downloadSCons-2.4.0.zip
SCons-2.4.0.tar.gz
SCons-2.4.0.tar.bz2
release 2.4.02.4.0
Diffstat (limited to 'test/Deprecated/Options')
-rw-r--r--test/Deprecated/Options/BoolOption.py92
-rw-r--r--test/Deprecated/Options/EnumOption.py117
-rw-r--r--test/Deprecated/Options/ListOption.py190
-rw-r--r--test/Deprecated/Options/Options.py373
-rw-r--r--test/Deprecated/Options/PackageOption.py98
-rw-r--r--test/Deprecated/Options/PathOption.py296
-rw-r--r--test/Deprecated/Options/chdir.py80
-rw-r--r--test/Deprecated/Options/help.py170
-rw-r--r--test/Deprecated/Options/import.py78
9 files changed, 1494 insertions, 0 deletions
diff --git a/test/Deprecated/Options/BoolOption.py b/test/Deprecated/Options/BoolOption.py
new file mode 100644
index 0000000..563939b
--- /dev/null
+++ b/test/Deprecated/Options/BoolOption.py
@@ -0,0 +1,92 @@
+#!/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__"
+
+"""
+Test the BoolOption canned Option type.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+SConstruct_path = test.workpath('SConstruct')
+
+def check(expect):
+ result = test.stdout().split('\n')
+ assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect)
+
+
+test.write(SConstruct_path, """\
+SetOption('warn', 'deprecated-options')
+from SCons.Options.BoolOption import BoolOption
+BO = BoolOption
+
+from SCons.Options import BoolOption
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ BoolOption('warnings', 'compilation with -Wall and similiar', 1),
+ BO('profile', 'create profiling informations', 0),
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['warnings']
+print env['profile']
+
+Default(env.Alias('dummy', None))
+""")
+
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%s
+scons: warning: The BoolOption\\(\\) function is deprecated; use the BoolVariable\\(\\) function instead.
+%s""" % (TestSCons.file_expr, TestSCons.file_expr)
+
+test.run(stderr=warnings)
+
+check([str(True), str(False)])
+
+test.run(arguments='warnings=0 profile=no profile=true', stderr=warnings)
+check([str(False), str(True)])
+
+expect_stderr = (warnings + """
+scons: \\*\\*\\* Error converting option: warnings
+Invalid value for boolean option: irgendwas
+""" + TestSCons.file_expr)
+
+test.run(arguments='warnings=irgendwas', stderr=expect_stderr, status=2)
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/EnumOption.py b/test/Deprecated/Options/EnumOption.py
new file mode 100644
index 0000000..57ae7eb
--- /dev/null
+++ b/test/Deprecated/Options/EnumOption.py
@@ -0,0 +1,117 @@
+#!/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__"
+
+"""
+Test the EnumOption canned Option type.
+"""
+
+import os.path
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+SConstruct_path = test.workpath('SConstruct')
+
+def check(expect):
+ result = test.stdout().split('\n')
+ assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect)
+
+
+
+test.write(SConstruct_path, """\
+from SCons.Options.EnumOption import EnumOption
+EO = EnumOption
+
+from SCons.Options import EnumOption
+
+list_of_libs = Split('x11 gl qt ical')
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ EnumOption('debug', 'debug output and symbols', 'no',
+ allowed_values=('yes', 'no', 'full'),
+ map={}, ignorecase=0), # case sensitive
+ EnumOption('guilib', 'gui lib to use', 'gtk',
+ allowed_values=('motif', 'gtk', 'kde'),
+ map={}, ignorecase=1), # case insensitive
+ EO('some', 'some option', 'xaver',
+ allowed_values=('xaver', 'eins'),
+ map={}, ignorecase=2), # make lowercase
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['debug']
+print env['guilib']
+print env['some']
+
+Default(env.Alias('dummy', None))
+""")
+
+
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%s
+scons: warning: The EnumOption\\(\\) function is deprecated; use the EnumVariable\\(\\) function instead.
+%s""" % (TestSCons.file_expr, TestSCons.file_expr)
+
+test.run(stderr=warnings); check(['no', 'gtk', 'xaver'])
+
+test.run(arguments='debug=yes guilib=Motif some=xAVER', stderr=warnings)
+check(['yes', 'Motif', 'xaver'])
+
+test.run(arguments='debug=full guilib=KdE some=EiNs', stderr=warnings)
+check(['full', 'KdE', 'eins'])
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Invalid value for option debug: FULL. Valid values are: \\('yes', 'no', 'full'\\)
+""" + TestSCons.file_expr
+
+test.run(arguments='debug=FULL', stderr=expect_stderr, status=2)
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Invalid value for option guilib: irgendwas. Valid values are: \\('motif', 'gtk', 'kde'\\)
+""" + TestSCons.file_expr
+
+test.run(arguments='guilib=IrGeNdwas', stderr=expect_stderr, status=2)
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Invalid value for option some: irgendwas. Valid values are: \\('xaver', 'eins'\\)
+""" + TestSCons.file_expr
+
+test.run(arguments='some=IrGeNdwas', stderr=expect_stderr, status=2)
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/ListOption.py b/test/Deprecated/Options/ListOption.py
new file mode 100644
index 0000000..bb3775b
--- /dev/null
+++ b/test/Deprecated/Options/ListOption.py
@@ -0,0 +1,190 @@
+#!/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__"
+
+"""
+Test the ListOption canned Option type.
+"""
+
+import os
+
+import TestSCons
+
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+SConstruct_path = test.workpath('SConstruct')
+
+def check(expect):
+ result = test.stdout().split('\n')
+ r = result[1:len(expect)+1]
+ assert r == expect, (r, expect)
+
+
+
+test.write(SConstruct_path, """\
+from SCons.Options.ListOption import ListOption
+LO = ListOption
+
+from SCons.Options import ListOption
+
+list_of_libs = Split('x11 gl qt ical')
+
+optsfile = 'scons.options'
+opts = Options(optsfile, args=ARGUMENTS)
+opts.AddOptions(
+ ListOption('shared',
+ 'libraries to build as shared libraries',
+ 'all',
+ names = list_of_libs,
+ map = {'GL':'gl', 'QT':'qt'}),
+ LO('listvariable', 'listvariable help', 'all', names=['l1', 'l2', 'l3'])
+ )
+
+env = Environment(options=opts)
+opts.Save(optsfile, env)
+Help(opts.GenerateHelpText(env))
+
+print env['shared']
+if 'ical' in env['shared']: print '1'
+else: print '0'
+for x in env['shared']:
+ print x,
+print
+print env.subst('$shared')
+# Test subst_path() because it's used in $CPPDEFINES expansions.
+print env.subst_path('$shared')
+Default(env.Alias('dummy', None))
+""")
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%s
+scons: warning: The ListOption\\(\\) function is deprecated; use the ListVariable\\(\\) function instead.
+%s""" % (TestSCons.file_expr, TestSCons.file_expr)
+
+test.run(stderr=warnings)
+check(['all', '1', 'gl ical qt x11', 'gl ical qt x11',
+ "['gl ical qt x11']"])
+
+expect = "shared = 'all'"+os.linesep+"listvariable = 'all'"+os.linesep
+test.must_match(test.workpath('scons.options'), expect)
+
+check(['all', '1', 'gl ical qt x11', 'gl ical qt x11',
+ "['gl ical qt x11']"])
+
+test.run(arguments='shared=none', stderr=warnings)
+check(['none', '0', '', '', "['']"])
+
+test.run(arguments='shared=', stderr=warnings)
+check(['none', '0', '', '', "['']"])
+
+test.run(arguments='shared=x11,ical', stderr=warnings)
+check(['ical,x11', '1', 'ical x11', 'ical x11',
+ "['ical x11']"])
+
+test.run(arguments='shared=x11,,ical,,', stderr=warnings)
+check(['ical,x11', '1', 'ical x11', 'ical x11',
+ "['ical x11']"])
+
+test.run(arguments='shared=GL', stderr=warnings)
+check(['gl', '0', 'gl', 'gl'])
+
+test.run(arguments='shared=QT,GL', stderr=warnings)
+check(['gl,qt', '0', 'gl qt', 'gl qt', "['gl qt']"])
+
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Error converting option: shared
+Invalid value\\(s\\) for option: foo
+""" + TestSCons.file_expr
+
+test.run(arguments='shared=foo', stderr=expect_stderr, status=2)
+
+# be paranoid in testing some more combinations
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Error converting option: shared
+Invalid value\\(s\\) for option: foo
+""" + TestSCons.file_expr
+
+test.run(arguments='shared=foo,ical', stderr=expect_stderr, status=2)
+
+expect_stderr = warnings +"""
+scons: \\*\\*\\* Error converting option: shared
+Invalid value\\(s\\) for option: foo
+""" + TestSCons.file_expr
+
+test.run(arguments='shared=ical,foo', stderr=expect_stderr, status=2)
+
+expect_stderr = warnings +"""
+scons: \\*\\*\\* Error converting option: shared
+Invalid value\\(s\\) for option: foo
+""" + TestSCons.file_expr
+
+test.run(arguments='shared=ical,foo,x11', stderr=expect_stderr, status=2)
+
+expect_stderr = warnings +"""
+scons: \\*\\*\\* Error converting option: shared
+Invalid value\\(s\\) for option: foo,bar
+""" + TestSCons.file_expr
+
+test.run(arguments='shared=foo,x11,,,bar', stderr=expect_stderr, status=2)
+
+
+
+test.write('SConstruct', """
+from SCons.Options import ListOption
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ ListOption('gpib',
+ 'comment',
+ ['ENET', 'GPIB'],
+ names = ['ENET', 'GPIB', 'LINUX_GPIB', 'NO_GPIB']),
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['gpib']
+Default(env.Alias('dummy', None))
+""")
+
+expect = test.wrap_stdout(read_str="ENET,GPIB\n", build_str="""\
+scons: Nothing to be done for `dummy'.
+""")
+
+test.run(stdout=expect, stderr=warnings)
+
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/Options.py b/test/Deprecated/Options/Options.py
new file mode 100644
index 0000000..8116a63
--- /dev/null
+++ b/test/Deprecated/Options/Options.py
@@ -0,0 +1,373 @@
+#!/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__"
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+test.write('SConstruct', """
+env = Environment()
+print env['CC']
+print " ".join(env['CCFLAGS'])
+Default(env.Alias('dummy', None))
+""")
+test.run()
+cc, ccflags = test.stdout().split('\n')[1:3]
+
+test.write('SConstruct', """
+# test validator. Change a key and add a new one to the environment
+def validator(key, value, environ):
+ environ[key] = "v"
+ environ["valid_key"] = "v"
+
+
+def old_converter (value):
+ return "old_converter"
+
+def new_converter (value, env):
+ return "new_converter"
+
+
+opts = Options('custom.py')
+opts.Add('RELEASE_BUILD',
+ 'Set to 1 to build a release build',
+ 0,
+ None,
+ int)
+
+opts.Add('DEBUG_BUILD',
+ 'Set to 1 to build a debug build',
+ 1,
+ None,
+ int)
+
+opts.Add('CC',
+ 'The C compiler')
+
+opts.Add('VALIDATE',
+ 'An option for testing validation',
+ "notset",
+ validator,
+ None)
+
+opts.Add('OLD_CONVERTER',
+ 'An option for testing converters that take one parameter',
+ "foo",
+ None,
+ old_converter)
+
+opts.Add('NEW_CONVERTER',
+ 'An option for testing converters that take two parameters',
+ "foo",
+ None,
+ new_converter)
+
+opts.Add('UNSPECIFIED',
+ 'An option with no value')
+
+def test_tool(env):
+ if env['RELEASE_BUILD']:
+ env.Append(CCFLAGS = '-O')
+ if env['DEBUG_BUILD']:
+ env.Append(CCFLAGS = '-g')
+
+
+env = Environment(options=opts, tools=['default', test_tool])
+
+Help('Variables settable in custom.py or on the command line:\\n' + opts.GenerateHelpText(env))
+
+print env['RELEASE_BUILD']
+print env['DEBUG_BUILD']
+print env['CC']
+print " ".join(env['CCFLAGS'])
+print env['VALIDATE']
+print env['valid_key']
+
+# unspecified options should not be set:
+assert 'UNSPECIFIED' not in env
+
+# undeclared options should be ignored:
+assert 'UNDECLARED' not in env
+
+# calling Update() should not effect options that
+# are not declared on the options object:
+r = env['RELEASE_BUILD']
+opts = Options()
+opts.Update(env)
+assert env['RELEASE_BUILD'] == r
+
+Default(env.Alias('dummy', None))
+
+""")
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+""" + TestSCons.file_expr
+
+
+def check(expect):
+ result = test.stdout().split('\n')
+ assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect)
+
+test.run(stderr=warnings)
+check(['0', '1', cc, (ccflags + ' -g').strip(), 'v', 'v'])
+
+test.run(arguments='RELEASE_BUILD=1', stderr=warnings)
+check(['1', '1', cc, (ccflags + ' -O -g').strip(), 'v', 'v'])
+
+test.run(arguments='RELEASE_BUILD=1 DEBUG_BUILD=0', stderr=warnings)
+check(['1', '0', cc, (ccflags + ' -O').strip(), 'v', 'v'])
+
+test.run(arguments='CC=not_a_c_compiler', stderr=warnings)
+check(['0', '1', 'not_a_c_compiler', (ccflags + ' -g').strip(), 'v', 'v'])
+
+test.run(arguments='UNDECLARED=foo', stderr=warnings)
+check(['0', '1', cc, (ccflags + ' -g').strip(), 'v', 'v'])
+
+test.run(arguments='CCFLAGS=--taco', stderr=warnings)
+check(['0', '1', cc, (ccflags + ' -g').strip(), 'v', 'v'])
+
+test.write('custom.py', """
+DEBUG_BUILD=0
+RELEASE_BUILD=1
+""")
+
+test.run(stderr=warnings)
+check(['1', '0', cc, (ccflags + ' -O').strip(), 'v', 'v'])
+
+test.run(arguments='DEBUG_BUILD=1', stderr=warnings)
+check(['1', '1', cc, (ccflags + ' -O -g').strip(), 'v', 'v'])
+
+test.run(arguments='-h',
+ stdout = """\
+scons: Reading SConscript files ...
+1
+0
+%s
+%s
+v
+v
+scons: done reading SConscript files.
+Variables settable in custom.py or on the command line:
+
+RELEASE_BUILD: Set to 1 to build a release build
+ default: 0
+ actual: 1
+
+DEBUG_BUILD: Set to 1 to build a debug build
+ default: 1
+ actual: 0
+
+CC: The C compiler
+ default: None
+ actual: %s
+
+VALIDATE: An option for testing validation
+ default: notset
+ actual: v
+
+OLD_CONVERTER: An option for testing converters that take one parameter
+ default: foo
+ actual: old_converter
+
+NEW_CONVERTER: An option for testing converters that take two parameters
+ default: foo
+ actual: new_converter
+
+UNSPECIFIED: An option with no value
+ default: None
+ actual: None
+
+Use scons -H for help about command-line options.
+"""%(cc, ccflags and ccflags + ' -O' or '-O', cc),
+ stderr=warnings)
+
+# Test saving of options and multi loading
+#
+test.write('SConstruct', """
+opts = Options(['custom.py', 'options.saved'])
+opts.Add('RELEASE_BUILD',
+ 'Set to 1 to build a release build',
+ 0,
+ None,
+ int)
+
+opts.Add('DEBUG_BUILD',
+ 'Set to 1 to build a debug build',
+ 1,
+ None,
+ int)
+
+opts.Add('UNSPECIFIED',
+ 'An option with no value')
+
+env = Environment(options = opts)
+
+print env['RELEASE_BUILD']
+print env['DEBUG_BUILD']
+
+opts.Save('options.saved', env)
+""")
+
+# Check the save file by executing and comparing against
+# the expected dictionary
+def checkSave(file, expected):
+ gdict = {}
+ ldict = {}
+ exec open(file, 'rU').read() in gdict, ldict
+ assert expected == ldict, "%s\n...not equal to...\n%s" % (expected, ldict)
+
+# First test with no command line options
+# This should just leave the custom.py settings
+test.run(stderr=warnings)
+check(['1','0'])
+checkSave('options.saved', { 'RELEASE_BUILD':1, 'DEBUG_BUILD':0})
+
+# Override with command line arguments
+test.run(arguments='DEBUG_BUILD=3', stderr=warnings)
+check(['1','3'])
+checkSave('options.saved', {'RELEASE_BUILD':1, 'DEBUG_BUILD':3})
+
+# Now make sure that saved options are overridding the custom.py
+test.run(stderr=warnings)
+check(['1','3'])
+checkSave('options.saved', {'DEBUG_BUILD':3, 'RELEASE_BUILD':1})
+
+# Load no options from file(s)
+# Used to test for correct output in save option file
+test.write('SConstruct', """
+opts = Options()
+opts.Add('RELEASE_BUILD',
+ 'Set to 1 to build a release build',
+ '0',
+ None,
+ int)
+
+opts.Add('DEBUG_BUILD',
+ 'Set to 1 to build a debug build',
+ '1',
+ None,
+ int)
+
+opts.Add('UNSPECIFIED',
+ 'An option with no value')
+
+opts.Add('LISTOPTION_TEST',
+ 'testing list option persistence',
+ 'none',
+ names = ['a','b','c',])
+
+env = Environment(options = opts)
+
+print env['RELEASE_BUILD']
+print env['DEBUG_BUILD']
+print env['LISTOPTION_TEST']
+
+opts.Save('options.saved', env)
+""")
+
+# First check for empty output file when nothing is passed on command line
+test.run(stderr=warnings)
+check(['0','1'])
+checkSave('options.saved', {})
+
+# Now specify one option the same as default and make sure it doesn't write out
+test.run(arguments='DEBUG_BUILD=1', stderr=warnings)
+check(['0','1'])
+checkSave('options.saved', {})
+
+# Now specify same option non-default and make sure only it is written out
+test.run(arguments='DEBUG_BUILD=0 LISTOPTION_TEST=a,b', stderr=warnings)
+check(['0','0'])
+checkSave('options.saved',{'DEBUG_BUILD':0, 'LISTOPTION_TEST':'a,b'})
+
+test.write('SConstruct', """
+opts = Options('custom.py')
+opts.Add('RELEASE_BUILD',
+ 'Set to 1 to build a release build',
+ 0,
+ None,
+ int)
+
+opts.Add('DEBUG_BUILD',
+ 'Set to 1 to build a debug build',
+ 1,
+ None,
+ int)
+
+opts.Add('CC',
+ 'The C compiler')
+
+opts.Add('UNSPECIFIED',
+ 'An option with no value')
+
+env = Environment(options=opts)
+
+Help('Variables settable in custom.py or on the command line:\\n' + opts.GenerateHelpText(env,sort=cmp))
+
+""")
+
+test.run(arguments='-h',
+ stdout = """\
+scons: Reading SConscript files ...
+scons: done reading SConscript files.
+Variables settable in custom.py or on the command line:
+
+CC: The C compiler
+ default: None
+ actual: %s
+
+DEBUG_BUILD: Set to 1 to build a debug build
+ default: 1
+ actual: 0
+
+RELEASE_BUILD: Set to 1 to build a release build
+ default: 0
+ actual: 1
+
+UNSPECIFIED: An option with no value
+ default: None
+ actual: None
+
+Use scons -H for help about command-line options.
+"""%cc,
+ stderr=warnings)
+
+test.write('SConstruct', """
+import SCons.Options
+env1 = Environment(options = Options())
+env2 = Environment(options = SCons.Options.Options())
+""")
+
+test.run(stderr=warnings)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/PackageOption.py b/test/Deprecated/Options/PackageOption.py
new file mode 100644
index 0000000..424e5a7
--- /dev/null
+++ b/test/Deprecated/Options/PackageOption.py
@@ -0,0 +1,98 @@
+#!/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__"
+
+"""
+Test the PackageOption canned Option type.
+"""
+
+import os
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+SConstruct_path = test.workpath('SConstruct')
+
+def check(expect):
+ result = test.stdout().split('\n')
+ assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect)
+
+
+
+test.write(SConstruct_path, """\
+from SCons.Options.PackageOption import PackageOption
+PO = PackageOption
+
+from SCons.Options import PackageOption
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PackageOption('x11',
+ 'use X11 installed here (yes = search some places',
+ 'yes'),
+ PO('package', 'help for package', 'yes'),
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['x11']
+Default(env.Alias('dummy', None))
+""")
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%s
+scons: warning: The PackageOption\\(\\) function is deprecated; use the PackageVariable\\(\\) function instead.
+%s""" % (TestSCons.file_expr, TestSCons.file_expr)
+
+test.run(stderr=warnings)
+check([str(True)])
+
+test.run(arguments='x11=no', stderr=warnings)
+check([str(False)])
+
+test.run(arguments='x11=0', stderr=warnings)
+check([str(False)])
+
+test.run(arguments=['x11=%s' % test.workpath()], stderr=warnings)
+check([test.workpath()])
+
+expect_stderr = warnings + """
+scons: \\*\\*\\* Path does not exist for option x11: /non/existing/path/
+""" + TestSCons.file_expr
+
+test.run(arguments='x11=/non/existing/path/', stderr=expect_stderr, status=2)
+
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/PathOption.py b/test/Deprecated/Options/PathOption.py
new file mode 100644
index 0000000..4701420
--- /dev/null
+++ b/test/Deprecated/Options/PathOption.py
@@ -0,0 +1,296 @@
+#!/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__"
+
+"""
+Test the PathOption canned option type, with tests for its
+various canned validators.
+"""
+
+import os.path
+import re
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+SConstruct_path = test.workpath('SConstruct')
+
+def check(expect):
+ result = test.stdout().split('\n')
+ assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect)
+
+#### test PathOption ####
+
+test.subdir('lib', 'qt', ['qt', 'lib'], 'nolib' )
+workpath = test.workpath()
+libpath = os.path.join(workpath, 'lib')
+
+test.write(SConstruct_path, """\
+from SCons.Options.PathOption import PathOption
+PO = PathOption
+
+from SCons.Options import PathOption
+
+qtdir = r'%s'
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PathOption('qtdir', 'where the root of Qt is installed', qtdir),
+ PO('qt_libraries', 'where the Qt library is installed', r'%s'),
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['qtdir']
+print env['qt_libraries']
+print env.subst('$qt_libraries')
+
+Default(env.Alias('dummy', None))
+""" % (workpath, os.path.join('$qtdir', 'lib') ))
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%s
+scons: warning: The PathOption\\(\\) function is deprecated; use the PathVariable\\(\\) function instead.
+%s""" % (TestSCons.file_expr, TestSCons.file_expr)
+
+qtpath = workpath
+libpath = os.path.join(qtpath, 'lib')
+test.run(stderr=warnings)
+check([qtpath, os.path.join('$qtdir', 'lib'), libpath])
+
+qtpath = os.path.join(workpath, 'qt')
+libpath = os.path.join(qtpath, 'lib')
+test.run(arguments=['qtdir=%s' % qtpath], stderr=warnings)
+check([qtpath, os.path.join('$qtdir', 'lib'), libpath])
+
+qtpath = workpath
+libpath = os.path.join(qtpath, 'nolib')
+test.run(arguments=['qt_libraries=%s' % libpath], stderr=warnings)
+check([qtpath, libpath, libpath])
+
+qtpath = os.path.join(workpath, 'qt')
+libpath = os.path.join(workpath, 'nolib')
+test.run(arguments=['qtdir=%s' % qtpath, 'qt_libraries=%s' % libpath], stderr=warnings)
+check([qtpath, libpath, libpath])
+
+qtpath = os.path.join(workpath, 'non', 'existing', 'path')
+qtpath_re = re.escape(qtpath)
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Path for option qtdir does not exist: %(qtpath_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['qtdir=%s' % qtpath], stderr=expect_stderr, status=2)
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Path for option qt_libraries does not exist: %(qtpath_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['qt_libraries=%s' % qtpath], stderr=expect_stderr, status=2)
+
+
+
+default_file = test.workpath('default_file')
+default_subdir = test.workpath('default_subdir')
+
+existing_subdir = test.workpath('existing_subdir')
+test.subdir(existing_subdir)
+
+existing_file = test.workpath('existing_file')
+test.write(existing_file, "existing_file\n")
+
+non_existing_subdir = test.workpath('non_existing_subdir')
+non_existing_file = test.workpath('non_existing_file')
+
+default_file_re = re.escape(default_file)
+default_subdir_re = re.escape(default_subdir)
+existing_subdir_re = re.escape(existing_subdir)
+existing_file_re = re.escape(existing_file)
+non_existing_subdir_re = re.escape(non_existing_subdir)
+non_existing_file_re = re.escape(non_existing_file)
+
+
+
+test.write('SConstruct', """\
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PathOption('X', 'X variable', r'%s', validator=PathOption.PathAccept),
+ )
+
+env = Environment(options=opts)
+
+print env['X']
+
+Default(env.Alias('dummy', None))
+""" % default_subdir)
+
+test.run(stderr=warnings)
+check([default_subdir])
+
+test.run(arguments=['X=%s' % existing_file], stderr=warnings)
+check([existing_file])
+
+test.run(arguments=['X=%s' % non_existing_file], stderr=warnings)
+check([non_existing_file])
+
+test.run(arguments=['X=%s' % existing_subdir], stderr=warnings)
+check([existing_subdir])
+
+test.run(arguments=['X=%s' % non_existing_subdir], stderr=warnings)
+check([non_existing_subdir])
+
+test.must_not_exist(non_existing_file)
+test.must_not_exist(non_existing_subdir)
+
+
+
+test.write(SConstruct_path, """\
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PathOption('X', 'X variable', r'%s', validator=PathOption.PathIsFile),
+ )
+
+env = Environment(options=opts)
+
+print env['X']
+
+Default(env.Alias('dummy', None))
+""" % default_file)
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* File path for option X does not exist: %(default_file_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(status=2, stderr=expect_stderr)
+
+test.write(default_file, "default_file\n")
+
+test.run(stderr=warnings)
+check([default_file])
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* File path for option X is a directory: %(existing_subdir_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['X=%s' % existing_subdir], status=2, stderr=expect_stderr)
+
+test.run(arguments=['X=%s' % existing_file], stderr=warnings)
+check([existing_file])
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* File path for option X does not exist: %(non_existing_file_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['X=%s' % non_existing_file], status=2, stderr=expect_stderr)
+
+
+
+test.write('SConstruct', """\
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PathOption('X', 'X variable', r'%s', validator=PathOption.PathIsDir),
+ )
+
+env = Environment(options=opts)
+
+print env['X']
+
+Default(env.Alias('dummy', None))
+""" % default_subdir)
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Directory path for option X does not exist: %(default_subdir_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(status=2, stderr=expect_stderr)
+
+test.subdir(default_subdir)
+
+test.run(stderr=warnings)
+check([default_subdir])
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Directory path for option X is a file: %(existing_file_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['X=%s' % existing_file],
+ status=2,
+ stderr=expect_stderr)
+
+test.run(arguments=['X=%s' % existing_subdir], stderr=warnings)
+check([existing_subdir])
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Directory path for option X does not exist: %(non_existing_subdir_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['X=%s' % non_existing_subdir],
+ status=2,
+ stderr=expect_stderr)
+
+
+
+test.write('SConstruct', """\
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ PathOption('X', 'X variable', r'%s', validator=PathOption.PathIsDirCreate),
+ )
+
+env = Environment(options=opts)
+
+print env['X']
+
+Default(env.Alias('dummy', None))
+""" % default_subdir)
+
+test.run(stderr=warnings)
+check([default_subdir])
+
+expect_stderr = warnings + ("""
+scons: \\*\\*\\* Path for option X is a file, not a directory: %(existing_file_re)s
+""" % locals()) + TestSCons.file_expr
+
+test.run(arguments=['X=%s' % existing_file], status=2, stderr=expect_stderr)
+
+test.run(arguments=['X=%s' % existing_subdir], stderr=warnings)
+check([existing_subdir])
+
+test.run(arguments=['X=%s' % non_existing_subdir], stderr=warnings)
+check([non_existing_subdir])
+
+test.must_exist(non_existing_subdir)
+
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/chdir.py b/test/Deprecated/Options/chdir.py
new file mode 100644
index 0000000..a8fb6c6
--- /dev/null
+++ b/test/Deprecated/Options/chdir.py
@@ -0,0 +1,80 @@
+#!/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 that we can chdir() to the directory in which an Options
+file lives by using the __name__ value.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+test.subdir('bin', 'subdir')
+
+test.write('SConstruct', """\
+opts = Options('../bin/opts.cfg', ARGUMENTS)
+opts.Add('VARIABLE')
+Export("opts")
+SConscript('subdir/SConscript')
+""")
+
+SConscript_contents = """\
+Import("opts")
+env = Environment()
+opts.Update(env)
+print "VARIABLE =", repr(env['VARIABLE'])
+"""
+
+test.write(['bin', 'opts.cfg'], """\
+import os
+os.chdir(os.path.split(__name__)[0])
+exec(open('opts2.cfg', 'rU').read())
+""")
+
+test.write(['bin', 'opts2.cfg'], """\
+VARIABLE = 'opts2.cfg value'
+""")
+
+test.write(['subdir', 'SConscript'], SConscript_contents)
+
+expect = """\
+VARIABLE = 'opts2.cfg value'
+"""
+
+warnings = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+""" + TestSCons.file_expr
+
+test.run(arguments = '-q -Q .', stdout=expect, stderr=warnings)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/help.py b/test/Deprecated/Options/help.py
new file mode 100644
index 0000000..8c240e3
--- /dev/null
+++ b/test/Deprecated/Options/help.py
@@ -0,0 +1,170 @@
+#!/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__"
+
+"""
+Test the Options help messages.
+"""
+
+import os
+import re
+
+import TestSCons
+
+str_True = str(True)
+str_False = str(False)
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+workpath = test.workpath()
+qtpath = os.path.join(workpath, 'qt')
+libpath = os.path.join(qtpath, 'lib')
+libdirvar = os.path.join('$qtdir', 'lib')
+
+qtpath_re = re.escape(qtpath)
+libpath_re = re.escape(libpath)
+libdirvar_re = re.escape(libdirvar)
+
+test.subdir(qtpath)
+test.subdir(libpath)
+
+test.write('SConstruct', """
+from SCons.Options import BoolOption, EnumOption, ListOption, \
+ PackageOption, PathOption
+
+list_of_libs = Split('x11 gl qt ical')
+qtdir = r'%(qtpath)s'
+
+opts = Options(args=ARGUMENTS)
+opts.AddOptions(
+ BoolOption('warnings', 'compilation with -Wall and similiar', 1),
+ BoolOption('profile', 'create profiling informations', 0),
+ EnumOption('debug', 'debug output and symbols', 'no',
+ allowed_values=('yes', 'no', 'full'),
+ map={}, ignorecase=0), # case sensitive
+ EnumOption('guilib', 'gui lib to use', 'gtk',
+ allowed_values=('motif', 'gtk', 'kde'),
+ map={}, ignorecase=1), # case insensitive
+ EnumOption('some', 'some option', 'xaver',
+ allowed_values=('xaver', 'eins'),
+ map={}, ignorecase=2), # make lowercase
+ ListOption('shared',
+ 'libraries to build as shared libraries',
+ 'all',
+ names = list_of_libs),
+ PackageOption('x11',
+ 'use X11 installed here (yes = search some places)',
+ 'yes'),
+ PathOption('qtdir', 'where the root of Qt is installed', qtdir),
+ PathOption('qt_libraries',
+ 'where the Qt library is installed',
+ r'%(libdirvar)s'),
+ )
+
+env = Environment(options=opts)
+Help(opts.GenerateHelpText(env))
+
+print env['warnings']
+print env['profile']
+
+Default(env.Alias('dummy', None))
+""" % locals())
+
+
+expected_stdout = """\
+scons: Reading SConscript files ...
+%(str_True)s
+%(str_False)s
+scons: done reading SConscript files.
+
+warnings: compilation with -Wall and similiar \\(yes|no\\)
+ default: 1
+ actual: %(str_True)s
+
+profile: create profiling informations \\(yes|no\\)
+ default: 0
+ actual: %(str_False)s
+
+debug: debug output and symbols \\(yes|no|full\\)
+ default: no
+ actual: no
+
+guilib: gui lib to use \\(motif|gtk|kde\\)
+ default: gtk
+ actual: gtk
+
+some: some option \\(xaver|eins\\)
+ default: xaver
+ actual: xaver
+
+shared: libraries to build as shared libraries
+ \\(all|none|comma-separated list of names\\)
+ allowed names: x11 gl qt ical
+ default: all
+ actual: x11 gl qt ical
+
+x11: use X11 installed here \\(yes = search some places\\)
+ \\( yes | no | /path/to/x11 \\)
+ default: yes
+ actual: %(str_True)s
+
+qtdir: where the root of Qt is installed \\( /path/to/qtdir \\)
+ default: %(qtpath_re)s
+ actual: %(qtpath_re)s
+
+qt_libraries: where the Qt library is installed \\( /path/to/qt_libraries \\)
+ default: %(libdirvar_re)s
+ actual: %(libpath_re)s
+
+Use scons -H for help about command-line options.
+""" % locals()
+
+file_expr = TestSCons.file_expr
+
+expected_stderr = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+%(file_expr)s
+scons: warning: The BoolOption\\(\\) function is deprecated; use the BoolVariable\\(\\) function instead.
+%(file_expr)s
+scons: warning: The EnumOption\\(\\) function is deprecated; use the EnumVariable\\(\\) function instead.
+%(file_expr)s
+scons: warning: The ListOption\\(\\) function is deprecated; use the ListVariable\\(\\) function instead.
+%(file_expr)s
+scons: warning: The PackageOption\\(\\) function is deprecated; use the PackageVariable\\(\\) function instead.
+%(file_expr)s
+scons: warning: The PathOption\\(\\) function is deprecated; use the PathVariable\\(\\) function instead.
+%(file_expr)s""" % locals()
+
+test.run(arguments='-h', stdout=expected_stdout, stderr=expected_stderr)
+
+
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Deprecated/Options/import.py b/test/Deprecated/Options/import.py
new file mode 100644
index 0000000..a4d56b2
--- /dev/null
+++ b/test/Deprecated/Options/import.py
@@ -0,0 +1,78 @@
+#!/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 that an Options file in a different directory can import
+a module in that directory.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
+
+workpath = test.workpath('')
+
+test.subdir('bin', 'subdir')
+
+test.write('SConstruct', """\
+opts = Options('../bin/opts.cfg', ARGUMENTS)
+opts.Add('VARIABLE')
+Export("opts")
+SConscript('subdir/SConscript')
+""")
+
+SConscript_contents = """\
+Import("opts")
+env = Environment()
+opts.Update(env)
+print "VARIABLE =", env.get('VARIABLE')
+"""
+
+test.write(['bin', 'opts.cfg'], """\
+from local_options import VARIABLE
+""" % locals())
+
+test.write(['bin', 'local_options.py'], """\
+VARIABLE = 'bin/local_options.py'
+""")
+
+test.write(['subdir', 'SConscript'], SConscript_contents)
+
+stdout = "VARIABLE = bin/local_options.py\n"
+
+stderr = """
+scons: warning: The Options class is deprecated; use the Variables class instead.
+""" + TestSCons.file_expr
+
+test.run(arguments = '-q -Q .', stdout = stdout, stderr = stderr)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4: