2012-11-14 23:32:56 +00:00
SSTATE_VERSION = "3"
2010-08-04 10:34:18 +00:00
2011-04-07 06:53:44 +00:00
SSTATE_MANIFESTS ?= "${TMPDIR}/sstate-control"
2012-12-14 15:39:08 +00:00
SSTATE_MANFILEPREFIX = "${SSTATE_MANIFESTS}/manifest-${SSTATE_MANMACH}-${PN}"
2010-11-02 13:18:07 +00:00
2012-07-24 12:37:01 +00:00
def generate_sstatefn(spec, hash, d):
if not hash:
hash = "INVALID"
return hash[:2] + "/" + spec + hash
2010-08-04 10:34:18 +00:00
2011-06-22 15:10:16 +00:00
SSTATE_PKGARCH = "${PACKAGE_ARCH}"
SSTATE_PKGSPEC = "sstate-${PN}-${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}-${PV}-${PR}-${SSTATE_PKGARCH}-${SSTATE_VERSION}-"
2012-07-26 12:56:58 +00:00
SSTATE_PKGNAME = "${SSTATE_EXTRAPATH}${@generate_sstatefn(d.getVar('SSTATE_PKGSPEC', True), d.getVar('BB_TASKHASH', True), d)}"
2010-09-29 10:19:22 +00:00
SSTATE_PKG = "${SSTATE_DIR}/${SSTATE_PKGNAME}"
2012-07-26 12:56:58 +00:00
SSTATE_EXTRAPATH = ""
SSTATE_EXTRAPATHWILDCARD = ""
SSTATE_PATHSPEC = "${SSTATE_DIR}/${SSTATE_EXTRAPATHWILDCARD}*/${SSTATE_PKGSPEC}"
2012-10-19 12:37:39 +00:00
SSTATE_DUPWHITELIST = "${DEPLOY_DIR_IMAGE}/ ${DEPLOY_DIR}/licenses/"
2012-10-05 13:13:13 +00:00
# Also need to make cross recipes append to ${PN} and install once for any given PACAGE_ARCH so
# can avoid multiple installs (e.g. routerstationpro+qemumips both using mips32)
SSTATE_DUPWHITELIST += "${STAGING_LIBDIR_NATIVE}/${MULTIMACH_TARGET_SYS} ${STAGING_DIR_NATIVE}/usr/libexec/${MULTIMACH_TARGET_SYS} ${STAGING_BINDIR_NATIVE}/${MULTIMACH_TARGET_SYS} ${STAGING_DIR_NATIVE}${includedir_native}/gcc-build-internal-${MULTIMACH_TARGET_SYS}"
# Avoid docbook/sgml catalog warnings for now
2012-10-08 07:57:02 +00:00
SSTATE_DUPWHITELIST += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
2010-08-04 10:34:18 +00:00
2012-02-23 15:50:25 +00:00
SSTATE_SCAN_FILES ?= "*.la *-config *_config"
2011-12-15 00:04:42 +00:00
SSTATE_SCAN_CMD ?= 'find ${SSTATE_BUILDDIR} \( -name "${@"\" -o -name \"".join(d.getVar("SSTATE_SCAN_FILES", True).split())}" \) -type f'
2010-08-04 10:34:18 +00:00
2012-07-26 12:56:58 +00:00
BB_HASHFILENAME = "${SSTATE_EXTRAPATH} ${SSTATE_PKGSPEC}"
2010-10-05 21:21:34 +00:00
2011-01-18 08:18:42 +00:00
SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
2012-01-26 14:40:56 +00:00
SSTATEPREINSTFUNCS ?= ""
2011-02-23 02:32:45 +00:00
SSTATEPOSTINSTFUNCS ?= ""
2013-01-09 09:07:46 +00:00
# Specify dirs in which the shell function is executed and don't use ${B}
# as default dirs to avoid possible race about ${B} with other task.
sstate_create_package[dirs] = "${SSTATE_BUILDDIR}"
sstate_unpack_package[dirs] = "${SSTATE_INSTDIR}"
2010-08-04 10:34:18 +00:00
python () {
if bb.data.inherits_class('native', d):
2011-11-25 14:25:16 +00:00
d.setVar('SSTATE_PKGARCH', d.getVar('BUILD_ARCH'))
2012-07-12 15:18:23 +00:00
elif bb.data.inherits_class('crosssdk', d):
d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}_${SDK_ARCH}"))
2011-01-18 08:18:42 +00:00
elif bb.data.inherits_class('cross', d):
2012-03-03 11:21:22 +00:00
d.setVar('SSTATE_PKGARCH', d.expand("${BUILD_ARCH}_${TUNE_PKGARCH}"))
d.setVar('SSTATE_MANMACH', d.expand("${BUILD_ARCH}_${MACHINE}"))
2010-08-04 10:34:18 +00:00
elif bb.data.inherits_class('nativesdk', d):
2012-03-03 11:21:22 +00:00
d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}"))
2010-08-04 10:34:18 +00:00
elif bb.data.inherits_class('cross-canadian', d):
2012-03-03 11:21:22 +00:00
d.setVar('SSTATE_PKGARCH', d.expand("${SDK_ARCH}_${PACKAGE_ARCH}"))
2012-11-25 20:23:42 +00:00
elif bb.data.inherits_class('allarch', d) and d.getVar("PACKAGE_ARCH", True) == "all":
2012-07-20 15:52:55 +00:00
d.setVar('SSTATE_PKGARCH', "allarch")
2011-01-18 08:18:42 +00:00
else:
2012-10-19 12:37:39 +00:00
d.setVar('SSTATE_MANMACH', d.expand("${PACKAGE_ARCH}"))
2010-08-04 10:34:18 +00:00
2012-07-26 12:56:58 +00:00
if bb.data.inherits_class('native', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross', d):
d.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
d.setVar('SSTATE_EXTRAPATHWILDCARD', "*/")
2010-08-04 10:34:18 +00:00
# These classes encode staging paths into their scripts data so can only be
# reused if we manipulate the paths
if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d) or bb.data.inherits_class('crosssdk', d):
2010-09-29 09:57:16 +00:00
scan_cmd = "grep -Irl ${STAGING_DIR} ${SSTATE_BUILDDIR}"
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
d.setVar('SSTATE_SCAN_CMD', scan_cmd)
2010-08-04 10:34:18 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
unique_tasks = set((d.getVar('SSTATETASKS', True) or "").split())
2011-04-07 09:38:17 +00:00
d.setVar('SSTATETASKS', " ".join(unique_tasks))
2011-01-19 11:48:55 +00:00
namemap = []
2011-04-07 09:38:17 +00:00
for task in unique_tasks:
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
namemap.append(d.getVarFlag(task, 'sstate-name'))
2012-03-03 10:41:41 +00:00
d.prependVarFlag(task, 'prefuncs', "sstate_task_prefunc ")
d.appendVarFlag(task, 'postfuncs', " sstate_task_postfunc")
2011-01-19 11:48:55 +00:00
d.setVar('SSTATETASKNAMES', " ".join(namemap))
2010-08-04 10:34:18 +00:00
}
2011-01-27 20:57:54 +00:00
def sstate_init(name, task, d):
2010-08-04 10:34:18 +00:00
ss = {}
2011-01-27 20:57:54 +00:00
ss['task'] = task
2010-08-04 10:34:18 +00:00
ss['name'] = name
ss['dirs'] = []
ss['plaindirs'] = []
ss['lockfiles'] = []
2011-03-29 10:57:37 +00:00
ss['lockfiles-shared'] = []
2010-08-04 10:34:18 +00:00
return ss
2010-10-22 09:22:34 +00:00
def sstate_state_fromvars(d, task = None):
if task is None:
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
task = d.getVar('BB_CURRENTTASK', True)
2010-10-22 09:22:34 +00:00
if not task:
bb.fatal("sstate code running without task context?!")
task = task.replace("_setscene", "")
2010-08-04 10:34:18 +00:00
2012-03-03 11:12:14 +00:00
name = d.getVarFlag("do_" + task, 'sstate-name', True)
inputs = (d.getVarFlag("do_" + task, 'sstate-inputdirs', True) or "").split()
outputs = (d.getVarFlag("do_" + task, 'sstate-outputdirs', True) or "").split()
plaindirs = (d.getVarFlag("do_" + task, 'sstate-plaindirs', True) or "").split()
lockfiles = (d.getVarFlag("do_" + task, 'sstate-lockfile', True) or "").split()
lockfilesshared = (d.getVarFlag("do_" + task, 'sstate-lockfile-shared', True) or "").split()
interceptfuncs = (d.getVarFlag("do_" + task, 'sstate-interceptfuncs', True) or "").split()
2010-08-04 10:34:18 +00:00
if not name or len(inputs) != len(outputs):
bb.fatal("sstate variables not setup correctly?!")
2011-01-27 20:57:54 +00:00
ss = sstate_init(name, task, d)
2010-08-04 10:34:18 +00:00
for i in range(len(inputs)):
sstate_add(ss, inputs[i], outputs[i], d)
ss['lockfiles'] = lockfiles
2011-03-29 10:57:37 +00:00
ss['lockfiles-shared'] = lockfilesshared
2010-08-04 10:34:18 +00:00
ss['plaindirs'] = plaindirs
2010-09-03 17:22:20 +00:00
ss['interceptfuncs'] = interceptfuncs
2010-08-04 10:34:18 +00:00
return ss
def sstate_add(ss, source, dest, d):
2012-11-14 15:52:45 +00:00
if not source.endswith("/"):
2012-11-03 17:03:14 +00:00
source = source + "/"
2012-11-14 15:52:45 +00:00
if not dest.endswith("/"):
2012-11-03 17:03:14 +00:00
dest = dest + "/"
2012-11-14 15:52:45 +00:00
source = os.path.normpath(source)
dest = os.path.normpath(dest)
srcbase = os.path.basename(source)
2010-08-04 10:34:18 +00:00
ss['dirs'].append([srcbase, source, dest])
return ss
def sstate_install(ss, d):
import oe.path
2012-10-18 19:25:05 +00:00
import subprocess
2010-08-04 10:34:18 +00:00
sharedfiles = []
shareddirs = []
2012-03-03 11:21:22 +00:00
bb.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
2012-12-14 15:39:56 +00:00
d2 = d.createCopy()
2012-10-19 12:37:39 +00:00
extrainf = d.getVarFlag("do_" + ss['task'], 'stamp-extra-info', True)
if extrainf:
2012-12-14 15:39:56 +00:00
d2.setVar("SSTATE_MANMACH", extrainf)
manifest = d2.expand("${SSTATE_MANFILEPREFIX}.%s" % ss['name'])
2010-08-04 10:34:18 +00:00
if os.access(manifest, os.R_OK):
bb.fatal("Package already staged (%s)?!" % manifest)
locks = []
2011-03-29 10:57:37 +00:00
for lock in ss['lockfiles-shared']:
locks.append(bb.utils.lockfile(lock, True))
2010-08-04 10:34:18 +00:00
for lock in ss['lockfiles']:
locks.append(bb.utils.lockfile(lock))
for state in ss['dirs']:
2013-01-29 13:37:39 +00:00
bb.debug(2, "Staging files from %s to %s" % (state[1], state[2]))
2010-08-04 10:34:18 +00:00
for walkroot, dirs, files in os.walk(state[1]):
for file in files:
srcpath = os.path.join(walkroot, file)
dstpath = srcpath.replace(state[1], state[2])
2011-09-23 17:44:34 +00:00
#bb.debug(2, "Staging %s to %s" % (srcpath, dstpath))
2010-08-04 10:34:18 +00:00
sharedfiles.append(dstpath)
for dir in dirs:
2010-08-30 08:13:49 +00:00
srcdir = os.path.join(walkroot, dir)
dstdir = srcdir.replace(state[1], state[2])
2011-09-23 17:44:34 +00:00
#bb.debug(2, "Staging %s to %s" % (srcdir, dstdir))
2010-08-30 08:13:49 +00:00
if not dstdir.endswith("/"):
dstdir = dstdir + "/"
shareddirs.append(dstdir)
2012-08-25 15:48:14 +00:00
2012-09-26 13:32:13 +00:00
# Check the file list for conflicts against files which already exist
2012-09-26 11:45:17 +00:00
whitelist = (d.getVar("SSTATE_DUPWHITELIST", True) or "").split()
2012-08-25 15:48:14 +00:00
match = []
for f in sharedfiles:
2012-09-26 13:32:13 +00:00
if os.path.exists(f):
2012-10-05 13:12:15 +00:00
f = os.path.normpath(f)
2012-08-25 15:48:14 +00:00
realmatch = True
for w in whitelist:
if f.startswith(w):
realmatch = False
break
if realmatch:
match.append(f)
2013-03-04 23:45:10 +00:00
sstate_search_cmd = "grep -rl '%s' %s --exclude=master.list | sed -e 's:^.*/::' -e 's:\.populate-sysroot::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
2012-12-04 01:31:15 +00:00
search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
2012-11-16 17:14:20 +00:00
if search_output != "":
2012-10-18 19:25:05 +00:00
match.append("Matched in %s" % search_output.rstrip())
2012-08-25 15:48:14 +00:00
if match:
2012-10-18 19:25:05 +00:00
bb.warn("The recipe %s is trying to install files into a shared area when those files already exist. Those files and their manifest location are:\n %s\nPlease verify which package should provide the above files." % (d.getVar('PN', True), "\n ".join(match)))
2012-08-25 15:48:14 +00:00
2012-09-26 13:32:13 +00:00
# Write out the manifest
2010-08-04 10:34:18 +00:00
f = open(manifest, "w")
for file in sharedfiles:
f.write(file + "\n")
2012-08-25 15:48:14 +00:00
2010-08-04 10:34:18 +00:00
# We want to ensure that directories appear at the end of the manifest
# so that when we test to see if they should be deleted any contents
# added by the task will have been removed first.
2010-09-29 11:10:57 +00:00
dirs = sorted(shareddirs, key=len)
# Must remove children first, which will have a longer path than the parent
for di in reversed(dirs):
f.write(di + "\n")
2010-08-04 10:34:18 +00:00
f.close()
2012-08-25 15:48:14 +00:00
# Run the actual file install
for state in ss['dirs']:
oe.path.copytree(state[1], state[2])
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
for postinst in (d.getVar('SSTATEPOSTINSTFUNCS', True) or '').split():
2011-02-23 02:32:45 +00:00
bb.build.exec_func(postinst, d)
2010-08-04 10:34:18 +00:00
for lock in locks:
bb.utils.unlockfile(lock)
def sstate_installpkg(ss, d):
import oe.path
2012-05-29 14:53:06 +00:00
import subprocess
2010-08-04 10:34:18 +00:00
2011-03-28 23:20:31 +00:00
def prepdir(dir):
# remove dir if it exists, ensure any parent directories do exist
if os.path.exists(dir):
oe.path.remove(dir)
bb.mkdirhier(dir)
oe.path.remove(dir)
2012-03-03 11:21:22 +00:00
sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['name'])
2012-07-24 12:37:01 +00:00
sstatefetch = d.getVar('SSTATE_PKGNAME', True) + '_' + ss['name'] + ".tgz"
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
sstatepkg = d.getVar('SSTATE_PKG', True) + '_' + ss['name'] + ".tgz"
2010-08-04 10:34:18 +00:00
2010-09-29 10:02:07 +00:00
if not os.path.exists(sstatepkg):
2012-08-20 16:52:21 +00:00
pstaging_fetch(sstatefetch, sstatepkg, d)
2012-12-06 19:48:16 +00:00
if not os.path.exists(sstatepkg + ".siginfo"):
2012-12-06 16:09:12 +00:00
pstaging_fetch(sstatefetch + ".siginfo", sstatepkg + ".siginfo", d)
2010-08-04 10:34:18 +00:00
2010-09-29 10:02:07 +00:00
if not os.path.isfile(sstatepkg):
bb.note("Staging package %s does not exist" % sstatepkg)
2010-08-04 10:34:18 +00:00
return False
sstate_clean(ss, d)
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
d.setVar('SSTATE_INSTDIR', sstateinst)
d.setVar('SSTATE_PKG', sstatepkg)
2012-01-26 14:40:56 +00:00
for preinst in (d.getVar('SSTATEPREINSTFUNCS', True) or '').split():
bb.build.exec_func(preinst, d)
2010-08-04 10:34:18 +00:00
bb.build.exec_func('sstate_unpack_package', d)
# Fixup hardcoded paths
2012-05-10 23:13:38 +00:00
#
# Note: The logic below must match the reverse logic in
# sstate_hardcode_path(d)
2010-09-29 10:02:07 +00:00
fixmefn = sstateinst + "fixmepath"
2010-08-04 10:34:18 +00:00
if os.path.isfile(fixmefn):
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
staging = d.getVar('STAGING_DIR', True)
staging_target = d.getVar('STAGING_DIR_TARGET', True)
staging_host = d.getVar('STAGING_DIR_HOST', True)
2012-05-10 23:13:38 +00:00
2012-07-11 17:33:43 +00:00
if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):
sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIR:%s:g'" % (staging)
elif bb.data.inherits_class('cross', d):
sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRTARGET:%s:g; s:FIXMESTAGINGDIR:%s:g'" % (staging_target, staging)
else:
sstate_sed_cmd = "sed -i -e 's:FIXMESTAGINGDIRHOST:%s:g'" % (staging_host)
2012-05-10 23:13:38 +00:00
2012-07-11 17:33:43 +00:00
# Add sstateinst to each filename in fixmepath, use xargs to efficiently call sed
sstate_hardcode_cmd = "sed -e 's:^:%s:g' %s | xargs %s" % (sstateinst, fixmefn, sstate_sed_cmd)
2012-05-10 23:13:38 +00:00
2012-07-11 17:33:43 +00:00
print "Replacing fixme paths in sstate package: %s" % (sstate_hardcode_cmd)
subprocess.call(sstate_hardcode_cmd, shell=True)
2012-05-10 23:13:38 +00:00
2011-09-07 17:34:47 +00:00
# Need to remove this or we'd copy it into the target directory and may
# conflict with another writer
os.remove(fixmefn)
2010-08-04 10:34:18 +00:00
for state in ss['dirs']:
2011-03-28 23:20:31 +00:00
prepdir(state[1])
os.rename(sstateinst + state[0], state[1])
2010-08-04 10:34:18 +00:00
sstate_install(ss, d)
for plain in ss['plaindirs']:
2010-10-22 11:51:35 +00:00
workdir = d.getVar('WORKDIR', True)
src = sstateinst + "/" + plain.replace(workdir, '')
dest = plain
bb.mkdirhier(src)
2011-03-28 23:20:31 +00:00
prepdir(dest)
os.rename(src, dest)
2010-08-04 10:34:18 +00:00
return True
2010-10-22 09:22:34 +00:00
def sstate_clean_cachefile(ss, d):
2010-11-22 16:05:10 +00:00
import oe.path
2012-07-24 12:37:01 +00:00
sstatepkgfile = d.getVar('SSTATE_PATHSPEC', True) + "*_" + ss['name'] + ".tgz*"
2010-11-22 16:05:10 +00:00
bb.note("Removing %s" % sstatepkgfile)
oe.path.remove(sstatepkgfile)
2010-10-22 09:22:34 +00:00
def sstate_clean_cachefiles(d):
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
for task in (d.getVar('SSTATETASKS', True) or "").split():
2010-10-22 09:22:34 +00:00
ss = sstate_state_fromvars(d, task[3:])
sstate_clean_cachefile(ss, d)
2010-08-04 10:34:18 +00:00
def sstate_clean_manifest(manifest, d):
import oe.path
mfile = open(manifest)
entries = mfile.readlines()
mfile.close()
for entry in entries:
entry = entry.strip()
2010-08-30 08:13:49 +00:00
bb.debug(2, "Removing manifest: %s" % entry)
2010-10-01 13:07:18 +00:00
# We can race against another package populating directories as we're removing them
# so we ignore errors here.
try:
if entry.endswith("/"):
2012-08-20 16:52:21 +00:00
if os.path.islink(entry[:-1]):
os.remove(entry[:-1])
elif os.path.exists(entry) and len(os.listdir(entry)) == 0:
os.rmdir(entry[:-1])
2010-10-01 13:07:18 +00:00
else:
oe.path.remove(entry)
except OSError:
pass
2010-08-04 10:34:18 +00:00
oe.path.remove(manifest)
def sstate_clean(ss, d):
2011-01-27 20:57:54 +00:00
import oe.path
2010-08-04 10:34:18 +00:00
2012-12-14 15:39:56 +00:00
d2 = d.createCopy()
2012-10-19 12:37:39 +00:00
extrainf = d.getVarFlag("do_" + ss['task'], 'stamp-extra-info', True)
if extrainf:
2012-12-14 15:39:56 +00:00
d2.setVar("SSTATE_MANMACH", extrainf)
manifest = d2.expand("${SSTATE_MANFILEPREFIX}.%s" % ss['name'])
2010-08-04 10:34:18 +00:00
2011-02-28 13:29:15 +00:00
if os.path.exists(manifest):
locks = []
2011-03-29 10:57:37 +00:00
for lock in ss['lockfiles-shared']:
2011-06-09 14:05:02 +00:00
locks.append(bb.utils.lockfile(lock))
2011-02-28 13:29:15 +00:00
for lock in ss['lockfiles']:
locks.append(bb.utils.lockfile(lock))
2011-01-27 20:52:33 +00:00
2011-02-28 13:29:15 +00:00
sstate_clean_manifest(manifest, d)
2010-08-04 10:34:18 +00:00
2011-02-28 13:29:15 +00:00
for lock in locks:
bb.utils.unlockfile(lock)
2010-08-04 10:34:18 +00:00
2011-02-28 13:16:41 +00:00
stfile = d.getVar("STAMP", True) + ".do_" + ss['task']
oe.path.remove(stfile)
2011-03-19 01:16:05 +00:00
oe.path.remove(stfile + "_setscene")
2011-10-06 22:11:18 +00:00
if extrainf:
oe.path.remove(stfile + ".*" + extrainf)
oe.path.remove(stfile + "_setscene" + ".*" + extrainf)
else:
oe.path.remove(stfile + ".*")
oe.path.remove(stfile + "_setscene" + ".*")
2011-01-27 20:57:54 +00:00
2010-08-27 11:33:58 +00:00
CLEANFUNCS += "sstate_cleanall"
2010-08-27 11:29:01 +00:00
2010-08-04 10:34:18 +00:00
python sstate_cleanall() {
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
bb.note("Removing shared state for package %s" % d.getVar('PN', True))
2010-08-04 10:34:18 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
manifest_dir = d.getVar('SSTATE_MANIFESTS', True)
2010-08-27 11:33:58 +00:00
if not os.path.exists(manifest_dir):
return
2012-12-14 15:38:27 +00:00
namemap = d.getVar('SSTATETASKNAMES', True).split()
tasks = d.getVar('SSTATETASKS', True).split()
for name in namemap:
taskname = tasks[namemap.index(name)]
shared_state = sstate_state_fromvars(d, taskname[3:])
sstate_clean(shared_state, d)
2010-08-04 10:34:18 +00:00
}
2011-01-18 08:18:42 +00:00
def sstate_hardcode_path(d):
2013-01-10 08:50:06 +00:00
import subprocess, platform
2012-07-11 17:33:43 +00:00
# Need to remove hardcoded paths and fix these when we install the
# staging packages.
#
# Note: the logic in this function needs to match the reverse logic
# in sstate_installpkg(ss, d)
staging = d.getVar('STAGING_DIR', True)
staging_target = d.getVar('STAGING_DIR_TARGET', True)
staging_host = d.getVar('STAGING_DIR_HOST', True)
sstate_builddir = d.getVar('SSTATE_BUILDDIR', True)
if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):
sstate_grep_cmd = "grep -l -e '%s'" % (staging)
sstate_sed_cmd = "sed -i -e 's:%s:FIXMESTAGINGDIR:g'" % (staging)
elif bb.data.inherits_class('cross', d):
sstate_grep_cmd = "grep -l -e '(%s|%s)'" % (staging_target, staging)
sstate_sed_cmd = "sed -i -e 's:%s:FIXMESTAGINGDIRTARGET:g; s:%s:FIXMESTAGINGDIR:g'" % (staging_target, staging)
else:
sstate_grep_cmd = "grep -l -e '%s'" % (staging_host)
sstate_sed_cmd = "sed -i -e 's:%s:FIXMESTAGINGDIRHOST:g'" % (staging_host)
2013-01-10 08:50:06 +00:00
2012-07-11 17:33:43 +00:00
fixmefn = sstate_builddir + "fixmepath"
sstate_scan_cmd = d.getVar('SSTATE_SCAN_CMD', True)
sstate_filelist_cmd = "tee %s" % (fixmefn)
# fixmepath file needs relative paths, drop sstate_builddir prefix
sstate_filelist_relative_cmd = "sed -i -e 's:^%s::g' %s" % (sstate_builddir, fixmefn)
2013-01-10 08:50:06 +00:00
xargs_no_empty_run_cmd = '--no-run-if-empty'
if platform.system() == 'Darwin':
xargs_no_empty_run_cmd = ''
2012-07-11 17:33:43 +00:00
# Limit the fixpaths and sed operations based on the initial grep search
# This has the side effect of making sure the vfs cache is hot
2013-01-10 08:50:06 +00:00
sstate_hardcode_cmd = "%s | xargs %s | %s | xargs %s %s" % (sstate_scan_cmd, sstate_grep_cmd, sstate_filelist_cmd, xargs_no_empty_run_cmd, sstate_sed_cmd)
2012-07-11 17:33:43 +00:00
print "Removing hardcoded paths from sstate package: '%s'" % (sstate_hardcode_cmd)
subprocess.call(sstate_hardcode_cmd, shell=True)
2012-05-18 14:18:19 +00:00
# If the fixmefn is empty, remove it..
2012-07-11 17:33:43 +00:00
if os.stat(fixmefn).st_size == 0:
os.remove(fixmefn)
else:
print "Replacing absolute paths in fixmepath file: '%s'" % (sstate_filelist_relative_cmd)
subprocess.call(sstate_filelist_relative_cmd, shell=True)
2011-01-18 08:18:42 +00:00
2010-08-04 10:34:18 +00:00
def sstate_package(ss, d):
import oe.path
2011-03-18 23:04:26 +00:00
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
depth = link.rpartition(tmpdir)[2].count('/')
base = link.partition(tmpdir)[2].strip()
while depth > 1:
base = "../" + base
depth -= 1
bb.debug(2, "Replacing absolute path %s with relative path %s" % (link, base))
os.remove(path)
os.symlink(base, path)
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
tmpdir = d.getVar('TMPDIR', True)
2011-03-18 23:04:26 +00:00
2012-03-03 11:21:22 +00:00
sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['name'])
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
sstatepkg = d.getVar('SSTATE_PKG', True) + '_'+ ss['name'] + ".tgz"
2013-02-04 11:27:36 +00:00
bb.utils.remove(sstatebuild, recurse=True)
2010-09-29 10:02:07 +00:00
bb.mkdirhier(sstatebuild)
bb.mkdirhier(os.path.dirname(sstatepkg))
2010-08-04 10:34:18 +00:00
for state in ss['dirs']:
srcbase = state[0].rstrip("/").rsplit('/', 1)[0]
for walkroot, dirs, files in os.walk(state[1]):
for file in files:
srcpath = os.path.join(walkroot, file)
2010-09-29 10:02:07 +00:00
dstpath = srcpath.replace(state[1], sstatebuild + state[0])
2011-03-18 23:04:26 +00:00
make_relative_symlink(srcpath, dstpath, d)
for dir in dirs:
srcpath = os.path.join(walkroot, dir)
dstpath = srcpath.replace(state[1], sstatebuild + state[0])
make_relative_symlink(srcpath, dstpath, d)
2011-09-23 17:44:34 +00:00
bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0]))
2013-02-03 17:34:54 +00:00
oe.path.copyhardlinktree(state[1], sstatebuild + state[0])
2010-08-04 10:34:18 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
workdir = d.getVar('WORKDIR', True)
2010-08-04 10:34:18 +00:00
for plain in ss['plaindirs']:
2010-09-29 10:02:07 +00:00
pdir = plain.replace(workdir, sstatebuild)
2010-08-04 10:34:18 +00:00
bb.mkdirhier(plain)
bb.mkdirhier(pdir)
2013-02-03 17:34:54 +00:00
oe.path.copyhardlinktree(plain, pdir)
2010-08-04 10:34:18 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
d.setVar('SSTATE_BUILDDIR', sstatebuild)
d.setVar('SSTATE_PKG', sstatepkg)
2011-01-18 08:18:42 +00:00
sstate_hardcode_path(d)
2010-08-04 10:34:18 +00:00
bb.build.exec_func('sstate_create_package', d)
2010-09-13 14:41:07 +00:00
2010-09-29 10:02:07 +00:00
bb.siggen.dump_this_task(sstatepkg + ".siginfo", d)
2010-08-04 10:34:18 +00:00
return
2012-07-24 12:37:01 +00:00
def pstaging_fetch(sstatefetch, sstatepkg, d):
2011-02-11 13:55:07 +00:00
import bb.fetch2
2010-10-07 14:42:56 +00:00
2011-02-04 13:20:28 +00:00
# Only try and fetch if the user has configured a mirror
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
mirrors = d.getVar('SSTATE_MIRRORS', True)
2011-02-04 13:20:28 +00:00
if not mirrors:
return
2010-10-07 14:42:56 +00:00
2011-02-04 13:20:28 +00:00
# Copy the data object and override DL_DIR and SRC_URI
localdata = bb.data.createCopy(d)
bb.data.update_data(localdata)
2010-10-22 13:27:44 +00:00
2012-03-03 11:21:22 +00:00
dldir = localdata.expand("${SSTATE_DIR}")
2012-07-24 12:37:01 +00:00
srcuri = "file://" + sstatefetch
2010-10-22 13:27:44 +00:00
2011-02-04 13:20:28 +00:00
bb.mkdirhier(dldir)
2010-08-04 10:34:18 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
localdata.setVar('DL_DIR', dldir)
localdata.setVar('PREMIRRORS', mirrors)
localdata.setVar('SRC_URI', srcuri)
2011-02-04 13:20:28 +00:00
# Try a fetch from the sstate mirror, if it fails just return and
# we will build the package
try:
2011-03-08 19:07:24 +00:00
fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False)
2011-02-04 13:20:28 +00:00
fetcher.download()
# Need to optimise this, if using file:// urls, the fetcher just changes the local path
# For now work around by symlinking
localpath = bb.data.expand(fetcher.localpath(srcuri), localdata)
if localpath != sstatepkg and os.path.exists(localpath) and not os.path.exists(sstatepkg):
os.symlink(localpath, sstatepkg)
except bb.fetch2.BBFetchException:
pass
2010-08-04 10:34:18 +00:00
def sstate_setscene(d):
shared_state = sstate_state_fromvars(d)
accelerate = sstate_installpkg(shared_state, d)
if not accelerate:
raise bb.build.FuncFailed("No suitable staging package found")
python sstate_task_prefunc () {
shared_state = sstate_state_fromvars(d)
sstate_clean(shared_state, d)
}
python sstate_task_postfunc () {
shared_state = sstate_state_fromvars(d)
sstate_install(shared_state, d)
2010-09-03 17:22:20 +00:00
for intercept in shared_state['interceptfuncs']:
bb.build.exec_func(intercept, d)
2010-08-04 10:34:18 +00:00
sstate_package(shared_state, d)
}
#
2010-09-29 10:02:07 +00:00
# Shell function to generate a sstate package from a directory
2010-09-29 09:57:16 +00:00
# set as SSTATE_BUILDDIR
2010-08-04 10:34:18 +00:00
#
sstate_create_package () {
2010-09-29 09:57:16 +00:00
cd ${SSTATE_BUILDDIR}
2012-03-22 22:47:24 +00:00
TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
2011-01-26 11:36:24 +00:00
# Need to handle empty directories
if [ "$(ls -A)" ]; then
2012-03-22 22:47:24 +00:00
tar -czf $TFILE *
2011-01-26 11:36:24 +00:00
else
2012-03-22 22:47:24 +00:00
tar -cz --file=$TFILE --files-from=/dev/null
2011-01-26 11:36:24 +00:00
fi
2012-05-12 01:22:20 +00:00
chmod 0664 $TFILE
2012-03-22 22:47:24 +00:00
mv $TFILE ${SSTATE_PKG}
2010-11-11 08:27:05 +00:00
cd ${WORKDIR}
rm -rf ${SSTATE_BUILDDIR}
2010-08-04 10:34:18 +00:00
}
#
# Shell function to decompress and prepare a package for installation
#
sstate_unpack_package () {
2010-09-29 09:57:16 +00:00
mkdir -p ${SSTATE_INSTDIR}
cd ${SSTATE_INSTDIR}
2012-10-11 12:20:20 +00:00
tar -xmvzf ${SSTATE_PKG}
2010-08-04 10:34:18 +00:00
}
2010-10-05 21:21:34 +00:00
2012-09-12 13:23:37 +00:00
# Need to inject information about classes not in the global configuration scope
EXTRASSTATEMAPS += "do_deploy:deploy"
2012-08-31 00:10:03 +00:00
2010-10-05 21:21:34 +00:00
BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d):
2010-10-07 14:42:56 +00:00
2010-10-05 21:21:34 +00:00
ret = []
2012-08-31 00:10:03 +00:00
mapping = {}
for t in d.getVar("SSTATETASKS", True).split():
mapping[t] = d.getVarFlag(t, "sstate-name", True)
for extra in d.getVar("EXTRASSTATEMAPS", True).split():
e = extra.split(":")
mapping[e[0]] = e[1]
2010-10-05 21:21:34 +00:00
for task in range(len(sq_fn)):
2012-07-26 12:56:58 +00:00
spec = sq_hashfn[task].split(" ")[1]
extrapath = sq_hashfn[task].split(" ")[0]
sstatefile = d.expand("${SSTATE_DIR}/" + extrapath + generate_sstatefn(spec, sq_hash[task], d) + "_" + mapping[sq_task[task]] + ".tgz")
2010-10-05 21:21:34 +00:00
if os.path.exists(sstatefile):
2011-08-10 18:39:31 +00:00
bb.debug(2, "SState: Found valid sstate file %s" % sstatefile)
2010-10-05 21:21:34 +00:00
ret.append(task)
2010-10-07 14:42:56 +00:00
continue
2011-08-10 18:39:31 +00:00
else:
bb.debug(2, "SState: Looked for but didn't find file %s" % sstatefile)
2010-10-07 14:42:56 +00:00
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
mirrors = d.getVar("SSTATE_MIRRORS", True)
2010-10-07 14:42:56 +00:00
if mirrors:
# Copy the data object and override DL_DIR and SRC_URI
localdata = bb.data.createCopy(d)
bb.data.update_data(localdata)
2012-03-03 11:21:22 +00:00
dldir = localdata.expand("${SSTATE_DIR}")
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
localdata.setVar('DL_DIR', dldir)
localdata.setVar('PREMIRRORS', mirrors)
2010-10-07 14:42:56 +00:00
2011-08-10 18:39:31 +00:00
bb.debug(2, "SState using premirror of: %s" % mirrors)
2010-10-07 14:42:56 +00:00
for task in range(len(sq_fn)):
if task in ret:
continue
2012-07-26 12:56:58 +00:00
spec = sq_hashfn[task].split(" ")[1]
extrapath = sq_hashfn[task].split(" ")[0]
sstatefile = d.expand(extrapath + generate_sstatefn(spec, sq_hash[task], d) + "_" + mapping[sq_task[task]] + ".tgz")
2010-10-07 14:42:56 +00:00
2012-07-24 12:37:01 +00:00
srcuri = "file://" + sstatefile
Convert to use direct access to the data store (instead of bb.data.*Var*())
This is the result of running the following over the metadata:
sed \
-e 's:bb.data.\(setVar([^,()]*,[^,()]*\), *\([^ )]*\) *):\2.\1):g' \
-e 's:bb.data.\(setVarFlag([^,()]*,[^,()]*,[^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^(), ]*\) *,\([^)]*\)):\2.\1,\3):g' \
-e 's:bb.data.\(getVarFlag([^,()]*,[^,()]*\), *\([^() ]*\) *):\2.\1):g' \
-e 's:bb.data.\(getVar([^,()]*\), *\([^) ]*\) *):\2.\1):g' \
-i `grep -ril bb.data *`
(From OE-Core rev: b22831fd63164c4db9c0b72934d7d734a6585251)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-11-09 15:00:01 +00:00
localdata.setVar('SRC_URI', srcuri)
2011-08-10 18:39:31 +00:00
bb.debug(2, "SState: Attempting to fetch %s" % srcuri)
2010-10-07 14:42:56 +00:00
try:
2011-02-11 13:55:07 +00:00
fetcher = bb.fetch2.Fetch(srcuri.split(), localdata)
fetcher.checkstatus()
2011-08-10 18:39:31 +00:00
bb.debug(2, "SState: Successful fetch test for %s" % srcuri)
2010-10-07 14:42:56 +00:00
ret.append(task)
except:
2011-08-10 18:39:31 +00:00
bb.debug(2, "SState: Unsuccessful fetch test for %s" % srcuri)
2010-10-07 14:42:56 +00:00
pass
2010-10-05 21:21:34 +00:00
return ret
2012-11-16 15:32:40 +00:00
BB_SETSCENE_DEPVALID = "setscene_depvalid"
def setscene_depvalid(task, taskdependees, notneeded, d):
# taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]
# task is included in taskdependees too
bb.debug(2, "Considering setscene task: %s" % (str(taskdependees[task])))
def isNative(x):
return x.endswith("-native")
def isNativeCross(x):
return x.endswith("-native") or x.endswith("-cross") or x.endswith("-cross-initial")
def isSafeDep(x):
2012-11-22 21:39:28 +00:00
if x in ["quilt-native", "autoconf-native", "automake-native", "gnu-config-native", "libtool-native", "pkgconfig-native", "gcc-cross", "binutils-cross", "gcc-cross-initial"]:
2012-11-16 15:32:40 +00:00
return True
return False
2013-03-04 11:45:03 +00:00
def isPostInstDep(x):
2013-03-04 13:11:29 +00:00
if x in ["qemu-native", "gdk-pixbuf-native", "gtk+-native", "qemuwrapper-cross", "depmodwrapper-cross", "systemd-systemctl-native", "gtk-update-icon-cache-native"]:
2013-03-04 11:45:03 +00:00
return True
return False
2012-11-16 15:32:40 +00:00
# We can skip these "safe" dependencies since the aren't runtime dependencies, just build time
if isSafeDep(taskdependees[task][0]) and taskdependees[task][1] == "do_populate_sysroot":
return True
# We only need to trigger populate_lic through direct dependencies
if taskdependees[task][1] == "do_populate_lic":
return True
for dep in taskdependees:
bb.debug(2, " considering dependency: %s" % (str(taskdependees[dep])))
if task == dep:
continue
if dep in notneeded:
continue
# do_package_write_* and do_package doesn't need do_package
2013-01-23 14:27:33 +00:00
if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata']:
2012-11-16 15:32:40 +00:00
continue
2013-03-04 11:45:03 +00:00
# do_package_write_* and do_package doesn't need do_populate_sysroot, unless is a postinstall dependency
2013-01-23 14:27:33 +00:00
if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata']:
2013-03-04 11:45:03 +00:00
if isPostInstDep(taskdependees[task][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm']:
return False
2012-11-16 15:32:40 +00:00
continue
# Native/Cross packages don't exist and are noexec anyway
2013-01-23 14:27:33 +00:00
if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata']:
2012-11-16 15:32:40 +00:00
continue
2012-11-22 21:38:20 +00:00
2012-11-22 21:39:28 +00:00
# Consider sysroot depending on sysroot tasks
2012-11-16 15:32:40 +00:00
if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
2013-01-23 14:28:31 +00:00
# base-passwd/shadow-sysroot don't need their dependencies
if taskdependees[dep][0].endswith(("base-passwd", "shadow-sysroot")):
continue
2012-11-22 21:39:28 +00:00
# Nothing need depend on libc-initial/gcc-cross-initial
if taskdependees[task][0].endswith("-initial"):
continue
# Native/Cross populate_sysroot need their dependencies
if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]):
return False
# Target populate_sysroot depended on by cross tools need to be installed
if isNativeCross(taskdependees[dep][0]):
return False
# Native/cross tools depended upon by target sysroot are not needed
if isNativeCross(taskdependees[task][0]):
continue
# Target populate_sysroot need their dependencies
return False
2012-11-16 15:32:40 +00:00
2013-01-23 14:28:31 +00:00
# This is due to the [depends] in useradd.bbclass complicating matters
# The logic *is* reversed here due to the way hard setscene dependencies are injected
if taskdependees[task][1] == 'do_package' and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd')) and taskdependees[dep][1] == 'do_populate_sysroot':
continue
2012-11-16 15:32:40 +00:00
# Safe fallthrough default
bb.debug(2, " Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])))
return False
return True