summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-06-10 16:59:54 +0200
committerJussi Pakkanen <jussi.pakkanen@mailbox.org>2025-06-18 21:33:19 +0300
commite8e80aaf020f5c74fd0cc791bc26a890d6fe8cfe (patch)
tree432d3dcde32359abf15a5d5619f7718137519d44 /mesonbuild/interpreter
parent9b1eb8b8ed434d1c2fdca0d8ac46b79c9b91bb0f (diff)
downloadmeson-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.py6
-rw-r--r--mesonbuild/interpreter/interpreter.py14
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.')