From b09e3ac541d00ffb7cb430eca27c3313a05c3b13 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Mon, 27 Jan 2025 18:02:54 +0200 Subject: [PATCH] Try to fix #14189. --- mesonbuild/interpreter/interpreter.py | 2 +- mesonbuild/options.py | 2 ++ test cases/common/87 default options/meson.build | 2 +- .../common/87 default options/subprojects/sub1/meson.build | 1 + .../87 default options/subprojects/sub1/meson_options.txt | 1 + 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 7a5b1891699b..5ef48cba4b5d 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -299,7 +299,7 @@ def __init__( self.configure_file_outputs: T.Dict[str, int] = {} # Passed from the outside, only used in subprojects. if default_project_options: - self.default_project_options = default_project_options.copy() + self.default_project_options = default_project_options if isinstance(default_project_options, str) else default_project_options.copy() if isinstance(default_project_options, dict): pass else: diff --git a/mesonbuild/options.py b/mesonbuild/options.py index 136df7bed5d9..d22221944b2a 100644 --- a/mesonbuild/options.py +++ b/mesonbuild/options.py @@ -1285,6 +1285,8 @@ def initialize_from_subproject_call(self, subproject, spcall_default_options, pr is_first_invocation = True spcall_default_options = self.hacky_mchackface_back_to_list(spcall_default_options) project_default_options = self.hacky_mchackface_back_to_list(project_default_options) + if isinstance(spcall_default_options, str): + spcall_default_options = [spcall_default_options] for o in itertools.chain(project_default_options, spcall_default_options): keystr, valstr = o.split('=', 1) key = OptionKey.from_string(keystr) diff --git a/test cases/common/87 default options/meson.build b/test cases/common/87 default options/meson.build index 51b5cdac9fc8..1b482f1e38be 100644 --- a/test cases/common/87 default options/meson.build +++ b/test cases/common/87 default options/meson.build @@ -30,4 +30,4 @@ assert(w_level == '3', 'warning level "' + w_level + '" instead of "3"') # assert(cc.compiles('int foobar;', no_builtin_args : true), 'No_builtin did not disable builtins.') # endif -subproject('sub1') +subproject('sub1', default_options: 'func_test_option=true') diff --git a/test cases/common/87 default options/subprojects/sub1/meson.build b/test cases/common/87 default options/subprojects/sub1/meson.build index de0dc216c115..d6f79609592c 100644 --- a/test cases/common/87 default options/subprojects/sub1/meson.build +++ b/test cases/common/87 default options/subprojects/sub1/meson.build @@ -1,3 +1,4 @@ project('sub1') assert(get_option('test_option') == false) +assert(get_option('func_test_option') == true) diff --git a/test cases/common/87 default options/subprojects/sub1/meson_options.txt b/test cases/common/87 default options/subprojects/sub1/meson_options.txt index fc96f5e099c3..37ce4d4bb79e 100644 --- a/test cases/common/87 default options/subprojects/sub1/meson_options.txt +++ b/test cases/common/87 default options/subprojects/sub1/meson_options.txt @@ -1 +1,2 @@ option('test_option', type : 'boolean', value : true, description : 'Test option. Superproject overrides default to "false"') +option('func_test_option', type : 'boolean', value : false, description : 'Test option. Superproject overrides default to "true"')