aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/build.py9
-rw-r--r--mesonbuild/interpreter.py8
2 files changed, 16 insertions, 1 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 020c47b..dae94b6 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -296,11 +296,20 @@ class ExtractedObjects:
class EnvironmentVariables:
def __init__(self):
self.envvars = []
+ # The set of all env vars we have operations for. Only used for self.has_name()
+ self.varnames = set()
def __repr__(self):
repr_str = "<{0}: {1}>"
return repr_str.format(self.__class__.__name__, self.envvars)
+ def add_var(self, method, name, args, kwargs):
+ self.varnames.add(name)
+ self.envvars.append((method, name, args, kwargs))
+
+ def has_name(self, name):
+ return name in self.varnames
+
def get_value(self, values, kwargs):
separator = kwargs.get('separator', os.pathsep)
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 1cf56a2..993ebbd 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -235,7 +235,13 @@ class EnvironmentVariablesHolder(MutableInterpreterObject, ObjectHolder):
raise InterpreterException("EnvironmentVariablesHolder methods require at least"
"2 arguments, first is the name of the variable and"
" following one are values")
- self.held_object.envvars.append((method, args[0], args[1:], kwargs))
+ # Warn when someone tries to use append() or prepend() on an env var
+ # which already has an operation set on it. People seem to think that
+ # multiple append/prepend operations stack, but they don't.
+ if method != self.held_object.set and self.held_object.has_name(args[0]):
+ mlog.warning('Overriding previous value of environment variable {!r} with a new one'
+ .format(args[0]), location=self.current_node)
+ self.held_object.add_var(method, args[0], args[1:], kwargs)
@stringArgs
@permittedKwargs({'separator'})