mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-07-26 07:37:14 +00:00
ufw: make usrmerge setup.py sed idempotent
do_package failed with a fatal QA error:
QA Issue: ufw: Files/directories were installed but not shipped in
any package: /usr/usr/lib/ufw/... (and on repeated rebuilds
/usr/usr/usr/lib/ufw/...) [installed-vs-shipped]
Under the usrmerge DISTRO_FEATURE, do_configure:prepend rewrites the
single os.path.join('/lib', 'ufw') in setup.py to nonarch_base_libdir
(/usr/lib) with an in-place sed. The pattern '/lib' is not anchored, so
when do_configure re-runs against an already-patched ${S} (cached
unpack/patch, as happens on world rebuilds) it matches the '/lib' inside
the previously substituted '/usr/lib' and prepends another /usr, giving
/usr/usr/lib and then /usr/usr/usr/lib. FILES:${PN} ships
${nonarch_base_libdir}/ufw (/usr/lib/ufw), so the doubled paths are
unshipped and QA fails.
Anchor the substitution to the quoted literal '/lib'. After the first
run the text is '/usr/lib', which no longer contains '/lib', so
re-running do_configure is a no-op. Verified two forced do_configure
runs leave os.path.join('/usr/lib', 'ufw') and do_package succeeds.
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
@@ -41,7 +41,11 @@ RRECOMMENDS:${PN} = " \
|
||||
|
||||
do_configure:prepend() {
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES','usrmerge','true','false',d)}; then
|
||||
sed -i -e 's|/lib|${nonarch_base_libdir}|' ${S}/setup.py
|
||||
# setup.py has a single os.path.join('/lib', 'ufw'); anchor the match to
|
||||
# the quoted literal so re-running do_configure on an already-patched
|
||||
# ${S} (cached unpack/patch) is a no-op instead of prepending another
|
||||
# /usr each time (which produced /usr/usr/lib/ufw and QA failures).
|
||||
sed -i -e "s|'/lib'|'${nonarch_base_libdir}'|" ${S}/setup.py
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user