summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/options.py6
-rw-r--r--unittests/optiontests.py14
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')