Restructure the subpackage metadata to facilitate use of that metadata by other packages.
authorChris Larson <clarson@kergoth.com>
Fri, 15 Sep 2006 07:36:48 +0000 (07:36 +0000)
committerChris Larson <clarson@kergoth.com>
Fri, 15 Sep 2006 07:36:48 +0000 (07:36 +0000)
classes/base.bbclass
classes/package.bbclass
classes/package_ipk.bbclass
classes/package_tar.bbclass

index bb4abb9..0a28194 100644 (file)
@@ -631,24 +631,60 @@ python read_shlibdeps () {
                bb.data.setVar('RDEPENDS_' + pkg, " " + " ".join(rdepends), d)
 }
 
-python read_subpackage_metadata () {
-       import re
+def read_pkgdatafile(fn):
+       pkgdata = {}
 
        def decode(str):
                import codecs
                c = codecs.getdecoder("string_escape")
                return c(str)[0]
 
-       data_file = bb.data.expand("${WORKDIR}/install/${PN}.package", d)
-       if os.access(data_file, os.R_OK):
-               f = file(data_file, 'r')
+       import os
+       if os.access(fn, os.R_OK):
+               import re
+               f = file(fn, 'r')
                lines = f.readlines()
                f.close()
                r = re.compile("([^:]+):\s*(.*)")
                for l in lines:
                        m = r.match(l)
                        if m:
-                               bb.data.setVar(m.group(1), decode(m.group(2)), d)
+                               pkgdata[m.group(1)] = decode(m.group(2))
+
+       return pkgdata
+
+def has_subpkgdata(pkg, d):
+       import bb, os
+       fn = bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s' % pkg, d)
+       return os.access(fn, os.R_OK)
+
+def read_subpkgdata(pkg, d):
+       import bb, os
+       fn = bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s' % pkg, d)
+       return read_pkgdatafile(fn)
+
+
+def has_pkgdata(pn, d):
+       import bb, os
+       fn = bb.data.expand('${STAGING_DIR}/pkgdata/%s' % pn, d)
+       return os.access(fn, os.R_OK)
+
+def read_pkgdata(pn, d):
+       import bb, os
+       fn = bb.data.expand('${STAGING_DIR}/pkgdata/%s' % pn, d)
+       return read_pkgdatafile(fn)
+
+python read_subpackage_metadata () {
+       import bb
+       data = read_pkgdata(bb.data.getVar('PN', d, 1), d)
+
+       for key in data.keys():
+               bb.data.setVar(key, data[key], d)
+
+       for pkg in bb.data.getVar('PACKAGES', d, 1).split():
+               sdata = read_subpkgdata(pkg, d)
+               for key in sdata.keys():
+                       bb.data.setVar(key, sdata[key], d)
 }
 
 python __anonymous () {
index 3c6d97d..964cc67 100644 (file)
@@ -401,21 +401,25 @@ python populate_packages () {
                if val:
                        f.write('%s_%s: %s\n' % (var, pkg, encode(val)))
 
-       data_file = os.path.join(workdir, "install", pn + ".package")
+       data_file = bb.data.expand("${STAGING_DIR}/pkgdata/${PN}", d)
        f = open(data_file, 'w')
        f.write("PACKAGES: %s\n" % packages)
-       for pkg in package_list:
-               write_if_exists(f, pkg, 'DESCRIPTION')
-               write_if_exists(f, pkg, 'RDEPENDS')
-               write_if_exists(f, pkg, 'RPROVIDES')
-               write_if_exists(f, pkg, 'PKG')
-               write_if_exists(f, pkg, 'ALLOW_EMPTY')
-               write_if_exists(f, pkg, 'FILES')
-               write_if_exists(f, pkg, 'pkg_postinst')
-               write_if_exists(f, pkg, 'pkg_postrm')
-               write_if_exists(f, pkg, 'pkg_preinst')
-               write_if_exists(f, pkg, 'pkg_prerm')
        f.close()
+
+       for pkg in package_list:
+               subdata_file = bb.data.expand("${STAGING_DIR}/pkgdata/runtime/%s" % pkg, d)
+               sf = open(subdata_file, 'w')
+               write_if_exists(sf, pkg, 'DESCRIPTION')
+               write_if_exists(sf, pkg, 'RDEPENDS')
+               write_if_exists(sf, pkg, 'RPROVIDES')
+               write_if_exists(sf, pkg, 'PKG')
+               write_if_exists(sf, pkg, 'ALLOW_EMPTY')
+               write_if_exists(sf, pkg, 'FILES')
+               write_if_exists(sf, pkg, 'pkg_postinst')
+               write_if_exists(sf, pkg, 'pkg_postrm')
+               write_if_exists(sf, pkg, 'pkg_preinst')
+               write_if_exists(sf, pkg, 'pkg_prerm')
+               sf.close()
        bb.build.exec_func("read_subpackage_metadata", d)
 }
 
@@ -741,6 +745,6 @@ python package_do_package () {
 do_package[dirs] = "${D}"
 # shlibs requires any DEPENDS to have already packaged for the *.list files
 do_package[deptask] = "do_package"
-populate_packages[dirs] = "${D}"
+populate_packages[dirs] = "${STAGING_DIR}/pkgdata/runtime ${D}"
 EXPORT_FUNCTIONS do_package do_shlibs do_split_locales mapping_rename_hook
 addtask package before do_build after do_install
index 9ae526b..0cb5128 100644 (file)
@@ -129,6 +129,7 @@ python do_package_ipk () {
                        from bb import note
                        note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1)))
                        continue
+
                controldir = os.path.join(root, 'CONTROL')
                bb.mkdirhier(controldir)
                try:
@@ -220,6 +221,8 @@ python do_package_ipk () {
                if ret != 0:
                        raise bb.build.FuncFailed("ipkg-build execution failed")
 
+               file(bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s.packaged' % pkg, d), 'w').close()
+
                for script in ["preinst", "postinst", "prerm", "postrm", "control" ]:
                        scriptfile = os.path.join(controldir, script)
                        try:
index 359e35f..63e82f7 100644 (file)
@@ -94,6 +94,9 @@ python do_package_tar () {
                ret = os.system("tar -czvf %s %s" % (tarfn, '.'))
                if ret != 0:
                        bb.error("Creation of tar %s failed." % tarfn)
+
+               file(bb.data.expand('${STAGING_DIR}/pkgdata/runtime/%s.packaged' % pkg, d), 'w').close()
+
 # end stuff
                del localdata
 }