#!/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_11752}
SRCVER=$(echo $VERSION | tr _ -)
BUILD=${BUILD:-1}
TAG=${TAG:-_lngn}
PKGTYPE=${PKGTYPE:-txz}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
       *) 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

ZLIBNG=2.3.3
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
}

LIBBACKTRACE_COMMIT=6f8310e238fc3ce68f42f391cbe93fd156bb2c23
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
}

LIBPNG=1.6.58
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
}

LIBJPEGTURBO=3.2.0
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
}

ZSTD=1.5.7
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
}

BROTLI=1.2.0
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
}

LIBWEBP=1.6.0
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
}

LIBZIP=1.11.4
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
}

FREETYPE=2.14.3
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
}

HARFBUZZ=14.3.0
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
}

SDL3=3.4.14
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
}

SQLITE=3530400
SQLITE_LONG_VERSION=3.53.4
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
}

SHADERC_COMMIT=da25addad407d2ec377ab3c113d202f10adcf062
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
}

SPIRV_CROSS_TAG=vulkan-sdk-1.4.357.0
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
}

CPUINFO_COMMIT=d236f716399426388eb302236d0f3168ed83834a
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
}

DISCORD_RPC_COMMIT=cc59d26d1d628fbd6527aac0ac1d6301f4978b92
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
}

PLUTOSVG_COMMIT=3177942d5be21c0af5e240ce2f0885a626a4a986
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
}

SOUNDTOUCH_COMMIT=463ade388f3a51da078dc9ed062bf28e4ba29da7
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/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
