From: Etienne Cordonnier <ecordonn...@snap.com> The function do_symlink_kernsrc is not reentrant in the case where S is defined to a non-default value. This causes build-failures e.g. when building linux-yocto, then updating poky to a commit which modifies kernel.bbclass, and then building linux-yocto again.
Bugzilla: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15325 Tested with a recipe "my-custom-linux" which unpacks sources to a custom ${S} directory and ran symlink_kernsrc several times: $ bitbake -f -c symlink_kernsrc my-custom-linux Signed-off-by: Etienne Cordonnier <ecordonn...@snap.com> --- meta/classes-recipe/kernel.bbclass | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass index 9ff37f5c38..45b63f1fa1 100644 --- a/meta/classes-recipe/kernel.bbclass +++ b/meta/classes-recipe/kernel.bbclass @@ -189,11 +189,17 @@ python do_symlink_kernsrc () { # drop trailing slash, so that os.symlink(kernsrc, s) doesn't use s as # directory name and fail s = s[:-1] - if d.getVar("EXTERNALSRC"): + if d.getVar("EXTERNALSRC") and not os.path.islink(s): # With EXTERNALSRC S will not be wiped so we can symlink to it os.symlink(s, kernsrc) else: import shutil + # perform idempotent/reentrant copy + s_copy = s + ".orig" + if not os.path.isdir(s_copy): + shutil.copytree(s, s_copy, ignore_dangling_symlinks=True) + bb.utils.remove(s, recurse=True) + shutil.copytree(s_copy, s, ignore_dangling_symlinks=True) shutil.move(s, kernsrc) os.symlink(kernsrc, s) } -- 2.36.1.vfs.0.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#192867): https://lists.openembedded.org/g/openembedded-core/message/192867 Mute This Topic: https://lists.openembedded.org/mt/103308574/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-