From: ecordonnier@snap.com
To: openembedded-core@lists.openembedded.org
Cc: Etienne Cordonnier <ecordonnier@snap.com>
Subject: [OE-core][PATCH v5] kernel.bbclass: make do_symlink_kernelsrc reentrant
Date: Fri, 22 Dec 2023 11:11:22 +0100 [thread overview]
Message-ID: <20231222101122.517029-1-ecordonnier@snap.com> (raw)
From: Etienne Cordonnier <ecordonnier@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 <ecordonnier@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
next reply other threads:[~2023-12-22 10:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-22 10:11 ecordonnier [this message]
[not found] <17A2F72F5D272934.28089@lists.openembedded.org>
2023-12-21 21:50 ` [OE-core][PATCH v5] kernel.bbclass: make do_symlink_kernelsrc reentrant Etienne Cordonnier
[not found] ` <17A2F73D8934EE37.10357@lists.openembedded.org>
2024-01-30 15:39 ` Etienne Cordonnier
2024-01-31 16:53 ` Alexandre Belloni
2024-01-31 17:17 ` Etienne Cordonnier
2024-02-04 14:15 ` Alexandre Belloni
-- strict thread matches above, loose matches on Subject: below --
2023-12-21 21:49 Etienne Cordonnier
2024-02-09 17:36 ` Richard Purdie
2024-05-27 9:45 ` Etienne Cordonnier
2024-05-27 18:34 ` Alexandre Belloni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231222101122.517029-1-ecordonnier@snap.com \
--to=ecordonnier@snap.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox