summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-09-09 17:25:41 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-09-09 18:39:25 +0100
commitfa071627adac4b493e524c536b47485e728766c1 (patch)
tree77ee13410337f147f3d2ea4a4d6b4e2dbd551dd7
parent98c2da694ca4c72b3e222a593b8baddea102bde5 (diff)
downloadpoky-fa071627adac4b493e524c536b47485e728766c1.tar.gz
runqueue: Ensure task environment is correct
This fixes two problems: a) Variables which were in the parent environment but not set as "export" variables in the datastore could end up in the task environment b) oe.environ.update() can't cope with the generator returned by bb.data.exported_vars() Whilst the updated code isn't as neat, it does do the expected thing, sets the environment correctly and stops unwanted values leaking into the task environment. (Bitbake rev: 67e5e23034c5ec2b9efcca935242830306c0048d) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/runqueue.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 5a4321f068..e2255e7b7d 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1072,6 +1072,7 @@ class RunQueueExecute:
1072 # a fork() or exec*() activates PSEUDO... 1072 # a fork() or exec*() activates PSEUDO...
1073 1073
1074 envbackup = {} 1074 envbackup = {}
1075 fakeenv = {}
1075 umask = None 1076 umask = None
1076 1077
1077 taskdep = self.rqdata.dataCache.task_deps[fn] 1078 taskdep = self.rqdata.dataCache.task_deps[fn]
@@ -1087,6 +1088,7 @@ class RunQueueExecute:
1087 for key, value in (var.split('=') for var in envvars): 1088 for key, value in (var.split('=') for var in envvars):
1088 envbackup[key] = os.environ.get(key) 1089 envbackup[key] = os.environ.get(key)
1089 os.environ[key] = value 1090 os.environ[key] = value
1091 fakeenv[key] = value
1090 1092
1091 fakedirs = (self.rqdata.dataCache.fakerootdirs[fn] or "").split() 1093 fakedirs = (self.rqdata.dataCache.fakerootdirs[fn] or "").split()
1092 for p in fakedirs: 1094 for p in fakedirs:
@@ -1136,7 +1138,14 @@ class RunQueueExecute:
1136 for h in self.rqdata.hash_deps: 1138 for h in self.rqdata.hash_deps:
1137 the_data.setVar("BBHASHDEPS_%s" % h, self.rqdata.hash_deps[h]) 1139 the_data.setVar("BBHASHDEPS_%s" % h, self.rqdata.hash_deps[h])
1138 1140
1139 os.environ.update(bb.data.exported_vars(the_data)) 1141 # exported_vars() returns a generator which *cannot* be passed to os.environ.update()
1142 # successfully. We also need to unset anything from the environment which shouldn't be there
1143 exports = bb.data.exported_vars(the_data)
1144 bb.utils.empty_environment()
1145 for e, v in exports:
1146 os.environ[e] = v
1147 for e in fakeenv:
1148 os.environ[e] = fakeenv[e]
1140 1149
1141 if quieterrors: 1150 if quieterrors:
1142 the_data.setVarFlag(taskname, "quieterrors", "1") 1151 the_data.setVarFlag(taskname, "quieterrors", "1")