Hi Bruce, can you please clarify? Are you saying that you prefer the version of the patch which I pasted with shutil.copytree?
The condition to trigger the issue is not that rare, e.g. anybody updating from kirkstone 4.0.12 to 4.0.13 and doing an incremental build will get a build failure if S doesn't have the default value (in my case the BSP layer overrides S). In the same way, if we merge the version with shutil.copytree, people will need to perform a manual clean, or they may get build failures. Etienne On Mon, Dec 18, 2023 at 3:25 PM Bruce Ashfield <[email protected]> wrote: > On Mon, Dec 18, 2023 at 6:45 AM Etienne Cordonnier via > lists.openembedded.org <[email protected]> > wrote: > > > > My thinking was that in my local build I was updating from a build > without > https://github.com/yoctoproject/poky/commit/3b8d0acca30c806fb69fc3096d41593cc76ed22c > to a build containing this commit, so the behavior of do_symlink_kernsrc > got modified, but my incremental build is not executing the new version of > the code since it detects that the symlink already exists and then the rest > of the function gets skipped, so I thought this justified a warning. > > > > I'll lower the warning to info, but then this assumes that we will never > modify do_symlink_kernsrc in a way which is not backwards-compatible. > > > > @Richard: the reason I didn't go for the copy to "orig" is that I don't > see a way to add this without breaking incremental builds (where s is a > symlink to kernsrc which is potentially modified already by do_patch etc.). > However I think it would be a cleaner solution than simply skipping the > code like I did: > > If the only way to trigger the issue is through really rare pre-<some > commit> to post > that commit that happens to modify the detection/manipulation/other of S > and the > symlink, then it is rare enough to just drop an info message breadcrumb > and keep > moving. > > But if it really is a rare situation like you ran into, or some sort > of forced execution > of the task, I don't think that a copy would be an unexpected thing to > happen. > > Bruce > > > > > - 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 > > + s_copy = s + ".orig" > > + if not os.path.isdir(s_copy): > > + shutil.copytree(s, s_copy) > > + bb.utils.remove(s, recurse=True) > > + shutil.copytree(s_copy, s) > > > > Etienne > > > > > > On Sun, Dec 17, 2023 at 8:52 PM Richard Purdie < > [email protected]> wrote: > >> > >> On Sat, 2023-12-16 at 14:53 +0100, Etienne Cordonnier via > >> lists.openembedded.org wrote: > >> > From: Etienne Cordonnier <[email protected]> > >> > > >> > 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://urldefense.proofpoint.com/v2/url?u=https-3A__bugzilla.yoctoproject.org_show-5Fbug.cgi-3Fid-3D15325&d=DwIFaQ&c=ncDTmphkJTvjIDPh0hpF_4vCHvabgGkICC2epckfdiw&r=AhkbNonVuMIGRfPx_Qj9TsRih1DULJTKUkSGa66m67E&m=qcRut2Wm9dH26YP_YovPl6QVczLOYUxs1xfzA75ZJBiHj4dWwxbAS-2JjGPlyiyS&s=_WTBsDroHfmiIIyCOXRV2CAId9PmKZ4sN3bRO3EOcyU&e= > >> > > >> > Signed-off-by: Etienne Cordonnier <[email protected]> > >> > --- > >> > meta/classes-recipe/kernel.bbclass | 5 +++++ > >> > 1 file changed, 5 insertions(+) > >> > > >> > diff --git a/meta/classes-recipe/kernel.bbclass > b/meta/classes-recipe/kernel.bbclass > >> > index 9ff37f5c38..130bedd901 100644 > >> > --- a/meta/classes-recipe/kernel.bbclass > >> > +++ b/meta/classes-recipe/kernel.bbclass > >> > @@ -194,6 +194,11 @@ python do_symlink_kernsrc () { > >> > os.symlink(s, kernsrc) > >> > else: > >> > import shutil > >> > + if os.path.islink(s): > >> > + # this happens for instance when a poky update > forces symlink_kernsrc to run again > >> > + # after s was already moved to kernsrc > >> > + bb.warn("%s is already a symlink! Not symlinking > kernel sources" % s) > >> > + return 0 > >> > shutil.move(s, kernsrc) > >> > os.symlink(kernsrc, s) > >> > } > >> > >> Usually what we recommend is that the first pass does something if "if > >> not exists X.org; cp X X.orig; fi", then you can always copy from > >> X.orig. > >> > >> As Bruce says, it definitely shouldn't be a warning, this can happen > >> quite normally. > >> > >> Cheers, > >> > >> Richard > > > > > > > > > > > -- > - Thou shalt not follow the NULL pointer, for chaos and madness await > thee at its end > - "Use the force Harry" - Gandalf, Star Trek II >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#192670): https://lists.openembedded.org/g/openembedded-core/message/192670 Mute This Topic: https://lists.openembedded.org/mt/103208527/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
