diff options
| -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 | ||
