Skip to content

Commit e8e80aa

Browse files
bonzinijpakkane
authored andcommitted
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 <[email protected]>
1 parent 9b1eb8b commit e8e80aa

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

mesonbuild/interpreter/dependencyfallbacks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,17 @@ def _do_subproject(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs
122122
# dependency('foo', static: true) should implicitly add
123123
# default_options: ['default_library=static']
124124
static = kwargs.get('static')
125-
extra_default_options = {}
125+
forced_options = {}
126126
if static is not None:
127127
default_library = 'static' if static else 'shared'
128128
mlog.log(f'Building fallback subproject with default_library={default_library}')
129-
extra_default_options[OptionKey('default_library')] = default_library
129+
forced_options[OptionKey('default_library')] = default_library
130130

131131
# Configure the subproject
132132
subp_name = self.subproject_name
133133
varname = self.subproject_varname
134134
func_kwargs.setdefault('version', [])
135-
self.interpreter.do_subproject(subp_name, func_kwargs, extra_default_options=extra_default_options)
135+
self.interpreter.do_subproject(subp_name, func_kwargs, forced_options=forced_options)
136136
return self._get_subproject_dep(subp_name, varname, kwargs)
137137

138138
def _get_subproject(self, subp_name: str) -> T.Optional[SubprojectHolder]:

mesonbuild/interpreter/interpreter.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ def disabled_subproject(self, subp_name: str, disabled_feature: T.Optional[str]
870870
return sub
871871

872872
def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_method: T.Optional[wrap.Method] = None,
873-
extra_default_options: T.Optional[OptionDict] = None) -> SubprojectHolder:
873+
forced_options: T.Optional[OptionDict] = None) -> SubprojectHolder:
874874
if subp_name == 'sub_static':
875875
pass
876876
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
@@ -880,8 +880,16 @@ def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_meth
880880
return self.disabled_subproject(subp_name, disabled_feature=feature)
881881

882882
default_options = kwargs['default_options']
883-
if extra_default_options:
884-
default_options = {**extra_default_options, **default_options}
883+
884+
# This in practice is only used for default_library. forced_options is the
885+
# only case in which a meson.build file overrides the machine file or the
886+
# command line.
887+
if forced_options:
888+
for k, v in forced_options.items():
889+
# FIXME: this should have no business poking at augments[],
890+
# but set_option() does not do what we want
891+
self.coredata.optstore.augments[k.evolve(subproject=subp_name)] = v
892+
default_options = {**forced_options, **default_options}
885893

886894
if subp_name == '':
887895
raise InterpreterException('Subproject name must not be empty.')

0 commit comments

Comments
 (0)