aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2021-09-01 11:01:01 -0400
committerXavier Claessens <xclaesse@gmail.com>2021-09-02 19:38:29 -0400
commit5e55a0bb2b95546da41fd27dbccc8c056815f391 (patch)
tree6d48d931ee300630fa987b7e74654194b86d71ab /mesonbuild/interpreter/interpreter.py
parenta616a23713dd34638adee29413603b2eeb80456b (diff)
downloadmeson-5e55a0bb2b95546da41fd27dbccc8c056815f391.zip
meson-5e55a0bb2b95546da41fd27dbccc8c056815f391.tar.gz
meson-5e55a0bb2b95546da41fd27dbccc8c056815f391.tar.bz2
interpreter: Add summary of all user defined options
It is a commonly needed information to help debugging build issues. We already were printing options with non-default value at the end of the configure but outside of the summary. Keeping the list of user defined options in the interpreter will also in the future be useful to use new default value on reconfigure.
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r--mesonbuild/interpreter/interpreter.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 41cb7b8..fe27cb3 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -72,6 +72,7 @@ import textwrap
import importlib
if T.TYPE_CHECKING:
+ import argparse
from . import kwargs
# Input source types passed to Targets
@@ -229,6 +230,7 @@ class Interpreter(InterpreterBase, HoldableObject):
mock: bool = False,
ast: T.Optional[mparser.CodeBlockNode] = None,
is_translated: bool = False,
+ user_defined_options: T.Optional['argparse.Namespace'] = None,
) -> None:
super().__init__(_build.environment.get_source_dir(), subdir, subproject)
self.build = _build
@@ -264,6 +266,7 @@ class Interpreter(InterpreterBase, HoldableObject):
self.project_default_options = {}
self.build_func_dict()
self.build_holder_map()
+ self.user_defined_options = user_defined_options
# build_def_files needs to be defined before parse_project is called
#
@@ -299,18 +302,6 @@ class Interpreter(InterpreterBase, HoldableObject):
self.builtin['target_machine'] = \
OBJ.MachineHolder(self.build.environment.machines.target, self)
- # TODO: Why is this in interpreter.py and not CoreData or Environment?
- def get_non_matching_default_options(self) -> T.Iterator[T.Tuple[str, str, coredata.UserOption]]:
- for def_opt_name, def_opt_value in self.project_default_options.items():
- cur_opt_value = self.coredata.options.get(def_opt_name)
- try:
- if cur_opt_value is not None and cur_opt_value.validate_value(def_opt_value) != cur_opt_value.value:
- yield (str(def_opt_name), def_opt_value, cur_opt_value)
- except mesonlib.MesonException:
- # Since the default value does not validate, it cannot be in use
- # Report the user-specified value as non-matching
- yield (str(def_opt_name), def_opt_value, cur_opt_value)
-
def build_func_dict(self):
self.funcs.update({'add_global_arguments': self.func_add_global_arguments,
'add_project_arguments': self.func_add_project_arguments,
@@ -1187,6 +1178,17 @@ external dependencies (including libraries) must go to "dependencies".''')
{'bool_yn': True,
'list_sep': ' ',
})
+ # Add automatic section with all user defined options
+ if self.user_defined_options:
+ values = collections.OrderedDict()
+ if self.user_defined_options.cross_file:
+ values['Cross files'] = self.user_defined_options.cross_file
+ if self.user_defined_options.native_file:
+ values['Native files'] = self.user_defined_options.native_file
+ sorted_options = sorted(self.user_defined_options.cmd_line_options.items())
+ values.update({str(k): v for k, v in sorted_options})
+ if values:
+ self.summary_impl('User defined options', values, {})
# Print all summaries, main project last.
mlog.log('') # newline
main_summary = self.summary.pop('', None)