#!/bin/bash # Slackware build script for duckstation # Copyright 2026 Vasily Sora USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=duckstation VERSION=${VERSION:-0.1_11826} SRCVER=$(echo $VERSION | tr _ -) BUILD=${BUILD:-1} TAG=${TAG:-_lngn} PKGTYPE=${PKGTYPE:-txz} # vendored built-in depends BROTLI=1.2.0 FREETYPE=2.14.3 HARFBUZZ=14.3.1 LIBBACKTRACE_COMMIT=6f8310e238fc3ce68f42f391cbe93fd156bb2c23 LIBJPEGTURBO=3.2.0 LIBPNG=1.6.58 LIBWEBP=1.6.0 LIBZIP=1.11.4 ZLIBNG=2.3.3 ZSTD=1.5.7 SDL3=3.4.16 SQLITE=3530400 SQLITE_LONG_VERSION=3.53.4 CPUINFO_COMMIT=d236f716399426388eb302236d0f3168ed83834a DISCORD_RPC_COMMIT=cc59d26d1d628fbd6527aac0ac1d6301f4978b92 PLUTOSVG_COMMIT=3177942d5be21c0af5e240ce2f0885a626a4a986 SHADERC_COMMIT=da25addad407d2ec377ab3c113d202f10adcf062 SOUNDTOUCH_COMMIT=463ade388f3a51da078dc9ed062bf28e4ba29da7 SPIRV_CROSS_TAG=vulkan-sdk-1.4.357.0 if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/lngn} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -march=x86-64 -mtune=generic -fPIC" LIBDIRSUFFIX="64" SUFFIX="-x64" elif [ "$ARCH" = "aarch64" ]; then SLKCFLAGS="-O2 -march=armv8-a -mtune=generic -fPIC" LIBDIRSUFFIX="64" SUFFIX="-arm64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e _PERMS() { chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; } case $PKG_ONLY in 1) CLOBBER=0 ;; *) CLOBBER="${CLOBBER:-1}" ;; esac mkdir -p $TMP $OUTPUT cd $TMP case $CLOBBER in 1) rm -rf $PKG $PRGNAM-$SRCVER mkdir -vp $PKG tar -xvf $CWD/$PRGNAM-$SRCVER.tar.gz cd $PRGNAM-$SRCVER patch -p2 < "$CWD/patches/use-system-qt6.patch" patch -p2 < "$CWD/patches/warnAboutUnofficialBuild.patch" # patch -p2 < "$CWD/patches/set-version_in_gen_scmversion.patch" mkdir -vp dep/prebuilt/linux$SUFFIX mkdir -v LIBS _PERMS ;; 0) if [ ! -d "$PRGNAM-$SRCVER/LIBS" ]; then mkdir -vp "$PRGNAM-$SRCVER/LIBS" mkdir -vp "$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX" else rm -rvf "$PRGNAM-$SRCVER/build" fi ;; esac cd $TMP/$PRGNAM-$SRCVER/LIBS CMAKE_COMMON="-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX \ -DCMAKE_INSTALL_PREFIX=$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX \ -DCMAKE_INSTALL_LIBDIR=lib" LA_FILE_PATH="$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX/lib" PKG_CONFIG_PATH="$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX/lib/pkgconfig" export PKG_CONFIG_PATH DEFAULT_LIBS="ZLIBNG" # Build zlib first because of the things that depend on it. _ZLIBNG() { printf "%s\n" "Compiling/Building zlib-$ZLIBNG.." [ -d zlib-ng-$ZLIBNG ] && rm -rv zlib-ng-$ZLIBNG tar -xvf "$CWD/zlib-ng-$ZLIBNG.tar.gz" cd "zlib-ng-$ZLIBNG" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DZLIB_COMPAT=ON -DBUILD_TESTING=OFF \ -DWITH_BENCHMARK_APPS=OFF \ -DWITH_GTEST=OFF \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS LIBBACKTRACE" _LIBBACKTRACE() { printf "%s\n" "Compiling/Building libbacktrace-$LIBBACKTRACE_COMMIT..." [ -d libbacktrace-$LIBBACKTRACE_COMMIT ] && rm -rv libbacktrace-$LIBBACKTRACE_COMMIT tar -xvf "$CWD/libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz" cd "libbacktrace-$LIBBACKTRACE_COMMIT" _PERMS CFLAGS="-fmacro-prefix-map=\"${PWD}\"=. -ffile-prefix-map=\"${PWD}\"=." \ ./configure --prefix="$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX" \ --libdir="$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX/lib" \ --with-pic make make install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS LIBPNG" _LIBPNG() { printf "%s\n" "Compiling/Building libpng-$LIBPNG..." [ -d libpng-$LIBPNG ] && rm -rv libpng-$LIBPNG tar -xvf "$CWD/libpng-$LIBPNG.tar.gz" cd "libpng-$LIBPNG" patch --verbose -p1 < "$CWD/patches/libpng-1.6.56-apng.patch" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DPNG_TESTS=OFF \ -DPNG_STATIC=OFF \ -DPNG_SHARED=ON \ -DPNG_TOOLS=OFF \ -DCMAKE_INSTALL_RPATH="\$ORIGIN" \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS LIBJPEGTURBO" _LIBJPEGTURBO() { printf "%s\n" "Compiling/Building libjpeg-$LIBJPEGTURBO..." [ -d libjpeg-turbo-$LIBJPEGTURBO ] && rm -rv libjpeg-turbo-$LIBJPEGTURBO tar -xvf "$CWD/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" cd "libjpeg-turbo-$LIBJPEGTURBO" patch -p1 < "$CWD/patches/libjpeg-turbo-disable-rpath.patch" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DENABLE_STATIC=OFF \ -DENABLE_SHARED=ON \ -DWITH_TESTS=OFF \ -DWITH_TOOLS=OFF \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS ZSTD" _ZSTD() { printf "%s\n" "Compiling/Building Zstandard-$ZSTD..." [ -d zstd-$ZSTD ] && rm -rv zstd-$ZSTD tar -xvf "$CWD/zstd-$ZSTD.tar.gz" cd "zstd-$ZSTD" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DZSTD_BUILD_SHARED=ON \ -DZSTD_BUILD_STATIC=OFF \ -DZSTD_BUILD_PROGRAMS=OFF \ -B build -G Ninja build/cmake cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS BROTLI" _BROTLI() { printf "%s\n" "Compiling/Building brotli-$BROTLI..." [ -d brotli-$BROTLI ] && rm -rv brotli-$BROTLI tar -xvf "$CWD/brotli-$BROTLI.tar.gz" cd "brotli-$BROTLI" _PERMS cmake -DCMAKE_INSTALL_PREFIX=$TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_LIBDIR=lib \ -DBUILD_SHARED_LIBS=OFF \ -DBROTLI_BUILD_TOOLS=OFF \ -DBROTLI_DISABLE_TESTS=ON \ -B build -G Ninja ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS LIBWEBP" _LIBWEBP() { printf "%s\n" "Compiling/Building WebP-$LIBWEBP..." [ -d libwebp-$LIBWEBP ] && rm -rv libwebp-$LIBWEBP tar -xvf "$CWD/libwebp-$LIBWEBP.tar.gz" cd "libwebp-$LIBWEBP" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DWEBP_BUILD_ANIM_UTILS=OFF \ -DWEBP_BUILD_CWEBP=OFF \ -DWEBP_BUILD_DWEBP=OFF \ -DWEBP_BUILD_GIF2WEBP=OFF \ -DWEBP_BUILD_IMG2WEBP=OFF \ -DWEBP_BUILD_VWEBP=OFF \ -DWEBP_BUILD_WEBPINFO=OFF \ -DWEBP_BUILD_WEBPMUX=OFF \ -DWEBP_BUILD_EXTRAS=OFF \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_RPATH="\$ORIGIN" \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS LIBZIP" _LIBZIP() { printf "%s\n" "Compiling/Building libzip-$LIBZIP.=.." [ -d libzip-$LIBZIP ] && rm -rv libzip-$LIBZIP tar -xvf "$CWD/libzip-$LIBZIP.tar.gz" cd "libzip-$LIBZIP" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DENABLE_COMMONCRYPTO=OFF \ -DENABLE_GNUTLS=OFF \ -DENABLE_MBEDTLS=OFF \ -DENABLE_OPENSSL=OFF \ -DENABLE_WINDOWS_CRYPTO=OFF \ -DENABLE_BZIP2=OFF \ -DENABLE_LZMA=OFF \ -DENABLE_ZSTD=ON \ -DBUILD_SHARED_LIBS=ON \ -DLIBZIP_DO_INSTALL=ON \ -DBUILD_TOOLS=OFF \ -DBUILD_REGRESS=OFF \ -DBUILD_OSSFUZZ=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_DOC=OFF \ -DCMAKE_INSTALL_RPATH="\$ORIGIN" \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS FREETYPE" _FREETYPE() { printf "%s\n" "Compiling/Building FreeType-$FREETYPE..." [ -d freetype-$FREETYPE ] && rm -rv freetype-$FREETYPE tar -xvf "$CWD/freetype-$FREETYPE.tar.gz" cd "freetype-$FREETYPE" patch -p1 < "$CWD/patches/freetype-harfbuzz-soname.patch" patch -p1 < "$CWD/patches/freetype-static-brotli.patch" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DFT_REQUIRE_ZLIB=ON \ -DFT_REQUIRE_PNG=ON \ -DFT_DISABLE_BZIP2=TRUE \ -DFT_REQUIRE_BROTLI=TRUE \ -DFT_DYNAMIC_HARFBUZZ=TRUE \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS HARFBUZZ" _HARFBUZZ() { printf "%s\n" "Compiling/Building HarfBuzz-$HARFBUZZ..." [ -d harfbuzz-$HARFBUZZ ] && rm -rv harfbuzz-$HARFBUZZ tar -xvf "$CWD/harfbuzz-$HARFBUZZ.tar.gz" cd "harfbuzz-$HARFBUZZ" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DHB_BUILD_UTILS=OFF \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS SDL3" _SDL3() { printf "%s\n" "Compiling/Building SDL3-$SDL3..." [ -d SDL-release-$SDL3 ] && rm -rv SDL-release-$SDL3 tar -xvf "$CWD/SDL-release-$SDL3.tar.gz" cd "SDL-release-$SDL3" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DSDL_SHARED=ON \ -DSDL_STATIC=OFF \ -DSDL_TESTS=OFF \ -G Ninja -B build cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS SQLITE" _SQLITE() { printf "%s\n" "Compiling/Building sqlite-$SQLITE..." [ -d sqlite-amalgamation-$SQLITE ] && rm -rv sqlite-amalgamation-$SQLITE unzip "$CWD/sqlite-amalgamation-$SQLITE.zip" cd "sqlite-amalgamation-$SQLITE" patch -p1 < "$CWD/patches/sqlite-cmake.patch" sed -i -e "s/@@SQLITE_LONG_VERSION@@/$SQLITE_LONG_VERSION/" CMakeLists.txt _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DENABLE_SHARED=ON \ -DENABLE_STATIC=OFF \ -DENABLE_RTREE=OFF \ -DENABLE_ZLIB=OFF \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS SHADERC" _SHADERC() { printf "%s\n" "Compiling/Building shaderc-$SHADERC_COMMIT..." [ -d shaderc-$SHADERC_COMMIT ] && rm -rv shaderc-$SHADERC_COMMIT tar -xvf "$CWD/shaderc-$SHADERC_COMMIT.tar.gz" cd "shaderc-$SHADERC_COMMIT" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DSHADERC_SKIP_TESTS=ON \ -DSHADERC_SKIP_EXAMPLES=ON \ -DSHADERC_SKIP_EXECUTABLES=ON \ -DSHADERC_SKIP_COPYRIGHT_CHECK=ON \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS SPIRV_CROSS" _SPIRV_CROSS() { printf "%s\n" "Compiling/Building SPIRV-Cross-$SPIRV_CROSS_TAG..." [ -d SPIRV-Cross-vulkan-sdk-1.4.357.0 ] && rm -rv SPIRV-Cross-vulkan-sdk-1.4.357.0 tar -xvf "$CWD/SPIRV-Cross-vulkan-sdk-1.4.357.0.tar.gz" cd SPIRV-Cross-vulkan-sdk-1.4.357.0 _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DSPIRV_CROSS_SHARED=ON \ -DSPIRV_CROSS_STATIC=OFF \ -DSPIRV_CROSS_CLI=OFF \ -DSPIRV_CROSS_ENABLE_TESTS=OFF \ -DSPIRV_CROSS_ENABLE_GLSL=ON \ -DSPIRV_CROSS_ENABLE_HLSL=OFF \ -DSPIRV_CROSS_ENABLE_MSL=OFF \ -DSPIRV_CROSS_ENABLE_CPP=OFF \ -DSPIRV_CROSS_ENABLE_REFLECT=OFF \ -DSPIRV_CROSS_ENABLE_C_API=ON \ -DSPIRV_CROSS_ENABLE_UTIL=ON \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS CPUINFO" _CPUINFO() { printf "%s\n" "Compiling/Building cpuinfo-$CPUINFO_COMMIT..." [ -d cpuinfo-$CPUINFO_COMMIT ] && rm -rv cpuinfo-$CPUINFO_COMMIT tar -xvf "$CWD/cpuinfo-$CPUINFO_COMMIT.tar.gz" cd "cpuinfo-$CPUINFO_COMMIT" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCPUINFO_LIBRARY_TYPE=shared \ -DCPUINFO_RUNTIME_TYPE=shared \ -DCPUINFO_LOG_LEVEL=error \ -DCPUINFO_LOG_TO_STDIO=ON \ -DCPUINFO_BUILD_TOOLS=OFF \ -DCPUINFO_BUILD_UNIT_TESTS=OFF \ -DCPUINFO_BUILD_MOCK_TESTS=OFF \ -DCPUINFO_BUILD_BENCHMARKS=OFF \ -DUSE_SYSTEM_LIBS=ON \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS DISCORD_RPC" _DISCORD_RPC() { printf "%s\n" "Compiling/Building discord-rpc-$DISCORD_RPC_COMMIT..." [ -d discord-rpc-$DISCORD_RPC_COMMIT ] && rm -rv discord-rpc-$DISCORD_RPC_COMMIT tar -xvf "$CWD/discord-rpc-$DISCORD_RPC_COMMIT.tar.gz" cd "discord-rpc-$DISCORD_RPC_COMMIT" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS PLUTOSVG" _PLUTOSVG() { printf "%s\n" "Compiling/Building plutosvg-$PLUTOSVG_COMMIT..." [ -d plutosvg-$PLUTOSVG_COMMIT ] && rm -rv plutosvg-$PLUTOSVG_COMMIT tar -xvf "$CWD/plutosvg-$PLUTOSVG_COMMIT.tar.gz" cd "plutosvg-$PLUTOSVG_COMMIT" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DBUILD_SHARED_LIBS=ON \ -DPLUTOSVG_ENABLE_FREETYPE=ON \ -DPLUTOSVG_BUILD_EXAMPLES=OFF \ -DCMAKE_INSTALL_RPATH="\$ORIGIN" \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } DEFAULT_LIBS="$DEFAULT_LIBS SOUNDTOUCH" _SOUNDTOUCH() { printf "%s\n" "Compiling/Building soundtouch-$SOUNDTOUCH_COMMIT..." [ -d soundtouch-$SOUNDTOUCH_COMMIT ] && rm -rv soundtouch-$SOUNDTOUCH_COMMIT tar -xvf "$CWD/soundtouch-$SOUNDTOUCH_COMMIT.tar.gz" cd "soundtouch-$SOUNDTOUCH_COMMIT" _PERMS cmake ${CMAKE_COMMON} \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -B build -G Ninja cmake --build build --parallel ninja -C build install [ -f "${LA_FILE_PATH}"/*.la ] && rm -v "${LA_FILE_PATH}"/*.la cd $TMP/$PRGNAM-$SRCVER/LIBS } case $CLOBBER in 0) for needsCLOBBER in $LibsToCLOBBER; do [ -n "$needsCLOBBER" ] && _${needsCLOBBER} done ;; 1) for LIB in $DEFAULT_LIBS; do _$LIB done ;; esac _DUCKSTATION() { #unset PKG_CONFIG_PATH CC=clang CXX=clang++ export CC CXX mkdir -v build cmake -Wno-dev \ -B build -G Ninja \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_INSTALL_PREFIX=/opt/$PRGNAM \ -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -DCMAKE_BUILD_TYPE=Release ninja -C build } case $PKG_ONLY in 1) rm -rvf $PKG mkdir -vp $PKG ;; *) cd $TMP/$PRGNAM-$SRCVER _DUCKSTATION ;; esac mkdir -vp $PKG/opt/$PRGNAM mkdir -vp $PKG/usr/games cp -av $TMP/$PRGNAM-$SRCVER/dep/prebuilt/linux$SUFFIX/* $PKG/opt/$PRGNAM cp -av $TMP/$PRGNAM-$SRCVER/build/bin/* $PKG/opt/$PRGNAM/bin #mkdir -vp $PKG/opt/$PRGNAM/usr/share #mv -v $PKG/opt/$PRGNAM/share/man $PKG/usr # Set RPATH so duckstation-qt searches its bundled libraries relative to itself. cd $PKG/opt/$PRGNAM/bin patchelf --set-rpath '$ORIGIN/../lib' duckstation-qt if [ -f $CWD/patches/duckstation-wrapper ]; then cat $CWD/patches/duckstation-wrapper > $PKG/usr/games/${PRGNAM}-qt chmod +x $PKG/usr/games/${PRGNAM}-qt else ln -s /opt/$PRGNAM/bin/${PRGNAM}-qt \ $PKG/usr/games/${PRGNAM}-qt fi cd $PKG find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true # lets not overwrite system man pages with these #rm -r $PKG/usr/man #find $PKG/usr/man -type f -exec gzip -9 {} \; #for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done # Install icon mkdir -p "$PKG/usr/share/icons/hicolor/512x512/apps/" cp -v "$CWD/$PRGNAM.png" "$PKG/usr/share/icons/hicolor/512x512/apps/$PRGNAM.png" mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -vp $PKG/usr/share/applications cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop _PERMS mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/slack-required > $PKG/install/slack-required cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE