diff options
author | Richard Purdie <richard@openedhand.com> | 2008-03-14 11:44:34 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2008-03-14 11:44:34 +0000 |
commit | 853280f161ed24f9b976a6f53739c08ac2362ddb (patch) | |
tree | ae67e05e66c92dd3fc668b1976084a628bc99882 /bitbake/lib/bb/cache.py | |
parent | 097076da2349e638342e69e465c85683adb6ccc7 (diff) | |
download | poky-853280f161ed24f9b976a6f53739c08ac2362ddb.tar.gz |
bitbake: Update with changes from bitbake 1.8 branch
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4006 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'bitbake/lib/bb/cache.py')
-rw-r--r-- | bitbake/lib/bb/cache.py | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 60e863d52d..9acd301f52 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py | |||
@@ -80,7 +80,7 @@ class Cache: | |||
80 | if old_mtime > newest_mtime: | 80 | if old_mtime > newest_mtime: |
81 | newest_mtime = old_mtime | 81 | newest_mtime = old_mtime |
82 | 82 | ||
83 | if self.mtime(self.cachefile) >= newest_mtime: | 83 | if bb.parse.cached_mtime_noerror(self.cachefile) >= newest_mtime: |
84 | try: | 84 | try: |
85 | p = pickle.Unpickler(file(self.cachefile, "rb")) | 85 | p = pickle.Unpickler(file(self.cachefile, "rb")) |
86 | self.depends_cache, version_data = p.load() | 86 | self.depends_cache, version_data = p.load() |
@@ -91,7 +91,7 @@ class Cache: | |||
91 | except EOFError: | 91 | except EOFError: |
92 | bb.msg.note(1, bb.msg.domain.Cache, "Truncated cache found, rebuilding...") | 92 | bb.msg.note(1, bb.msg.domain.Cache, "Truncated cache found, rebuilding...") |
93 | self.depends_cache = {} | 93 | self.depends_cache = {} |
94 | except (ValueError, KeyError): | 94 | except: |
95 | bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") | 95 | bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") |
96 | self.depends_cache = {} | 96 | self.depends_cache = {} |
97 | else: | 97 | else: |
@@ -199,31 +199,34 @@ class Cache: | |||
199 | self.remove(fn) | 199 | self.remove(fn) |
200 | return False | 200 | return False |
201 | 201 | ||
202 | mtime = bb.parse.cached_mtime_noerror(fn) | ||
203 | |||
202 | # Check file still exists | 204 | # Check file still exists |
203 | if self.mtime(fn) == 0: | 205 | if mtime == 0: |
204 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s not longer exists" % fn) | 206 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s not longer exists" % fn) |
205 | self.remove(fn) | 207 | self.remove(fn) |
206 | return False | 208 | return False |
207 | 209 | ||
208 | # Check the file's timestamp | 210 | # Check the file's timestamp |
209 | if bb.parse.cached_mtime(fn) > self.getVar("CACHETIMESTAMP", fn, True): | 211 | if mtime > self.getVar("CACHETIMESTAMP", fn, True): |
210 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s changed" % fn) | 212 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s changed" % fn) |
211 | self.remove(fn) | 213 | self.remove(fn) |
212 | return False | 214 | return False |
213 | 215 | ||
214 | # Check dependencies are still valid | 216 | # Check dependencies are still valid |
215 | depends = self.getVar("__depends", fn, True) | 217 | depends = self.getVar("__depends", fn, True) |
216 | for f,old_mtime in depends: | 218 | if depends: |
217 | # Check if file still exists | 219 | for f,old_mtime in depends: |
218 | if self.mtime(f) == 0: | 220 | fmtime = bb.parse.cached_mtime_noerror(f) |
219 | self.remove(fn) | 221 | # Check if file still exists |
220 | return False | 222 | if fmtime == 0: |
221 | 223 | self.remove(fn) | |
222 | new_mtime = bb.parse.cached_mtime(f) | 224 | return False |
223 | if (new_mtime > old_mtime): | 225 | |
224 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s's dependency %s changed" % (fn, f)) | 226 | if (fmtime > old_mtime): |
225 | self.remove(fn) | 227 | bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s's dependency %s changed" % (fn, f)) |
226 | return False | 228 | self.remove(fn) |
229 | return False | ||
227 | 230 | ||
228 | #bb.msg.debug(2, bb.msg.domain.Cache, "Depends Cache: %s is clean" % fn) | 231 | #bb.msg.debug(2, bb.msg.domain.Cache, "Depends Cache: %s is clean" % fn) |
229 | if not fn in self.clean: | 232 | if not fn in self.clean: |
@@ -284,7 +287,6 @@ class Cache: | |||
284 | pv = self.getVar('PV', file_name, True) | 287 | pv = self.getVar('PV', file_name, True) |
285 | pr = self.getVar('PR', file_name, True) | 288 | pr = self.getVar('PR', file_name, True) |
286 | dp = int(self.getVar('DEFAULT_PREFERENCE', file_name, True) or "0") | 289 | dp = int(self.getVar('DEFAULT_PREFERENCE', file_name, True) or "0") |
287 | provides = Set([pn] + (self.getVar("PROVIDES", file_name, True) or "").split()) | ||
288 | depends = bb.utils.explode_deps(self.getVar("DEPENDS", file_name, True) or "") | 290 | depends = bb.utils.explode_deps(self.getVar("DEPENDS", file_name, True) or "") |
289 | packages = (self.getVar('PACKAGES', file_name, True) or "").split() | 291 | packages = (self.getVar('PACKAGES', file_name, True) or "").split() |
290 | packages_dynamic = (self.getVar('PACKAGES_DYNAMIC', file_name, True) or "").split() | 292 | packages_dynamic = (self.getVar('PACKAGES_DYNAMIC', file_name, True) or "").split() |
@@ -304,24 +306,31 @@ class Cache: | |||
304 | cacheData.pkg_pepvpr[file_name] = (pe,pv,pr) | 306 | cacheData.pkg_pepvpr[file_name] = (pe,pv,pr) |
305 | cacheData.pkg_dp[file_name] = dp | 307 | cacheData.pkg_dp[file_name] = dp |
306 | 308 | ||
309 | provides = [pn] | ||
310 | for provide in (self.getVar("PROVIDES", file_name, True) or "").split(): | ||
311 | if provide not in provides: | ||
312 | provides.append(provide) | ||
313 | |||
307 | # Build forward and reverse provider hashes | 314 | # Build forward and reverse provider hashes |
308 | # Forward: virtual -> [filenames] | 315 | # Forward: virtual -> [filenames] |
309 | # Reverse: PN -> [virtuals] | 316 | # Reverse: PN -> [virtuals] |
310 | if pn not in cacheData.pn_provides: | 317 | if pn not in cacheData.pn_provides: |
311 | cacheData.pn_provides[pn] = Set() | 318 | cacheData.pn_provides[pn] = [] |
312 | cacheData.pn_provides[pn] |= provides | ||
313 | 319 | ||
314 | cacheData.fn_provides[file_name] = Set() | 320 | cacheData.fn_provides[file_name] = provides |
315 | for provide in provides: | 321 | for provide in provides: |
316 | if provide not in cacheData.providers: | 322 | if provide not in cacheData.providers: |
317 | cacheData.providers[provide] = [] | 323 | cacheData.providers[provide] = [] |
318 | cacheData.providers[provide].append(file_name) | 324 | cacheData.providers[provide].append(file_name) |
319 | cacheData.fn_provides[file_name].add(provide) | 325 | if not provide in cacheData.pn_provides[pn]: |
326 | cacheData.pn_provides[pn].append(provide) | ||
320 | 327 | ||
321 | cacheData.deps[file_name] = Set() | 328 | cacheData.deps[file_name] = [] |
322 | for dep in depends: | 329 | for dep in depends: |
323 | cacheData.all_depends.add(dep) | 330 | if not dep in cacheData.deps[file_name]: |
324 | cacheData.deps[file_name].add(dep) | 331 | cacheData.deps[file_name].append(dep) |
332 | if not dep in cacheData.all_depends: | ||
333 | cacheData.all_depends.append(dep) | ||
325 | 334 | ||
326 | # Build reverse hash for PACKAGES, so runtime dependencies | 335 | # Build reverse hash for PACKAGES, so runtime dependencies |
327 | # can be be resolved (RDEPENDS, RRECOMMENDS etc.) | 336 | # can be be resolved (RDEPENDS, RRECOMMENDS etc.) |
@@ -343,28 +352,21 @@ class Cache: | |||
343 | 352 | ||
344 | # Build hash of runtime depends and rececommends | 353 | # Build hash of runtime depends and rececommends |
345 | 354 | ||
346 | def add_dep(deplist, deps): | ||
347 | for dep in deps: | ||
348 | if not dep in deplist: | ||
349 | deplist[dep] = "" | ||
350 | |||
351 | if not file_name in cacheData.rundeps: | 355 | if not file_name in cacheData.rundeps: |
352 | cacheData.rundeps[file_name] = {} | 356 | cacheData.rundeps[file_name] = {} |
353 | if not file_name in cacheData.runrecs: | 357 | if not file_name in cacheData.runrecs: |
354 | cacheData.runrecs[file_name] = {} | 358 | cacheData.runrecs[file_name] = {} |
355 | 359 | ||
356 | rdepends = bb.utils.explode_deps(self.getVar('RDEPENDS', file_name, True) or "") | 360 | rdepends = self.getVar('RDEPENDS', file_name, True) or "" |
357 | rrecommends = bb.utils.explode_deps(self.getVar('RRECOMMENDS', file_name, True) or "") | 361 | rrecommends = self.getVar('RRECOMMENDS', file_name, True) or "" |
358 | for package in packages + [pn]: | 362 | for package in packages + [pn]: |
359 | if not package in cacheData.rundeps[file_name]: | 363 | if not package in cacheData.rundeps[file_name]: |
360 | cacheData.rundeps[file_name][package] = {} | 364 | cacheData.rundeps[file_name][package] = [] |
361 | if not package in cacheData.runrecs[file_name]: | 365 | if not package in cacheData.runrecs[file_name]: |
362 | cacheData.runrecs[file_name][package] = {} | 366 | cacheData.runrecs[file_name][package] = [] |
363 | 367 | ||
364 | add_dep(cacheData.rundeps[file_name][package], rdepends) | 368 | cacheData.rundeps[file_name][package] = rdepends + " " + (self.getVar("RDEPENDS_%s" % package, file_name, True) or "") |
365 | add_dep(cacheData.runrecs[file_name][package], rrecommends) | 369 | cacheData.runrecs[file_name][package] = rrecommends + " " + (self.getVar("RRECOMMENDS_%s" % package, file_name, True) or "") |
366 | add_dep(cacheData.rundeps[file_name][package], bb.utils.explode_deps(self.getVar("RDEPENDS_%s" % package, file_name, True) or "")) | ||
367 | add_dep(cacheData.runrecs[file_name][package], bb.utils.explode_deps(self.getVar("RRECOMMENDS_%s" % package, file_name, True) or "")) | ||
368 | 370 | ||
369 | # Collect files we may need for possible world-dep | 371 | # Collect files we may need for possible world-dep |
370 | # calculations | 372 | # calculations |
@@ -385,7 +387,7 @@ class Cache: | |||
385 | data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config) | 387 | data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config) |
386 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) | 388 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) |
387 | oldpath = os.path.abspath(os.getcwd()) | 389 | oldpath = os.path.abspath(os.getcwd()) |
388 | if self.mtime(bbfile_loc): | 390 | if bb.parse.cached_mtime_noerror(bbfile_loc): |
389 | os.chdir(bbfile_loc) | 391 | os.chdir(bbfile_loc) |
390 | bb_data = data.init_db(config) | 392 | bb_data = data.init_db(config) |
391 | try: | 393 | try: |
@@ -444,7 +446,7 @@ class CacheData: | |||
444 | self.pkg_dp = {} | 446 | self.pkg_dp = {} |
445 | self.pn_provides = {} | 447 | self.pn_provides = {} |
446 | self.fn_provides = {} | 448 | self.fn_provides = {} |
447 | self.all_depends = Set() | 449 | self.all_depends = [] |
448 | self.deps = {} | 450 | self.deps = {} |
449 | self.rundeps = {} | 451 | self.rundeps = {} |
450 | self.runrecs = {} | 452 | self.runrecs = {} |