Skip to content

Commit e56dc17

Browse files
bonzinieli-schwartz
authored andcommitted
interpreter: allow passing default default_options to do_subproject
Apply the default_library=... default after the default options have been converted to a dictionary, to avoid having to deal with all the possible types of the default_options keyword argument. Fixes: #14532 Signed-off-by: Paolo Bonzini <[email protected]> (cherry picked from commit 42d531d)
1 parent 3abb3ca commit e56dc17

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

mesonbuild/interpreter/dependencyfallbacks.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
from __future__ import annotations
66

7-
import copy
8-
97
from .interpreterobjects import extract_required_kwarg
108
from .. import mlog
119
from .. import dependencies
1210
from .. import build
1311
from ..wrap import WrapMode
14-
from ..mesonlib import extract_as_list, stringlistify, version_compare_many, listify
12+
from ..mesonlib import extract_as_list, stringlistify, version_compare_many
1513
from ..options import OptionKey
1614
from ..dependencies import Dependency, DependencyException, NotFoundDependency
1715
from ..interpreterbase import (MesonInterpreterObject, FeatureNew,
@@ -124,21 +122,17 @@ def _do_subproject(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs
124122
# dependency('foo', static: true) should implicitly add
125123
# default_options: ['default_library=static']
126124
static = kwargs.get('static')
127-
default_options = func_kwargs.get('default_options', {})
128-
if static is not None and 'default_library' not in default_options:
125+
extra_default_options = {}
126+
if static is not None:
129127
default_library = 'static' if static else 'shared'
130128
mlog.log(f'Building fallback subproject with default_library={default_library}')
131-
default_options = copy.copy(default_options)
132-
default_options['default_library'] = default_library
133-
func_kwargs['default_options'] = default_options
129+
extra_default_options['default_library'] = default_library
134130

135131
# Configure the subproject
136132
subp_name = self.subproject_name
137133
varname = self.subproject_varname
138134
func_kwargs.setdefault('version', [])
139-
if 'default_options' in kwargs and isinstance(kwargs['default_options'], str):
140-
func_kwargs['default_options'] = listify(kwargs['default_options'])
141-
self.interpreter.do_subproject(subp_name, func_kwargs)
135+
self.interpreter.do_subproject(subp_name, func_kwargs, extra_default_options=extra_default_options)
142136
return self._get_subproject_dep(subp_name, varname, kwargs)
143137

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

mesonbuild/interpreter/interpreter.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,8 @@ def disabled_subproject(self, subp_name: str, disabled_feature: T.Optional[str]
867867
self.subprojects[subp_name] = sub
868868
return sub
869869

870-
def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_method: T.Optional[wrap.Method] = None) -> SubprojectHolder:
870+
def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_method: T.Optional[wrap.Method] = None,
871+
extra_default_options: T.Optional[T.Dict[str, options.ElementaryOptionValues]] = None) -> SubprojectHolder:
871872
if subp_name == 'sub_static':
872873
pass
873874
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
@@ -881,6 +882,8 @@ def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_meth
881882
default_options = [default_options]
882883
if isinstance(default_options, list):
883884
default_options = dict((x.split('=', 1) for x in default_options))
885+
if extra_default_options:
886+
default_options = {**extra_default_options, **default_options}
884887

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

0 commit comments

Comments
 (0)