From 138e0fe9841b44a6d0402b66bbd0c10966cfe87b Mon Sep 17 00:00:00 2001 From: Charles Brunet Date: Tue, 10 Oct 2023 12:09:15 -0400 Subject: env.unset method --- mesonbuild/utils/core.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'mesonbuild/utils/core.py') diff --git a/mesonbuild/utils/core.py b/mesonbuild/utils/core.py index 1b005cf95..92f9d2c70 100644 --- a/mesonbuild/utils/core.py +++ b/mesonbuild/utils/core.py @@ -63,6 +63,7 @@ class EnvironmentVariables(HoldableObject): self.envvars: T.List[T.Tuple[T.Callable[[T.Dict[str, str], str, T.List[str], str, T.Optional[str]], str], str, T.List[str], str]] = [] # The set of all env vars we have operations for. Only used for self.has_name() self.varnames: T.Set[str] = set() + self.unset_vars: T.Set[str] = set() if values: init_func = getattr(self, init_method) @@ -92,16 +93,30 @@ class EnvironmentVariables(HoldableObject): for method, name, values, separator in other.envvars: self.varnames.add(name) self.envvars.append((method, name, values, separator)) + if name in self.unset_vars: + self.unset_vars.remove(name) + self.unset_vars.update(other.unset_vars) def set(self, name: str, values: T.List[str], separator: str = os.pathsep) -> None: + if name in self.unset_vars: + raise MesonException(f'You cannot set the already unset variable {name!r}') self.varnames.add(name) self.envvars.append((self._set, name, values, separator)) + def unset(self, name: str) -> None: + if name in self.varnames: + raise MesonException(f'You cannot unset the {name!r} variable because it is already set') + self.unset_vars.add(name) + def append(self, name: str, values: T.List[str], separator: str = os.pathsep) -> None: + if name in self.unset_vars: + raise MesonException(f'You cannot append to unset variable {name!r}') self.varnames.add(name) self.envvars.append((self._append, name, values, separator)) def prepend(self, name: str, values: T.List[str], separator: str = os.pathsep) -> None: + if name in self.unset_vars: + raise MesonException(f'You cannot prepend to unset variable {name!r}') self.varnames.add(name) self.envvars.append((self._prepend, name, values, separator)) @@ -124,6 +139,8 @@ class EnvironmentVariables(HoldableObject): for method, name, values, separator in self.envvars: default_value = default_fmt.format(name) if default_fmt else None env[name] = method(env, name, values, separator, default_value) + for name in self.unset_vars: + env.pop(name, None) return env -- cgit v1.2.3