Message ID | 20231218115310.438367-1-ecordonnier@snap.com |
---|---|
State | New |
Headers | show |
Series | [v3] kernel.bbclass: make do_symlink_kernelsrc reentrant | expand |
patch v3: changed bb.warn to bb.info, improved comment, moved code to the correct if block to avoid removal of kernsrc On Mon, Dec 18, 2023 at 12:53 PM <ecordonnier@snap.com> wrote: > 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 > > Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com> > --- > 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..cdd5f8e9a1 100644 > --- a/meta/classes-recipe/kernel.bbclass > +++ b/meta/classes-recipe/kernel.bbclass > @@ -183,6 +183,11 @@ python do_symlink_kernsrc () { > s = d.getVar("S") > kernsrc = d.getVar("STAGING_KERNEL_DIR") > if s != kernsrc: > + if os.path.islink(s): > + # this happens for instance when a poky update modifies this > class, > + # forcing symlink_kernsrc to run again after s was already > moved to kernsrc > + bb.info("%s is already a symlink! Not symlinking kernel > sources" % s) > + return 0 > bb.utils.mkdirhier(kernsrc) > bb.utils.remove(kernsrc, recurse=True) > if s[-1] == '/': > -- > 2.36.1.vfs.0.0 > >
diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass index 9ff37f5c38..cdd5f8e9a1 100644 --- a/meta/classes-recipe/kernel.bbclass +++ b/meta/classes-recipe/kernel.bbclass @@ -183,6 +183,11 @@ python do_symlink_kernsrc () { s = d.getVar("S") kernsrc = d.getVar("STAGING_KERNEL_DIR") if s != kernsrc: + if os.path.islink(s): + # this happens for instance when a poky update modifies this class, + # forcing symlink_kernsrc to run again after s was already moved to kernsrc + bb.info("%s is already a symlink! Not symlinking kernel sources" % s) + return 0 bb.utils.mkdirhier(kernsrc) bb.utils.remove(kernsrc, recurse=True) if s[-1] == '/':