diff options
| -rw-r--r-- | mesonbuild/options.py | 6 | ||||
| -rw-r--r-- | unittests/optiontests.py | 14 |
2 files changed, 20 insertions, 0 deletions
diff --git a/mesonbuild/options.py b/mesonbuild/options.py index 2226e6bf0..62413b1a7 100644 --- a/mesonbuild/options.py +++ b/mesonbuild/options.py @@ -899,6 +899,12 @@ class OptionStore: self.options[key] = valobj pval = self.pending_options.pop(key, None) + if key.subproject: + proj_key = key.evolve(subproject=None) + self.add_system_option_internal(proj_key, valobj) + if pval is None: + pval = self.options[proj_key].value + if pval is not None: self.set_option(key, pval) diff --git a/unittests/optiontests.py b/unittests/optiontests.py index 3b3ffc98e..5ed601fed 100644 --- a/unittests/optiontests.py +++ b/unittests/optiontests.py @@ -35,6 +35,20 @@ class OptionTests(unittest.TestCase): optstore.initialize_from_top_level_project_call({OptionKey('someoption'): new_value}, {}, {}) self.assertEqual(optstore.get_value_for(k), new_value) + def test_subproject_system_option(self): + """Test that subproject system options get their default value from the global + option (e.g. "sub:b_lto" can be initialized from "b_lto").""" + optstore = OptionStore(False) + name = 'someoption' + default_value = 'somevalue' + new_value = 'new_value' + k = OptionKey(name) + subk = k.evolve(subproject='sub') + optstore.initialize_from_top_level_project_call({}, {}, {OptionKey(name): new_value}) + vo = UserStringOption(k.name, 'An option of some sort', default_value) + optstore.add_system_option(subk, vo) + self.assertEqual(optstore.get_value_for(subk), new_value) + def test_parsing(self): with self.subTest('subproject'): s1 = OptionKey.from_string('sub:optname') |
