aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/options.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/options.py')
-rw-r--r--mesonbuild/options.py32
1 files changed, 22 insertions, 10 deletions
diff --git a/mesonbuild/options.py b/mesonbuild/options.py
index 62413b1..3b7d8b2 100644
--- a/mesonbuild/options.py
+++ b/mesonbuild/options.py
@@ -1243,7 +1243,7 @@ class OptionStore:
def first_handle_prefix(self,
project_default_options: T.Union[T.List[str], OptionStringLikeDict],
- cmd_line_options: T.Union[T.List[str], OptionStringLikeDict],
+ cmd_line_options: OptionStringLikeDict,
machine_file_options: T.Mapping[OptionKey, ElementaryOptionValues]) \
-> T.Tuple[T.Union[T.List[str], OptionStringLikeDict],
T.Union[T.List[str], OptionStringLikeDict],
@@ -1282,7 +1282,7 @@ class OptionStore:
def initialize_from_top_level_project_call(self,
project_default_options_in: T.Union[T.List[str], OptionStringLikeDict],
- cmd_line_options_in: T.Union[T.List[str], OptionStringLikeDict],
+ cmd_line_options_in: OptionStringLikeDict,
machine_file_options_in: T.Mapping[OptionKey, ElementaryOptionValues]) -> None:
first_invocation = True
(project_default_options, cmd_line_options, machine_file_options) = self.first_handle_prefix(project_default_options_in,
@@ -1370,16 +1370,28 @@ class OptionStore:
if proj_key in self.options:
self.set_option(proj_key, valstr, True)
else:
- # Fail on unknown options that we can know must
- # exist at this point in time. Subproject and compiler
- # options are resolved later.
- #
- # Some base options (sanitizers etc) might get added later.
- # Permitting them all is not strictly correct.
- if key.subproject is None and not self.is_compiler_option(key) and not self.is_base_option(key):
- raise MesonException(f'Unknown options: "{keystr}"')
self.pending_options[key] = valstr
+ def validate_cmd_line_options(self, cmd_line_options: OptionStringLikeDict) -> None:
+ unknown_options = []
+ for keystr, valstr in cmd_line_options.items():
+ if isinstance(keystr, str):
+ key = OptionKey.from_string(keystr)
+ else:
+ key = keystr
+ # Fail on unknown options that we can know must exist at this point in time.
+ # Subproject and compiler options are resolved later.
+ #
+ # Some base options (sanitizers etc) might get added later.
+ # Permitting them all is not strictly correct.
+ if key.subproject is None and not self.is_compiler_option(key) and not self.is_base_option(key) and \
+ key in self.pending_options:
+ unknown_options.append(f'"{key}"')
+
+ if unknown_options:
+ keys = ', '.join(unknown_options)
+ raise MesonException(f'Unknown options: {keys}')
+
def hacky_mchackface_back_to_list(self, optdict: T.Dict[str, str]) -> T.List[str]:
if isinstance(optdict, dict):
return [f'{k}={v}' for k, v in optdict.items()]