diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-09-09 17:25:41 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-09-09 18:39:25 +0100 |
commit | fa071627adac4b493e524c536b47485e728766c1 (patch) | |
tree | 77ee13410337f147f3d2ea4a4d6b4e2dbd551dd7 /bitbake/lib | |
parent | 98c2da694ca4c72b3e222a593b8baddea102bde5 (diff) | |
download | poky-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>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 11 |
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") |