From: Roman Nazarenko <[email protected]>
do_package and do_populate_sysroot are siblings - both are only ordered
"after do_install" - so they run concurrently. With
LICENSE_CREATE_PACKAGE=1, perform_packagecopy:prepend wrote the
LIC_FILES_CHKSUM texts straight into ${D}${datadir}/licenses/${PN}/,
mutating the very tree do_populate_sysroot stages with find|cpio:
| DEBUG: Executing shell function sysroot_stage_all
| cpio: ./licenses/libmodule/LICENSE: Cannot stat: No such file or directory
| WARNING: exit code 2 from a shell command.
copy_license_files() removes and re-links an already existing
destination, so a file can be listed by find and gone by the time cpio
stats it.
Write into ${PKGD} from a perform_packagecopy:append instead. By then
${D} is complete and untouched, and ${PKGD} is a private copy that
do_populate_sysroot never reads. Package contents, on-target paths and
ownership are unchanged - do_package is a fakeroot task, so the
os.chown() in copy_license_files() still applies. As a side effect the
license texts stop being staged into every target recipe's sysroot,
which they had no business being in.
The stale comment about do_install:append goes away with the change,
taking the find_license_filesa typo with it.
This changes perform_packagecopy, so do_package basehashes change for
every recipe; expect a one-time repackage.
Signed-off-by: Roman Nazarenko <[email protected]>
---
meta/classes-global/license.bbclass | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/meta/classes-global/license.bbclass
b/meta/classes-global/license.bbclass
index 6e0de5f414..f2d83c227c 100644
--- a/meta/classes-global/license.bbclass
+++ b/meta/classes-global/license.bbclass
@@ -45,14 +45,15 @@ python do_populate_lic() {
}
PSEUDO_IGNORE_PATHS .= ",${@','.join(((d.getVar('COMMON_LICENSE_DIR') or '') +
' ' + (d.getVar('LICENSE_PATH') or '') + ' ' + d.getVar('COREBASE') +
'/meta/COPYING').split())}"
-# it would be better to copy them in do_install:append, but
find_license_filesa is python
-python perform_packagecopy:prepend () {
+# Write into PKGD, not D: do_populate_sysroot stages D concurrently and races
+# with the remove-then-relink in copy_license_files().
+python perform_packagecopy:append () {
enabled = oe.data.typed_value('LICENSE_CREATE_PACKAGE', d)
if d.getVar('CLASSOVERRIDE') == 'class-target' and enabled:
lic_files_paths = find_license_files(d)
- # LICENSE_FILES_DIRECTORY starts with '/' so os.path.join cannot be
used to join D and LICENSE_FILES_DIRECTORY
- destdir = d.getVar('D') +
os.path.join(d.getVar('LICENSE_FILES_DIRECTORY'), d.getVar('PN'))
+ # LICENSE_FILES_DIRECTORY starts with '/' so os.path.join cannot be
used to join PKGD and LICENSE_FILES_DIRECTORY
+ destdir = d.getVar('PKGD') +
os.path.join(d.getVar('LICENSE_FILES_DIRECTORY'), d.getVar('PN'))
copy_license_files(lic_files_paths, destdir)
add_package_and_files(d)
}
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#244495):
https://lists.openembedded.org/g/openembedded-core/message/244495
Mute This Topic: https://lists.openembedded.org/mt/120956790/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-