diff options
Diffstat (limited to 'bitbake/lib/bb')
-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? |