# Maintainer: aur.chaotic.cx

_pkgname="cemu"
pkgname="$_pkgname-git"
pkgver=2.6.r246.g1c7fbaf
pkgrel=2
pkgdesc="A Wii U emulator"
url="https://github.com/cemu-project/Cemu"
license=('MPL-2.0')
arch=('x86_64')

depends=(
  'glslang'
  'libbluetooth.so'             # bluez-libs
  'libboost_program_options.so' # boost-libs
  'libcrypto.so'                # openssl
  'libcurl.so'
  'libgdk-3.so'
  'libgobject-2.0.so'
  'libgtk-3.so'
  'libsm'
  'libspeexdsp.so'       # speexdsp
  'libssl.so'            # openssl
  'libusb-1.0.so'        # libusb
  'libwayland-client.so' # wayland
  'libx11'
  'libz.so'        # zlib
  'libzarchive.so' # zarchive
  'libzip.so'      # libzip
  'libzstd.so'     # zstd
  'pugixml'
  'sdl3'
)
makedepends=(
  'clang'
  'cmake'
  'git'
  'ninja'

  'boost'
  'fmt'
  'glm'
  'glu'
  'nasm'
  'rapidjson'
  'vulkan-headers'
  'wayland-protocols'
  'wxwidgets-static' # chaotic-aur

  # cubeb, no sound if not present
  'alsa-lib'
  'jack'
  'libpulse'
  'sndio'
  'speexdsp'
)
optdepends+=(
  'alsa-lib: for ALSA backend'
  'jack: for JACK backend'
  'libpulse: for PulseAudio backend'
  'sndio: for sndio backend'
)

provides=("$_pkgname")
conflicts=("$_pkgname")

options=('!debug' '!lto')

_pkgsrc="$_pkgname"
source=("$_pkgsrc"::"git+$url.git")
sha256sums=('SKIP')

prepare() {
  cd "$_pkgsrc"
  git rm -r dependencies/ZArchive
  git rm -r dependencies/Vulkan-Headers
  git rm -r dependencies/vcpkg
  git submodule update --init --recursive --depth 1

  # let build system control LTO
  sed -e '/CMAKE_INTERPROCEDURAL_OPTIMIZATION/d' -i CMakeLists.txt

  # fix share folder name
  sed -e '/roamingPath = GetAppDataRoamingPath/s&"Cemu"&"cemu"&' -i src/gui/wxgui/CemuApp.cpp

  # set version
  local _pkgver _major _minor _patch
  _pkgver=$(pkgver)
  if [[ "$_pkgver" =~ ^([0-9]+)\.([0-9]+)\.r([0-9]+) ]]; then
    _major="${BASH_REMATCH[1]}"
    _minor="${BASH_REMATCH[2]}"
    _patch="${BASH_REMATCH[3]}"
  fi

  sed -E \
    -e '/set\(EMULATOR_VERSION_MAJOR/s&^.*$&set(EMULATOR_VERSION_MAJOR "'"${_major}"'")&' \
    -e '/set\(EMULATOR_VERSION_MINOR/s&^.*$&set(EMULATOR_VERSION_MINOR "'"${_minor}"'")&' \
    -e '/set\(EMULATOR_VERSION_PATCH/s&^.*$&set(EMULATOR_VERSION_PATCH "'"${_patch#r}"'")&' \
    -i CMakeLists.txt

  # fix for zstd
  cat >> src/Cafe/CMakeLists.txt << END
find_package(zstd REQUIRED)
target_link_libraries(CemuCafe PRIVATE zstd::libzstd)
END
}

pkgver() {
  cd "$srcdir/$_pkgsrc"
  git describe --long --tags --abbrev=7 --exclude='*[a-zA-Z][a-zA-Z]*' \
    | sed -E 's/^[^0-9]*//;s/([^-]*-g)/r\1/;s/-/./g'
}

build() (
  export CC CXX CFLAGS CXXFLAGS
  CC=clang
  CXX=clang++
  CFLAGS+=' -DNDEBUG'
  CXXFLAGS+=' -DNDEBUG'

  echo "Building cemu..."
  local _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -Wno-dev

    -DALLOW_PORTABLE=OFF
    -DENABLE_DISCORD_RPC=OFF
    -DENABLE_HIDAPI=OFF
    -DENABLE_LIBUSB=ON
    -DENABLE_SDL=ON
    -DENABLE_VCPKG=OFF
    -DUSE_SANITIZERS=OFF # cubeb
  )

  cmake "${_cmake_options[@]}"
  cmake --build build
)

package() {
  local _exec_name="Cemu_none"
  install -Dm755 "$_pkgsrc/bin/$_exec_name" "$pkgdir/usr/bin/$_pkgname"

  mkdir -pm755 "$pkgdir/usr/share/$_pkgname"
  cp -r "$_pkgsrc"/bin/{gameProfiles,resources} "$pkgdir/usr/share/$_pkgname/"

  install -Dm644 "$_pkgsrc"/dist/linux/info.cemu.Cemu.png "$pkgdir/usr/share/pixmaps/$_pkgname.png"

  install -Dm644 /dev/stdin "$pkgdir/usr/share/applications/$_pkgname.desktop" << END
[Desktop Entry]
Type=Application
Name=${_pkgname^}
Icon=$_pkgname
Exec=$_pkgname
GenericName=Wii U Emulator
Comment=$pkgdesc
Terminal=false
Categories=Game;Emulator;
Keywords=Nintendo;
MimeType=application/x-wii-u-rom;
END
}
