diff options
Diffstat (limited to 'bitbake-dev/lib/bb')
-rw-r--r-- | bitbake-dev/lib/bb/cache.py | 89 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/cooker.py | 21 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/event.py | 5 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/parse/parse_py/BBHandler.py | 28 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/ui/knotty.py | 4 |
5 files changed, 79 insertions, 68 deletions
diff --git a/bitbake-dev/lib/bb/cache.py b/bitbake-dev/lib/bb/cache.py index d30d57d33b..2f1b8fa601 100644 --- a/bitbake-dev/lib/bb/cache.py +++ b/bitbake-dev/lib/bb/cache.py | |||
@@ -134,7 +134,18 @@ class Cache: | |||
134 | self.data = data | 134 | self.data = data |
135 | 135 | ||
136 | # Make sure __depends makes the depends_cache | 136 | # Make sure __depends makes the depends_cache |
137 | self.getVar("__depends", virtualfn, True) | 137 | # If we're a virtual class we need to make sure all our depends are appended |
138 | # to the depends of fn. | ||
139 | depends = self.getVar("__depends", virtualfn, True) or [] | ||
140 | if "__depends" not in self.depends_cache[fn] or not self.depends_cache[fn]["__depends"]: | ||
141 | self.depends_cache[fn]["__depends"] = depends | ||
142 | for dep in depends: | ||
143 | if dep not in self.depends_cache[fn]["__depends"]: | ||
144 | self.depends_cache[fn]["__depends"].append(dep) | ||
145 | |||
146 | # Make sure BBCLASSEXTEND always makes the cache too | ||
147 | self.getVar('BBCLASSEXTEND', virtualfn, True) | ||
148 | |||
138 | self.depends_cache[virtualfn]["CACHETIMESTAMP"] = bb.parse.cached_mtime(fn) | 149 | self.depends_cache[virtualfn]["CACHETIMESTAMP"] = bb.parse.cached_mtime(fn) |
139 | 150 | ||
140 | def virtualfn2realfn(self, virtualfn): | 151 | def virtualfn2realfn(self, virtualfn): |
@@ -170,11 +181,8 @@ class Cache: | |||
170 | 181 | ||
171 | bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s (full)" % fn) | 182 | bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s (full)" % fn) |
172 | 183 | ||
173 | bb_data, skipped = self.load_bbfile(fn, cfgData) | 184 | bb_data = self.load_bbfile(fn, cfgData) |
174 | if isinstance(bb_data, dict): | 185 | return bb_data[cls] |
175 | return bb_data[cls] | ||
176 | |||
177 | return bb_data | ||
178 | 186 | ||
179 | def loadData(self, fn, cfgData, cacheData): | 187 | def loadData(self, fn, cfgData, cacheData): |
180 | """ | 188 | """ |
@@ -184,42 +192,39 @@ class Cache: | |||
184 | to record the variables accessed. | 192 | to record the variables accessed. |
185 | Return the cache status and whether the file was skipped when parsed | 193 | Return the cache status and whether the file was skipped when parsed |
186 | """ | 194 | """ |
195 | skipped = 0 | ||
196 | virtuals = 0 | ||
197 | |||
187 | if fn not in self.checked: | 198 | if fn not in self.checked: |
188 | self.cacheValidUpdate(fn) | 199 | self.cacheValidUpdate(fn) |
200 | |||
189 | if self.cacheValid(fn): | 201 | if self.cacheValid(fn): |
190 | if "SKIPPED" in self.depends_cache[fn]: | ||
191 | return True, True | ||
192 | self.handle_data(fn, cacheData) | ||
193 | multi = self.getVar('BBCLASSEXTEND', fn, True) | 202 | multi = self.getVar('BBCLASSEXTEND', fn, True) |
194 | if multi: | 203 | for cls in (multi or "").split() + [""]: |
195 | for cls in multi.split(): | 204 | virtualfn = self.realfn2virtual(fn, cls) |
196 | virtualfn = self.realfn2virtual(fn, cls) | 205 | if self.depends_cache[virtualfn]["__SKIPPED"]: |
197 | # Pretend we're clean so getVar works | 206 | skipped += 1 |
198 | self.clean[virtualfn] = "" | 207 | bb.msg.debug(1, bb.msg.domain.Cache, "Skipping %s" % virtualfn) |
199 | self.handle_data(virtualfn, cacheData) | 208 | continue |
200 | return True, False | 209 | self.handle_data(virtualfn, cacheData) |
210 | virtuals += 1 | ||
211 | return True, skipped, virtuals | ||
201 | 212 | ||
202 | bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s" % fn) | 213 | bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s" % fn) |
203 | 214 | ||
204 | bb_data, skipped = self.load_bbfile(fn, cfgData) | 215 | bb_data = self.load_bbfile(fn, cfgData) |
205 | |||
206 | if skipped: | ||
207 | if isinstance(bb_data, dict): | ||
208 | self.setData(fn, fn, bb_data[""]) | ||
209 | else: | ||
210 | self.setData(fn, fn, bb_data) | ||
211 | return False, skipped | ||
212 | 216 | ||
213 | if isinstance(bb_data, dict): | 217 | for data in bb_data: |
214 | for data in bb_data: | 218 | virtualfn = self.realfn2virtual(fn, data) |
215 | virtualfn = self.realfn2virtual(fn, data) | 219 | self.setData(virtualfn, fn, bb_data[data]) |
216 | self.setData(virtualfn, fn, bb_data[data]) | 220 | if self.getVar("__SKIPPED", virtualfn, True): |
221 | skipped += 1 | ||
222 | bb.msg.debug(1, bb.msg.domain.Cache, "Skipping %s" % virtualfn) | ||
223 | else: | ||
217 | self.handle_data(virtualfn, cacheData) | 224 | self.handle_data(virtualfn, cacheData) |
218 | return False, skipped | 225 | virtuals += 1 |
226 | return False, skipped, virtuals | ||
219 | 227 | ||
220 | self.setData(fn, fn, bb_data) | ||
221 | self.handle_data(fn, cacheData) | ||
222 | return False, skipped | ||
223 | 228 | ||
224 | def cacheValid(self, fn): | 229 | def cacheValid(self, fn): |
225 | """ | 230 | """ |
@@ -286,16 +291,13 @@ class Cache: | |||
286 | if not fn in self.clean: | 291 | if not fn in self.clean: |
287 | self.clean[fn] = "" | 292 | self.clean[fn] = "" |
288 | 293 | ||
289 | return True | 294 | # Mark extended class data as clean too |
295 | multi = self.getVar('BBCLASSEXTEND', fn, True) | ||
296 | for cls in (multi or "").split(): | ||
297 | virtualfn = self.realfn2virtual(fn, cls) | ||
298 | self.clean[virtualfn] = "" | ||
290 | 299 | ||
291 | def skip(self, fn): | 300 | return True |
292 | """ | ||
293 | Mark a fn as skipped | ||
294 | Called from the parser | ||
295 | """ | ||
296 | if not fn in self.depends_cache: | ||
297 | self.depends_cache[fn] = {} | ||
298 | self.depends_cache[fn]["SKIPPED"] = "1" | ||
299 | 301 | ||
300 | def remove(self, fn): | 302 | def remove(self, fn): |
301 | """ | 303 | """ |
@@ -462,10 +464,7 @@ class Cache: | |||
462 | try: | 464 | try: |
463 | bb_data = parse.handle(bbfile, bb_data) # read .bb data | 465 | bb_data = parse.handle(bbfile, bb_data) # read .bb data |
464 | os.chdir(oldpath) | 466 | os.chdir(oldpath) |
465 | return bb_data, False | 467 | return bb_data |
466 | except bb.parse.SkipPackage: | ||
467 | os.chdir(oldpath) | ||
468 | return bb_data, True | ||
469 | except: | 468 | except: |
470 | os.chdir(oldpath) | 469 | os.chdir(oldpath) |
471 | raise | 470 | raise |
diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py index 25131b7406..8036d7e9d5 100644 --- a/bitbake-dev/lib/bb/cooker.py +++ b/bitbake-dev/lib/bb/cooker.py | |||
@@ -923,11 +923,13 @@ class CookerParser: | |||
923 | # Accounting statistics | 923 | # Accounting statistics |
924 | self.parsed = 0 | 924 | self.parsed = 0 |
925 | self.cached = 0 | 925 | self.cached = 0 |
926 | self.skipped = 0 | ||
927 | self.error = 0 | 926 | self.error = 0 |
928 | self.masked = masked | 927 | self.masked = masked |
929 | self.total = len(filelist) | 928 | self.total = len(filelist) |
930 | 929 | ||
930 | self.skipped = 0 | ||
931 | self.virtuals = 0 | ||
932 | |||
931 | # Pointer to the next file to parse | 933 | # Pointer to the next file to parse |
932 | self.pointer = 0 | 934 | self.pointer = 0 |
933 | 935 | ||
@@ -937,13 +939,14 @@ class CookerParser: | |||
937 | cooker = self.cooker | 939 | cooker = self.cooker |
938 | 940 | ||
939 | try: | 941 | try: |
940 | fromCache, skip = cooker.bb_cache.loadData(f, cooker.configuration.data, cooker.status) | 942 | fromCache, skipped, virtuals = cooker.bb_cache.loadData(f, cooker.configuration.data, cooker.status) |
941 | if skip: | 943 | if fromCache: |
942 | self.skipped += 1 | 944 | self.cached += 1 |
943 | bb.msg.debug(2, bb.msg.domain.Collection, "skipping %s" % f) | 945 | else: |
944 | cooker.bb_cache.skip(f) | 946 | self.parsed += 1 |
945 | elif fromCache: self.cached += 1 | 947 | |
946 | else: self.parsed += 1 | 948 | self.skipped += skipped |
949 | self.virtuals += virtuals | ||
947 | 950 | ||
948 | except IOError, e: | 951 | except IOError, e: |
949 | self.error += 1 | 952 | self.error += 1 |
@@ -962,7 +965,7 @@ class CookerParser: | |||
962 | cooker.bb_cache.remove(f) | 965 | cooker.bb_cache.remove(f) |
963 | raise | 966 | raise |
964 | finally: | 967 | finally: |
965 | bb.event.fire(bb.event.ParseProgress(self.cached, self.parsed, self.skipped, self.masked, self.error, self.total), cooker.configuration.event_data) | 968 | bb.event.fire(bb.event.ParseProgress(self.cached, self.parsed, self.skipped, self.masked, self.virtuals, self.error, self.total), cooker.configuration.event_data) |
966 | 969 | ||
967 | self.pointer += 1 | 970 | self.pointer += 1 |
968 | 971 | ||
diff --git a/bitbake-dev/lib/bb/event.py b/bitbake-dev/lib/bb/event.py index 3062dc51be..7251d78715 100644 --- a/bitbake-dev/lib/bb/event.py +++ b/bitbake-dev/lib/bb/event.py | |||
@@ -253,14 +253,15 @@ class ParseProgress(Event): | |||
253 | Parsing Progress Event | 253 | Parsing Progress Event |
254 | """ | 254 | """ |
255 | 255 | ||
256 | def __init__(self, cached, parsed, skipped, masked, errors, total): | 256 | def __init__(self, cached, parsed, skipped, masked, virtuals, errors, total): |
257 | Event.__init__(self) | 257 | Event.__init__(self) |
258 | self.cached = cached | 258 | self.cached = cached |
259 | self.parsed = parsed | 259 | self.parsed = parsed |
260 | self.skipped = skipped | 260 | self.skipped = skipped |
261 | self.virtuals = virtuals | ||
261 | self.masked = masked | 262 | self.masked = masked |
262 | self.errors = errors | 263 | self.errors = errors |
263 | self.sofar = cached + parsed + skipped | 264 | self.sofar = cached + parsed |
264 | self.total = total | 265 | self.total = total |
265 | 266 | ||
266 | class DepTreeGenerated(Event): | 267 | class DepTreeGenerated(Event): |
diff --git a/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py b/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py index 9b353634ed..86fa18ebd2 100644 --- a/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py | |||
@@ -185,18 +185,26 @@ def handle(fn, d, include = 0): | |||
185 | multi = data.getVar('BBCLASSEXTEND', d, 1) | 185 | multi = data.getVar('BBCLASSEXTEND', d, 1) |
186 | if multi: | 186 | if multi: |
187 | based = bb.data.createCopy(d) | 187 | based = bb.data.createCopy(d) |
188 | else: | ||
189 | based = d | ||
190 | try: | ||
188 | finalise(fn, based) | 191 | finalise(fn, based) |
189 | darray = {"": based} | 192 | except bb.parse.SkipPackage: |
190 | for cls in multi.split(): | 193 | bb.data.setVar("__SKIPPED", True, based) |
191 | pn = data.getVar('PN', d, True) | 194 | darray = {"": based} |
192 | based = bb.data.createCopy(d) | 195 | |
193 | data.setVar('PN', pn + '-' + cls, based) | 196 | for cls in (multi or "").split(): |
194 | inherit([cls], based) | 197 | pn = data.getVar('PN', d, True) |
198 | based = bb.data.createCopy(d) | ||
199 | data.setVar('PN', pn + '-' + cls, based) | ||
200 | inherit([cls], based) | ||
201 | try: | ||
195 | finalise(fn, based) | 202 | finalise(fn, based) |
196 | darray[cls] = based | 203 | except bb.parse.SkipPackage: |
197 | return darray | 204 | bb.data.setVar("__SKIPPED", True, based) |
198 | else: | 205 | darray[cls] = based |
199 | finalise(fn, d) | 206 | return darray |
207 | |||
200 | bbpath.pop(0) | 208 | bbpath.pop(0) |
201 | if oldfile: | 209 | if oldfile: |
202 | bb.data.setVar("FILE", oldfile, d) | 210 | bb.data.setVar("FILE", oldfile, d) |
diff --git a/bitbake-dev/lib/bb/ui/knotty.py b/bitbake-dev/lib/bb/ui/knotty.py index 6baed836a1..c69fd6ca64 100644 --- a/bitbake-dev/lib/bb/ui/knotty.py +++ b/bitbake-dev/lib/bb/ui/knotty.py | |||
@@ -114,8 +114,8 @@ def init(server, eventHandler): | |||
114 | sys.stdout.write("done.") | 114 | sys.stdout.write("done.") |
115 | sys.stdout.flush() | 115 | sys.stdout.flush() |
116 | if x == y: | 116 | if x == y: |
117 | print("\nParsing finished. %d cached, %d parsed, %d skipped, %d masked, %d errors." | 117 | print("\nParsing of %d .bb files complete (%d cached, %d parsed). %d targets, %d skipped, %d masked, %d errors." |
118 | % ( event.cached, event.parsed, event.skipped, event.masked, event.errors)) | 118 | % ( event.total, event.cached, event.parsed, event.virtuals, event.skipped, event.masked, event.errors)) |
119 | continue | 119 | continue |
120 | 120 | ||
121 | if isinstance(event, bb.command.CookerCommandCompleted): | 121 | if isinstance(event, bb.command.CookerCommandCompleted): |