diff options
Diffstat (limited to 'mesonbuild/mconf.py')
-rw-r--r-- | mesonbuild/mconf.py | 60 |
1 files changed, 20 insertions, 40 deletions
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py index 70d6806..d6584d5 100644 --- a/mesonbuild/mconf.py +++ b/mesonbuild/mconf.py @@ -17,12 +17,11 @@ from . import coredata, environment, mesonlib, build, mintro, mlog from .ast import AstIDGenerator import typing as T -from .mesonlib import MachineChoice +from .mesonlib import MachineChoice, OptionKey if T.TYPE_CHECKING: import argparse from .coredata import UserOption - from .mesonlib import OptionKey def add_arguments(parser: 'argparse.ArgumentParser') -> None: coredata.register_builtin_arguments(parser) @@ -30,7 +29,6 @@ def add_arguments(parser: 'argparse.ArgumentParser') -> None: parser.add_argument('--clearcache', action='store_true', default=False, help='Clear cached state (e.g. found dependencies)') - def make_lower_case(val: T.Any) -> T.Union[str, T.List[T.Any]]: # T.Any because of recursion... if isinstance(val, bool): return str(val).lower() @@ -39,12 +37,6 @@ def make_lower_case(val: T.Any) -> T.Union[str, T.List[T.Any]]: # T.Any because else: return str(val) -def insert_build_prefix(k: str) -> str: - idx = k.find(':') - if idx < 0: - return 'build.' + k - return k[:idx + 1] + 'build.' + k[idx + 1:] - class ConfException(mesonlib.MesonException): pass @@ -62,8 +54,8 @@ class Conf: self.choices_col = [] self.descr_col = [] self.has_choices = False - self.all_subprojects = set() - self.yielding_options = set() + self.all_subprojects: T.Set[str] = set() + self.yielding_options: T.Set[OptionKey] = set() if os.path.isdir(os.path.join(self.build_dir, 'meson-private')): self.build = build.load(self.build_dir) @@ -111,20 +103,8 @@ class Conf: else: print('{0:{width[0]}} {1:{width[1]}} {3}'.format(*line, width=col_widths)) - def split_options_per_subproject(self, options: T.Dict[str, 'UserOption']) -> T.Dict[str, T.Dict[str, 'UserOption']]: - result = {} - for k, o in options.items(): - subproject = '' - if ':' in k: - subproject, optname = k.split(':') - if o.yielding and optname in options: - self.yielding_options.add(k) - self.all_subprojects.add(subproject) - result.setdefault(subproject, {})[k] = o - return result - - def split_options_per_subproject2(self, options: 'coredata.KeyedOptionDictType') -> T.Dict[str, T.Dict[str, 'UserOption']]: - result = {} + def split_options_per_subproject(self, options: 'coredata.KeyedOptionDictType') -> T.Dict[str, T.Dict[str, 'UserOption']]: + result: T.Dict[str, T.Dict[str, 'UserOption']] = {} for k, o in options.items(): subproject = k.subproject if k.subproject: @@ -135,8 +115,8 @@ class Conf: result.setdefault(subproject, {})[str(k)] = o return result - def _add_line(self, name, value, choices, descr): - self.name_col.append(' ' * self.print_margin + name) + def _add_line(self, name: OptionKey, value, choices, descr) -> None: + self.name_col.append(' ' * self.print_margin + str(name)) self.value_col.append(value) self.choices_col.append(choices) self.descr_col.append(descr) @@ -185,7 +165,7 @@ class Conf: self._add_line(section + ':', '', '', '') self.print_margin = 2 - def print_options(self, title: str, options: 'coredata.OptionDictType') -> None: + def print_options(self, title: str, options: 'coredata.KeyedOptionDictType') -> None: if not options: return if title: @@ -210,28 +190,28 @@ class Conf: if not self.default_values_only: print(' Build dir ', self.build_dir) - dir_option_names = list(coredata.BUILTIN_DIR_OPTIONS) - test_option_names = ['errorlogs', - 'stdsplit'] - core_option_names = [k for k in self.coredata.builtins if k not in dir_option_names + test_option_names] + dir_option_names = set(coredata.BUILTIN_DIR_OPTIONS) + test_option_names = {OptionKey('errorlogs'), + OptionKey('stdsplit')} + core_option_names = [k for k in self.coredata.builtins if k not in dir_option_names | test_option_names] dir_options = {k: o for k, o in self.coredata.builtins.items() if k in dir_option_names} test_options = {k: o for k, o in self.coredata.builtins.items() if k in test_option_names} core_options = {k: o for k, o in self.coredata.builtins.items() if k in core_option_names} - core_options = self.split_options_per_subproject(core_options) - host_compiler_options = self.split_options_per_subproject2({k: v for k, v in self.coredata.compiler_options.items() if k.machine is MachineChoice.HOST}) - build_compiler_options = self.split_options_per_subproject2({k: v for k, v in self.coredata.compiler_options.items() if k.machine is MachineChoice.BUILD}) - project_options = self.split_options_per_subproject2(self.coredata.user_options) + host_core_options = self.split_options_per_subproject({k: v for k, v in self.coredata.builtins.items() if k.machine is MachineChoice.HOST}) + build_core_options = self.split_options_per_subproject({k: v for k, v in self.coredata.builtins.items() if k.machine is MachineChoice.BUILD}) + host_compiler_options = self.split_options_per_subproject({k: v for k, v in self.coredata.compiler_options.items() if k.machine is MachineChoice.HOST}) + build_compiler_options = self.split_options_per_subproject({k: v for k, v in self.coredata.compiler_options.items() if k.machine is MachineChoice.BUILD}) + project_options = self.split_options_per_subproject(self.coredata.user_options) show_build_options = self.default_values_only or self.build.environment.is_cross_build() self.add_section('Main project options') - self.print_options('Core options', core_options['']) - self.print_options('', self.coredata.builtins_per_machine.host) + self.print_options('Core options', host_core_options['']) if show_build_options: - self.print_options('', {insert_build_prefix(k): o for k, o in self.coredata.builtins_per_machine.build.items()}) + self.print_options('', build_core_options['']) self.print_options('Backend options', {str(k): v for k, v in self.coredata.backend_options.items()}) - self.print_options('Base options', self.coredata.base_options) + self.print_options('Base options', {str(k): v for k, v in self.coredata.base_options.items()}) self.print_options('Compiler options', host_compiler_options.get('', {})) if show_build_options: self.print_options('', build_compiler_options.get('', {})) |