RetroPie-Setup/scriptmodules/supplementary/sdl1.sh
cmitu ac5ec0e5c8 backends: add SDL1.2 Compat backend
Added the SDL12-Compat backend, using a shim library which implements the `sdl1.2` API over SDL2.

The new `sdl12-compat` backend should be used for SDL1 applications when:
 * the platform doesn't have `dispmanx` anymore (e.g. `rpi` platforms with RaspiOS Bullseye and later)
 * `sdl2` has a working accelerated video & rendering drivers
 * not running under `x11` (i.e. KMS)

Note: for SDL1+Videocore specific applications, which use directly the dispmanx/legacy GL stack (e.g. `pcsx-rearmed`, `advmame-1.4`, etc.), the backend will not help.
2024-01-25 19:38:41 +00:00

125 lines
4.2 KiB
Bash

#!/usr/bin/env bash
# This file is part of The RetroPie Project
#
# The RetroPie Project is the legal property of its developers, whose names are
# too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
#
# See the LICENSE.md file at the top-level directory of this distribution and
# at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
#
rp_module_id="sdl1"
rp_module_desc="SDL 1.2.15 with rpi fixes and dispmanx"
rp_module_licence="GPL2 https://raw.githubusercontent.com/libsdl-org/SDL-1.2/main/COPYING"
rp_module_section="depends"
rp_module_flags="!all rpi dispmanx"
function get_pkg_ver_sdl1() {
local basever
local revision
if [[ "$__os_debian_ver" -eq 9 ]]; then
basever="1.2.15+dfsg1"
revision="4"
elif [[ "$__os_debian_ver" -ge 10 ]]; then
basever="1.2.15+dfsg2"
revision="6"
else
basever="1.2.15"
revision="10"
fi
if [[ "$1" == "source" ]]; then
echo "$basever-$revision"
elif [[ "$1" == "base" ]]; then
echo "$basever"
else
echo "$basever-$(($revision + 3))rpi"
fi
}
function _get_arch_sdl1() {
isPlatform "arm" && echo "armhf"
isPlatform "aarch64" && echo "arm64"
}
function depends_sdl1() {
getDepends debhelper dh-autoreconf devscripts libx11-dev libxext-dev libxt-dev libxv-dev x11proto-core-dev libaudiofile-dev libpulse-dev libgl1-mesa-dev libasound2-dev libcaca-dev libdirectfb-dev libglu1-mesa-dev libraspberrypi-dev
}
function sources_sdl1() {
local files=()
if [[ "$__os_debian_ver" -eq 9 ]]; then
files+=(libsdl1.2_$(get_pkg_ver_sdl1 base).orig.tar.xz)
else
files+=(libsdl1.2_$(get_pkg_ver_sdl1 base).orig.tar.gz)
fi
files+=(
libsdl1.2_$(get_pkg_ver_sdl1 source).dsc
libsdl1.2_$(get_pkg_ver_sdl1 source).debian.tar.xz
)
local file
for file in "${files[@]}"; do
download "http://mirrordirector.raspbian.org/raspbian/pool/main/libs/libsdl1.2/$file" "$file"
done
dpkg-source -x libsdl1.2_$(get_pkg_ver_sdl1 source).dsc
cd libsdl1.2-$(get_pkg_ver_sdl1 base)
# add fixes from https://github.com/RetroPie/sdl1/compare/master...rpi
download "https://github.com/RetroPie/sdl1/compare/master...rpi.diff" "debian/patches/rpi.diff"
echo "rpi.diff" >>debian/patches/series
# force building without tslib on Jessie (as Raspbian Jessie has tslib, but Debian Jessie doesn't and we want cross compatibility
sed -i "s/--enable-video-caca/--enable-video-caca --disable-input-tslib/" debian/rules
DEBEMAIL="Jools Wills <buzz@exotica.org.uk>" dch -v $(get_pkg_ver_sdl1) "Added rpi fixes and dispmanx support from https://github.com/RetroPie/sdl1/compare/master...rpi"
}
function build_sdl1() {
cd libsdl1.2-$(get_pkg_ver_sdl1 base)
dpkg-buildpackage
local dest="$__tmpdir/archives/$__binary_path"
mkdir -p "$dest"
local file
for file in ../*.deb; do
if gpg --list-secret-keys "$__gpg_signing_key" &>/dev/null; then
signFile "$file" || return 1
cp "${file}.asc" "$dest/"
fi
cp ../*.deb "$dest/"
done
}
function install_sdl1() {
local arch="$(_get_arch_sdl1)"
# if the packages don't install completely due to missing dependencies the apt-get -y -f install will correct it
if ! dpkg -i libsdl1.2debian_$(get_pkg_ver_sdl1)_${arch}.deb libsdl1.2-dev_$(get_pkg_ver_sdl1)_${arch}.deb; then
apt-get -y -f --no-install-recommends install
fi
echo "libsdl1.2-dev hold" | dpkg --set-selections
}
function __binary_url_sdl1() {
rp_hasBinaries && echo "$__binary_url/libsdl1.2debian_$(get_pkg_ver_sdl1)_$(_get_arch_sdl1).deb"
}
function install_bin_sdl1() {
local arch="$(_get_arch_sdl1)"
local tmp="$(mktemp -d)"
pushd "$tmp" >/dev/null
local ret=1
if downloadAndVerify "$__binary_url/libsdl1.2debian_$(get_pkg_ver_sdl1)_${arch}.deb" && \
downloadAndVerify "$__binary_url/libsdl1.2-dev_$(get_pkg_ver_sdl1)_${arch}.deb"; then
install_sdl1
ret=0
fi
popd >/dev/null
rm -rf "$tmp"
return "$ret"
}
function remove_sdl1() {
apt-get remove -y --allow-change-held-packages libsdl1.2-dev libsdl1.2debian
apt-get autoremove -y
}