Fix circular namerefs

This commit is contained in:
2025-08-01 19:26:15 -04:00
parent e3777f0dec
commit c42f0a6dd3

View File

@@ -771,141 +771,141 @@ acquire_deb() {
translate_packages() { translate_packages() {
debug "${FUNCNAME[0]}()" "$*" debug "${FUNCNAME[0]}()" "$*"
local deb_file="$1" local deb_file="$1"
declare -n requires="$2" declare -n requires_arr="$2"
declare -n recommends="$3" declare -n recommends_arr="$3"
local -i i local -i i
# Load deb dependencies into array # Load deb dependencies into array
IFS=',' read -ra requires <<< "$(dpkg-deb -f "$deb_file" Depends)" IFS=',' read -ra requires_arr <<< "$(dpkg-deb -f "$deb_file" Depends)"
IFS=',' read -ra recommends <<< "$(dpkg-deb -f "$deb_file" Recommends)" IFS=',' read -ra recommends_arr <<< "$(dpkg-deb -f "$deb_file" Recommends)"
# Clean up formatting # Clean up formatting
requires=("${requires[@]%%|*}") requires_arr=("${requires_arr[@]%%|*}")
requires=("${requires[@]/?:/}") requires_arr=("${requires_arr[@]/?:/}")
requires=("${requires[@]# }") requires_arr=("${requires_arr[@]# }")
requires=("${requires[@]% }") requires_arr=("${requires_arr[@]% }")
requires=("${requires[@]//\(/}") requires_arr=("${requires_arr[@]//\(/}")
requires=("${requires[@]//)/}") requires_arr=("${requires_arr[@]//)/}")
recommends=("${recommends[@]%%|*}") recommends_arr=("${recommends_arr[@]%%|*}")
recommends=("${recommends[@]/?:/}") recommends_arr=("${recommends_arr[@]/?:/}")
recommends=("${recommends[@]# }") recommends_arr=("${recommends_arr[@]# }")
recommends=("${recommends[@]% }") recommends_arr=("${recommends_arr[@]% }")
recommends=("${recommends[@]//\(/}") recommends_arr=("${recommends_arr[@]//\(/}")
recommends=("${recommends[@]//)/}") recommends_arr=("${recommends_arr[@]//)/}")
# Translate package names # Translate package names
case $BUILD_TARGET in case $BUILD_TARGET in
fedora|centos) fedora|centos)
requires=("${requires[@]/libc6/glibc}") requires_arr=("${requires_arr[@]/libc6/glibc}")
requires=("${requires[@]/libasound2/alsa-lib}") requires_arr=("${requires_arr[@]/libasound2/alsa-lib}")
requires=("${requires[@]/libuuid1/libuuid}") requires_arr=("${requires_arr[@]/libuuid1/libuuid}")
requires=("${requires[@]/libx11-6/libX11}") requires_arr=("${requires_arr[@]/libx11-6/libX11}")
requires=("${requires[@]/libxext6/libXext}") requires_arr=("${requires_arr[@]/libxext6/libXext}")
requires=("${requires[@]/libxcb1*/libxcb}") # TODO Remove minimum version for MC31 (*) requires_arr=("${requires_arr[@]/libxcb1*/libxcb}") # TODO Remove minimum version for MC31 (*)
requires=("${requires[@]/libxau6/libXau}") requires_arr=("${requires_arr[@]/libxau6/libXau}")
requires=("${requires[@]/libxdmcp6/libXdmcp}") requires_arr=("${requires_arr[@]/libxdmcp6/libXdmcp}")
requires=("${requires[@]/libstdc++6/libstdc++}") requires_arr=("${requires_arr[@]/libstdc++6/libstdc++}")
requires=("${requires[@]/libgtk-3-0/gtk3}") requires_arr=("${requires_arr[@]/libgtk-3-0/gtk3}")
requires=("${requires[@]/libegl1/mesa-libEGL}") requires_arr=("${requires_arr[@]/libegl1/mesa-libEGL}")
requires=("${requires[@]/libgl1/mesa-libGL}") requires_arr=("${requires_arr[@]/libgl1/mesa-libGL}")
requires=("${requires[@]/libgles2/libglvnd-gles}") requires_arr=("${requires_arr[@]/libgles2/libglvnd-gles}")
requires=("${requires[@]/libgbm1/mesa-libgbm}") requires_arr=("${requires_arr[@]/libgbm1/mesa-libgbm}")
requires=("${requires[@]/libegl-mesa0/mesa-libEGL}") requires_arr=("${requires_arr[@]/libegl-mesa0/mesa-libEGL}")
requires=("${requires[@]/libvulkan1/vulkan-loader}") requires_arr=("${requires_arr[@]/libvulkan1/vulkan-loader}")
requires=("${requires[@]/libpango1.0-0/pango}") requires_arr=("${requires_arr[@]/libpango1.0-0/pango}")
requires=("${requires[@]/libpango-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpango-1.0-0/pango}")
requires=("${requires[@]/libpangoft2-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangoft2-1.0-0/pango}")
requires=("${requires[@]/libpangox-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangox-1.0-0/pango}")
requires=("${requires[@]/libpangoxft-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangoxft-1.0-0/pango}")
requires=("${requires[@]/libnss3/nss}") requires_arr=("${requires_arr[@]/libnss3/nss}")
requires=("${requires[@]/libnspr4/nspr}") requires_arr=("${requires_arr[@]/libnspr4/nspr}")
requires=("${requires[@]/libgomp1/libgomp}") requires_arr=("${requires_arr[@]/libgomp1/libgomp}")
requires=("${requires[@]/libfribidi0/fribidi}") requires_arr=("${requires_arr[@]/libfribidi0/fribidi}")
requires=("${requires[@]/libfontconfig1/fontconfig}") requires_arr=("${requires_arr[@]/libfontconfig1/fontconfig}")
requires=("${requires[@]/libfreetype6/freetype}") requires_arr=("${requires_arr[@]/libfreetype6/freetype}")
requires=("${requires[@]/libharfbuzz0b/harfbuzz}") requires_arr=("${requires_arr[@]/libharfbuzz0b/harfbuzz}")
requires=("${requires[@]/libva2/libva}") requires_arr=("${requires_arr[@]/libva2/libva}")
requires=("${requires[@]/libva-drm2/libva}") requires_arr=("${requires_arr[@]/libva-drm2/libva}")
requires=("${requires[@]/libepoxy0/libepoxy}") requires_arr=("${requires_arr[@]/libepoxy0/libepoxy}")
requires=("${requires[@]/liblcms2-2/lcms2}") requires_arr=("${requires_arr[@]/liblcms2-2/lcms2}")
requires=("${requires[@]/libwebkit2gtk-4.0*/webkit2gtk4.0}") requires_arr=("${requires_arr[@]/libwebkit2gtk-4.0*/webkit2gtk4.0}")
requires=("${requires[@]/libwebkit2gtk-4.1*/webkit2gtk4.1}") requires_arr=("${requires_arr[@]/libwebkit2gtk-4.1*/webkit2gtk4.1}")
requires=("${requires[@]/libsdbus-c++1/sdbus-cpp}") requires_arr=("${requires_arr[@]/libsdbus-c++1/sdbus-cpp}")
recommends=("${recommends[@]/fdkaac/fdk-aac-free}") recommends_arr=("${recommends_arr[@]/fdkaac/fdk-aac-free}")
recommends+=("mesa-va-drivers-freeworld|mesa-va-drivers") recommends_arr+=("mesa-va-drivers-freeworld|mesa-va-drivers")
recommends+=("mesa-vulkan-drivers-freeworld|mesa-vulkan-drivers") recommends_arr+=("mesa-vulkan-drivers-freeworld|mesa-vulkan-drivers")
recommends+=("mesa-vdpau-driver-freeworld|mesa-vdpau-driver") recommends_arr+=("mesa-vdpau-driver-freeworld|mesa-vdpau-driver")
;; ;;
suse) suse)
requires=("${requires[@]/libc6/glibc}") requires_arr=("${requires_arr[@]/libc6/glibc}")
requires=("${requires[@]/libasound2/alsa-lib}") requires_arr=("${requires_arr[@]/libasound2/alsa-lib}")
requires=("${requires[@]/libx11-6/libX11-6}") requires_arr=("${requires_arr[@]/libx11-6/libX11-6}")
requires=("${requires[@]/libxext6/libXext6}") requires_arr=("${requires_arr[@]/libxext6/libXext6}")
requires=("${requires[@]/libxdmcp6/libXdmcp6}") requires_arr=("${requires_arr[@]/libxdmcp6/libXdmcp6}")
requires=("${requires[@]/libgtk-3-0/gtk3}") requires_arr=("${requires_arr[@]/libgtk-3-0/gtk3}")
requires=("${requires[@]/libgl1/Mesa-libGL1}") requires_arr=("${requires_arr[@]/libgl1/Mesa-libGL1}")
requires=("${requires[@]/libpango-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpango-1.0-0/pango}")
requires=("${requires[@]/libpangoft2-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangoft2-1.0-0/pango}")
requires=("${requires[@]/libpangox-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangox-1.0-0/pango}")
requires=("${requires[@]/libpangoxft-1.0-0/pango}") requires_arr=("${requires_arr[@]/libpangoxft-1.0-0/pango}")
requires=("${requires[@]/libnss3/mozilla-nss}") requires_arr=("${requires_arr[@]/libnss3/mozilla-nss}")
requires=("${requires[@]/libnspr4/mozilla-nspr}") requires_arr=("${requires_arr[@]/libnspr4/mozilla-nspr}")
requires=("${requires[@]/libfribidi0/fribidi}") requires_arr=("${requires_arr[@]/libfribidi0/fribidi}")
requires=("${requires[@]/libfontconfig1/fontconfig}") requires_arr=("${requires_arr[@]/libfontconfig1/fontconfig}")
requires=("${requires[@]/libharfbuzz0b/libharfbuzz0}") requires_arr=("${requires_arr[@]/libharfbuzz0b/libharfbuzz0}")
requires=("${requires[@]/libwebkit2gtk-4.0*/libwebkit2gtk-4_0-37}") requires_arr=("${requires_arr[@]/libwebkit2gtk-4.0*/libwebkit2gtk-4_0-37}")
requires=("${requires[@]/libwebkit2gtk-4.1*/libwebkit2gtk-4_1-0}") requires_arr=("${requires_arr[@]/libwebkit2gtk-4.1*/libwebkit2gtk-4_1-0}")
for i in "${!requires[@]}"; do for i in "${!requires_arr[@]}"; do
[[ ${requires[$i]} == "mesa-vulkan-drivers" ]] && unset -v 'requires[i]' [[ ${requires_arr[$i]} == "mesa-vulkan-drivers" ]] && unset -v 'requires_arr[i]'
[[ ${requires[$i]} == "libsdbus-c++1" ]] && unset -v 'requires[i]' [[ ${requires_arr[$i]} == "libsdbus-c++1" ]] && unset -v 'requires_arr[i]'
done done
recommends+=(libvulkan1) recommends_arr+=(libvulkan1)
recommends+=(libvulkan_intel) recommends_arr+=(libvulkan_intel)
recommends+=(libvulkan_radeon) recommends_arr+=(libvulkan_radeon)
recommends+=(libvulkan_nouveau) recommends_arr+=(libvulkan_nouveau)
;; ;;
mandriva) mandriva)
requires=("${requires[@]/libc6/glibc}") requires_arr=("${requires_arr[@]/libc6/glibc}")
requires=("${requires[@]/libasound2/lib64asound2}") requires_arr=("${requires_arr[@]/libasound2/lib64asound2}")
requires=("${requires[@]/libuuid1/lib64uuid1}") requires_arr=("${requires_arr[@]/libuuid1/lib64uuid1}")
requires=("${requires[@]/libx11-6/lib64x11_6}") requires_arr=("${requires_arr[@]/libx11-6/lib64x11_6}")
requires=("${requires[@]/libxext6/lib64xext6}") requires_arr=("${requires_arr[@]/libxext6/lib64xext6}")
requires=("${requires[@]/libxcb1/lib64xcb1}") requires_arr=("${requires_arr[@]/libxcb1/lib64xcb1}")
requires=("${requires[@]/libxdmcp6/lib64xdmcp6}") requires_arr=("${requires_arr[@]/libxdmcp6/lib64xdmcp6}")
requires=("${requires[@]/libstdc++6/lib64stdc++6}") requires_arr=("${requires_arr[@]/libstdc++6/lib64stdc++6}")
requires=("${requires[@]/libgtk-3-0/lib64gtk3_0}") requires_arr=("${requires_arr[@]/libgtk-3-0/lib64gtk3_0}")
requires=("${requires[@]/libgl1/lib64GL1}") requires_arr=("${requires_arr[@]/libgl1/lib64GL1}")
requires=("${requires[@]/libgles2/lib64GLESv2_2}") requires_arr=("${requires_arr[@]/libgles2/lib64GLESv2_2}")
requires=("${requires[@]/libegl-mesa0/lib64EGL_mesa0}") requires_arr=("${requires_arr[@]/libegl-mesa0/lib64EGL_mesa0}")
requires=("${requires[@]/libpango1.0-0/lib64pango1.0_0}") requires_arr=("${requires_arr[@]/libpango1.0-0/lib64pango1.0_0}")
requires=("${requires[@]/libpango-1.0-0/lib64pango1.0_0}") requires_arr=("${requires_arr[@]/libpango-1.0-0/lib64pango1.0_0}")
requires=("${requires[@]/libpangoft2-1.0-0/lib64pangoft2_1.0_0}") requires_arr=("${requires_arr[@]/libpangoft2-1.0-0/lib64pangoft2_1.0_0}")
requires=("${requires[@]/libpango-cairo-1.0-0/lib64pangocairo1.0_0}") requires_arr=("${requires_arr[@]/libpango-cairo-1.0-0/lib64pangocairo1.0_0}")
requires=("${requires[@]/libpangoxft-1.0-0/lib64pangoxft1.0_0}") requires_arr=("${requires_arr[@]/libpangoxft-1.0-0/lib64pangoxft1.0_0}")
requires=("${requires[@]/libnss3/lib64nss3}") requires_arr=("${requires_arr[@]/libnss3/lib64nss3}")
requires=("${requires[@]/libnspr4/lib64nspr4}") requires_arr=("${requires_arr[@]/libnspr4/lib64nspr4}")
requires=("${requires[@]/libgomp1/lib64gomp1}") requires_arr=("${requires_arr[@]/libgomp1/lib64gomp1}")
requires=("${requires[@]/libfribidi0/lib64fribidi0}") requires_arr=("${requires_arr[@]/libfribidi0/lib64fribidi0}")
requires=("${requires[@]/libfontconfig1/lib64fontconfig}") requires_arr=("${requires_arr[@]/libfontconfig1/lib64fontconfig}")
requires=("${requires[@]/libfreetype6/lib64freetype6}") requires_arr=("${requires_arr[@]/libfreetype6/lib64freetype6}")
requires=("${requires[@]/libharfbuzz0b/lib64harfbuzz}") requires_arr=("${requires_arr[@]/libharfbuzz0b/lib64harfbuzz}")
requires=("${requires[@]/libgbm1/lib64gbm1}") requires_arr=("${requires_arr[@]/libgbm1/lib64gbm1}")
requires=("${requires[@]/libva2/lib64va2}") requires_arr=("${requires_arr[@]/libva2/lib64va2}")
requires=("${requires[@]/libva-drm2/lib64va-drm2}") requires_arr=("${requires_arr[@]/libva-drm2/lib64va-drm2}")
requires=("${requires[@]/libvulkan1/lib64vulkan1}") requires_arr=("${requires_arr[@]/libvulkan1/lib64vulkan1}")
requires=("${requires[@]/mesa-vulkan-drivers/lib64dri-drivers}") requires_arr=("${requires_arr[@]/mesa-vulkan-drivers/lib64dri-drivers}")
requires=("${requires[@]/vulkan-icd/vulkan-loader}") requires_arr=("${requires_arr[@]/vulkan-icd/vulkan-loader}")
requires=("${requires[@]/libwebkit2gtk-4.1-0/lib64webkit2gtk4.1}") requires_arr=("${requires_arr[@]/libwebkit2gtk-4.1-0/lib64webkit2gtk4.1}")
recommends=("${recommends[@]/musepack-tools/mppenc}") recommends_arr=("${recommends_arr[@]/musepack-tools/mppenc}")
for i in "${!recommends[@]}"; do for i in "${!recommends_arr[@]}"; do
[[ ${recommends[$i]} == "fdkaac" ]] && unset -v 'recommends[i]' [[ ${recommends_arr[$i]} == "fdkaac" ]] && unset -v 'recommends_arr[i]'
done done
;; ;;
arch) arch)
# Set these manually for Arch since they are quite different # Set these manually for Arch since they are quite different
requires=('alsa-lib' 'ca-certificates' 'gtk3' 'gcc-libs' 'libx11' 'libxext' requires_arr=('alsa-lib' 'ca-certificates' 'gtk3' 'gcc-libs' 'libx11' 'libxext'
'libxcb' 'libxau' 'libxdmcp' 'util-linux' 'mesa-libgl' 'webkit2gtk') 'libxcb' 'libxau' 'libxdmcp' 'util-linux' 'mesa-libgl' 'webkit2gtk')
recommends=('mesa-libgl' 'nvidia-libgl' 'nvidia-utils' 'vulkan-intel' recommends_arr=('mesa-libgl' 'nvidia-libgl' 'nvidia-utils' 'vulkan-intel'
'vulkan-radeon' 'vorbis-tools' 'musepack-tools') 'vulkan-radeon' 'vorbis-tools' 'musepack-tools')
;; ;;
*) *)
@@ -913,23 +913,23 @@ translate_packages() {
esac esac
# Convert array to newline delim'd string (for heredoc) # Convert array to newline delim'd string (for heredoc)
printf -v requires "Requires: %s\n" "${requires[@]}" printf -v requires_arr "Requires: %s\n" "${requires_arr[@]}"
printf -v recommends "Recommends: %s\n" "${recommends[@]}" printf -v recommends_arr "Recommends: %s\n" "${recommends_arr[@]}"
# Strip last newline # Strip last newline
requires="${requires%?}" requires_arr="${requires_arr%?}"
recommends="${recommends%?}" recommends_arr="${recommends_arr%?}"
if ((COMPAT_SWITCH)); then if ((COMPAT_SWITCH)); then
# Strip minimum versions # Strip minimum versions
requires=$(echo "$requires" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}') requires_arr=$(echo "$requires_arr" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
fi fi
} }
# @description Creates a SPEC file and builds the RPM from the source DEB using rpmbuild # @description Creates a SPEC file and builds the RPM from the source DEB using rpmbuild
build_rpm() { build_rpm() {
debug "${FUNCNAME[0]}()" debug "${FUNCNAME[0]}()"
declare -n requires="$1" declare -n requires_arr="$1"
declare -n recommends="$2" declare -n recommends_arr="$2"
local i rpmbuild_cmd stub local i rpmbuild_cmd stub
local spec_file="$OUTPUT_DIR/SPECS/mediacenter$MC_MVERSION-$MC_VERSION-$MC_RELEASE-$BUILD_TARGET-$ARCH.spec" local spec_file="$OUTPUT_DIR/SPECS/mediacenter$MC_MVERSION-$MC_VERSION-$MC_RELEASE-$BUILD_TARGET-$ARCH.spec"
@@ -962,8 +962,8 @@ build_rpm() {
AutoReq: 0 AutoReq: 0
$requires $requires_arr
$recommends $recommends_arr
Conflicts: MediaCenter Conflicts: MediaCenter
@@ -1013,8 +1013,8 @@ build_rpm() {
# @description Creates the Arch PKGBUILD file for Media Center # @description Creates the Arch PKGBUILD file for Media Center
build_pkgbuild() { build_pkgbuild() {
debug "${FUNCNAME[0]}()" debug "${FUNCNAME[0]}()"
declare -n requires="$1" declare -n requires_arr="$1"
declare -n recommends="$2" declare -n recommends_arr="$2"
local pkgbuild_file="$OUTPUT_DIR/PKGBUILD/mediacenter.pkgbuild" local pkgbuild_file="$OUTPUT_DIR/PKGBUILD/mediacenter.pkgbuild"
[[ -d $OUTPUT_DIR/PKGBUILD ]] || execute mkdir -p "$OUTPUT_DIR/PKGBUILD" [[ -d $OUTPUT_DIR/PKGBUILD ]] || execute mkdir -p "$OUTPUT_DIR/PKGBUILD"
@@ -1028,8 +1028,8 @@ build_pkgbuild() {
arch=("$ARCH") arch=("$ARCH")
url="https://www.jriver.com/" url="https://www.jriver.com/"
license=("custom") license=("custom")
depends=(${requires[@]}) depends=(${requires_arr[@]})
optdepends=(${recommends[@]}) optdepends=(${recommends_arr[@]})
source=("$MC_SOURCE") source=("$MC_SOURCE")
package() { package() {