diff options
Diffstat (limited to 'bitbake/lib/bb/cookerdata.py')
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index 71021a3510..fa1de7a22f 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
@@ -237,9 +237,9 @@ class CookerDataBuilder(object): | |||
237 | 237 | ||
238 | bb.utils.set_context(bb.utils.clean_context()) | 238 | bb.utils.set_context(bb.utils.clean_context()) |
239 | bb.event.set_class_handlers(bb.event.clean_class_handlers()) | 239 | bb.event.set_class_handlers(bb.event.clean_class_handlers()) |
240 | self.data = bb.data.init() | 240 | self.basedata = bb.data.init() |
241 | if self.tracking: | 241 | if self.tracking: |
242 | self.data.enableTracking() | 242 | self.basedata.enableTracking() |
243 | 243 | ||
244 | # Keep a datastore of the initial environment variables and their | 244 | # Keep a datastore of the initial environment variables and their |
245 | # values from when BitBake was launched to enable child processes | 245 | # values from when BitBake was launched to enable child processes |
@@ -250,15 +250,40 @@ class CookerDataBuilder(object): | |||
250 | self.savedenv.setVar(k, cookercfg.env[k]) | 250 | self.savedenv.setVar(k, cookercfg.env[k]) |
251 | 251 | ||
252 | filtered_keys = bb.utils.approved_variables() | 252 | filtered_keys = bb.utils.approved_variables() |
253 | bb.data.inheritFromOS(self.data, self.savedenv, filtered_keys) | 253 | bb.data.inheritFromOS(self.basedata, self.savedenv, filtered_keys) |
254 | self.data.setVar("BB_ORIGENV", self.savedenv) | 254 | self.basedata.setVar("BB_ORIGENV", self.savedenv) |
255 | 255 | ||
256 | if worker: | 256 | if worker: |
257 | self.data.setVar("BB_WORKERCONTEXT", "1") | 257 | self.basedata.setVar("BB_WORKERCONTEXT", "1") |
258 | |||
259 | self.data = self.basedata | ||
260 | self.mcdata = {} | ||
258 | 261 | ||
259 | def parseBaseConfiguration(self): | 262 | def parseBaseConfiguration(self): |
260 | try: | 263 | try: |
261 | self.parseConfigurationFiles() | 264 | bb.parse.init_parser(self.basedata) |
265 | self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) | ||
266 | |||
267 | if self.data.getVar("BB_WORKERCONTEXT", False) is None: | ||
268 | bb.fetch.fetcher_init(self.data) | ||
269 | bb.codeparser.parser_cache_init(self.data) | ||
270 | |||
271 | bb.event.fire(bb.event.ConfigParsed(), self.data) | ||
272 | |||
273 | if self.data.getVar("BB_INVALIDCONF", False) is True: | ||
274 | self.data.setVar("BB_INVALIDCONF", False) | ||
275 | self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) | ||
276 | |||
277 | bb.parse.init_parser(self.data) | ||
278 | self.data_hash = self.data.get_hash() | ||
279 | self.mcdata[''] = self.data | ||
280 | |||
281 | multiconfig = (self.data.getVar("BBMULTICONFIG", True) or "").split() | ||
282 | for config in multiconfig: | ||
283 | mcdata = self.parseConfigurationFiles(['conf/multiconfig/%s.conf' % config] + self.prefiles, self.postfiles) | ||
284 | bb.event.fire(bb.event.ConfigParsed(), mcdata) | ||
285 | self.mcdata[config] = mcdata | ||
286 | |||
262 | except SyntaxError: | 287 | except SyntaxError: |
263 | raise bb.BBHandledException | 288 | raise bb.BBHandledException |
264 | except bb.data_smart.ExpansionError as e: | 289 | except bb.data_smart.ExpansionError as e: |
@@ -271,11 +296,8 @@ class CookerDataBuilder(object): | |||
271 | def _findLayerConf(self, data): | 296 | def _findLayerConf(self, data): |
272 | return findConfigFile("bblayers.conf", data) | 297 | return findConfigFile("bblayers.conf", data) |
273 | 298 | ||
274 | def parseConfigurationFiles(self): | 299 | def parseConfigurationFiles(self, prefiles, postfiles): |
275 | data = self.data | 300 | data = bb.data.createCopy(self.basedata) |
276 | prefiles = self.prefiles | ||
277 | postfiles = self.postfiles | ||
278 | bb.parse.init_parser(data) | ||
279 | 301 | ||
280 | # Parse files for loading *before* bitbake.conf and any includes | 302 | # Parse files for loading *before* bitbake.conf and any includes |
281 | for f in prefiles: | 303 | for f in prefiles: |
@@ -338,20 +360,7 @@ class CookerDataBuilder(object): | |||
338 | handlerln = int(data.getVarFlag(var, "lineno", False)) | 360 | handlerln = int(data.getVarFlag(var, "lineno", False)) |
339 | bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask", True) or "").split(), handlerfn, handlerln) | 361 | bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask", True) or "").split(), handlerfn, handlerln) |
340 | 362 | ||
341 | if data.getVar("BB_WORKERCONTEXT", False) is None: | ||
342 | bb.fetch.fetcher_init(data) | ||
343 | bb.codeparser.parser_cache_init(data) | ||
344 | bb.event.fire(bb.event.ConfigParsed(), data) | ||
345 | |||
346 | if data.getVar("BB_INVALIDCONF", False) is True: | ||
347 | data.setVar("BB_INVALIDCONF", False) | ||
348 | self.parseConfigurationFiles() | ||
349 | return | ||
350 | |||
351 | bb.parse.init_parser(data) | ||
352 | data.setVar('BBINCLUDED',bb.parse.get_file_depends(data)) | 363 | data.setVar('BBINCLUDED',bb.parse.get_file_depends(data)) |
353 | self.data = data | ||
354 | self.data_hash = data.get_hash() | ||
355 | |||
356 | 364 | ||
365 | return data | ||
357 | 366 | ||