From patchwork Wed Jan 7 15:38:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 78221 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F75DCFD65C for ; Wed, 7 Jan 2026 15:38:16 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.8704.1767800290962706149 for ; Wed, 07 Jan 2026 07:38:11 -0800 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BE1B6497 for ; Wed, 7 Jan 2026 07:38:03 -0800 (PST) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 3C2EF3F5A1 for ; Wed, 7 Jan 2026 07:38:10 -0800 (PST) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 4/5] alsa-utils: dynamically split the packages instead of doing it manually Date: Wed, 7 Jan 2026 15:38:02 +0000 Message-ID: <20260107153803.2905889-4-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260107153803.2905889-1-ross.burton@arm.com> References: <20260107153803.2905889-1-ross.burton@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 07 Jan 2026 15:38:16 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/229010 Instead of hard-coding a long list of packages and the FILES, we can use do_split_packages to do the bulk of the work for us. Leave the SUMMARY (and add some which were missing) and the FILES that are needed to catch extra files for each package. This removes the alsa-utils-scripts package which only existed to isolate the bash depedencies, and instead adds separate -alsaconf and -alsa-info packages for each of the scripts. Signed-off-by: Ross Burton --- .../alsa/alsa-utils_1.2.15.bb | 120 +++++++----------- 1 file changed, 45 insertions(+), 75 deletions(-) diff --git a/meta/recipes-multimedia/alsa/alsa-utils_1.2.15.bb b/meta/recipes-multimedia/alsa/alsa-utils_1.2.15.bb index e528591ec6..84b196a020 100644 --- a/meta/recipes-multimedia/alsa/alsa-utils_1.2.15.bb +++ b/meta/recipes-multimedia/alsa/alsa-utils_1.2.15.bb @@ -9,7 +9,13 @@ SECTION = "console/utils" LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642" -DEPENDS = "alsa-lib ncurses libsamplerate0" +DEPENDS = "alsa-lib ncurses libsamplerate0 bash" + +SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2 \ + file://0001-alsactl-fix-build-when-in-subdirectory.patch" +SRC_URI[sha256sum] = "d3183d2ed2d69e9143c5beb97036267c3fdabfe8bfbea8bc6863f17b1f0b568e" + +inherit autotools gettext pkgconfig manpages PACKAGECONFIG ??= "udev" @@ -23,90 +29,54 @@ PACKAGECONFIG[bat] = "--enable-bat,--disable-bat,fftwf" PACKAGECONFIG[udev] = ",--with-udev-rules-dir=/unwanted/rules.d,udev" PACKAGECONFIG[manpages] = "--enable-rst2man --enable-xmlto, --disable-rst2man --disable-xmlto, python3-docutils-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native" -# alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe -SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2 \ - file://0001-alsactl-fix-build-when-in-subdirectory.patch" -SRC_URI[sha256sum] = "d3183d2ed2d69e9143c5beb97036267c3fdabfe8bfbea8bc6863f17b1f0b568e" - -inherit autotools gettext pkgconfig manpages - -# This are all packages that we need to make. Also, the now empty alsa-utils -# ipk depends on them. - -ALSA_UTILS_PKGS = "\ - ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'alsa-utils-alsabat', '', d)} \ - alsa-utils-alsamixer \ - alsa-utils-alsatplg \ - alsa-utils-midi \ - alsa-utils-aplay \ - alsa-utils-amixer \ - alsa-utils-aconnect \ - alsa-utils-iecset \ - alsa-utils-speakertest \ - alsa-utils-aseqnet \ - alsa-utils-aseqdump \ - alsa-utils-aseqsend \ - alsa-utils-alsactl \ - alsa-utils-alsaloop \ - alsa-utils-alsaucm \ - alsa-utils-scripts \ - alsa-utils-nhltdmicinfo \ - " - -PACKAGES += "${ALSA_UTILS_PKGS}" -RDEPENDS:${PN} += "${ALSA_UTILS_PKGS}" - +# alsa-utils is an empty meta-package FILES:${PN} = "" -ALLOW_EMPTY:alsa-utils = "1" -FILES:alsa-utils-alsabat = "${bindir}/alsabat" -FILES:alsa-utils-alsatplg = "${bindir}/alsatplg ${libdir}/alsa-topology" -FILES:alsa-utils-aplay = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer" -FILES:alsa-utils-amixer = "${bindir}/amixer" -FILES:alsa-utils-alsamixer = "${bindir}/alsamixer" -FILES:alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/" -FILES:alsa-utils-midi = "${bindir}/aplaymidi* ${bindir}/arecordmidi* ${bindir}/amidi" -FILES:alsa-utils-aconnect = "${bindir}/aconnect" -FILES:alsa-utils-aseqnet = "${bindir}/aseqnet" -FILES:alsa-utils-aseqsend = "${bindir}/aseqsend" -FILES:alsa-utils-iecset = "${bindir}/iecset" -FILES:alsa-utils-alsactl = "${sbindir}/alsactl */udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/" -FILES:alsa-utils-aseqdump = "${bindir}/aseqdump" -FILES:alsa-utils-alsaloop = "${bindir}/alsaloop" -FILES:alsa-utils-alsaucm = "${bindir}/alsaucm */udev/rules.d/89-alsa-ucm.rules */*/udev/rules.d/89-alsa-ucm.rules" -FILES:alsa-utils-scripts = "${sbindir}/alsaconf \ - ${sbindir}/alsa-info.sh \ - ${sbindir}/alsabat-test.sh \ - " -FILES:alsa-utils-nhltdmicinfo = "${bindir}/nhlt-dmic-info" +ALLOW_EMPTY:${PN} = "1" -SUMMARY:alsa-utils-alsabat = "Command-line sound tester for ALSA sound card driver" -SUMMARY:alsa-utils-alsatplg = "Converts topology text files into binary format for kernel" -SUMMARY:alsa-utils-aplay = "Play (and record) sound files using ALSA" -SUMMARY:alsa-utils-amixer = "Command-line control for ALSA mixer and settings" -SUMMARY:alsa-utils-alsamixer = "ncurses-based control for ALSA mixer and settings" -SUMMARY:alsa-utils-speakertest = "ALSA surround speaker test utility" -SUMMARY:alsa-utils-midi = "Miscellaneous MIDI utilities for ALSA" -SUMMARY:alsa-utils-aconnect = "ALSA sequencer connection manager" -SUMMARY:alsa-utils-aseqnet = "Network client/server for ALSA sequencer" -SUMMARY:alsa-utils-iecset = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits" -SUMMARY:alsa-utils-alsactl = "Saves/restores ALSA-settings in /etc/asound.state" -SUMMARY:alsa-utils-aseqdump = "Shows the events received at an ALSA sequencer port" -SUMMARY:alsa-utils-alsaloop = "ALSA PCM loopback utility" -SUMMARY:alsa-utils-alsaucm = "ALSA Use Case Manager" -SUMMARY:alsa-utils-scripts = "Shell scripts that show help info and create ALSA configuration files" -SUMMARY:alsa-utils-nhltdmicinfo = "Dumps microphone array information from ACPI NHLT table" +FILES:${PN}-alsabat = "${sbindir}/alsabat-test.sh" +FILES:${PN}-alsactl = "*/udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/" +FILES:${PN}-alsatplg = "${libdir}/alsa-topology" +FILES:${PN}-amidi = "${bindir}/amidi ${bindir}/aplaymidi* ${bindir}/arecordmidi*" +FILES:${PN}-aplay = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer" +FILES:${PN}-speaker-test = "${datadir}/sounds/alsa/" -RRECOMMENDS:alsa-utils-alsactl = "alsa-states" +SUMMARY:${PN}-aconnect = "ALSA sequencer connection manager" +SUMMARY:${PN}-alsabat = "Command-line sound tester for ALSA sound card driver" +SUMMARY:${PN}-alsaconf = "ALSA driver configurator script" +SUMMARY:${PN}-alsactl = "Saves/restores ALSA-settings in /etc/asound.state" +SUMMARY:${PN}-alsa-info = "Gather information about ALSA subsystem" +SUMMARY:${PN}-alsaloop = "ALSA PCM loopback utility" +SUMMARY:${PN}-alsamixer = "ncurses-based control for ALSA mixer and settings" +SUMMARY:${PN}-alsatplg = "Converts topology text files into binary format for kernel" +SUMMARY:${PN}-alsaucm = "ALSA Use Case Manager" +SUMMARY:${PN}-amidi = "Miscellaneous MIDI utilities for ALSA" +SUMMARY:${PN}-amixer = "Command-line control for ALSA mixer and settings" +SUMMARY:${PN}-aplay = "Play (and record) sound files using ALSA" +SUMMARY:${PN}-aseqdump = "Shows the events received at an ALSA sequencer port" +SUMMARY:${PN}-aseqnet = "Network client/server for ALSA sequencer" +SUMMARY:${PN}-aseqsend = "Send arbitrary messages to ALSA seqencer port" +SUMMARY:${PN}-iecset = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits" +SUMMARY:${PN}-nhlt-dmic-info = "Dumps microphone array information from ACPI NHLT table" +SUMMARY:${PN}-speaker-test = "ALSA surround speaker test utility" -do_install() { - autotools_do_install +RRECOMMENDS:${PN}-alsactl = "alsa-states" +do_install:append() { # If udev is disabled, we told configure to install the rules # in /unwanted, so we can remove them now. If udev is enabled, # then /unwanted won't exist and this will have no effect. rm -rf ${D}/unwanted } +python populate_packages:prepend() { + pn = d.getVar("PN") + packages = do_split_packages(d, d.getVar("bindir"), r"^([^.]+).*$", pn + "-%s", "alsa-utils tool %s", extra_depends="") + packages += do_split_packages(d, d.getVar("sbindir"), r"^([^.]+).*$", pn + "-%s", "alsa-utils tool %s", extra_depends="") + d.setVar("RDEPENDS:" + pn, " ".join(packages)) +} + PROVIDES = "alsa-utils-alsaconf alsa-utils-scripts" -RDEPENDS:${PN}-scripts += "bash" +RDEPENDS:${PN}-alsa-info += "bash" +RDEPENDS:${PN}-alsabat += "bash" +RDEPENDS:${PN}-alsaconf += "bash"