Extend sconf force support
Allow forcing a test to succeed without changing flags.
This commit is contained in:
parent
b4a778ed9d
commit
99555d0e73
32
SConstruct
32
SConstruct
|
@ -53,6 +53,13 @@ class ConfigureTests:
|
|||
def restore(self,env):
|
||||
# Restore potential quiet build options
|
||||
env.Replace(**self.cc_env_strings)
|
||||
# Force test to report failure
|
||||
sconf_force_failure = 'force-failure'
|
||||
# Force test to report success, and modify flags like it
|
||||
# succeeded
|
||||
sconf_force_success = 'force-success'
|
||||
# Force test to report success, do not modify flags
|
||||
sconf_assume_success = 'assume-success'
|
||||
_implicit_test = Collector()
|
||||
_custom_test = Collector()
|
||||
implicit_tests = _implicit_test.tests
|
||||
|
@ -136,13 +143,26 @@ class ConfigureTests:
|
|||
cc_env_strings.restore(context.env)
|
||||
context.Result((successmsg if r else failuremsg) or r)
|
||||
else:
|
||||
choices = (self.sconf_force_failure, self.sconf_force_success, self.sconf_assume_success)
|
||||
if forced not in choices:
|
||||
try:
|
||||
forced = choices[int(forced)]
|
||||
except ValueError:
|
||||
raise SCons.Errors.UserError("Unknown force value for sconf_%s: %s" % (co_name[6:], forced))
|
||||
except IndexError:
|
||||
raise SCons.Errors.UserError("Out of range force value for sconf_%s: %s" % (co_name[6:], forced))
|
||||
if forced == self.sconf_force_failure:
|
||||
r = False
|
||||
elif forced == self.sconf_force_success or forced == self.sconf_assume_success:
|
||||
r = True
|
||||
else:
|
||||
raise SCons.Errors.UserError("Unknown force value for sconf_%s: %s" % (co_name[6:], forced))
|
||||
if expect_failure:
|
||||
forced = not forced
|
||||
r = forced
|
||||
context.Result('(forced){inverted}{forced}'.format(forced='yes' if forced else 'no', inverted='(inverted)' if expect_failure else ''))
|
||||
r = not r
|
||||
context.Result('(forced){inverted}{forced}'.format(forced=forced, inverted='(inverted)' if expect_failure else ''))
|
||||
# On success, revert to base flags + successflags
|
||||
# On failure, revert to base flags
|
||||
if r:
|
||||
if r and forced != self.sconf_assume_success:
|
||||
caller_modified_env_flags.restore(context.env)
|
||||
context.env.Replace(CPPDEFINES=env_flags['CPPDEFINES'])
|
||||
for d in successflags.pop('CPPDEFINES', []):
|
||||
|
@ -791,9 +811,9 @@ class DXXCommon(LazyObjectConstructor):
|
|||
def _options(self):
|
||||
return (
|
||||
{
|
||||
'variable': BoolVariable,
|
||||
'variable': self._enum_variable,
|
||||
'arguments': [
|
||||
('sconf_%s' % name[6:], None, ConfigureTests.describe(name) or ('assume result of %s' % name)) for name in ConfigureTests.implicit_tests + ConfigureTests.custom_tests if name[0] != '_'
|
||||
('sconf_%s' % name[6:], None, ConfigureTests.describe(name) or ('assume result of %s' % name), {'allowed_values' : ['0', '1', '2', ConfigureTests.sconf_force_failure, ConfigureTests.sconf_force_success, ConfigureTests.sconf_assume_success]}) for name in ConfigureTests.implicit_tests + ConfigureTests.custom_tests if name[0] != '_'
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue