[bin] Fix build script for snapclient
This commit is contained in:
170
bin/.local/bin/build_snapclient.sh
Normal file → Executable file
170
bin/.local/bin/build_snapclient.sh
Normal file → Executable file
@ -1,64 +1,138 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env bash
|
||||||
set -eu
|
set -euo pipefail
|
||||||
|
|
||||||
|
log() { printf "\n==> %s\n" "$*"; }
|
||||||
|
have() { command -v "$1" >/dev/null 2>&1; }
|
||||||
|
|
||||||
REPO_URL="https://github.com/badaix/snapcast.git"
|
REPO_URL="https://github.com/badaix/snapcast.git"
|
||||||
WORKDIR="${WORKDIR:-$HOME/tmp/snapcast}"
|
WORKDIR="${WORKDIR:-$HOME/tmp/snapcast}"
|
||||||
PREFIX="$HOME/.local"
|
PREFIX="${PREFIX:-$HOME/.local}"
|
||||||
|
|
||||||
# Ensure ~/.local/bin exists
|
|
||||||
mkdir -p "$PREFIX/bin"
|
mkdir -p "$PREFIX/bin"
|
||||||
|
mkdir -p "$(dirname "$WORKDIR")"
|
||||||
|
|
||||||
# --- Detect distro ---
|
# --- Detect distro ---
|
||||||
if [ -r /etc/os-release ]; then
|
if [[ -r /etc/os-release ]]; then
|
||||||
. /etc/os-release
|
# shellcheck disable=SC1091
|
||||||
|
. /etc/os-release
|
||||||
else
|
else
|
||||||
echo "Cannot read /etc/os-release; unsupported system." >&2
|
echo "Cannot read /etc/os-release; unsupported system." >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
fi
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
log() { printf "\n==> %s\n" "$*"; }
|
||||||
|
|
||||||
|
REPO_URL="https://github.com/badaix/snapcast.git"
|
||||||
|
WORKDIR="${WORKDIR:-$HOME/tmp/snapcast}"
|
||||||
|
PREFIX="${PREFIX:-$HOME/.local}"
|
||||||
|
|
||||||
|
mkdir -p "$PREFIX/bin"
|
||||||
|
mkdir -p "$(dirname "$WORKDIR")"
|
||||||
|
|
||||||
|
# --- Detect distro ---
|
||||||
|
if [[ -r /etc/os-release ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /etc/os-release
|
||||||
|
else
|
||||||
|
echo "Cannot read /etc/os-release; unsupported system." >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Normalize Arch-like (EndeavourOS is Arch-based)
|
|
||||||
IS_ARCH=0
|
IS_ARCH=0
|
||||||
case "${ID:-}" in
|
case "${ID:-}" in
|
||||||
arch | endeavouros) IS_ARCH=1 ;;
|
arch|endeavouros) IS_ARCH=1 ;;
|
||||||
esac
|
esac
|
||||||
if [ "$IS_ARCH" -eq 0 ] && [ -n "${ID_LIKE:-}" ]; then
|
if [[ $IS_ARCH -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qi arch; then
|
||||||
echo "$ID_LIKE" | grep -qi arch && IS_ARCH=1 || true
|
IS_ARCH=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IS_FEDORA=0
|
||||||
|
case "${ID:-}" in
|
||||||
|
fedora) IS_FEDORA=1 ;;
|
||||||
|
esac
|
||||||
|
if [[ $IS_FEDORA -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qiE 'fedora|rhel'; then
|
||||||
|
IS_FEDORA=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $IS_ARCH -eq 0 && $IS_FEDORA -eq 0 ]]; then
|
||||||
|
echo "Unsupported distro (ID=${ID:-unknown}, ID_LIKE=${ID_LIKE:-unknown})." >&2
|
||||||
|
echo "This script supports Fedora and Arch/EndeavourOS." >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Install dependencies ---
|
# --- Install dependencies ---
|
||||||
if [ "$IS_ARCH" -eq 1 ]; then
|
if [[ $IS_ARCH -eq 1 ]]; then
|
||||||
echo "Detected Arch/EndeavourOS. Installing dependencies with pacman..."
|
log "Detected Arch/EndeavourOS. Installing build deps with pacman..."
|
||||||
sudo pacman -Sy --needed --noconfirm \
|
sudo pacman -Sy --needed --noconfirm \
|
||||||
base-devel cmake boost flac libvorbis opus alsa-lib libsoxr avahi
|
base-devel git cmake pkgconf \
|
||||||
|
boost flac libogg libvorbis opus alsa-lib libsoxr avahi \
|
||||||
|
openssl expat
|
||||||
else
|
else
|
||||||
IS_FEDORA=0
|
log "Detected Fedora. Installing build deps with dnf..."
|
||||||
case "${ID:-}" in
|
sudo dnf install -y \
|
||||||
fedora) IS_FEDORA=1 ;;
|
git cmake make gcc gcc-c++ \
|
||||||
esac
|
pkgconf-pkg-config \
|
||||||
if [ "$IS_FEDORA" -eq 0 ] && [ -n "${ID_LIKE:-}" ]; then
|
boost-devel \
|
||||||
echo "$ID_LIKE" | grep -qi 'fedora\|rhel' && IS_FEDORA=1 || true
|
alsa-lib-devel \
|
||||||
fi
|
avahi-devel \
|
||||||
|
flac-devel \
|
||||||
|
libogg-devel \
|
||||||
|
libvorbis-devel \
|
||||||
|
opus-devel \
|
||||||
|
soxr-devel \
|
||||||
|
expat-devel \
|
||||||
|
openssl-devel
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$IS_FEDORA" -eq 1 ]; then
|
# --- Prefer system pkg-config when available (avoid linuxbrew/pkg-config issues) ---
|
||||||
echo "Detected Fedora. Installing dependencies with dnf..."
|
PKG_CONFIG_BIN="pkg-config"
|
||||||
sudo dnf -y install \
|
if [[ -x /usr/bin/pkg-config ]]; then
|
||||||
cmake gcc-c++ make git \
|
PKG_CONFIG_BIN="/usr/bin/pkg-config"
|
||||||
boost-devel flac-devel libvorbis-devel opus-devel alsa-lib-devel libsoxr-devel avahi-devel
|
fi
|
||||||
else
|
|
||||||
echo "Unsupported distro (ID=${ID:-unknown}, ID_LIKE=${ID_LIKE:-unknown})." >&2
|
# Clear env that commonly breaks pkg-config discovery (esp. with linuxbrew)
|
||||||
exit 1
|
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR CMAKE_PREFIX_PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH
|
||||||
fi
|
|
||||||
|
# Force known-good pkg-config search dirs on Linux (Fedora/Arch)
|
||||||
|
if [[ "$(uname -s)" == "Linux" ]]; then
|
||||||
|
# Arch uses /usr/lib/pkgconfig; Fedora uses /usr/lib64/pkgconfig
|
||||||
|
export PKG_CONFIG_LIBDIR="/usr/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib64/pkgconfig"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Using pkg-config at: $PKG_CONFIG_BIN"
|
||||||
|
"$PKG_CONFIG_BIN" --version || true
|
||||||
|
|
||||||
|
# --- Show which pkg-config modules are available ---
|
||||||
|
log "Checking required pkg-config modules..."
|
||||||
|
REQ_MODULES=(alsa avahi-client flac ogg vorbis vorbisenc opus soxr)
|
||||||
|
missing=()
|
||||||
|
for m in "${REQ_MODULES[@]}"; do
|
||||||
|
if "$PKG_CONFIG_BIN" --exists "$m"; then
|
||||||
|
printf " [OK] %s\n" "$m"
|
||||||
|
else
|
||||||
|
printf " [MISSING] %s\n" "$m"
|
||||||
|
missing+=("$m")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#missing[@]} -ne 0 ]]; then
|
||||||
|
echo
|
||||||
|
echo "Missing pkg-config modules: ${missing[*]}" >&2
|
||||||
|
echo "If you're on Fedora, double-check the devel packages installed:" >&2
|
||||||
|
echo " sudo dnf install -y alsa-lib-devel avahi-devel flac-devel libogg-devel libvorbis-devel opus-devel soxr-devel pkgconf-pkg-config" >&2
|
||||||
|
echo "Also ensure you're not using linuxbrew's pkg-config (which pkg-config should be /usr/bin/pkg-config)." >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Fetch source ---
|
# --- Fetch source ---
|
||||||
mkdir -p "$(dirname "$WORKDIR")"
|
if [[ -d "$WORKDIR/.git" ]]; then
|
||||||
|
log "Repo exists. Updating..."
|
||||||
if [ -d "$WORKDIR/.git" ]; then
|
git -C "$WORKDIR" pull --rebase
|
||||||
echo "Updating existing Snapcast repo..."
|
|
||||||
git -C "$WORKDIR" pull --rebase
|
|
||||||
else
|
else
|
||||||
echo "Cloning Snapcast..."
|
log "Cloning Snapcast..."
|
||||||
git clone "$REPO_URL" "$WORKDIR"
|
git clone "$REPO_URL" "$WORKDIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Build snapclient only ---
|
# --- Build snapclient only ---
|
||||||
@ -66,19 +140,17 @@ cd "$WORKDIR"
|
|||||||
mkdir -p build
|
mkdir -p build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
echo "Configuring with prefix=$PREFIX"
|
log "Configuring (install prefix: $PREFIX)"
|
||||||
cmake .. \
|
cmake .. \
|
||||||
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
|
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
|
||||||
-DBUILD_SERVER=OFF \
|
-DBUILD_SERVER=OFF \
|
||||||
-DBUILD_CLIENT=ON
|
-DBUILD_CLIENT=ON
|
||||||
|
|
||||||
echo "Building..."
|
log "Building..."
|
||||||
make -j"$(nproc)"
|
make -j"$(nproc)"
|
||||||
|
|
||||||
echo "Installing to $PREFIX/bin (no sudo)..."
|
log "Installing to $PREFIX/bin (no sudo)..."
|
||||||
make install
|
make install
|
||||||
|
|
||||||
echo
|
log "Done."
|
||||||
echo "Done 🎧"
|
echo "Try: $PREFIX/bin/snapclient --version"
|
||||||
echo "Make sure ~/.local/bin is on your PATH."
|
|
||||||
echo "Test with: snapclient --version"
|
|
||||||
|
|||||||
12
systemd/.config/systemd/user/localsnapclient.service
Normal file
12
systemd/.config/systemd/user/localsnapclient.service
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Snapclient
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile="/etc/snapclient.env"
|
||||||
|
ExecStart=/home/powellc/.local/bin/snapclient -h snapcast.service $EXTRA_ARGS -s 3
|
||||||
|
ExecStop=kill $(pidof snapclient)
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
Reference in New Issue
Block a user