summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/jhbuild/rewrite.py74
1 files changed, 64 insertions, 10 deletions
diff --git a/scripts/jhbuild/rewrite.py b/scripts/jhbuild/rewrite.py
index 7200a195c..ecd644486 100755
--- a/scripts/jhbuild/rewrite.py
+++ b/scripts/jhbuild/rewrite.py
@@ -153,8 +153,10 @@ class Handlers(object):
def metamodule(self, element, parent):
# grab the deps
- dependlist = [child for child in element if child.tag == "dependencies"]
- deps = [self.packagename(dep.attrib.get('package')) for dep in dependlist[0] if child.tag == "dep"]
+ deps = None
+ for child in element:
+ if child.tag == 'dependencies':
+ deps = [self.packagename(dep.attrib.get('package')) for dep in child if dep.tag == "dep"]
# create the package
d = bb.data.init()
@@ -193,20 +195,55 @@ class Handlers(object):
bb.data.setVar('S', os.path.join('${WORKDIR}', checkoutdir), d)
# build class
- bb.data.setVar('INCLUDES', 'autotools', d)
- bb.data.setVarFlag('INCLUDES', 'operator', '+=', d)
+ bb.data.setVar('INHERITS', 'autotools', d)
+ bb.data.setVarFlag('INHERITS', 'operator', '+=', d)
bb.data.setVar('_handler', 'autotools', d)
self.packages.append(d)
class Emitter(object):
"""
- Class to take a Handlers object after processing and emit the
- bitbake files from the metadata. It supports either emitting
- the data as is, using templates based on package name, and using
- templates based on the name of handler / xml element associated
- with the package itself.
+ Class which contains a single method for the emission of a bitbake
+ package from the bitbake data produced by a Handlers object.
"""
+ def __init__(self, filefunc = None, basedir = None):
+ def _defaultfilefunc(package):
+ # return a relative path to the bitbake .bb which will be written
+ return bb.data.getVar('PN', package, 1) + '.bb'
+
+ self.filefunc = filefunc or _defaultfilefunc
+ self.basedir = basedir or os.path.abspath(os.curdir)
+
+ def write(self, package, template = None):
+ # 1) Assemble new file contents in ram, either new from bitbake
+ # metadata, or a combination of the template and that metadata.
+ # 2) Open the path returned by the filefunc + the basedir for writing.
+ # 3) Write the new bitbake data file.
+ fdata = ''
+ if template:
+ f = file(template, 'r')
+ fdata = f.read()
+ f.close()
+
+ for key in bb.data.keys(package):
+ fdata.replace('@@'+key+'@@', bb.data.getVar(key, package))
+ else:
+ for key in bb.data.keys(package):
+ if key == '_handler':
+ continue
+ elif key == 'INHERITS':
+ fdata += 'inherit %s\n' % bb.data.getVar('INHERITS', package)
+ else:
+ oper = bb.data.getVarFlag(key, 'operator', package) or '='
+ fdata += '%s %s "%s"\n' % (key, oper, bb.data.getVar(key, package))
+
+ if not os.path.exists(os.path.join(self.basedir, os.path.dirname(self.filefunc(package)))):
+ os.makedirs(os.path.join(self.basedir, os.path.dirname(self.filefunc(package))))
+
+ out = file(os.path.join(self.basedir, self.filefunc(package)), 'w')
+ out.write(fdata)
+ out.close()
+
def _test():
msfile = os.path.join(os.path.abspath(os.curdir), 'modulesets', moduleset)
tree = ElementTree.ElementTree(file=msfile)
@@ -215,8 +252,25 @@ def _test():
handlers = Handlers(msfile)
handlers.handle(elem, None)
+ def filefunc(package):
+ # return a relative path to the bitbake .bb which will be written
+ src_uri = bb.data.getVar('SRC_URI', package, 1)
+ filename = bb.data.getVar('PN', package, 1) + '.bb'
+ if not src_uri:
+ return filename
+ else:
+ substr = src_uri[src_uri.find('xorg/'):]
+ subdirlist = substr.split('/')[:2]
+ subdir = '-'.join(subdirlist)
+ return os.path.join(subdir, filename)
+
+ emitter = Emitter(filefunc)
for package in handlers.packages:
- print(bb.data.getVar('PN', package))
+ template = os.path.join(emitter.filefunc(package), '.in')
+ if os.path.exists(template):
+ emitter.write(package, template)
+ else:
+ emitter.write(package)
if __name__ == "__main__":
_test()