diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/cache.py | 10 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 35 |
2 files changed, 32 insertions, 13 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 421bd79183..c56b4b4248 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py | |||
@@ -43,7 +43,7 @@ except ImportError: | |||
43 | logger.info("Importing cPickle failed. " | 43 | logger.info("Importing cPickle failed. " |
44 | "Falling back to a very slow implementation.") | 44 | "Falling back to a very slow implementation.") |
45 | 45 | ||
46 | __cache_version__ = "137" | 46 | __cache_version__ = "138" |
47 | 47 | ||
48 | recipe_fields = ( | 48 | recipe_fields = ( |
49 | 'pn', | 49 | 'pn', |
@@ -78,6 +78,8 @@ recipe_fields = ( | |||
78 | 'summary', | 78 | 'summary', |
79 | 'license', | 79 | 'license', |
80 | 'section', | 80 | 'section', |
81 | 'fakerootenv', | ||
82 | 'fakerootdirs' | ||
81 | ) | 83 | ) |
82 | 84 | ||
83 | 85 | ||
@@ -172,6 +174,8 @@ class RecipeInfo(namedtuple('RecipeInfo', recipe_fields)): | |||
172 | summary = cls.getvar('SUMMARY', metadata), | 174 | summary = cls.getvar('SUMMARY', metadata), |
173 | license = cls.getvar('LICENSE', metadata), | 175 | license = cls.getvar('LICENSE', metadata), |
174 | section = cls.getvar('SECTION', metadata), | 176 | section = cls.getvar('SECTION', metadata), |
177 | fakerootenv = cls.getvar('FAKEROOTENV', metadata), | ||
178 | fakerootdirs = cls.getvar('FAKEROOTDIRS', metadata), | ||
175 | ) | 179 | ) |
176 | 180 | ||
177 | 181 | ||
@@ -584,6 +588,8 @@ class CacheData(object): | |||
584 | self.summary = {} | 588 | self.summary = {} |
585 | self.license = {} | 589 | self.license = {} |
586 | self.section = {} | 590 | self.section = {} |
591 | self.fakerootenv = {} | ||
592 | self.fakerootdirs = {} | ||
587 | 593 | ||
588 | # Indirect Cache variables (set elsewhere) | 594 | # Indirect Cache variables (set elsewhere) |
589 | self.ignored_dependencies = [] | 595 | self.ignored_dependencies = [] |
@@ -647,3 +653,5 @@ class CacheData(object): | |||
647 | self.summary[fn] = info.summary | 653 | self.summary[fn] = info.summary |
648 | self.license[fn] = info.license | 654 | self.license[fn] = info.license |
649 | self.section[fn] = info.section | 655 | self.section[fn] = info.section |
656 | self.fakerootenv[fn] = info.fakerootenv | ||
657 | self.fakerootdirs[fn] = info.fakerootdirs | ||
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 172e591522..d7d67fd508 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1060,27 +1060,23 @@ class RunQueueExecute: | |||
1060 | return | 1060 | return |
1061 | 1061 | ||
1062 | def fork_off_task(self, fn, task, taskname, quieterrors=False): | 1062 | def fork_off_task(self, fn, task, taskname, quieterrors=False): |
1063 | the_data = bb.cache.Cache.loadDataFull(fn, self.cooker.get_file_appends(fn), self.cooker.configuration.data) | ||
1064 | 1063 | ||
1065 | env = bb.data.export_vars(the_data) | 1064 | envbackup = os.environ.copy() |
1066 | env = bb.data.export_envvars(env, the_data) | 1065 | env = {} |
1067 | 1066 | ||
1068 | taskdep = self.rqdata.dataCache.task_deps[fn] | 1067 | taskdep = self.rqdata.dataCache.task_deps[fn] |
1069 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot']: | 1068 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot']: |
1070 | envvars = the_data.getVar("FAKEROOTENV", True).split() | 1069 | envvars = (self.rqdata.dataCache.fakerootenv[fn] or "").split() |
1071 | for var in envvars: | 1070 | for var in envvars: |
1072 | comps = var.split("=") | 1071 | comps = var.split("=") |
1073 | env[comps[0]] = comps[1] | 1072 | env[comps[0]] = comps[1] |
1074 | fakedirs = (the_data.getVar("FAKEROOTDIRS", True) or "").split() | 1073 | |
1074 | fakedirs = (self.rqdata.dataCache.fakerootdirs[fn] or "").split() | ||
1075 | for p in fakedirs: | 1075 | for p in fakedirs: |
1076 | bb.mkdirhier(p) | 1076 | bb.mkdirhier(p) |
1077 | logger.debug(2, "Running %s:%s under fakeroot, state dir is %s" % (fn, taskname, fakedirs)) | 1077 | logger.debug(2, "Running %s:%s under fakeroot, state dir is %s" % (fn, taskname, fakedirs)) |
1078 | 1078 | for e in env: | |
1079 | envbackup = os.environ.copy() | 1079 | os.putenv(e, env[e]) |
1080 | for e in envbackup: | ||
1081 | os.unsetenv(e) | ||
1082 | for e in env: | ||
1083 | os.putenv(e, env[e]) | ||
1084 | 1080 | ||
1085 | sys.stdout.flush() | 1081 | sys.stdout.flush() |
1086 | sys.stderr.flush() | 1082 | sys.stderr.flush() |
@@ -1111,6 +1107,20 @@ class RunQueueExecute: | |||
1111 | # No stdin | 1107 | # No stdin |
1112 | newsi = os.open(os.devnull, os.O_RDWR) | 1108 | newsi = os.open(os.devnull, os.O_RDWR) |
1113 | os.dup2(newsi, sys.stdin.fileno()) | 1109 | os.dup2(newsi, sys.stdin.fileno()) |
1110 | |||
1111 | |||
1112 | the_data = bb.cache.Cache.loadDataFull(fn, self.cooker.get_file_appends(fn), self.cooker.configuration.data) | ||
1113 | |||
1114 | env2 = bb.data.export_vars(the_data) | ||
1115 | env2 = bb.data.export_envvars(env2, the_data) | ||
1116 | |||
1117 | for e in os.environ: | ||
1118 | os.unsetenv(e) | ||
1119 | for e in env2: | ||
1120 | os.putenv(e, env2[e]) | ||
1121 | for e in env: | ||
1122 | os.putenv(e, env[e]) | ||
1123 | |||
1114 | if quieterrors: | 1124 | if quieterrors: |
1115 | the_data.setVarFlag(taskname, "quieterrors", "1") | 1125 | the_data.setVarFlag(taskname, "quieterrors", "1") |
1116 | 1126 | ||
@@ -1137,7 +1147,8 @@ class RunQueueExecute: | |||
1137 | for e in env: | 1147 | for e in env: |
1138 | os.unsetenv(e) | 1148 | os.unsetenv(e) |
1139 | for e in envbackup: | 1149 | for e in envbackup: |
1140 | os.putenv(e, envbackup[e]) | 1150 | if e in env: |
1151 | os.putenv(e, envbackup[e]) | ||
1141 | 1152 | ||
1142 | return pid, pipein, pipeout | 1153 | return pid, pipein, pipeout |
1143 | 1154 | ||