diff options
Diffstat (limited to 'meta/classes/package_pkgdata.bbclass')
-rw-r--r-- | meta/classes/package_pkgdata.bbclass | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/meta/classes/package_pkgdata.bbclass b/meta/classes/package_pkgdata.bbclass deleted file mode 100644 index a1ea8fc041..0000000000 --- a/meta/classes/package_pkgdata.bbclass +++ /dev/null @@ -1,167 +0,0 @@ -WORKDIR_PKGDATA = "${WORKDIR}/pkgdata-sysroot" - -def package_populate_pkgdata_dir(pkgdatadir, d): - import glob - - postinsts = [] - seendirs = set() - stagingdir = d.getVar("PKGDATA_DIR") - pkgarchs = ['${MACHINE_ARCH}'] - pkgarchs = pkgarchs + list(reversed(d.getVar("PACKAGE_EXTRA_ARCHS").split())) - pkgarchs.append('allarch') - - bb.utils.mkdirhier(pkgdatadir) - for pkgarch in pkgarchs: - for manifest in glob.glob(d.expand("${SSTATE_MANIFESTS}/manifest-%s-*.packagedata" % pkgarch)): - with open(manifest, "r") as f: - for l in f: - l = l.strip() - dest = l.replace(stagingdir, "") - if l.endswith("/"): - staging_copydir(l, pkgdatadir, dest, seendirs) - continue - try: - staging_copyfile(l, pkgdatadir, dest, postinsts, seendirs) - except FileExistsError: - continue - -python package_prepare_pkgdata() { - import copy - import glob - - taskdepdata = d.getVar("BB_TASKDEPDATA", False) - mytaskname = d.getVar("BB_RUNTASK") - if mytaskname.endswith("_setscene"): - mytaskname = mytaskname.replace("_setscene", "") - workdir = d.getVar("WORKDIR") - pn = d.getVar("PN") - stagingdir = d.getVar("PKGDATA_DIR") - pkgdatadir = d.getVar("WORKDIR_PKGDATA") - - # Detect bitbake -b usage - nodeps = d.getVar("BB_LIMITEDDEPS") or False - if nodeps: - staging_package_populate_pkgdata_dir(pkgdatadir, d) - return - - start = None - configuredeps = [] - for dep in taskdepdata: - data = taskdepdata[dep] - if data[1] == mytaskname and data[0] == pn: - start = dep - break - if start is None: - bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?") - - # We need to figure out which sysroot files we need to expose to this task. - # This needs to match what would get restored from sstate, which is controlled - # ultimately by calls from bitbake to setscene_depvalid(). - # That function expects a setscene dependency tree. We build a dependency tree - # condensed to inter-sstate task dependencies, similar to that used by setscene - # tasks. We can then call into setscene_depvalid() and decide - # which dependencies we can "see" and should expose in the recipe specific sysroot. - setscenedeps = copy.deepcopy(taskdepdata) - - start = set([start]) - - sstatetasks = d.getVar("SSTATETASKS").split() - # Add recipe specific tasks referenced by setscene_depvalid() - sstatetasks.append("do_stash_locale") - - # If start is an sstate task (like do_package) we need to add in its direct dependencies - # else the code below won't recurse into them. - for dep in set(start): - for dep2 in setscenedeps[dep][3]: - start.add(dep2) - start.remove(dep) - - # Create collapsed do_populate_sysroot -> do_populate_sysroot tree - for dep in taskdepdata: - data = setscenedeps[dep] - if data[1] not in sstatetasks: - for dep2 in setscenedeps: - data2 = setscenedeps[dep2] - if dep in data2[3]: - data2[3].update(setscenedeps[dep][3]) - data2[3].remove(dep) - if dep in start: - start.update(setscenedeps[dep][3]) - start.remove(dep) - del setscenedeps[dep] - - # Remove circular references - for dep in setscenedeps: - if dep in setscenedeps[dep][3]: - setscenedeps[dep][3].remove(dep) - - # Direct dependencies should be present and can be depended upon - for dep in set(start): - if setscenedeps[dep][1] == "do_packagedata": - if dep not in configuredeps: - configuredeps.append(dep) - - msgbuf = [] - # Call into setscene_depvalid for each sub-dependency and only copy sysroot files - # for ones that would be restored from sstate. - done = list(start) - next = list(start) - while next: - new = [] - for dep in next: - data = setscenedeps[dep] - for datadep in data[3]: - if datadep in done: - continue - taskdeps = {} - taskdeps[dep] = setscenedeps[dep][:2] - taskdeps[datadep] = setscenedeps[datadep][:2] - retval = setscene_depvalid(datadep, taskdeps, [], d, msgbuf) - done.append(datadep) - new.append(datadep) - if retval: - msgbuf.append("Skipping setscene dependency %s" % datadep) - continue - if datadep not in configuredeps and setscenedeps[datadep][1] == "do_packagedata": - configuredeps.append(datadep) - msgbuf.append("Adding dependency on %s" % setscenedeps[datadep][0]) - else: - msgbuf.append("Following dependency on %s" % setscenedeps[datadep][0]) - next = new - - # This logging is too verbose for day to day use sadly - #bb.debug(2, "\n".join(msgbuf)) - - seendirs = set() - postinsts = [] - multilibs = {} - manifests = {} - - msg_adding = [] - - for dep in configuredeps: - c = setscenedeps[dep][0] - msg_adding.append(c) - - manifest, d2 = oe.sstatesig.find_sstate_manifest(c, setscenedeps[dep][2], "packagedata", d, multilibs) - destsysroot = pkgdatadir - - if manifest: - targetdir = destsysroot - with open(manifest, "r") as f: - manifests[dep] = manifest - for l in f: - l = l.strip() - dest = targetdir + l.replace(stagingdir, "") - if l.endswith("/"): - staging_copydir(l, targetdir, dest, seendirs) - continue - staging_copyfile(l, targetdir, dest, postinsts, seendirs) - - bb.note("Installed into pkgdata-sysroot: %s" % str(msg_adding)) - -} -package_prepare_pkgdata[cleandirs] = "${WORKDIR_PKGDATA}" -package_prepare_pkgdata[vardepsexclude] += "MACHINE_ARCH PACKAGE_EXTRA_ARCHS SDK_ARCH BUILD_ARCH SDK_OS BB_TASKDEPDATA SSTATETASKS" - - |