summaryrefslogtreecommitdiff
path: root/bitbake-dev/lib/bb
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-01-19 14:48:19 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2010-01-19 14:48:19 +0000
commit22a271aaa99daeb6b29c42c2c1dc670bf204310e (patch)
treed2690b66e7a613820f34ceaecbce65809cbd22a3 /bitbake-dev/lib/bb
parentcefe87fc3c4202e942f34666813bc094df2ffb4b (diff)
downloadopenembedded-core-22a271aaa99daeb6b29c42c2c1dc670bf204310e.tar.gz
openembedded-core-22a271aaa99daeb6b29c42c2c1dc670bf204310e.tar.bz2
openembedded-core-22a271aaa99daeb6b29c42c2c1dc670bf204310e.zip
bitbake-dev: Sync with upstream
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake-dev/lib/bb')
-rw-r--r--bitbake-dev/lib/bb/build.py8
-rw-r--r--bitbake-dev/lib/bb/command.py16
-rw-r--r--bitbake-dev/lib/bb/cooker.py26
-rw-r--r--bitbake-dev/lib/bb/event.py108
-rw-r--r--bitbake-dev/lib/bb/fetch/cvs.py2
-rw-r--r--bitbake-dev/lib/bb/fetch/git.py86
-rw-r--r--bitbake-dev/lib/bb/fetch/local.py4
-rw-r--r--bitbake-dev/lib/bb/fetch/svk.py2
-rw-r--r--bitbake-dev/lib/bb/fetch/wget.py2
-rw-r--r--bitbake-dev/lib/bb/msg.py16
-rw-r--r--bitbake-dev/lib/bb/parse/parse_py/BBHandler.py2
-rw-r--r--bitbake-dev/lib/bb/parse/parse_py/ConfHandler.py13
-rw-r--r--bitbake-dev/lib/bb/runqueue.py98
-rw-r--r--bitbake-dev/lib/bb/server/__init__.py1
-rw-r--r--bitbake-dev/lib/bb/server/none.py164
-rw-r--r--bitbake-dev/lib/bb/server/xmlrpc.py50
-rw-r--r--bitbake-dev/lib/bb/taskdata.py35
-rw-r--r--bitbake-dev/lib/bb/ui/crumbs/runningbuild.py28
-rw-r--r--bitbake-dev/lib/bb/ui/depexp.py20
-rw-r--r--bitbake-dev/lib/bb/ui/knotty.py66
-rw-r--r--bitbake-dev/lib/bb/ui/ncurses.py44
-rw-r--r--bitbake-dev/lib/bb/ui/uievent.py24
-rw-r--r--bitbake-dev/lib/bb/ui/uihelper.py22
23 files changed, 491 insertions, 346 deletions
diff --git a/bitbake-dev/lib/bb/build.py b/bitbake-dev/lib/bb/build.py
index 65e8118b4f..6d80b4b549 100644
--- a/bitbake-dev/lib/bb/build.py
+++ b/bitbake-dev/lib/bb/build.py
@@ -55,7 +55,7 @@ class TaskBase(event.Event):
def __init__(self, t, d ):
self._task = t
self._package = bb.data.getVar("PF", d, 1)
- event.Event.__init__(self, d)
+ event.Event.__init__(self)
self._message = "package %s: task %s: %s" % (bb.data.getVar("PF", d, 1), t, bb.event.getName(self)[4:])
def getTask(self):
@@ -286,9 +286,9 @@ def exec_task(task, d):
data.setVar('OVERRIDES', 'task-%s:%s' % (task[3:], old_overrides), localdata)
data.update_data(localdata)
data.expandKeys(localdata)
- event.fire(TaskStarted(task, localdata))
+ event.fire(TaskStarted(task, localdata), localdata)
exec_func(task, localdata)
- event.fire(TaskSucceeded(task, localdata))
+ event.fire(TaskSucceeded(task, localdata), localdata)
except FuncFailed, message:
# Try to extract the optional logfile
try:
@@ -298,7 +298,7 @@ def exec_task(task, d):
msg = message
bb.msg.note(1, bb.msg.domain.Build, "Task failed: %s" % message )
failedevent = TaskFailed(msg, logfile, task, d)
- event.fire(failedevent)
+ event.fire(failedevent, d)
raise EventException("Function failed in task: %s" % message, failedevent)
# make stamp, or cause event and raise exception
diff --git a/bitbake-dev/lib/bb/command.py b/bitbake-dev/lib/bb/command.py
index 1a1bf00b33..2bb5365c0c 100644
--- a/bitbake-dev/lib/bb/command.py
+++ b/bitbake-dev/lib/bb/command.py
@@ -94,9 +94,9 @@ class Command:
def finishAsyncCommand(self, error = None):
if error:
- bb.event.fire(bb.command.CookerCommandFailed(self.cooker.configuration.event_data, error))
+ bb.event.fire(bb.command.CookerCommandFailed(error), self.cooker.configuration.event_data)
else:
- bb.event.fire(bb.command.CookerCommandCompleted(self.cooker.configuration.event_data))
+ bb.event.fire(bb.command.CookerCommandCompleted(), self.cooker.configuration.event_data)
self.currentAsyncCommand = None
@@ -247,24 +247,24 @@ class CookerCommandCompleted(bb.event.Event):
"""
Cooker command completed
"""
- def __init__(self, data):
- bb.event.Event.__init__(self, data)
+ def __init__(self):
+ bb.event.Event.__init__(self)
class CookerCommandFailed(bb.event.Event):
"""
Cooker command completed
"""
- def __init__(self, data, error):
- bb.event.Event.__init__(self, data)
+ def __init__(self, error):
+ bb.event.Event.__init__(self)
self.error = error
class CookerCommandSetExitCode(bb.event.Event):
"""
Set the exit code for a cooker command
"""
- def __init__(self, data, exitcode):
- bb.event.Event.__init__(self, data)
+ def __init__(self, exitcode):
+ bb.event.Event.__init__(self)
self.exitcode = int(exitcode)
diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py
index 1bf7d4bd14..25131b7406 100644
--- a/bitbake-dev/lib/bb/cooker.py
+++ b/bitbake-dev/lib/bb/cooker.py
@@ -245,7 +245,7 @@ class BBCooker:
def compareRevisions(self):
ret = bb.fetch.fetcher_compare_revisons(self.configuration.data)
- bb.event.fire(bb.command.CookerCommandSetExitCode(self.configuration.event_data, ret))
+ bb.event.fire(bb.command.CookerCommandSetExitCode(ret), self.configuration.event_data)
def showEnvironment(self, buildfile = None, pkgs_to_build = []):
"""
@@ -403,7 +403,7 @@ class BBCooker:
Generate an event with the result
"""
depgraph = self.generateDepTreeData(pkgs_to_build, task)
- bb.event.fire(bb.event.DepTreeGenerated(self.configuration.data, depgraph))
+ bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data)
def generateDotGraphFiles(self, pkgs_to_build, task):
"""
@@ -544,7 +544,7 @@ class BBCooker:
bb.fetch.fetcher_init(self.configuration.data)
- bb.event.fire(bb.event.ConfigParsed(self.configuration.data))
+ bb.event.fire(bb.event.ConfigParsed(), self.configuration.data)
except IOError, e:
bb.msg.fatal(bb.msg.domain.Parsing, "Error when parsing %s: %s" % (afile, str(e)))
@@ -657,7 +657,7 @@ class BBCooker:
taskdata.add_provider(self.configuration.data, self.status, item)
buildname = bb.data.getVar("BUILDNAME", self.configuration.data)
- bb.event.fire(bb.event.BuildStarted(buildname, [item], self.configuration.event_data))
+ bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.configuration.event_data)
# Execute the runqueue
runlist = [[item, "do_%s" % task]]
@@ -680,7 +680,7 @@ class BBCooker:
retval = False
if not retval:
self.command.finishAsyncCommand()
- bb.event.fire(bb.event.BuildCompleted(buildname, item, self.configuration.event_data, failures))
+ bb.event.fire(bb.event.BuildCompleted(buildname, item, failures), self.configuration.event_data)
return False
return 0.5
@@ -716,14 +716,14 @@ class BBCooker:
retval = False
if not retval:
self.command.finishAsyncCommand()
- bb.event.fire(bb.event.BuildCompleted(buildname, targets, self.configuration.event_data, failures))
+ bb.event.fire(bb.event.BuildCompleted(buildname, targets, failures), self.configuration.event_data)
return None
return 0.5
self.buildSetVars()
buildname = bb.data.getVar("BUILDNAME", self.configuration.data)
- bb.event.fire(bb.event.BuildStarted(buildname, targets, self.configuration.event_data))
+ bb.event.fire(bb.event.BuildStarted(buildname, targets), self.configuration.event_data)
localdata = data.createCopy(self.configuration.data)
bb.data.update_data(localdata)
@@ -786,7 +786,7 @@ class BBCooker:
self.cookerState = cookerParsed
return None
- return 0.00001
+ return True
def checkPackages(self, pkgs_to_build):
@@ -904,15 +904,15 @@ class BBCooker:
else:
self.server.serve_forever()
- bb.event.fire(CookerExit(self.configuration.event_data))
+ bb.event.fire(CookerExit(), self.configuration.event_data)
class CookerExit(bb.event.Event):
"""
Notify clients of the Cooker shutdown
"""
- def __init__(self, d):
- bb.event.Event.__init__(self, d)
+ def __init__(self):
+ bb.event.Event.__init__(self)
class CookerParser:
def __init__(self, cooker, filelist, masked):
@@ -932,8 +932,6 @@ class CookerParser:
self.pointer = 0
def parse_next(self):
- print "Pointer %d" % self.pointer
-
if self.pointer < len(self.filelist):
f = self.filelist[self.pointer]
cooker = self.cooker
@@ -964,7 +962,7 @@ class CookerParser:
cooker.bb_cache.remove(f)
raise
finally:
- bb.event.fire(bb.event.ParseProgress(cooker.configuration.event_data, self.cached, self.parsed, self.skipped, self.masked, self.error, self.total))
+ bb.event.fire(bb.event.ParseProgress(self.cached, self.parsed, self.skipped, self.masked, self.error, self.total), cooker.configuration.event_data)
self.pointer += 1
diff --git a/bitbake-dev/lib/bb/event.py b/bitbake-dev/lib/bb/event.py
index 86b566febf..3062dc51be 100644
--- a/bitbake-dev/lib/bb/event.py
+++ b/bitbake-dev/lib/bb/event.py
@@ -24,27 +24,19 @@ BitBake build tools.
import os, re
import bb.utils
+import pickle
# This is the pid for which we should generate the event. This is set when
# the runqueue forks off.
worker_pid = 0
+worker_pipe = None
class Event:
"""Base class for events"""
- type = "Event"
- def __init__(self, d):
- self._data = d
+ def __init__(self):
self.pid = worker_pid
- def getData(self):
- return self._data
-
- def setData(self, data):
- self._data = data
-
- data = property(getData, setData, None, "data property")
-
NotHandled = 0
Handled = 1
@@ -56,33 +48,48 @@ _handlers = {}
_ui_handlers = {}
_ui_handler_seq = 0
-def fire(event):
+def fire(event, d):
"""Fire off an Event"""
+ if worker_pid != 0:
+ worker_fire(event, d)
+ return
+
for handler in _handlers:
h = _handlers[handler]
+ event.data = d
if type(h).__name__ == "code":
exec(h)
tmpHandler(event)
else:
h(event)
-
- # Remove the event data elements for UI handlers - too much data otherwise
- # They can request data if they need it
- event.data = None
- event._data = None
+ del event.data
errors = []
for h in _ui_handlers:
#print "Sending event %s" % event
- classid = "%s.%s" % (event.__class__.__module__, event.__class__.__name__)
try:
- _ui_handlers[h].event.send((classid, event))
+ # We use pickle here since it better handles object instances
+ # which xmlrpc's marshaller does not. Events *must* be serializable
+ # by pickle.
+ _ui_handlers[h].event.send((pickle.dumps(event)))
except:
errors.append(h)
for h in errors:
del _ui_handlers[h]
+def worker_fire(event, d):
+ data = "<event>" + pickle.dumps(event) + "</event>"
+ if os.write(worker_pipe, data) != len (data):
+ print "Error sending event to server (short write)"
+
+def fire_from_worker(event, d):
+ if not event.startswith("<event>") or not event.endswith("</event>"):
+ print "Error, not an event"
+ return
+ event = pickle.loads(event[7:-8])
+ bb.event.fire(event, d)
+
def register(name, handler):
"""Register an Event handler"""
@@ -128,17 +135,17 @@ class ConfigParsed(Event):
class RecipeParsed(Event):
""" Recipe Parsing Complete """
- def __init__(self, fn, d):
+ def __init__(self, fn):
self.fn = fn
- Event.__init__(self, d)
+ Event.__init__(self)
class StampUpdate(Event):
"""Trigger for any adjustment of the stamp files to happen"""
- def __init__(self, targets, stampfns, d):
+ def __init__(self, targets, stampfns):
self._targets = targets
self._stampfns = stampfns
- Event.__init__(self, d)
+ Event.__init__(self)
def getStampPrefix(self):
return self._stampfns
@@ -149,30 +156,13 @@ class StampUpdate(Event):
stampPrefix = property(getStampPrefix)
targets = property(getTargets)
-class PkgBase(Event):
- """Base class for package events"""
-
- def __init__(self, t, d):
- self._pkg = t
- Event.__init__(self, d)
- self._message = "package %s: %s" % (bb.data.getVar("P", d, 1), getName(self)[3:])
-
- def getPkg(self):
- return self._pkg
-
- def setPkg(self, pkg):
- self._pkg = pkg
-
- pkg = property(getPkg, setPkg, None, "pkg property")
-
-
class BuildBase(Event):
"""Base class for bbmake run events"""
- def __init__(self, n, p, c, failures = 0):
+ def __init__(self, n, p, failures = 0):
self._name = n
self._pkgs = p
- Event.__init__(self, c)
+ Event.__init__(self)
self._failures = failures
def getPkgs(self):
@@ -204,20 +194,7 @@ class BuildBase(Event):
cfg = property(getCfg, setCfg, None, "cfg property")
-class DepBase(PkgBase):
- """Base class for dependency events"""
- def __init__(self, t, data, d):
- self._dep = d
- PkgBase.__init__(self, t, data)
-
- def getDep(self):
- return self._dep
-
- def setDep(self, dep):
- self._dep = dep
-
- dep = property(getDep, setDep, None, "dep property")
class BuildStarted(BuildBase):
@@ -228,18 +205,13 @@ class BuildCompleted(BuildBase):
"""bbmake build run completed"""
-class UnsatisfiedDep(DepBase):
- """Unsatisfied Dependency"""
-
-class RecursiveDep(DepBase):
- """Recursive Dependency"""
class NoProvider(Event):
"""No Provider for an Event"""
- def __init__(self, item, data, runtime=False):
- Event.__init__(self, data)
+ def __init__(self, item, runtime=False):
+ Event.__init__(self)
self._item = item
self._runtime = runtime
@@ -252,8 +224,8 @@ class NoProvider(Event):
class MultipleProviders(Event):
"""Multiple Providers"""
- def __init__(self, item, candidates, data, runtime = False):
- Event.__init__(self, data)
+ def __init__(self, item, candidates, runtime = False):
+ Event.__init__(self)
self._item = item
self._candidates = candidates
self._is_runtime = runtime
@@ -281,8 +253,8 @@ class ParseProgress(Event):
Parsing Progress Event
"""
- def __init__(self, d, cached, parsed, skipped, masked, errors, total):
- Event.__init__(self, d)
+ def __init__(self, cached, parsed, skipped, masked, errors, total):
+ Event.__init__(self)
self.cached = cached
self.parsed = parsed
self.skipped = skipped
@@ -296,7 +268,7 @@ class DepTreeGenerated(Event):
Event when a dependency tree has been generated
"""
- def __init__(self, d, depgraph):
- Event.__init__(self, d)
+ def __init__(self, depgraph):
+ Event.__init__(self)
self._depgraph = depgraph
diff --git a/bitbake-dev/lib/bb/fetch/cvs.py b/bitbake-dev/lib/bb/fetch/cvs.py
index d8bd4eaf75..90a006500e 100644
--- a/bitbake-dev/lib/bb/fetch/cvs.py
+++ b/bitbake-dev/lib/bb/fetch/cvs.py
@@ -41,7 +41,7 @@ class Cvs(Fetch):
"""
Check to see if a given url can be fetched with cvs.
"""
- return ud.type in ['cvs', 'pserver']
+ return ud.type in ['cvs']
def localpath(self, url, ud, d):
if not "module" in ud.parm:
diff --git a/bitbake-dev/lib/bb/fetch/git.py b/bitbake-dev/lib/bb/fetch/git.py
index 43053d6c46..0e68325db9 100644
--- a/bitbake-dev/lib/bb/fetch/git.py
+++ b/bitbake-dev/lib/bb/fetch/git.py
@@ -51,6 +51,10 @@ class Git(Fetch):
ud.branch = ud.parm.get("branch", "master")
+ gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
+ ud.mirrortarball = 'git_%s.tar.gz' % (gitsrcname)
+ ud.clonedir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
+
tag = Fetch.srcrev_internal_helper(ud, d)
if tag is True:
ud.tag = self.latest_revision(url, ud, d)
@@ -60,7 +64,18 @@ class Git(Fetch):
if not ud.tag or ud.tag == "master":
ud.tag = self.latest_revision(url, ud, d)
- ud.localfile = data.expand('git_%s%s_%s.tar.gz' % (ud.host, ud.path.replace('/', '.'), ud.tag), d)
+ subdir = ud.parm.get("subpath", "")
+ if subdir != "":
+ if subdir.endswith("/"):
+ subdir = subdir[:-1]
+ subdirpath = os.path.join(ud.path, subdir);
+ else:
+ subdirpath = ud.path;
+
+ if 'fullclone' in ud.parm:
+ ud.localfile = ud.mirrortarball
+ else:
+ ud.localfile = data.expand('git_%s%s_%s.tar.gz' % (ud.host, subdirpath.replace('/', '.'), ud.tag), d)
return os.path.join(data.getVar("DL_DIR", d, True), ud.localfile)
@@ -76,24 +91,20 @@ class Git(Fetch):
else:
username = ""
- gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
-
- repofilename = 'git_%s.tar.gz' % (gitsrcname)
- repofile = os.path.join(data.getVar("DL_DIR", d, 1), repofilename)
- repodir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
+ repofile = os.path.join(data.getVar("DL_DIR", d, 1), ud.mirrortarball)
coname = '%s' % (ud.tag)
- codir = os.path.join(repodir, coname)
+ codir = os.path.join(ud.clonedir, coname)
- if not os.path.exists(repodir):
- if Fetch.try_mirror(d, repofilename):
- bb.mkdirhier(repodir)
- os.chdir(repodir)
+ if not os.path.exists(ud.clonedir):
+ if Fetch.try_mirror(d, ud.mirrortarball):
+ bb.mkdirhier(ud.clonedir)
+ os.chdir(ud.clonedir)
runfetchcmd("tar -xzf %s" % (repofile), d)
else:
- runfetchcmd("git clone -n %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, repodir), d)
+ runfetchcmd("git clone -n %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, ud.clonedir), d)
- os.chdir(repodir)
+ os.chdir(ud.clonedir)
# Remove all but the .git directory
if not self._contains_ref(ud.tag, d):
runfetchcmd("rm * -Rf", d)
@@ -102,25 +113,45 @@ class Git(Fetch):
runfetchcmd("git prune-packed", d)
runfetchcmd("git pack-redundant --all | xargs -r rm", d)
- os.chdir(repodir)
+ os.chdir(ud.clonedir)
mirror_tarballs = data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True)
- if mirror_tarballs != "0":
+ if mirror_tarballs != "0" or 'fullclone' in ud.parm:
bb.msg.note(1, bb.msg.domain.Fetcher, "Creating tarball of git repository")
runfetchcmd("tar -czf %s %s" % (repofile, os.path.join(".", ".git", "*") ), d)
+ if 'fullclone' in ud.parm:
+ return
+
if os.path.exists(codir):
bb.utils.prunedir(codir)
+ subdir = ud.parm.get("subpath", "")
+ if subdir != "":
+ if subdir.endswith("/"):
+ subdirbase = os.path.basename(subdir[:-1])
+ else:
+ subdirbase = os.path.basename(subdir)
+ else:
+ subdirbase = ""
+
+ if subdir != "":
+ readpathspec = ":%s" % (subdir)
+ codir = os.path.join(codir, "git")
+ coprefix = os.path.join(codir, subdirbase, "")
+ else:
+ readpathspec = ""
+ coprefix = os.path.join(codir, "git", "")
+
bb.mkdirhier(codir)
- os.chdir(repodir)
- runfetchcmd("git read-tree %s" % (ud.tag), d)
- runfetchcmd("git checkout-index -q -f --prefix=%s -a" % (os.path.join(codir, "git", "")), d)
+ os.chdir(ud.clonedir)
+ runfetchcmd("git read-tree %s%s" % (ud.tag, readpathspec), d)
+ runfetchcmd("git checkout-index -q -f --prefix=%s -a" % (coprefix), d)
os.chdir(codir)
bb.msg.note(1, bb.msg.domain.Fetcher, "Creating tarball of git checkout")
runfetchcmd("tar -czf %s %s" % (ud.localpath, os.path.join(".", "*") ), d)
- os.chdir(repodir)
+ os.chdir(ud.clonedir)
bb.utils.prunedir(codir)
def suppports_srcrev(self):
@@ -145,7 +176,10 @@ class Git(Fetch):
else:
username = ""
- output = runfetchcmd("git ls-remote %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, ud.branch), d, True)
+ cmd = "git ls-remote %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, ud.branch)
+ output = runfetchcmd(cmd, d, True)
+ if not output:
+ raise bb.fetch.FetchError("Fetch command %s gave empty output\n" % (cmd))
return output.split()[0]
def _build_revision(self, url, ud, d):
@@ -156,20 +190,20 @@ class Git(Fetch):
Return a suitable buildindex for the revision specified. This is done by counting revisions
using "git rev-list" which may or may not work in different circumstances.
"""
- gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
- repodir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
cwd = os.getcwd()
# Check if we have the rev already
- if not os.path.exists(repodir):
+
+ if not os.path.exists(ud.clonedir):
+ print "no repo"
self.go(None, ud, d)
- if not os.path.exists(repodir):
- bb.msg.error(bb.msg.domain.Fetcher, "GIT repository for %s doesn't exist in %s, cannot get sortable buildnumber, using old value" % (url, repodir))
+ if not os.path.exists(ud.clonedir):
+ bb.msg.error(bb.msg.domain.Fetcher, "GIT repository for %s doesn't exist in %s, cannot get sortable buildnumber, using old value" % (url, ud.clonedir))
return None
- os.chdir(repodir)
+ os.chdir(ud.clonedir)
if not self._contains_ref(rev, d):
self.go(None, ud, d)
diff --git a/bitbake-dev/lib/bb/fetch/local.py b/bitbake-dev/lib/bb/fetch/local.py
index 577774e597..f9bdf589cb 100644
--- a/bitbake-dev/lib/bb/fetch/local.py
+++ b/bitbake-dev/lib/bb/fetch/local.py
@@ -33,9 +33,9 @@ from bb.fetch import Fetch
class Local(Fetch):
def supports(self, url, urldata, d):
"""
- Check to see if a given url can be fetched with cvs.
+ Check to see if a given url represents a local fetch.
"""
- return urldata.type in ['file','patch']
+ return urldata.type in ['file']
def localpath(self, url, urldata, d):
"""
diff --git a/bitbake-dev/lib/bb/fetch/svk.py b/bitbake-dev/lib/bb/fetch/svk.py
index 442f85804f..120dad9d4e 100644
--- a/bitbake-dev/lib/bb/fetch/svk.py
+++ b/bitbake-dev/lib/bb/fetch/svk.py
@@ -36,7 +36,7 @@ class Svk(Fetch):
"""Class to fetch a module or modules from svk repositories"""
def supports(self, url, ud, d):
"""
- Check to see if a given url can be fetched with cvs.
+ Check to see if a given url can be fetched with svk.
"""
return ud.type in ['svk']
diff --git a/bitbake-dev/lib/bb/fetch/wget.py b/bitbake-dev/lib/bb/fetch/wget.py
index a0dca94040..fd93c7ec46 100644
--- a/bitbake-dev/lib/bb/fetch/wget.py
+++ b/bitbake-dev/lib/bb/fetch/wget.py
@@ -36,7 +36,7 @@ class Wget(Fetch):
"""Class to fetch urls via 'wget'"""
def supports(self, url, ud, d):
"""
- Check to see if a given url can be fetched with cvs.
+ Check to see if a given url can be fetched with wget.
"""
return ud.type in ['http','https','ftp']
diff --git a/bitbake-dev/lib/bb/msg.py b/bitbake-dev/lib/bb/msg.py
index 7990833c2e..3fcf7091be 100644
--- a/bitbake-dev/lib/bb/msg.py
+++ b/bitbake-dev/lib/bb/msg.py
@@ -47,9 +47,9 @@ domain = bb.utils.Enum(
class MsgBase(bb.event.Event):
"""Base class for messages"""
- def __init__(self, msg, d ):
+ def __init__(self, msg):
self._message = msg
- event.Event.__init__(self, d)
+ event.Event.__init__(self)
class MsgDebug(MsgBase):
"""Debug Message"""
@@ -100,26 +100,26 @@ def debug(level, domain, msg, fn = None):
if not domain:
domain = 'default'
if debug_level[domain] >= level:
- bb.event.fire(MsgDebug(msg, None))
+ bb.event.fire(MsgDebug(msg), None)
def note(level, domain, msg, fn = None):
if not domain:
domain = 'default'
if level == 1 or verbose or debug_level[domain] >= 1:
- bb.event.fire(MsgNote(msg, None))
+ bb.event.fire(MsgNote(msg), None)
def warn(domain, msg, fn = None):
- bb.event.fire(MsgWarn(msg, None))
+ bb.event.fire(MsgWarn(msg), None)
def error(domain, msg, fn = None):
- bb.event.fire(MsgError(msg, None))
+ bb.event.fire(MsgError(msg), None)
print 'ERROR: ' + msg
def fatal(domain, msg, fn = None):
- bb.event.fire(MsgFatal(msg, None))
+ bb.event.fire(MsgFatal(msg), None)
print 'FATAL: ' + msg
sys.exit(1)
def plain(msg, fn = None):
- bb.event.fire(MsgPlain(msg, None))
+ bb.event.fire(MsgPlain(msg), None)
diff --git a/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py b/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py
index f0c3409568..f34599136c 100644
--- a/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py
+++ b/bitbake-dev/lib/bb/parse/parse_py/BBHandler.py
@@ -114,7 +114,7 @@ def finalise(fn, d):
tasklist = data.getVar('__BBTASKS', d) or []
bb.build.add_tasks(tasklist, d)
- bb.event.fire(bb.event.RecipeParsed(fn, d))
+ bb.event.fire(bb.event.RecipeParsed(fn), d)
def handle(fn, d, include = 0):
diff --git a/bitbake-dev/lib/bb/parse/parse_py/ConfHandler.py b/bitbake-dev/lib/bb/parse/parse_py/ConfHandler.py
index c9f1ea13fb..23316ada58 100644
--- a/bitbake-dev/lib/bb/parse/parse_py/ConfHandler.py
+++ b/bitbake-dev/lib/bb/parse/parse_py/ConfHandler.py
@@ -34,10 +34,17 @@ __require_regexp__ = re.compile( r"require\s+(.+)" )
__export_regexp__ = re.compile( r"export\s+(.+)" )
def init(data):
- if not bb.data.getVar('TOPDIR', data):
- bb.data.setVar('TOPDIR', os.getcwd(), data)
+ topdir = bb.data.getVar('TOPDIR', data)
+ if not topdir:
+ topdir = os.getcwd()
+ bb.data.setVar('TOPDIR', topdir, data)
if not bb.data.getVar('BBPATH', data):
- bb.data.setVar('BBPATH', os.path.join(sys.prefix, 'share', 'bitbake'), data)
+ from pkg_resources import Requirement, resource_filename
+ bitbake = Requirement.parse("bitbake")
+ datadir = resource_filename(bitbake, "../share/bitbake")
+ basedir = resource_filename(bitbake, "..")
+ bb.data.setVar('BBPATH', '%s:%s:%s' % (topdir, datadir, basedir), data)
+
def supports(fn, d):
return localpath(fn, d)[-5:] == ".conf"
diff --git a/bitbake-dev/lib/bb/runqueue.py b/bitbake-dev/lib/bb/runqueue.py
index 8b6e12d185..c3ad442e47 100644
--- a/bitbake-dev/lib/bb/runqueue.py
+++ b/bitbake-dev/lib/bb/runqueue.py
@@ -857,6 +857,7 @@ class RunQueue:
self.runq_running = []
self.runq_complete = []
self.build_pids = {}
+ self.build_pipes = {}
self.failed_fnids = []
# Mark initial buildable tasks
@@ -870,7 +871,7 @@ class RunQueue:
self.state = runQueueRunning
- event.fire(bb.event.StampUpdate(self.target_pairs, self.dataCache.stamp, self.cfgData))
+ event.fire(bb.event.StampUpdate(self.target_pairs, self.dataCache.stamp), self.cfgData)
def task_complete(self, task):
"""
@@ -903,7 +904,7 @@ class RunQueue:
self.stats.taskFailed()
fnid = self.runq_fnid[task]
self.failed_fnids.append(fnid)
- bb.event.fire(runQueueTaskFailed(task, self.stats, self, self.cfgData))
+ bb.event.fire(runQueueTaskFailed(task, self.stats, self), self.cfgData)
if self.taskData.abort:
self.state = runQueueCleanup
@@ -935,53 +936,67 @@ class RunQueue:
sys.stdout.flush()
sys.stderr.flush()
- try:
+ try:
+ pipein, pipeout = os.pipe()
pid = os.fork()
except OSError, e:
bb.msg.fatal(bb.msg.domain.RunQueue, "fork failed: %d (%s)" % (e.errno, e.strerror))
if pid == 0:
+ os.close(pipein)
# Save out the PID so that the event can include it the
# events
bb.event.worker_pid = os.getpid()
+ bb.event.worker_pipe = pipeout
- bb.event.fire(runQueueTaskStarted(task, self.stats, self, self.cfgData))
- bb.msg.note(1, bb.msg.domain.RunQueue,
- "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.stats.active + 1,
- self.stats.total,
- task,
- self.get_user_idstring(task)))
self.state = runQueueChildProcess