mirror of
https://github.com/openwrt/packages.git
synced 2026-10-13 23:07:42 +04:00
snapcast: make build options explicit and per-package deps precise
Pin every CMake BUILD_WITH_* switch and expose the optional features as config symbols, so builds are reproducible and snapserver/snapclient each depend only on the libraries their binary actually links (boost is header-only and becomes a build-only dependency). Add a patch introducing a BUILD_WITH_SOXR option: upstream looks SOXR up with an unconditional pkg_search_module(), so resampling gets enabled purely by whether libsoxr happens to be discoverable in the shared staging dir - non-deterministic in a package feed. The option makes it an explicit, REQUIRED choice (enabled-but-missing fails at configure time instead of silently dropping the feature). Assisted-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Mirko Vogt <mirko-openwrt@nanl.de>
This commit is contained in:
1 parent
b442c043a7
commit
7673cd9a3e
2 files changed
+158
-8
No files matched your search
+120
-8
@@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=snapcast
|
PKG_NAME:=snapcast
|
||||||
PKG_VERSION:=0.35.0
|
PKG_VERSION:=0.35.0
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=2
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/snapcast/snapcast.git
|
PKG_SOURCE_URL:=https://github.com/snapcast/snapcast.git
|
||||||
@@ -16,25 +16,75 @@ PKG_LICENSE:=GPL-3.0-or-later
|
|||||||
PKG_LICENSE_FILES:=LICENSE
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
PKG_CPE_ID:=cpe:/a:badaix:snapcast
|
PKG_CPE_ID:=cpe:/a:badaix:snapcast
|
||||||
|
|
||||||
|
# Optional features are individually selectable (see Package/snapserver/config).
|
||||||
|
# Listing the symbols here reconfigures and rebuilds the package whenever any of
|
||||||
|
# them is toggled.
|
||||||
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
CONFIG_SNAPCAST_ALSA \
|
||||||
|
CONFIG_SNAPCAST_AVAHI \
|
||||||
|
CONFIG_SNAPCAST_EXPAT \
|
||||||
|
CONFIG_SNAPCAST_FLAC \
|
||||||
|
CONFIG_SNAPCAST_OPUS \
|
||||||
|
CONFIG_SNAPCAST_SOXR \
|
||||||
|
CONFIG_SNAPCAST_SSL \
|
||||||
|
CONFIG_SNAPCAST_VORBIS
|
||||||
|
|
||||||
|
# snapserver and snapclient are produced by a single source build, so every
|
||||||
|
# enabled feature library must be staged whenever the source is built,
|
||||||
|
# regardless of which of the two binary packages is selected. These are pure
|
||||||
|
# build-time prerequisites; the precise per-binary runtime dependencies (what
|
||||||
|
# actually lands on the target) are declared in each Package/* DEPENDS below.
|
||||||
|
PKG_BUILD_DEPENDS:= \
|
||||||
|
$(if $(CONFIG_SNAPCAST_ALSA),alsa-lib) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_AVAHI),libavahi-client) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_EXPAT),libexpat) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_FLAC),libflac) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_OPUS),libopus) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_SOXR),libsoxr) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_SSL),libopenssl) \
|
||||||
|
$(if $(CONFIG_SNAPCAST_VORBIS),libvorbis libvorbisidec) \
|
||||||
|
boost
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
include $(INCLUDE_DIR)/cmake.mk
|
include $(INCLUDE_DIR)/cmake.mk
|
||||||
|
|
||||||
|
# Every upstream build switch is pinned explicitly for reproducible builds; the
|
||||||
|
# optional ones follow their config symbol. Client-only desktop backends other
|
||||||
|
# than ALSA are unavailable on OpenWrt and stay off.
|
||||||
CMAKE_OPTIONS += \
|
CMAKE_OPTIONS += \
|
||||||
-DBUILD_TESTS=OFF \
|
-DBUILD_TESTS=OFF \
|
||||||
-DBUILD_WITH_ALSA=ON \
|
-DBUILD_WITH_ALSA=$(if $(CONFIG_SNAPCAST_ALSA),ON,OFF) \
|
||||||
-DBUILD_WITH_AVAHI=OFF \
|
-DBUILD_WITH_AVAHI=$(if $(CONFIG_SNAPCAST_AVAHI),ON,OFF) \
|
||||||
|
-DBUILD_WITH_EXPAT=$(if $(CONFIG_SNAPCAST_EXPAT),ON,OFF) \
|
||||||
|
-DBUILD_WITH_FLAC=$(if $(CONFIG_SNAPCAST_FLAC),ON,OFF) \
|
||||||
-DBUILD_WITH_JACK=OFF \
|
-DBUILD_WITH_JACK=OFF \
|
||||||
|
-DBUILD_WITH_OPUS=$(if $(CONFIG_SNAPCAST_OPUS),ON,OFF) \
|
||||||
-DBUILD_WITH_PIPEWIRE=OFF \
|
-DBUILD_WITH_PIPEWIRE=OFF \
|
||||||
-DBUILD_WITH_PULSE=OFF \
|
-DBUILD_WITH_PULSE=OFF \
|
||||||
-DBUILD_WITH_SSL=OFF \
|
-DBUILD_WITH_SDL2=OFF \
|
||||||
-DBUILD_WITH_TREMOR=ON
|
-DBUILD_WITH_SOXR=$(if $(CONFIG_SNAPCAST_SOXR),ON,OFF) \
|
||||||
|
-DBUILD_WITH_SSL=$(if $(CONFIG_SNAPCAST_SSL),ON,OFF) \
|
||||||
|
-DBUILD_WITH_TREMOR=$(if $(CONFIG_SNAPCAST_VORBIS),ON,OFF) \
|
||||||
|
-DBUILD_WITH_VORBIS=$(if $(CONFIG_SNAPCAST_VORBIS),ON,OFF) \
|
||||||
|
-DWERROR=OFF
|
||||||
|
|
||||||
define Package/snapcast/Default
|
define Package/snapcast/Default
|
||||||
SECTION:=sound
|
SECTION:=sound
|
||||||
CATEGORY:=Sound
|
CATEGORY:=Sound
|
||||||
TITLE:=Synchronous multiroom audio player
|
TITLE:=Synchronous multiroom audio player
|
||||||
DEPENDS:=+alsa-lib +libexpat +libatomic +libogg +libflac +libopus +boost +libsoxr
|
|
||||||
URL:=https://github.com/snapcast/snapcast
|
URL:=https://github.com/snapcast/snapcast
|
||||||
|
# Dependencies common to both binaries. Feature libraries that only one of the
|
||||||
|
# two links are added in the respective package below, so each package pulls
|
||||||
|
# only what its binary actually needs at runtime.
|
||||||
|
DEPENDS:= \
|
||||||
|
+SNAPCAST_ALSA:alsa-lib \
|
||||||
|
+SNAPCAST_AVAHI:libavahi-client \
|
||||||
|
+SNAPCAST_FLAC:libflac \
|
||||||
|
+SNAPCAST_OPUS:libopus \
|
||||||
|
+SNAPCAST_SSL:libopenssl \
|
||||||
|
+libatomic \
|
||||||
|
+libogg \
|
||||||
|
+libstdcpp
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/snapcast/Default/description
|
define Package/snapcast/Default/description
|
||||||
@@ -53,16 +103,78 @@ define Package/snapcast/Default/description
|
|||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
# The optional-feature menu is shared by both binaries (single source build), so
|
||||||
|
# it is declared once. The symbols are free-standing (no "depends on
|
||||||
|
# PACKAGE_*"): the packages reference them in DEPENDS, and a back-dependency
|
||||||
|
# here would form a Kconfig recursion.
|
||||||
|
define Package/snapserver/config
|
||||||
|
menu "Snapcast feature selection"
|
||||||
|
|
||||||
|
config SNAPCAST_ALSA
|
||||||
|
bool "ALSA support (server capture source + client playback)"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds a dependency on alsa-lib.
|
||||||
|
|
||||||
|
config SNAPCAST_AVAHI
|
||||||
|
bool "Avahi / zeroconf support"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Adds a dependency on libavahi-client.
|
||||||
|
|
||||||
|
config SNAPCAST_EXPAT
|
||||||
|
bool "EXPAT / XML support (server)"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds a dependency on libexpat.
|
||||||
|
|
||||||
|
config SNAPCAST_FLAC
|
||||||
|
bool "FLAC codec support"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds a dependency on libflac.
|
||||||
|
|
||||||
|
config SNAPCAST_OPUS
|
||||||
|
bool "Opus codec support"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds a dependency on libopus.
|
||||||
|
|
||||||
|
config SNAPCAST_SOXR
|
||||||
|
bool "SOXR resampling support (server)"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds a dependency on libsoxr.
|
||||||
|
|
||||||
|
config SNAPCAST_SSL
|
||||||
|
bool "SSL / TLS support"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Adds a dependency on libopenssl.
|
||||||
|
|
||||||
|
config SNAPCAST_VORBIS
|
||||||
|
bool "Ogg Vorbis support (server encoder + client Tremor decoder)"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Adds dependencies on libvorbis (server) and
|
||||||
|
libvorbisidec (client).
|
||||||
|
endmenu
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/snapserver
|
define Package/snapserver
|
||||||
$(call Package/snapcast/Default)
|
$(call Package/snapcast/Default)
|
||||||
TITLE+= (server)
|
TITLE+= (server)
|
||||||
DEPENDS+=+libvorbis
|
DEPENDS+= \
|
||||||
|
+SNAPCAST_EXPAT:libexpat \
|
||||||
|
+SNAPCAST_SOXR:libsoxr \
|
||||||
|
+SNAPCAST_VORBIS:libvorbis
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/snapclient
|
define Package/snapclient
|
||||||
$(call Package/snapcast/Default)
|
$(call Package/snapcast/Default)
|
||||||
TITLE+= (client)
|
TITLE+= (client)
|
||||||
DEPENDS+=+libvorbisidec
|
DEPENDS+= \
|
||||||
|
+SNAPCAST_VORBIS:libvorbisidec
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/snapserver/description
|
define Package/snapserver/description
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mirko Vogt <foss@mirko.in>
|
||||||
|
Date: Mon, 20 Jul 2026 12:00:00 +0000
|
||||||
|
Subject: [PATCH] cmake: add an explicit BUILD_WITH_SOXR option
|
||||||
|
|
||||||
|
Upstream looks SOXR up with an unconditional pkg_search_module(), so the
|
||||||
|
optional resampling feature is enabled purely by whether libsoxr is
|
||||||
|
discoverable in the build environment. In a shared package staging that
|
||||||
|
is non-deterministic. Guard the lookup behind a real option (default ON,
|
||||||
|
preserving previous behaviour) and mark it REQUIRED, so an
|
||||||
|
enabled-but-missing libsoxr fails at configure time instead of silently
|
||||||
|
dropping the feature.
|
||||||
|
|
||||||
|
Signed-off-by: Mirko Vogt <foss@mirko.in>
|
||||||
|
Assisted-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index ef2252d..eb76646 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -264,7 +264,10 @@ if(NOT WIN32 AND NOT ANDROID)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
- pkg_search_module(SOXR soxr)
|
||||||
|
+ option(BUILD_WITH_SOXR "Build with SOXR resampling support" ON)
|
||||||
|
+ if(BUILD_WITH_SOXR)
|
||||||
|
+ pkg_search_module(SOXR REQUIRED soxr)
|
||||||
|
+ endif()
|
||||||
|
if(SOXR_FOUND)
|
||||||
|
add_compile_definitions(HAS_SOXR)
|
||||||
|
else()
|
||||||
|
--
|
||||||
|
2.47.3
|
||||||
|
|
||||||
Reference in new issue
Block a user