summaryrefslogtreecommitdiff
path: root/meta/classes/sstate.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/sstate.bbclass')
-rw-r--r--meta/classes/sstate.bbclass63
1 files changed, 26 insertions, 37 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index ada6fe5986..ddc442cdf9 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -25,15 +25,13 @@ PV[vardepvalue] = "${PV}"
SSTATE_EXTRAPATH[vardepvalue] = ""
# For multilib rpm the allarch packagegroup files can overwrite (in theory they're identical)
-SSTATE_DUPWHITELIST = "${DEPLOY_DIR_IMAGE}/ ${DEPLOY_DIR}/licenses/ ${DEPLOY_DIR_RPM}/all/"
+SSTATE_DUPWHITELIST = "${DEPLOY_DIR_IMAGE}/ ${DEPLOY_DIR}/licenses/ ${DEPLOY_DIR_RPM}/noarch/"
# Avoid docbook/sgml catalog warnings for now
SSTATE_DUPWHITELIST += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
# Archive the sources for many architectures in one deploy folder
SSTATE_DUPWHITELIST += "${DEPLOY_DIR_SRC}"
-# Ignore overlapping README
-SSTATE_DUPWHITELIST += "${DEPLOY_DIR}/sdk/README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt"
-SSTATE_SCAN_FILES ?= "*.la *-config *_config"
+SSTATE_SCAN_FILES ?= "*.la *-config *_config postinst-*"
SSTATE_SCAN_CMD ??= 'find ${SSTATE_BUILDDIR} \( -name "${@"\" -o -name \"".join(d.getVar("SSTATE_SCAN_FILES").split())}" \) -type f'
SSTATE_SCAN_CMD_NATIVE ??= 'grep -Irl -e ${RECIPE_SYSROOT} -e ${RECIPE_SYSROOT_NATIVE} ${SSTATE_BUILDDIR}'
@@ -56,7 +54,7 @@ SSTATEPOSTCREATEFUNCS = ""
SSTATEPREINSTFUNCS = ""
SSTATEPOSTUNPACKFUNCS = "sstate_hardcode_path_unpack"
SSTATEPOSTINSTFUNCS = ""
-EXTRA_STAGING_FIXMES ?= ""
+EXTRA_STAGING_FIXMES ?= "HOSTTOOLS_DIR"
SSTATECLEANFUNCS = ""
# Check whether sstate exists for tasks that support sstate and are in the
@@ -315,6 +313,11 @@ def sstate_installpkg(ss, d):
if not signer.verify(sstatepkg + '.sig'):
bb.warn("Cannot verify signature on sstate package %s" % sstatepkg)
+ # Empty sstateinst directory, ensure its clean
+ if os.path.exists(sstateinst):
+ oe.path.remove(sstateinst)
+ bb.utils.mkdirhier(sstateinst)
+
sstateinst = d.getVar("SSTATE_INSTDIR")
d.setVar('SSTATE_FIXMEDIR', ss['fixmedir'])
@@ -583,29 +586,6 @@ python sstate_hardcode_path () {
def sstate_package(ss, d):
import oe.path
- def make_relative_symlink(path, outputpath, d):
- # Replace out absolute TMPDIR paths in symlinks with relative ones
- if not os.path.islink(path):
- return
- link = os.readlink(path)
- if not os.path.isabs(link):
- return
- if not link.startswith(tmpdir):
- return
-
- #base = os.path.relpath(link, os.path.dirname(path))
-
- depth = outputpath.rpartition(tmpdir)[2].count('/')
- base = link.partition(tmpdir)[2].strip()
- while depth > 1:
- base = "/.." + base
- depth -= 1
- base = "." + base
-
- bb.debug(2, "Replacing absolute path %s with relative path %s for %s" % (link, base, outputpath))
- os.remove(path)
- os.symlink(base, path)
-
tmpdir = d.getVar('TMPDIR')
sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task'])
@@ -619,15 +599,20 @@ def sstate_package(ss, d):
if d.getVar('SSTATE_SKIP_CREATION') == '1':
continue
srcbase = state[0].rstrip("/").rsplit('/', 1)[0]
+ # Find and error for absolute symlinks. We could attempt to relocate but its not
+ # clear where the symlink is relative to in this context. We could add that markup
+ # to sstate tasks but there aren't many of these so better just avoid them entirely.
for walkroot, dirs, files in os.walk(state[1]):
- for file in files:
+ for file in files + dirs:
srcpath = os.path.join(walkroot, file)
- dstpath = srcpath.replace(state[1], state[2])
- make_relative_symlink(srcpath, dstpath, d)
- for dir in dirs:
- srcpath = os.path.join(walkroot, dir)
- dstpath = srcpath.replace(state[1], state[2])
- make_relative_symlink(srcpath, dstpath, d)
+ if not os.path.islink(srcpath):
+ continue
+ link = os.readlink(srcpath)
+ if not os.path.isabs(link):
+ continue
+ if not link.startswith(tmpdir):
+ continue
+ bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link))
bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0]))
os.rename(state[1], sstatebuild + state[0])
@@ -663,7 +648,6 @@ def pstaging_fetch(sstatefetch, sstatepkg, d):
# Copy the data object and override DL_DIR and SRC_URI
localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
dldir = localdata.expand("${SSTATE_DIR}")
bb.utils.mkdirhier(dldir)
@@ -768,6 +752,8 @@ python sstate_sign_package () {
#
sstate_unpack_package () {
tar -xvzf ${SSTATE_PKG}
+ # update .siginfo atime on local/NFS mirror
+ [ -w ${SSTATE_PKG}.siginfo ] && [ -h ${SSTATE_PKG}.siginfo ] && touch -a ${SSTATE_PKG}.siginfo
# Use "! -w ||" to return true for read only files
[ ! -w ${SSTATE_PKG} ] || touch --no-dereference ${SSTATE_PKG}
[ ! -w ${SSTATE_PKG}.sig ] || [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig
@@ -820,7 +806,6 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False):
if mirrors:
# Copy the data object and override DL_DIR and SRC_URI
localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
dldir = localdata.expand("${SSTATE_DIR}")
localdata.delVar('MIRRORS')
@@ -930,6 +915,10 @@ def setscene_depvalid(task, taskdependees, notneeded, d, log=None):
if taskdependees[task][1] == "do_populate_lic":
return True
+ # stash_locale and gcc_stash_builddir are never needed as a dependency for built objects
+ if taskdependees[task][1] == "do_stash_locale" or taskdependees[task][1] == "do_gcc_stash_builddir":
+ return True
+
# We only need to trigger packagedata through direct dependencies
# but need to preserve packagedata on packagedata links
if taskdependees[task][1] == "do_packagedata":