environment: don't load project options from a native file in a cross build

pull/8625/head
Dylan Baker 4 years ago
parent 111070bf49
commit fdde948ca1
  1. 4
      mesonbuild/environment.py
  2. 18
      run_unittests.py

@ -786,7 +786,9 @@ class Environment:
if key.subproject:
raise MesonException('Do not set subproject options in [built-in options] section, use [subproject:built-in options] instead.')
self.options[key.evolve(subproject=subproject, machine=machine)] = v
elif section == 'project options':
elif section == 'project options' and machine is MachineChoice.HOST:
# Project options are only for the host machine, we don't want
# to read these from the native file
for k, v in values.items():
# Project options are always for the host machine
key = OptionKey.from_string(k)

@ -9202,7 +9202,7 @@ class CrossFileTests(BasePlatformTests):
for section, entries in values.items():
f.write(f'[{section}]\n')
for k, v in entries.items():
f.write(f"{k}='{v}'\n")
f.write(f"{k}={v!r}\n")
return filename
def test_cross_file_dirs(self):
@ -9368,6 +9368,22 @@ class CrossFileTests(BasePlatformTests):
break
self.assertEqual(found, 2, 'Did not find all sections.')
def test_project_options_native_only(self) -> None:
# Do not load project options from a native file when doing a cross
# build
testcase = os.path.join(self.unit_test_dir, '19 array option')
config = self.helper_create_cross_file({'project options': {'list': ['bar', 'foo']}})
cross = self.helper_create_cross_file({'binaries': {}})
self.init(testcase, extra_args=['--native-file', config, '--cross-file', cross])
configuration = self.introspect('--buildoptions')
for each in configuration:
if each['name'] == 'list':
self.assertEqual(each['value'], ['foo', 'bar'])
break
else:
self.fail('Did not find expected option.')
class TAPParserTests(unittest.TestCase):
def assert_test(self, events, **kwargs):

Loading…
Cancel
Save