[Buildroot] [PATCH] package/pkg-generic: don't exclude virtual packages from packages list
Peter Korsgaard
peter at korsgaard.com
Fri Sep 30 15:18:56 UTC 2022
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
> Currently, with a configuration with an internal toolchain, and no other
> package is selected [0], especially when one wants to generate an SDK or
> a pre-built, pre-installed toolchain, running 'make' will only build
> glibc (and its dependencies), and not the full toolchain, as one would
> have expected, so there would be no host-final-gcc.
> The reason is that 'toolchain' is a virtual package, so it is excluded
> from PACKAGES, the list of packages enabled in the configuration. so it
> is not a dependency of target-finalize, and so nothing pulls it in the
> build.
> The reason for excluding virtual packages from that list is not obvious.
> When virtual packages were introduced in 743982441201 (packages: add
> infrastructure for virtual packages), there was no BR2_PACKAGE_FOO
> symbol for virtual packages (but there was BR2_PACKAGE_HAS_FOO), so
> there was no telling that the virtual package was enabled, like we had
> for the other kinds of packages (normal, bootloader, toolchain, or linux
> kernel).
> That caused issues, so in f674c428c2ef (core/pkg-virtual: do not check
> they are neabled [sic]), and then 3e1b33a5349b (pkg-generic: improve
> incorrectly used package detection), we explicitly excluded the virtual
> packages from causing a build failure when something depended on them,
> as we could not yet now whether a virtual package was actually enabled
> or not.
> Then, in 842ba7eceffb (pkg-generic: fix rdepends and phony targets of
> virtual packages), we eventually associated a virtual package to is
> BR2_PACKAGE_HAS_FOO, which allows treating virtual packages like the
> other kinds of packages. There, we explicitly kept virtual packages out
> of the list, though (the reasoning was that virtual packages install
> nothing in host/ or target/, so they do not directly contribute to the
> final content, so we do not need to rsync them, so this was an
> optimisation).
> However, virtual packages are in fact actual generic packages, and it is
> possible for virtual packages to actually provide content for the final
> image. Even though we do not have any virtual package that has actual
> _INSTALL_CMDS, we still have udev that provides a user for example;
> virtual packages in br2-external trees may also very well provide
> install commands (e.g. to install files common to their various
> implementations).
> So, there is currently no technical reason to exclude virtual packages
> from PACKAGES, the list of packages enabled in the configuration.
> Drop the excluding condition, and always add enabled package, whatever
> their kind, to the list of enabled packages.
> [0] defconfig to reproduce the issue:
> BR2_INIT_NONE=y
> BR2_SYSTEM_BIN_SH_NONE=y
> # BR2_PACKAGE_BUSYBOX is not set
> # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
> # BR2_TARGET_ROOTFS_TAR is not set
> Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>
Committed to 2022.02.x, 2022.05.x and 2022.08.x, thanks.
--
Bye, Peter Korsgaard
More information about the buildroot
mailing list