summaryrefslogtreecommitdiffstats
path: root/classes/packaged-staging.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'classes/packaged-staging.bbclass')
-rw-r--r--classes/packaged-staging.bbclass110
1 files changed, 63 insertions, 47 deletions
diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass
index 85f08ee143..8292853ffb 100644
--- a/classes/packaged-staging.bbclass
+++ b/classes/packaged-staging.bbclass
@@ -30,16 +30,8 @@ BB_STAMP_WHITELIST = "${PSTAGE_NATIVEDEPENDS}"
python __anonymous() {
pstage_allowed = True
-
- # We need PSTAGE_PKGARCH to contain information about the target.
- if bb.data.inherits_class('cross', d):
- bb.data.setVar('PSTAGE_PKGARCH', "${HOST_SYS}-${PACKAGE_ARCH}-${TARGET_OS}", d)
-
- # These classes encode staging paths data files so we must mangle them
- # for reuse.
- if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('sdk', d):
- scan_cmd = "grep -Irl ${STAGING_DIR} ${PSTAGE_TMPDIR_STAGE}"
- bb.data.setVar('PSTAGE_SCAN_CMD', scan_cmd, d)
+ pstage_host_mangle = False
+ pstage_is_cross = False
# PSTAGE_NATIVEDEPENDS lists the packages we need before we can use
# packaged staging. There will always be some packages we depend on.
@@ -59,6 +51,27 @@ python __anonymous() {
if localdata.getVar('PSTAGING_DISABLED', True) == "1":
pstage_allowed = False
+ # libtool-cross does not inherit cross.
+ if localdata.getVar('PN', True).startswith("libtool-cross"):
+ pstage_host_mangle = True
+ pstage_is_cross = True
+
+ # We need PSTAGE_PKGARCH to contain information about the target.
+ if bb.data.inherits_class('cross', d):
+ pstage_host_mangle = True
+
+ if pstage_host_mangle:
+ bb.data.setVar('PSTAGE_PKGARCH', "${HOST_SYS}-${PACKAGE_ARCH}-${TARGET_OS}", d)
+
+ # These classes encode staging paths data files so we must mangle them
+ # for reuse.
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('sdk', d):
+ pstage_is_cross = True
+
+ if pstage_is_cross:
+ scan_cmd = "grep -Irl ${TMPDIR} ${PSTAGE_TMPDIR_STAGE}"
+ bb.data.setVar('PSTAGE_SCAN_CMD', scan_cmd, d)
+
# Add task dependencies if we're active, otherwise mark packaged staging
# as inactive.
if pstage_allowed:
@@ -94,7 +107,7 @@ def pstage_manualclean(srcname, destvarname, d):
dest = bb.data.getVar(destvarname, d, True)
for walkroot, dirs, files in os.walk(src):
- bb.debug("rm %s" % walkroot)
+ bb.debug(2, "rm %s" % walkroot)
for file in files:
# Avoid breaking the held lock
if (file == "staging.lock"):
@@ -112,25 +125,26 @@ def pstage_set_pkgmanager(d):
def pstage_cleanpackage(pkgname, d):
- path = bb.data.getVar("PATH", d, 1)
- pstage_set_pkgmanager(d)
- list_cmd = bb.data.getVar("PSTAGE_LIST_CMD", d, True)
-
- bb.debug(2, "Checking if staging package installed")
- lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d))
- ret = os.system("PATH=\"%s\" %s | grep %s" % (path, list_cmd, pkgname))
- if ret == 0:
- bb.debug(1, "Uninstalling package from staging...")
- removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1)
- ret = os.system("PATH=\"%s\" %s %s" % (path, removecmd, pkgname))
- if ret != 0:
- bb.note("Failure removing staging package")
- else:
- bb.debug(1, "Manually removing any installed files from staging...")
- pstage_manualclean("sysroots", "STAGING_DIR", d)
- pstage_manualclean("deploy", "DEPLOY_DIR", d)
-
- bb.utils.unlockfile(lf)
+ pstage_set_pkgmanager(d)
+ list_cmd = bb.data.getVar("PSTAGE_LIST_CMD", d, True)
+
+ bb.debug(2, "Checking if staging package installed")
+ lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d))
+ try:
+ oe_run(d, "%s | grep %s" % (list_cmd, pkgname))
+ except RuntimeError:
+ bb.debug(1, "Manually removing any installed files from staging...")
+ pstage_manualclean("sysroots", "STAGING_DIR", d)
+ pstage_manualclean("deploy", "DEPLOY_DIR", d)
+ else:
+ bb.debug(1, "Uninstalling package from staging...")
+ removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1)
+ try:
+ oe_run(d, "%s %s" % (removecmd, pkgname))
+ except RuntimeError:
+ bb.note("Failure removing staging package")
+
+ bb.utils.unlockfile(lf)
do_clean_prepend() {
"""
@@ -208,7 +222,6 @@ python packagestage_scenefunc () {
staging_fetch(stagepkg, d)
if os.path.exists(stagepkg):
- path = bb.data.getVar("PATH", d, 1)
pstage_set_pkgmanager(d)
file = bb.data.getVar("FILE", d, True)
bb.debug(2, "Packaged staging active for %s\n" % file)
@@ -218,8 +231,9 @@ python packagestage_scenefunc () {
#
bb.mkdirhier(bb.data.expand("${WORKDIR}/tstage/${libdir_native}/opkg/info/ ", d))
cmd = bb.data.expand("${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -force-depends -o ${WORKDIR}/tstage install", d)
- ret = os.system("PATH=\"%s\" %s %s" % (path, cmd, stagepkg))
- if ret != 0:
+ try:
+ oe_run(d, "%s %s" % (cmd, stagepkg))
+ except RuntimeError:
bb.fatal("Couldn't install the staging package to a temp directory")
#
@@ -234,14 +248,15 @@ python packagestage_scenefunc () {
# Copy the stamp files into the main stamps directoy
#
cmd = bb.data.expand("cp -dpR ${WORKDIR}/tstage/stamps/* ${TMPDIR}/stamps/", d)
- ret = os.system(cmd)
- if ret != 0:
+ try:
+ ret = oe_run(d, cmd)
+ except RuntimeError:
bb.utils.unlockfile(lf)
bb.fatal("Couldn't copy the staging package stamp files")
#
# Iterate over the stamps seeing if they're valid. If we find any that
- # are invalid or the task wasn't in the taskgraph, assume caution and
+ # are invalid or the task wasn't in the taskgraph, assume caution and
# do a rebuild.
#
# FIXME - some tasks are safe to ignore in the task graph. e.g. package_write_*
@@ -268,10 +283,12 @@ python packagestage_scenefunc () {
if stageok:
bb.note("Staging package found, using it for %s." % file)
installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1)
- ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg))
- bb.utils.unlockfile(lf)
- if ret != 0:
+ try:
+ ret = oe_run(d, "%s %s" % (installcmd, stagepkg))
+ except RuntimeError:
bb.note("Failure installing prestage package")
+ finally:
+ bb.utils.unlockfile(lf)
bb.build.exec_func("staging_package_libtoolhack", d)
@@ -350,7 +367,7 @@ staging_packager () {
echo "Priority: Optional" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
echo "Maintainer: ${MAINTAINER}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
echo "Architecture: ${PSTAGE_PKGARCH}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control
-
+
# Protect against empty SRC_URI
srcuri="${SRC_URI}"
if [ "$srcuri" == "" ]; then
@@ -366,7 +383,7 @@ staging_packager () {
sed -i -e s:${STAGING_DIR}:FIXMESTAGINGDIR:g $i
echo $i | sed -e 's:${PSTAGE_TMPDIR_STAGE}/::' >> ${PSTAGE_TMPDIR_STAGE}/sysroots/fixmepath
done
-
+
${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${PSTAGE_DIR}/${PSTAGE_PKGPATH}
}
@@ -401,7 +418,7 @@ python staging_package_libtoolhack () {
fixmefd.close()
oe.path.remove(fixmefn)
for file in fixmefiles:
- os.system("sed -i -e s:FIXMESTAGINGDIR:%s:g %s" % (staging, tmpdir + '/' + file))
+ oe_run(d, "sed -i -e s:FIXMESTAGINGDIR:%s:g %s" % (staging, tmpdir + '/' + file))
except IOError:
pass
}
@@ -438,12 +455,11 @@ python do_package_stage () {
if not packaged(pkg, d):
continue
if bb.data.inherits_class('package_ipk', d):
- srcname = bb.data.expand(pkgname + "_${PV}-" + pr + "${DISTRO_PR}" + "_" + arch + ".ipk", d)
+ srcname = bb.data.expand(pkgname + "_${PKGV}-" + pr + "${DISTRO_PR}" + "_" + arch + ".ipk", d)
srcfile = bb.data.expand("${DEPLOY_DIR_IPK}/" + arch + "/" + srcname, d)
if os.path.exists(srcfile):
destpath = ipkpath + "/" + arch + "/"
bb.mkdirhier(destpath)
- print destpath
bb.copyfile(srcfile, destpath + srcname)
if bb.data.inherits_class('package_deb', d):
@@ -453,7 +469,7 @@ python do_package_stage () {
srcname = bb.data.expand(pkgname + "_${PV}-" + pr + "${DISTRO_PR}" + "_${DPKG_ARCH}.deb", d)
srcfile = bb.data.expand("${DEPLOY_DIR_DEB}/" + arch + "/" + srcname, d)
if os.path.exists(srcfile):
- destpath = debpath + "/" + arch + "/"
+ destpath = debpath + "/" + arch + "/"
bb.mkdirhier(destpath)
bb.copyfile(srcfile, destpath + srcname)
@@ -464,7 +480,7 @@ python do_package_stage () {
srcname = bb.data.expand(pkgname + "-${RPMPV}-" + pr + "${DISTRO_PR}" + ".${TARGET_ARCH}.rpm", d)
srcfile = bb.data.expand("${DEPLOY_DIR_RPM}/" + arch + "/" + srcname, d)
if os.path.exists(srcfile):
- destpath = rpmpath + "/" + arch + "/"
+ destpath = rpmpath + "/" + arch + "/"
bb.mkdirhier(destpath)
bb.copyfile(srcfile, destpath + srcname)
@@ -477,7 +493,7 @@ python do_package_stage () {
bb.mkdirhier(destdir)
# We need to include the package_stage stamp in the staging package so create one
bb.build.make_stamp("do_package_stage", d)
- os.system("cp -dpR %s.do_* %s/" % (stampfn, destdir))
+ oe_run(d, "cp -dpR %s.do_* %s/" % (stampfn, destdir))
pstage_set_pkgmanager(d)
bb.build.exec_func("staging_helper", d)