diff options
author | Richard Purdie <richard@openedhand.com> | 2008-03-03 22:01:45 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2008-03-03 22:01:45 +0000 |
commit | ab191d21e2e5e1609206146d238af6ec0b3f0554 (patch) | |
tree | 728fa74dbf00f6b11964aa53b8427a0d221d6e91 /bitbake/lib/bb/cooker.py | |
parent | e88b4753781d54dc2625c3260c611d30ad76dbed (diff) | |
download | poky-ab191d21e2e5e1609206146d238af6ec0b3f0554.tar.gz |
bitbake: Update to bitbake 1.8 branch head
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3892 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 97 |
1 files changed, 63 insertions, 34 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 2c091b6522..38a8209760 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -97,14 +97,12 @@ class BBCooker: | |||
97 | bb.msg.note(2, bb.msg.domain.Build, "Renice to %s " % os.nice(nice)) | 97 | bb.msg.note(2, bb.msg.domain.Build, "Renice to %s " % os.nice(nice)) |
98 | 98 | ||
99 | 99 | ||
100 | def tryBuildPackage(self, fn, item, task, the_data, build_depends): | 100 | def tryBuildPackage(self, fn, item, task, the_data): |
101 | """ | 101 | """ |
102 | Build one task of a package, optionally build following task depends | 102 | Build one task of a package, optionally build following task depends |
103 | """ | 103 | """ |
104 | bb.event.fire(bb.event.PkgStarted(item, the_data)) | 104 | bb.event.fire(bb.event.PkgStarted(item, the_data)) |
105 | try: | 105 | try: |
106 | if not build_depends: | ||
107 | bb.data.setVarFlag('do_%s' % task, 'dontrundeps', 1, the_data) | ||
108 | if not self.configuration.dry_run: | 106 | if not self.configuration.dry_run: |
109 | bb.build.exec_task('do_%s' % task, the_data) | 107 | bb.build.exec_task('do_%s' % task, the_data) |
110 | bb.event.fire(bb.event.PkgSucceeded(item, the_data)) | 108 | bb.event.fire(bb.event.PkgSucceeded(item, the_data)) |
@@ -119,21 +117,20 @@ class BBCooker: | |||
119 | bb.event.fire(bb.event.PkgFailed(item, the_data)) | 117 | bb.event.fire(bb.event.PkgFailed(item, the_data)) |
120 | raise | 118 | raise |
121 | 119 | ||
122 | def tryBuild( self, fn, build_depends): | 120 | def tryBuild(self, fn): |
123 | """ | 121 | """ |
124 | Build a provider and its dependencies. | 122 | Build a provider and its dependencies. |
125 | build_depends is a list of previous build dependencies (not runtime) | 123 | build_depends is a list of previous build dependencies (not runtime) |
126 | If build_depends is empty, we're dealing with a runtime depends | 124 | If build_depends is empty, we're dealing with a runtime depends |
127 | """ | 125 | """ |
128 | |||
129 | the_data = self.bb_cache.loadDataFull(fn, self.configuration.data) | 126 | the_data = self.bb_cache.loadDataFull(fn, self.configuration.data) |
130 | 127 | ||
131 | item = self.status.pkg_fn[fn] | 128 | item = self.status.pkg_fn[fn] |
132 | 129 | ||
133 | if bb.build.stamp_is_current('do_%s' % self.configuration.cmd, the_data): | 130 | #if bb.build.stamp_is_current('do_%s' % self.configuration.cmd, the_data): |
134 | return True | 131 | # return True |
135 | 132 | ||
136 | return self.tryBuildPackage(fn, item, self.configuration.cmd, the_data, build_depends) | 133 | return self.tryBuildPackage(fn, item, self.configuration.cmd, the_data) |
137 | 134 | ||
138 | def showVersions(self): | 135 | def showVersions(self): |
139 | pkg_pn = self.status.pkg_pn | 136 | pkg_pn = self.status.pkg_pn |
@@ -184,6 +181,8 @@ class BBCooker: | |||
184 | self.cb = None | 181 | self.cb = None |
185 | self.bb_cache = bb.cache.init(self) | 182 | self.bb_cache = bb.cache.init(self) |
186 | fn = self.matchFile(buildfile) | 183 | fn = self.matchFile(buildfile) |
184 | if not fn: | ||
185 | sys.exit(1) | ||
187 | elif len(pkgs_to_build) == 1: | 186 | elif len(pkgs_to_build) == 1: |
188 | self.updateCache() | 187 | self.updateCache() |
189 | 188 | ||
@@ -220,7 +219,7 @@ class BBCooker: | |||
220 | except Exception, e: | 219 | except Exception, e: |
221 | bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) | 220 | bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) |
222 | # emit the metadata which isnt valid shell | 221 | # emit the metadata which isnt valid shell |
223 | data.expandKeys( envdata ) | 222 | data.expandKeys( envdata ) |
224 | for e in envdata.keys(): | 223 | for e in envdata.keys(): |
225 | if data.getVarFlag( e, 'python', envdata ): | 224 | if data.getVarFlag( e, 'python', envdata ): |
226 | sys.__stdout__.write("\npython %s () {\n%s}\n" % (e, data.getVar(e, envdata, 1))) | 225 | sys.__stdout__.write("\npython %s () {\n%s}\n" % (e, data.getVar(e, envdata, 1))) |
@@ -273,7 +272,7 @@ class BBCooker: | |||
273 | if fnid not in seen_fnids: | 272 | if fnid not in seen_fnids: |
274 | seen_fnids.append(fnid) | 273 | seen_fnids.append(fnid) |
275 | packages = [] | 274 | packages = [] |
276 | print >> depends_file, '"%s" [label="%s %s\\n%s"]' % (pn, pn, version, fn) | 275 | print >> depends_file, '"%s" [label="%s %s\\n%s"]' % (pn, pn, version, fn) |
277 | for depend in self.status.deps[fn]: | 276 | for depend in self.status.deps[fn]: |
278 | print >> depends_file, '"%s" -> "%s"' % (pn, depend) | 277 | print >> depends_file, '"%s" -> "%s"' % (pn, depend) |
279 | rdepends = self.status.rundeps[fn] | 278 | rdepends = self.status.rundeps[fn] |
@@ -387,19 +386,15 @@ class BBCooker: | |||
387 | try: | 386 | try: |
388 | self.configuration.data = bb.parse.handle( afile, self.configuration.data ) | 387 | self.configuration.data = bb.parse.handle( afile, self.configuration.data ) |
389 | 388 | ||
390 | # Add the handlers we inherited by INHERIT | 389 | # Handle any INHERITs and inherit the base class |
391 | # we need to do this manually as it is not guranteed | 390 | inherits = ["base"] + (bb.data.getVar('INHERIT', self.configuration.data, True ) or "").split() |
392 | # we will pick up these classes... as we only INHERIT | ||
393 | # on .inc and .bb files but not on .conf | ||
394 | data = bb.data.createCopy( self.configuration.data ) | ||
395 | inherits = ["base"] + (bb.data.getVar('INHERIT', data, True ) or "").split() | ||
396 | for inherit in inherits: | 391 | for inherit in inherits: |
397 | data = bb.parse.handle( os.path.join('classes', '%s.bbclass' % inherit ), data, True ) | 392 | self.configuration.data = bb.parse.handle(os.path.join('classes', '%s.bbclass' % inherit), self.configuration.data, True ) |
398 | 393 | ||
399 | # FIXME: This assumes that we included at least one .inc file | 394 | # Nomally we only register event handlers at the end of parsing .bb files |
400 | for var in bb.data.keys(data): | 395 | # We register any handlers we've found so far here... |
401 | if bb.data.getVarFlag(var, 'handler', data): | 396 | for var in data.getVar('__BBHANDLERS', self.configuration.data) or []: |
402 | bb.event.register(var,bb.data.getVar(var, data)) | 397 | bb.event.register(var,bb.data.getVar(var, self.configuration.data)) |
403 | 398 | ||
404 | bb.fetch.fetcher_init(self.configuration.data) | 399 | bb.fetch.fetcher_init(self.configuration.data) |
405 | 400 | ||
@@ -463,30 +458,62 @@ class BBCooker: | |||
463 | bb.msg.error(bb.msg.domain.Parsing, "Unable to match %s (%s matches found):" % (buildfile, len(matches))) | 458 | bb.msg.error(bb.msg.domain.Parsing, "Unable to match %s (%s matches found):" % (buildfile, len(matches))) |
464 | for f in matches: | 459 | for f in matches: |
465 | bb.msg.error(bb.msg.domain.Parsing, " %s" % f) | 460 | bb.msg.error(bb.msg.domain.Parsing, " %s" % f) |
466 | sys.exit(1) | 461 | return False |
467 | return matches[0] | 462 | return matches[0] |
468 | 463 | ||
469 | def buildFile(self, buildfile): | 464 | def buildFile(self, buildfile): |
470 | """ | 465 | """ |
471 | Build the file matching regexp buildfile | 466 | Build the file matching regexp buildfile |
472 | """ | 467 | """ |
473 | 468 | ||
474 | bf = self.matchFile(buildfile) | 469 | # Make sure our target is a fully qualified filename |
470 | fn = self.matchFile(buildfile) | ||
471 | if not fn: | ||
472 | return False | ||
475 | 473 | ||
476 | bbfile_data = bb.parse.handle(bf, self.configuration.data) | 474 | # Load data into the cache for fn |
475 | self.bb_cache = bb.cache.init(self) | ||
476 | self.bb_cache.loadData(fn, self.configuration.data) | ||
477 | |||
478 | # Parse the loaded cache data | ||
479 | self.status = bb.cache.CacheData() | ||
480 | self.bb_cache.handle_data(fn, self.status) | ||
481 | |||
482 | # Tweak some variables | ||
483 | item = self.bb_cache.getVar('PN', fn, True) | ||
484 | self.status.ignored_dependencies = Set() | ||
485 | self.status.bbfile_priority[fn] = 1 | ||
486 | |||
487 | # Remove external dependencies | ||
488 | self.status.task_deps[fn]['depends'] = {} | ||
489 | self.status.deps[fn] = [] | ||
490 | self.status.rundeps[fn] = [] | ||
491 | self.status.runrecs[fn] = [] | ||
477 | 492 | ||
478 | # Remove stamp for target if force mode active | 493 | # Remove stamp for target if force mode active |
479 | if self.configuration.force: | 494 | if self.configuration.force: |
480 | bb.msg.note(2, bb.msg.domain.RunQueue, "Remove stamp %s, %s" % (self.configuration.cmd, bf)) | 495 | bb.msg.note(2, bb.msg.domain.RunQueue, "Remove stamp %s, %s" % (self.configuration.cmd, fn)) |
481 | bb.build.del_stamp('do_%s' % self.configuration.cmd, bbfile_data) | 496 | bb.build.del_stamp('do_%s' % self.configuration.cmd, bbfile_data) |
482 | 497 | ||
483 | item = bb.data.getVar('PN', bbfile_data, 1) | 498 | # Setup taskdata structure |
484 | try: | 499 | taskdata = bb.taskdata.TaskData(self.configuration.abort) |
485 | self.tryBuildPackage(bf, item, self.configuration.cmd, bbfile_data, True) | 500 | taskdata.add_provider(self.configuration.data, self.status, item) |
486 | except bb.build.EventException: | ||
487 | bb.msg.error(bb.msg.domain.Build, "Build of '%s' failed" % item ) | ||
488 | 501 | ||
489 | sys.exit(0) | 502 | buildname = bb.data.getVar("BUILDNAME", self.configuration.data) |
503 | bb.event.fire(bb.event.BuildStarted(buildname, [item], self.configuration.event_data)) | ||
504 | |||
505 | # Execute the runqueue | ||
506 | runlist = [[item, "do_%s" % self.configuration.cmd]] | ||
507 | rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) | ||
508 | rq.prepare_runqueue() | ||
509 | try: | ||
510 | failures = rq.execute_runqueue() | ||
511 | except runqueue.TaskFailure, fnids: | ||
512 | for fnid in fnids: | ||
513 | bb.msg.error(bb.msg.domain.Build, "'%s' failed" % taskdata.fn_index[fnid]) | ||
514 | return False | ||
515 | bb.event.fire(bb.event.BuildCompleted(buildname, [item], self.configuration.event_data, failures)) | ||
516 | return True | ||
490 | 517 | ||
491 | def buildTargets(self, targets): | 518 | def buildTargets(self, targets): |
492 | """ | 519 | """ |
@@ -568,7 +595,9 @@ class BBCooker: | |||
568 | self.interactiveMode() | 595 | self.interactiveMode() |
569 | 596 | ||
570 | if self.configuration.buildfile is not None: | 597 | if self.configuration.buildfile is not None: |
571 | return self.buildFile(self.configuration.buildfile) | 598 | if not self.buildFile(self.configuration.buildfile): |
599 | sys.exit(1) | ||
600 | sys.exit(0) | ||
572 | 601 | ||
573 | # initialise the parsing status now we know we will need deps | 602 | # initialise the parsing status now we know we will need deps |
574 | self.updateCache() | 603 | self.updateCache() |
@@ -676,7 +705,7 @@ class BBCooker: | |||
676 | for i in xrange( len( filelist ) ): | 705 | for i in xrange( len( filelist ) ): |
677 | f = filelist[i] | 706 | f = filelist[i] |
678 | 707 | ||
679 | bb.msg.debug(1, bb.msg.domain.Collection, "parsing %s" % f) | 708 | #bb.msg.debug(1, bb.msg.domain.Collection, "parsing %s" % f) |
680 | 709 | ||
681 | # read a file's metadata | 710 | # read a file's metadata |
682 | try: | 711 | try: |