mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-04 16:10:04 +00:00
I searched the various classes and looked for copies that should attempt to preserve hardlinks. This fixes the majority of this copies by switching to using tar as the copy method. It also has the side effect of preserving sparse files. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
107 lines
3.0 KiB
Plaintext
107 lines
3.0 KiB
Plaintext
|
|
packagedstaging_fastpath () {
|
|
:
|
|
}
|
|
|
|
sysroot_stage_dir() {
|
|
src="$1"
|
|
dest="$2"
|
|
# if the src doesn't exist don't do anything
|
|
if [ ! -d "$src" ]; then
|
|
return
|
|
fi
|
|
|
|
# We only want to stage the contents of $src if it's non-empty so first rmdir $src
|
|
# then if it still exists (rmdir on non-empty dir fails) we can copy its contents
|
|
rmdir "$src" 2> /dev/null || true
|
|
# However we always want to stage a $src itself, even if it's empty
|
|
mkdir -p "$dest"
|
|
if [ -d "$src" ]; then
|
|
tar -cf - -C "$src" -ps . | tar -xf - -C "$dest"
|
|
fi
|
|
}
|
|
|
|
sysroot_stage_libdir() {
|
|
src="$1"
|
|
dest="$2"
|
|
|
|
sysroot_stage_dir $src $dest
|
|
}
|
|
|
|
sysroot_stage_dirs() {
|
|
from="$1"
|
|
to="$2"
|
|
|
|
sysroot_stage_dir $from${includedir} $to${includedir}
|
|
if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
|
|
sysroot_stage_dir $from${bindir} $to${bindir}
|
|
sysroot_stage_dir $from${sbindir} $to${sbindir}
|
|
sysroot_stage_dir $from${base_bindir} $to${base_bindir}
|
|
sysroot_stage_dir $from${base_sbindir} $to${base_sbindir}
|
|
sysroot_stage_dir $from${libexecdir} $to${libexecdir}
|
|
sysroot_stage_dir $from${sysconfdir} $to${sysconfdir}
|
|
sysroot_stage_dir $from${localstatedir} $to${localstatedir}
|
|
fi
|
|
if [ -d $from${libdir} ]
|
|
then
|
|
sysroot_stage_libdir $from/${libdir} $to${libdir}
|
|
fi
|
|
if [ -d $from${base_libdir} ]
|
|
then
|
|
sysroot_stage_libdir $from${base_libdir} $to${base_libdir}
|
|
fi
|
|
sysroot_stage_dir $from${datadir} $to${datadir}
|
|
}
|
|
|
|
sysroot_stage_all() {
|
|
sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR}
|
|
}
|
|
|
|
do_populate_sysroot[dirs] = "${SYSROOT_DESTDIR}"
|
|
|
|
addtask populate_sysroot after do_install
|
|
|
|
SYSROOT_PREPROCESS_FUNCS ?= ""
|
|
SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/"
|
|
SYSROOT_LOCK = "${STAGING_DIR}/staging.lock"
|
|
|
|
# We clean out any existing sstate from the sysroot if we rerun configure
|
|
python sysroot_cleansstate () {
|
|
ss = sstate_state_fromvars(d, "populate_sysroot")
|
|
sstate_clean(ss, d)
|
|
}
|
|
do_configure[prefuncs] += "sysroot_cleansstate"
|
|
|
|
python do_populate_sysroot () {
|
|
#
|
|
# if do_stage exists, we're legacy. In that case run the do_stage,
|
|
# modify the SYSROOT_DESTDIR variable and then run the staging preprocess
|
|
# functions against staging directly.
|
|
#
|
|
# Otherwise setup a destdir, copy the results from do_install
|
|
# and run the staging preprocess against that
|
|
#
|
|
|
|
bb.build.exec_func("sysroot_stage_all", d)
|
|
for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split():
|
|
bb.build.exec_func(f, d)
|
|
}
|
|
|
|
SSTATETASKS += "do_populate_sysroot"
|
|
do_populate_sysroot[sstate-name] = "populate-sysroot"
|
|
do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}"
|
|
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST}/"
|
|
do_populate_sysroot[stamp-extra-info] = "${MACHINE}"
|
|
|
|
python do_populate_sysroot_setscene () {
|
|
sstate_setscene(d)
|
|
}
|
|
addtask do_populate_sysroot_setscene
|
|
|
|
python () {
|
|
if bb.data.getVar('do_stage', d, True) is not None:
|
|
bb.fatal("Legacy staging found for %s as it has a do_stage function. This will need conversion to a do_install or often simply removal to work with Poky" % bb.data.getVar("FILE", d, True))
|
|
}
|
|
|
|
|