#!/usr/bin/env bash usage() { echo -e "Build Jellyfin FFMPEG deb packages" echo -e " $0 " echo -e "Releases: Arches:" echo -e " * bullseye * amd64" echo -e " * bookworm * arm64" echo -e " * trixie" echo -e " * jammy" echo -e " * noble" echo -e " * resolute" } if [[ -z ${1} ]]; then usage exit 1 fi cli_release="${1}" case ${cli_release} in 'bullseye') release="debian:bullseye" gcc_ver="10" llvm_ver="16" llvmspirvlib_ver="11" ;; 'bookworm') release="debian:bookworm" gcc_ver="12" llvm_ver="19" llvmspirvlib_ver="15" ;; 'trixie') release="debian:trixie" gcc_ver="14" llvm_ver="19" llvmspirvlib_ver="19" ;; 'jammy') release="ubuntu:jammy" gcc_ver="11" llvm_ver="15" llvmspirvlib_ver="15" ;; 'noble') release="ubuntu:noble" gcc_ver="13" llvm_ver="20" llvmspirvlib_ver="20" ;; 'resolute') release="ubuntu:resolute" gcc_ver="15" llvm_ver="21" llvmspirvlib_ver="21" ;; *) echo "Invalid release." usage exit 1 ;; esac cli_arch="${2}" case ${cli_arch} in 'amd64') arch="amd64" ;; 'arm64') arch="arm64" ;; *) echo "Invalid architecture." usage exit 1 ;; esac set -o xtrace set -o errexit # Check for dependencies if ! command -v "docker" &>/dev/null && command -v "podman" &>/dev/null; then container_cmd=podman else container_cmd=docker fi for dep in ${container_cmd} make mmv; do command -v "${dep}" &>/dev/null || { echo "The command '${dep}' is required."; exit 1; } done image_name="jellyfin-ffmpeg-build-${cli_release}" package_temporary_dir="$( mktemp -d )" # Trap cleanup for latter sections cleanup() { # Clean up the Dockerfile make -f Dockerfile.make clean # Remove tempdir rm -rf "${package_temporary_dir}" } trap cleanup EXIT INT # Generate Dockerfile make -f Dockerfile.make DISTRO=${release} GCC_VER=${gcc_ver} LLVM_VER=${llvm_ver} LLVMSPIRVLIB_VER=${llvmspirvlib_ver} ARCH=${arch} # Set up the build environment docker image ${container_cmd} build . -t "${image_name}" # Build the APKs and copy out to ${package_temporary_dir} ${container_cmd} run --rm -e "RELEASE=${release}" -v "${package_temporary_dir}:/dist" "${image_name}" # If no 3rd parameter was specified, move APKs to parent directory if [[ -z ${3} ]]; then path="../bin" else path="${3}" fi mkdir "${path}" &>/dev/null || true mmv "${package_temporary_dir}/deb/*.deb" "${path}/#1.deb" mmv "${package_temporary_dir}/deb/*_${arch}.*" "${path}/#1-${cli_release}_${arch}.#2"