diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-06-10 16:59:54 +0200 |
|---|---|---|
| committer | Jussi Pakkanen <jussi.pakkanen@mailbox.org> | 2025-06-18 21:33:19 +0300 |
| commit | e8e80aaf020f5c74fd0cc791bc26a890d6fe8cfe (patch) | |
| tree | 432d3dcde32359abf15a5d5619f7718137519d44 /mesonbuild/interpreter | |
| parent | 9b1eb8b8ed434d1c2fdca0d8ac46b79c9b91bb0f (diff) | |
| download | meson-e8e80aaf020f5c74fd0cc791bc26a890d6fe8cfe.tar.gz | |
interpreter: bump priority of default_library=static that comes from fallback
We're about to lower the priority of the default_options that were passed
to subproject() and dependency() below that of machine files and command
line options.
Whenever a static dependency is falling back to a subproject, however, do
not do that. It makes no sense to build a shared library in that case.
Another possibility however could be to just make it an error.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild/interpreter')
| -rw-r--r-- | mesonbuild/interpreter/dependencyfallbacks.py | 6 | ||||
| -rw-r--r-- | mesonbuild/interpreter/interpreter.py | 14 |
2 files changed, 14 insertions, 6 deletions
diff --git a/mesonbuild/interpreter/dependencyfallbacks.py b/mesonbuild/interpreter/dependencyfallbacks.py index 3bbb43404..f415026aa 100644 --- a/mesonbuild/interpreter/dependencyfallbacks.py +++ b/mesonbuild/interpreter/dependencyfallbacks.py @@ -122,17 +122,17 @@ class DependencyFallbacksHolder(MesonInterpreterObject): # dependency('foo', static: true) should implicitly add # default_options: ['default_library=static'] static = kwargs.get('static') - extra_default_options = {} + forced_options = {} if static is not None: default_library = 'static' if static else 'shared' mlog.log(f'Building fallback subproject with default_library={default_library}') - extra_default_options[OptionKey('default_library')] = default_library + forced_options[OptionKey('default_library')] = default_library # Configure the subproject subp_name = self.subproject_name varname = self.subproject_varname func_kwargs.setdefault('version', []) - self.interpreter.do_subproject(subp_name, func_kwargs, extra_default_options=extra_default_options) + self.interpreter.do_subproject(subp_name, func_kwargs, forced_options=forced_options) return self._get_subproject_dep(subp_name, varname, kwargs) def _get_subproject(self, subp_name: str) -> T.Optional[SubprojectHolder]: diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index b76a265e1..a872da190 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -870,7 +870,7 @@ class Interpreter(InterpreterBase, HoldableObject): return sub def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_method: T.Optional[wrap.Method] = None, - extra_default_options: T.Optional[OptionDict] = None) -> SubprojectHolder: + forced_options: T.Optional[OptionDict] = None) -> SubprojectHolder: if subp_name == 'sub_static': pass disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) @@ -880,8 +880,16 @@ class Interpreter(InterpreterBase, HoldableObject): return self.disabled_subproject(subp_name, disabled_feature=feature) default_options = kwargs['default_options'] - if extra_default_options: - default_options = {**extra_default_options, **default_options} + + # This in practice is only used for default_library. forced_options is the + # only case in which a meson.build file overrides the machine file or the + # command line. + if forced_options: + for k, v in forced_options.items(): + # FIXME: this should have no business poking at augments[], + # but set_option() does not do what we want + self.coredata.optstore.augments[k.evolve(subproject=subp_name)] = v + default_options = {**forced_options, **default_options} if subp_name == '': raise InterpreterException('Subproject name must not be empty.') |
