summaryrefslogtreecommitdiff
path: root/mesonbuild/utils/core.py
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2023-10-10 12:09:15 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2024-02-23 21:11:56 +0200
commit138e0fe9841b44a6d0402b66bbd0c10966cfe87b (patch)
tree6ef0d07b225a96880daed110ed94ff951d43c4c5 /mesonbuild/utils/core.py
parentdb8246b3fc52994eac2cccd1416e64e36c3369e2 (diff)
downloadmeson-138e0fe9841b44a6d0402b66bbd0c10966cfe87b.tar.gz
env.unset method
Diffstat (limited to 'mesonbuild/utils/core.py')
-rw-r--r--mesonbuild/utils/core.py17
1 files changed, 17 insertions, 0 deletions
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