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):
|
def restore(self,env):
|
||||||
# Restore potential quiet build options
|
# Restore potential quiet build options
|
||||||
env.Replace(**self.cc_env_strings)
|
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()
|
_implicit_test = Collector()
|
||||||
_custom_test = Collector()
|
_custom_test = Collector()
|
||||||
implicit_tests = _implicit_test.tests
|
implicit_tests = _implicit_test.tests
|
||||||
|
@ -136,13 +143,26 @@ class ConfigureTests:
|
||||||
cc_env_strings.restore(context.env)
|
cc_env_strings.restore(context.env)
|
||||||
context.Result((successmsg if r else failuremsg) or r)
|
context.Result((successmsg if r else failuremsg) or r)
|
||||||
else:
|
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:
|
if expect_failure:
|
||||||
forced = not forced
|
r = not r
|
||||||
r = forced
|
context.Result('(forced){inverted}{forced}'.format(forced=forced, inverted='(inverted)' if expect_failure else ''))
|
||||||
context.Result('(forced){inverted}{forced}'.format(forced='yes' if forced else 'no', inverted='(inverted)' if expect_failure else ''))
|
|
||||||
# On success, revert to base flags + successflags
|
# On success, revert to base flags + successflags
|
||||||
# On failure, revert to base flags
|
# On failure, revert to base flags
|
||||||
if r:
|
if r and forced != self.sconf_assume_success:
|
||||||
caller_modified_env_flags.restore(context.env)
|
caller_modified_env_flags.restore(context.env)
|
||||||
context.env.Replace(CPPDEFINES=env_flags['CPPDEFINES'])
|
context.env.Replace(CPPDEFINES=env_flags['CPPDEFINES'])
|
||||||
for d in successflags.pop('CPPDEFINES', []):
|
for d in successflags.pop('CPPDEFINES', []):
|
||||||
|
@ -791,9 +811,9 @@ class DXXCommon(LazyObjectConstructor):
|
||||||
def _options(self):
|
def _options(self):
|
||||||
return (
|
return (
|
||||||
{
|
{
|
||||||
'variable': BoolVariable,
|
'variable': self._enum_variable,
|
||||||
'arguments': [
|
'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