options: store augments as OptionKeys
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9bff9de834
commit
614aa835ed
|
@ -342,7 +342,7 @@ class Conf:
|
|||
if self.coredata.optstore.augments:
|
||||
mlog.log('\nCurrently set option augments:')
|
||||
for k, v in self.coredata.optstore.augments.items():
|
||||
mlog.log(f'{k:21}{v:10}')
|
||||
mlog.log(f'{k!s:21}{v:10}')
|
||||
else:
|
||||
mlog.log('\nThere are no option augments.')
|
||||
|
||||
|
|
|
@ -810,7 +810,7 @@ class OptionStore:
|
|||
from .compilers import all_languages
|
||||
self.all_languages = set(all_languages)
|
||||
self.project_options = set()
|
||||
self.augments: T.Dict[str, ElementaryOptionValues] = {}
|
||||
self.augments: T.Dict[OptionKey, ElementaryOptionValues] = {}
|
||||
self.is_cross = is_cross
|
||||
|
||||
# Pending options are options that need to be initialized later, either
|
||||
|
@ -879,9 +879,8 @@ class OptionStore:
|
|||
vobject = self.get_value_object_for(key)
|
||||
computed_value = vobject.value
|
||||
if key.subproject is not None:
|
||||
keystr = str(key)
|
||||
if keystr in self.augments:
|
||||
computed_value = vobject.validate_value(self.augments[keystr])
|
||||
if key in self.augments:
|
||||
computed_value = vobject.validate_value(self.augments[key])
|
||||
return (vobject, computed_value)
|
||||
|
||||
def get_value_for(self, name: 'T.Union[OptionKey, str]', subproject: T.Optional[str] = None) -> ElementaryOptionValues:
|
||||
|
@ -1070,17 +1069,18 @@ class OptionStore:
|
|||
dirty |= self.set_option_from_string(key, valstr)
|
||||
for key, valstr in project_options:
|
||||
dirty |= self.set_option_from_string(key, valstr)
|
||||
for keystr, valstr in perproject_global_options:
|
||||
if keystr in self.augments:
|
||||
if self.augments[keystr] != valstr:
|
||||
self.augments[keystr] = valstr
|
||||
for key, valstr in perproject_global_options:
|
||||
if key in self.augments:
|
||||
if self.augments[key] != valstr:
|
||||
self.augments[key] = valstr
|
||||
dirty = True
|
||||
else:
|
||||
self.augments[keystr] = valstr
|
||||
self.augments[key] = valstr
|
||||
dirty = True
|
||||
for delete in U_args:
|
||||
if delete in self.augments:
|
||||
del self.augments[delete]
|
||||
for keystr in U_args:
|
||||
key = OptionKey.from_string(keystr)
|
||||
if key in self.augments:
|
||||
del self.augments[key]
|
||||
dirty = True
|
||||
return dirty
|
||||
|
||||
|
@ -1203,7 +1203,7 @@ class OptionStore:
|
|||
return key in self.module_options
|
||||
|
||||
def classify_D_arguments(self, D: T.List[str]) -> T.Tuple[T.List[T.Tuple[OptionKey, str]],
|
||||
T.List[T.Tuple[str, str]],
|
||||
T.List[T.Tuple[OptionKey, str]],
|
||||
T.List[T.Tuple[OptionKey, str]]]:
|
||||
global_options = []
|
||||
project_options = []
|
||||
|
@ -1217,9 +1217,7 @@ class OptionStore:
|
|||
elif key.subproject is None:
|
||||
global_options.append(valuetuple)
|
||||
else:
|
||||
# FIXME, augments are currently stored as strings, not OptionKeys
|
||||
strvaluetuple = (keystr, valstr)
|
||||
perproject_global_options.append(strvaluetuple)
|
||||
perproject_global_options.append(valuetuple)
|
||||
return (global_options, perproject_global_options, project_options)
|
||||
|
||||
def optlist2optdict(self, optlist: T.List[str]) -> OptionDict:
|
||||
|
@ -1296,8 +1294,7 @@ class OptionStore:
|
|||
if not self.is_cross and key.is_for_build():
|
||||
continue
|
||||
if key.subproject:
|
||||
augstr = str(key)
|
||||
self.augments[augstr] = valstr
|
||||
self.augments[key] = valstr
|
||||
elif key in self.options:
|
||||
self.set_option(key, valstr, first_invocation)
|
||||
else:
|
||||
|
@ -1327,8 +1324,7 @@ class OptionStore:
|
|||
if not self.is_cross and key.is_for_build():
|
||||
continue
|
||||
if key.subproject:
|
||||
augstr = str(key)
|
||||
self.augments[augstr] = valstr
|
||||
self.augments[key] = valstr
|
||||
elif key in self.options:
|
||||
self.set_option(key, valstr, first_invocation)
|
||||
else:
|
||||
|
@ -1351,8 +1347,7 @@ class OptionStore:
|
|||
if not self.is_cross and key.is_for_build():
|
||||
continue
|
||||
if key.subproject:
|
||||
augstr = str(key)
|
||||
self.augments[augstr] = valstr
|
||||
self.augments[key] = valstr
|
||||
elif key in self.options:
|
||||
self.set_option(key, valstr, True)
|
||||
else:
|
||||
|
@ -1406,8 +1401,7 @@ class OptionStore:
|
|||
self.set_option(key, valstr, is_first_invocation)
|
||||
else:
|
||||
self.pending_options.pop(key, None)
|
||||
aug_str = str(key)
|
||||
self.augments[aug_str] = valstr
|
||||
self.augments[key] = valstr
|
||||
# Check for pending options
|
||||
for key, valstr in cmd_line_options.items(): # type: ignore [assignment]
|
||||
if not isinstance(key, OptionKey):
|
||||
|
@ -1418,7 +1412,7 @@ class OptionStore:
|
|||
if key in self.options:
|
||||
self.set_option(key, valstr, is_first_invocation)
|
||||
else:
|
||||
self.augments[str(key)] = valstr
|
||||
self.augments[key] = valstr
|
||||
|
||||
def update_project_options(self, project_options: MutableKeyedOptionDictType, subproject: SubProject) -> None:
|
||||
for key, value in project_options.items():
|
||||
|
|
Loading…
Reference in New Issue