From 278c294aa45efc3e8b068bcd7632828ed5c92523 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 12 Jun 2019 18:08:45 -0400 Subject: Compiler options per lang A current rather untyped storage of options is one of the things that contributes to the options code being so complex. This takes a small step in synching down by storing the compiler options in dicts per language. Future work might be replacing the langauge strings with an enum, and defaultdict with a custom struct, just like `PerMachine` and `MachineChoice`. --- mesonbuild/mconf.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'mesonbuild/mconf.py') diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py index cadc1f5..05e9518 100644 --- a/mesonbuild/mconf.py +++ b/mesonbuild/mconf.py @@ -97,9 +97,9 @@ class Conf: else: print('{0:{width[0]}} {1:{width[1]}} {3}'.format(*line, width=col_widths)) - def split_options_per_subproject(self, options): + def split_options_per_subproject(self, options_iter): result = {} - for k, o in options.items(): + for k, o in options_iter: subproject = '' if ':' in k: subproject, optname = k.split(':') @@ -211,10 +211,15 @@ class Conf: return 'build.' + k return k[:idx + 1] + 'build.' + k[idx + 1:] - core_options = self.split_options_per_subproject(core_options) - host_compiler_options = self.split_options_per_subproject(self.coredata.compiler_options.host) - build_compiler_options = self.split_options_per_subproject({insert_build_prefix(k): o for k, o in self.coredata.compiler_options.build.items()}) - project_options = self.split_options_per_subproject(self.coredata.user_options) + core_options = self.split_options_per_subproject(core_options.items()) + host_compiler_options = self.split_options_per_subproject( + self.coredata.flatten_lang_iterator( + self.coredata.compiler_options.host.items())) + build_compiler_options = self.split_options_per_subproject( + self.coredata.flatten_lang_iterator( + (insert_build_prefix(k), o) + for k, o in self.coredata.compiler_options.build.items())) + project_options = self.split_options_per_subproject(self.coredata.user_options.items()) show_build_options = self.default_values_only or self.build.environment.is_cross_build() self.add_section('Main project options') -- cgit v1.1