diff options
author | Stefan Zimmermann <zimmermann.code@gmail.com> | 2014-03-31 16:24:42 (GMT) |
---|---|---|
committer | Stefan Zimmermann <zimmermann.code@gmail.com> | 2014-03-31 16:24:42 (GMT) |
commit | cffcd3c38568d3f82ff83916bbbd1b129373558c (patch) | |
tree | ff268c97886e3cc905115185a35405b3fd83348a /src/engine/SCons/Script | |
parent | ea1890249923aab9cda388b2d22b566dbb7b8949 (diff) | |
parent | d4f8c6e320484c106446918c37affdddacd5c7a3 (diff) | |
download | SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.zip SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.tar.gz SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.tar.bz2 |
Merged with [default]
Diffstat (limited to 'src/engine/SCons/Script')
-rw-r--r-- | src/engine/SCons/Script/Main.xml | 2 | ||||
-rw-r--r-- | src/engine/SCons/Script/MainTests.py | 6 | ||||
-rw-r--r-- | src/engine/SCons/Script/SConsOptions.py | 67 | ||||
-rw-r--r-- | src/engine/SCons/Script/SConscript.xml | 4 |
4 files changed, 73 insertions, 6 deletions
diff --git a/src/engine/SCons/Script/Main.xml b/src/engine/SCons/Script/Main.xml index 147e778..07dce9a 100644 --- a/src/engine/SCons/Script/Main.xml +++ b/src/engine/SCons/Script/Main.xml @@ -21,7 +21,7 @@ See its __doc__ string for a discussion of the format. <sconsdoc xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0/scons.xsd scons.xsd"> + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> <scons_function name="AddOption"> diff --git a/src/engine/SCons/Script/MainTests.py b/src/engine/SCons/Script/MainTests.py index c44c426..fd6aaf4 100644 --- a/src/engine/SCons/Script/MainTests.py +++ b/src/engine/SCons/Script/MainTests.py @@ -24,6 +24,9 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import unittest + +import TestUnit + import SCons.Errors import SCons.Script.Main @@ -43,8 +46,7 @@ if __name__ == "__main__": for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) - if not unittest.TextTestRunner().run(suite).wasSuccessful(): - sys.exit(1) + TestUnit.run(suite) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Script/SConsOptions.py b/src/engine/SCons/Script/SConsOptions.py index 3602663..1250e6b 100644 --- a/src/engine/SCons/Script/SConsOptions.py +++ b/src/engine/SCons/Script/SConsOptions.py @@ -337,6 +337,71 @@ class SConsOptionParser(optparse.OptionParser): option.process(opt, value, values, self) + def reparse_local_options(self): + """ + Re-parse the leftover command-line options stored + in self.largs, so that any value overridden on the + command line is immediately available if the user turns + around and does a GetOption() right away. + + We mimic the processing of the single args + in the original OptionParser._process_args(), but here we + allow exact matches for long-opts only (no partial + argument names!). + + Else, this would lead to problems in add_local_option() + below. When called from there, we try to reparse the + command-line arguments that + 1. haven't been processed so far (self.largs), but + 2. are possibly not added to the list of options yet. + + So, when we only have a value for "--myargument" yet, + a command-line argument of "--myarg=test" would set it. + Responsible for this behaviour is the method + _match_long_opt(), which allows for partial matches of + the option name, as long as the common prefix appears to + be unique. + This would lead to further confusion, because we might want + to add another option "--myarg" later on (see issue #2929). + + """ + rargs = [] + largs_restore = [] + # Loop over all remaining arguments + skip = False + for l in self.largs: + if skip: + # Accept all remaining arguments as they are + largs_restore.append(l) + else: + if len(l) > 2 and l[0:2] == "--": + # Check long option + lopt = (l,) + if "=" in l: + # Split into option and value + lopt = l.split("=", 1) + + if lopt[0] in self._long_opt: + # Argument is already known + rargs.append('='.join(lopt)) + else: + # Not known yet, so reject for now + largs_restore.append('='.join(lopt)) + else: + if l == "--" or l == "-": + # Stop normal processing and don't + # process the rest of the command-line opts + largs_restore.append(l) + skip = True + else: + rargs.append(l) + + # Parse the filtered list + self.parse_args(rargs, self.values) + # Restore the list of remaining arguments for the + # next call of AddOption/add_local_option... + self.largs = self.largs + largs_restore + def add_local_option(self, *args, **kw): """ Adds a local option to the parser. @@ -364,7 +429,7 @@ class SConsOptionParser(optparse.OptionParser): # available if the user turns around and does a GetOption() # right away. setattr(self.values.__defaults__, result.dest, result.default) - self.parse_args(self.largs, self.values) + self.reparse_local_options() return result diff --git a/src/engine/SCons/Script/SConscript.xml b/src/engine/SCons/Script/SConscript.xml index 3f2341a..c74ad5e 100644 --- a/src/engine/SCons/Script/SConscript.xml +++ b/src/engine/SCons/Script/SConscript.xml @@ -21,7 +21,7 @@ See its __doc__ string for a discussion of the format. <sconsdoc xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0/scons.xsd scons.xsd"> + xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd"> <scons_function name="Default"> @@ -593,4 +593,4 @@ SConscript('src/SConscript', variant_dir='build/ppc', duplicate=0) </summary> </scons_function> -</sconsdoc>
\ No newline at end of file +</sconsdoc> |