diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-05-05 14:31:56 +0200 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-05-07 09:43:43 -0700 |
| commit | 26870c2bdcaae4c126489c0896f3e277a66eda5d (patch) | |
| tree | 9560fcd3647b49ff420ece0c830c2f8010dbbb66 | |
| parent | 82bcab13d3088c1907a9a530795aa36f1e7e84b5 (diff) | |
| download | meson-26870c2bdcaae4c126489c0896f3e277a66eda5d.tar.gz | |
ast: clean up handling of default options
Do not go through string first and OptionKey second. Just pass the OptionKeys
down.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| -rw-r--r-- | mesonbuild/ast/introspection.py | 18 | ||||
| -rw-r--r-- | mesonbuild/coredata.py | 12 |
2 files changed, 17 insertions, 13 deletions
diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 4eb3fec3e..a270dfec2 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -11,7 +11,6 @@ import os import typing as T from .. import compilers, environment, mesonlib, options -from .. import coredata as cdata from ..build import Executable, Jar, SharedLibrary, SharedModule, StaticLibrary from ..compilers import detect_compiler_for from ..interpreterbase import InvalidArguments, SubProject @@ -99,6 +98,16 @@ class IntrospectionInterpreter(AstInterpreter): return [node.value] return None + def create_options_dict(options: T.List[str], subproject: str = '') -> T.Mapping[OptionKey, str]: + result: T.MutableMapping[OptionKey, str] = {} + for o in options: + try: + (key, value) = o.split('=', 1) + except ValueError: + raise mesonlib.MesonException(f'Option {o!r} must have a value separated by equals sign.') + result[OptionKey(key)] = value + return result + proj_name = args[0] proj_vers = kwargs.get('version', 'undefined') if isinstance(proj_vers, ElementaryNode): @@ -116,20 +125,19 @@ class IntrospectionInterpreter(AstInterpreter): def_opts = self.flatten_args(kwargs.get('default_options', [])) _project_default_options = mesonlib.stringlistify(def_opts) - string_dict = cdata.create_options_dict(_project_default_options, self.subproject) - self.project_default_options = {OptionKey(s): v for s, v in string_dict.items()} + self.project_default_options = create_options_dict(_project_default_options, self.subproject) self.default_options.update(self.project_default_options) if self.environment.first_invocation or (self.subproject != '' and self.subproject not in self.coredata.initialized_subprojects): if self.subproject == '': self.coredata.optstore.initialize_from_top_level_project_call( - T.cast('T.Dict[T.Union[OptionKey, str], str]', string_dict), + T.cast('T.Dict[T.Union[OptionKey, str], str]', self.project_default_options), {}, # TODO: not handled by this Interpreter. self.environment.options) else: self.coredata.optstore.initialize_from_subproject_call( self.subproject, {}, # TODO: this isn't handled by the introspection interpreter... - T.cast('T.Dict[T.Union[OptionKey, str], str]', string_dict), + T.cast('T.Dict[T.Union[OptionKey, str], str]', self.project_default_options), {}) # TODO: this isn't handled by the introspection interpreter... self.coredata.initialized_subprojects.add(self.subproject) diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 90157dfe6..4343f6996 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -701,18 +701,14 @@ def register_builtin_arguments(parser: argparse.ArgumentParser) -> None: parser.add_argument('-D', action='append', dest='projectoptions', default=[], metavar="option", help='Set the value of an option, can be used several times to set multiple options.') -def create_options_dict(options: T.List[str], subproject: str = '') -> T.Dict[str, str]: - result: T.OrderedDict[OptionKey, str] = OrderedDict() - for o in options: +def parse_cmd_line_options(args: SharedCMDOptions) -> None: + args.cmd_line_options = {} + for o in args.projectoptions: try: (key, value) = o.split('=', 1) except ValueError: raise MesonException(f'Option {o!r} must have a value separated by equals sign.') - result[key] = value - return result - -def parse_cmd_line_options(args: SharedCMDOptions) -> None: - args.cmd_line_options = create_options_dict(args.projectoptions) + args.cmd_line_options[key] = value # Merge builtin options set with --option into the dict. for key in chain( |
