| Message ID | 20261029024010.2113092-1-ragaprasanth@gmail.com |
|---|---|
| State | New |
| Headers | show |
| Series | kernel.bbclass: fix -dev files when KERNEL_PACKAGE_NAME is PN | expand |
Hi Bruce, Thanks for the detailed review and the explanation regarding the event handler. That makes perfect sense. Sent v2. Thanks, Prasanth R On Thu, Oct 29, 2026 at 12:35 PM Bruce Ashfield <bruce.ashfield@gmail.com> wrote: > On Wed, Oct 29, 2026 at 11:40 AM Prasanth R <ragaprasanth@gmail.com> > wrote: > > > > Can you elaborate on the configuration / build that you are doing that > is triggering this ? You have multiple kernels ? and you are setting > KERNEL_PACKAGE_NAME = "${PN}" as part of that ? How you ran into this > is important for understanding the context. It could be that we can > avoid the issue in another way. > > > With KERNEL_PACKAGE_NAME = "${PN}", FILES:${KERNEL_PACKAGE_NAME}-dev and > > FILES:${PN}-dev from bitbake.conf become the same variable and the > > bitbake.conf value wins. The same happens for -dbg. The kernel files are > > then not packaged and do_package fails: > > Also for -dbg, the bitbake.conf value is a superset of what the kernel > class > sets, so nothing is actually lost there. It is just the key collision > warning. Worth saying that, so it is clear that -dev is the real breakage. > > > > > ERROR: linux-yocto-7.2.8+git-r0 do_package: QA Issue: linux-yocto: > > Files/directories were installed but not shipped in any package: > > /boot/System.map-7.2.8-yocto-standard > > /boot/config-7.2.8-yocto-standard > > /boot/Module.symvers-7.2.8-yocto-standard > > > > This matters when a second kernel recipe. So, Rename the kernel variables > > to the ${PN} names before the keys are expanded, so the kernel values > are kept. > > This sentence is broken. Can you say who actually sets > KERNEL_PACKAGE_NAME = "${PN}" and why? I assume an alternate/second > kernel recipe, but that should be spelled out. This is the specifics > that are hinted at in my opening question. > > I'd also like the commit message to explain why an event handler is > needed. My first reaction was that this was more complex than it needed > to be. But key expansion happens (in sorted order) before anonymous python > runs, so by the time __anonymous() sees it, the kernel value is already > gone. Fixing it in anonymous python would also clobber any :append to > FILES:${KERNEL_PACKAGE_NAME}-dev from a bbappend. A :append in the class > keeps the files but still triggers the "Variable key ... replaces original > key" warning on every parse. So renaming before expansion is the right > place. Just say so in the commit, so the next person doesn't have to work > it out again. > > > > > Remove the old warning about bug 11905, which was closed as not a bug. > > Fine. 11905 is the same key expansion ordering issue, and that is > expected bitbake behaviour, which is why the fix belongs here. > > > > > AI-Generated: Uses Claude > > Signed-off-by: Prasanth R <prasanth.r@lineo.co.jp> > > --- > > > > Notes: > > Tested on master: without this patch do_package fails with the > > QA error above; with it the build passes with no warnings and > linux-yocto-dev > > contains System.map, Module.symvers and the config. > > Please also confirm the default case (KERNEL_PACKAGE_NAME = "kernel") is > unchanged. It should be, since the handler returns early, but it is the > case almost everyone uses. > > Also note in the commit that with KERNEL_PACKAGE_NAME = "${PN}", the -dev > package no longer picks up the bitbake.conf default -dev contents > (includedir, .so symlinks, etc). That matches what kernel-dev gets > today, so I think it is correct, but it is a behaviour change and should > be stated (and confirmed by testing). > > > > > meta/classes-recipe/kernel.bbclass | 21 ++++++++++++++------- > > 1 file changed, 14 insertions(+), 7 deletions(-) > > > > diff --git a/meta/classes-recipe/kernel.bbclass > b/meta/classes-recipe/kernel.bbclass > > index 0a6d754108..b018c164fd 100644 > > --- a/meta/classes-recipe/kernel.bbclass > > +++ b/meta/classes-recipe/kernel.bbclass > > @@ -60,16 +60,23 @@ KERNEL_VERSION_NAME[vardepvalue] = "${LINUX_VERSION}" > > KERNEL_VERSION_PKG_NAME = > "${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}" > > KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}" > > > > +# With KERNEL_PACKAGE_NAME = "${PN}", FILES:${PN}-dev/-dbg from > bitbake.conf > > +# would replace the kernel values during key expansion, so rename the > kernel > > +# variables to the ${PN} names first. > > Same here. Add a line saying this must run before key expansion > (i.e. it can't live in __anonymous), so nobody "simplifies" it later. > > > +python kernel_package_name_handler () { > > + d = e.data > > + if d.getVar("KERNEL_PACKAGE_NAME") != d.getVar("PN"): > > + return > > + > > + for pkg in ("dev", "dbg"): > > + d.renameVar("FILES:${KERNEL_PACKAGE_NAME}-%s" % pkg, > "FILES:${PN}-%s" % pkg) > > +} > > +addhandler kernel_package_name_handler > > +kernel_package_name_handler[eventmask] = "bb.event.RecipePreFinalise" > > + > > python __anonymous () { > > - pn = d.getVar("PN") > > kpn = d.getVar("KERNEL_PACKAGE_NAME") > > > > - # XXX Remove this after bug 11905 is resolved > > - # FILES:${KERNEL_PACKAGE_NAME}-dev doesn't expand correctly > > - if kpn == pn: > > - bb.warn("Some packages (E.g. *-dev) might be missing due to " > > - "bug 11905 (variable KERNEL_PACKAGE_NAME == PN)") > > - > > The code itself looks fine. A v2 with the commit message and comment > updates and I'll ack it. > > Bruce > > > -- > > 2.34.1 >
diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass index 0a6d754108..b018c164fd 100644 --- a/meta/classes-recipe/kernel.bbclass +++ b/meta/classes-recipe/kernel.bbclass @@ -60,16 +60,23 @@ KERNEL_VERSION_NAME[vardepvalue] = "${LINUX_VERSION}" KERNEL_VERSION_PKG_NAME = "${@legitimize_package_name(d.getVar('KERNEL_VERSION'))}" KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}" +# With KERNEL_PACKAGE_NAME = "${PN}", FILES:${PN}-dev/-dbg from bitbake.conf +# would replace the kernel values during key expansion, so rename the kernel +# variables to the ${PN} names first. +python kernel_package_name_handler () { + d = e.data + if d.getVar("KERNEL_PACKAGE_NAME") != d.getVar("PN"): + return + + for pkg in ("dev", "dbg"): + d.renameVar("FILES:${KERNEL_PACKAGE_NAME}-%s" % pkg, "FILES:${PN}-%s" % pkg) +} +addhandler kernel_package_name_handler +kernel_package_name_handler[eventmask] = "bb.event.RecipePreFinalise" + python __anonymous () { - pn = d.getVar("PN") kpn = d.getVar("KERNEL_PACKAGE_NAME") - # XXX Remove this after bug 11905 is resolved - # FILES:${KERNEL_PACKAGE_NAME}-dev doesn't expand correctly - if kpn == pn: - bb.warn("Some packages (E.g. *-dev) might be missing due to " - "bug 11905 (variable KERNEL_PACKAGE_NAME == PN)") - # The default kernel recipe builds in a shared location defined by # bitbake/distro confs: STAGING_KERNEL_DIR and STAGING_KERNEL_BUILDDIR. # Set these variables to directories under ${WORKDIR} in alternate
With KERNEL_PACKAGE_NAME = "${PN}", FILES:${KERNEL_PACKAGE_NAME}-dev and FILES:${PN}-dev from bitbake.conf become the same variable and the bitbake.conf value wins. The same happens for -dbg. The kernel files are then not packaged and do_package fails: ERROR: linux-yocto-7.2.8+git-r0 do_package: QA Issue: linux-yocto: Files/directories were installed but not shipped in any package: /boot/System.map-7.2.8-yocto-standard /boot/config-7.2.8-yocto-standard /boot/Module.symvers-7.2.8-yocto-standard This matters when a second kernel recipe. So, Rename the kernel variables to the ${PN} names before the keys are expanded, so the kernel values are kept. Remove the old warning about bug 11905, which was closed as not a bug. AI-Generated: Uses Claude Signed-off-by: Prasanth R <prasanth.r@lineo.co.jp> --- Notes: Tested on master: without this patch do_package fails with the QA error above; with it the build passes with no warnings and linux-yocto-dev contains System.map, Module.symvers and the config. meta/classes-recipe/kernel.bbclass | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)