diff options
| -rw-r--r-- | bitbake/lib/bb/cache.py | 5 | ||||
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 24 | ||||
| -rw-r--r-- | bitbake/lib/bb/providers.py | 26 | ||||
| -rw-r--r-- | bitbake/lib/bb/taskdata.py | 17 |
4 files changed, 48 insertions, 24 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 83f2ff1561..8485eb467a 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__ = "148" | 46 | __cache_version__ = "149" |
| 47 | 47 | ||
| 48 | def getCacheFile(path, filename, data_hash): | 48 | def getCacheFile(path, filename, data_hash): |
| 49 | return os.path.join(path, filename + "." + data_hash) | 49 | return os.path.join(path, filename + "." + data_hash) |
| @@ -144,6 +144,7 @@ class CoreRecipeInfo(RecipeInfoCommon): | |||
| 144 | self.fakerootenv = self.getvar('FAKEROOTENV', metadata) | 144 | self.fakerootenv = self.getvar('FAKEROOTENV', metadata) |
| 145 | self.fakerootdirs = self.getvar('FAKEROOTDIRS', metadata) | 145 | self.fakerootdirs = self.getvar('FAKEROOTDIRS', metadata) |
| 146 | self.fakerootnoenv = self.getvar('FAKEROOTNOENV', metadata) | 146 | self.fakerootnoenv = self.getvar('FAKEROOTNOENV', metadata) |
| 147 | self.extradepsfunc = self.getvar('calculate_extra_depends', metadata) | ||
| 147 | 148 | ||
| 148 | @classmethod | 149 | @classmethod |
| 149 | def init_cacheData(cls, cachedata): | 150 | def init_cacheData(cls, cachedata): |
| @@ -179,6 +180,7 @@ class CoreRecipeInfo(RecipeInfoCommon): | |||
| 179 | cachedata.fakerootenv = {} | 180 | cachedata.fakerootenv = {} |
| 180 | cachedata.fakerootnoenv = {} | 181 | cachedata.fakerootnoenv = {} |
| 181 | cachedata.fakerootdirs = {} | 182 | cachedata.fakerootdirs = {} |
| 183 | cachedata.extradepsfunc = {} | ||
| 182 | 184 | ||
| 183 | def add_cacheData(self, cachedata, fn): | 185 | def add_cacheData(self, cachedata, fn): |
| 184 | cachedata.task_deps[fn] = self.task_deps | 186 | cachedata.task_deps[fn] = self.task_deps |
| @@ -246,6 +248,7 @@ class CoreRecipeInfo(RecipeInfoCommon): | |||
| 246 | cachedata.fakerootenv[fn] = self.fakerootenv | 248 | cachedata.fakerootenv[fn] = self.fakerootenv |
| 247 | cachedata.fakerootnoenv[fn] = self.fakerootnoenv | 249 | cachedata.fakerootnoenv[fn] = self.fakerootnoenv |
| 248 | cachedata.fakerootdirs[fn] = self.fakerootdirs | 250 | cachedata.fakerootdirs[fn] = self.fakerootdirs |
| 251 | cachedata.extradepsfunc[fn] = self.extradepsfunc | ||
| 249 | 252 | ||
| 250 | 253 | ||
| 251 | 254 | ||
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 74190ec9a7..9c58d95006 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -1109,28 +1109,6 @@ class BBCooker: | |||
| 1109 | tree = self.generatePkgDepTreeData(pkgs, 'build') | 1109 | tree = self.generatePkgDepTreeData(pkgs, 'build') |
| 1110 | bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.data) | 1110 | bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.data) |
| 1111 | 1111 | ||
| 1112 | def buildWorldTargetList(self): | ||
| 1113 | """ | ||
| 1114 | Build package list for "bitbake world" | ||
| 1115 | """ | ||
| 1116 | parselog.debug(1, "collating packages for \"world\"") | ||
| 1117 | for f in self.recipecache.possible_world: | ||
| 1118 | terminal = True | ||
| 1119 | pn = self.recipecache.pkg_fn[f] | ||
| 1120 | |||
| 1121 | for p in self.recipecache.pn_provides[pn]: | ||
| 1122 | if p.startswith('virtual/'): | ||
| 1123 | parselog.debug(2, "World build skipping %s due to %s provider starting with virtual/", f, p) | ||
| 1124 | terminal = False | ||
| 1125 | break | ||
| 1126 | for pf in self.recipecache.providers[p]: | ||
| 1127 | if self.recipecache.pkg_fn[pf] != pn: | ||
| 1128 | parselog.debug(2, "World build skipping %s due to both us and %s providing %s", f, pf, p) | ||
| 1129 | terminal = False | ||
| 1130 | break | ||
| 1131 | if terminal: | ||
| 1132 | self.recipecache.world_target.add(pn) | ||
| 1133 | |||
| 1134 | def interactiveMode( self ): | 1112 | def interactiveMode( self ): |
| 1135 | """Drop off into a shell""" | 1113 | """Drop off into a shell""" |
| 1136 | try: | 1114 | try: |
| @@ -1591,7 +1569,7 @@ class BBCooker: | |||
| 1591 | parselog.warn("Explicit target \"%s\" is in ASSUME_PROVIDED, ignoring" % pkg) | 1569 | parselog.warn("Explicit target \"%s\" is in ASSUME_PROVIDED, ignoring" % pkg) |
| 1592 | 1570 | ||
| 1593 | if 'world' in pkgs_to_build: | 1571 | if 'world' in pkgs_to_build: |
| 1594 | self.buildWorldTargetList() | 1572 | bb.providers.buildWorldTargetList(self.recipecache) |
| 1595 | pkgs_to_build.remove('world') | 1573 | pkgs_to_build.remove('world') |
| 1596 | for t in self.recipecache.world_target: | 1574 | for t in self.recipecache.world_target: |
| 1597 | pkgs_to_build.append(t) | 1575 | pkgs_to_build.append(t) |
diff --git a/bitbake/lib/bb/providers.py b/bitbake/lib/bb/providers.py index 637e1fab96..68c8d592d2 100644 --- a/bitbake/lib/bb/providers.py +++ b/bitbake/lib/bb/providers.py | |||
| @@ -379,3 +379,29 @@ def getRuntimeProviders(dataCache, rdepend): | |||
| 379 | logger.debug(1, "Assuming %s is a dynamic package, but it may not exist" % rdepend) | 379 | logger.debug(1, "Assuming %s is a dynamic package, but it may not exist" % rdepend) |
| 380 | 380 | ||
| 381 | return rproviders | 381 | return rproviders |
| 382 | |||
| 383 | |||
| 384 | def buildWorldTargetList(dataCache): | ||
| 385 | """ | ||
| 386 | Build package list for "bitbake world" | ||
| 387 | """ | ||
| 388 | if dataCache.world_target: | ||
| 389 | return | ||
| 390 | |||
| 391 | logger.debug(1, "collating packages for \"world\"") | ||
| 392 | for f in dataCache.possible_world: | ||
| 393 | terminal = True | ||
| 394 | pn = dataCache.pkg_fn[f] | ||
| 395 | |||
| 396 | for p in dataCache.pn_provides[pn]: | ||
| 397 | if p.startswith('virtual/'): | ||
| 398 | logger.debug(2, "World build skipping %s due to %s provider starting with virtual/", f, p) | ||
| 399 | terminal = False | ||
| 400 | break | ||
| 401 | for pf in dataCache.providers[p]: | ||
| 402 | if dataCache.pkg_fn[pf] != pn: | ||
| 403 | logger.debug(2, "World build skipping %s due to both us and %s providing %s", f, pf, p) | ||
| 404 | terminal = False | ||
| 405 | break | ||
| 406 | if terminal: | ||
| 407 | dataCache.world_target.add(pn) | ||
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py index 39c899ebb7..6e4d149e5a 100644 --- a/bitbake/lib/bb/taskdata.py +++ b/bitbake/lib/bb/taskdata.py | |||
| @@ -172,6 +172,8 @@ class TaskData: | |||
| 172 | if fnid in self.tasks_fnid: | 172 | if fnid in self.tasks_fnid: |
| 173 | return | 173 | return |
| 174 | 174 | ||
| 175 | self.add_extra_deps(fn, dataCache) | ||
| 176 | |||
| 175 | for task in task_deps['tasks']: | 177 | for task in task_deps['tasks']: |
| 176 | 178 | ||
| 177 | # Work out task dependencies | 179 | # Work out task dependencies |
| @@ -242,6 +244,21 @@ class TaskData: | |||
| 242 | self.fail_fnid(fnid) | 244 | self.fail_fnid(fnid) |
| 243 | return | 245 | return |
| 244 | 246 | ||
| 247 | def add_extra_deps(self, fn, dataCache): | ||
| 248 | func = dataCache.extradepsfunc.get(fn, None) | ||
| 249 | if func: | ||
| 250 | bb.providers.buildWorldTargetList(dataCache) | ||
| 251 | pn = dataCache.pkg_fn[fn] | ||
| 252 | params = {'deps': dataCache.deps[fn], | ||
| 253 | 'world_target': dataCache.world_target, | ||
| 254 | 'pkg_pn': dataCache.pkg_pn, | ||
| 255 | 'self_pn': pn} | ||
| 256 | funcname = '_%s_calculate_extra_depends' % pn.replace('-', '_') | ||
| 257 | paramlist = ','.join(params.keys()) | ||
| 258 | func = 'def %s(%s):\n%s\n\n%s(%s)' % (funcname, paramlist, func, funcname, paramlist) | ||
| 259 | bb.utils.better_exec(func, params) | ||
| 260 | |||
| 261 | |||
| 245 | def have_build_target(self, target): | 262 | def have_build_target(self, target): |
| 246 | """ | 263 | """ |
| 247 | Have we a build target matching this name? | 264 | Have we a build target matching this name? |
