# Maintainer: aur.chaotic.cx

_pkgname="azahar"
pkgname="$_pkgname-git"
pkgver=2123.3.r13.g068fec0
pkgrel=2
pkgdesc="A 3DS emulator"
url="https://github.com/azahar-emu/azahar"
license=("GPL-2.0-or-later")
arch=('x86_64')

depends=(
  'enet'
  'libboost_iostreams.so'     # boost-libs
  'libboost_serialization.so' # boost-libs
  'libcrypto.so'              # openssl
  'libfmt.so'                 # fmt
  'libopenal.so'              # openal
  'libssl.so'                 # openssl
  'libusb-1.0.so'             # libusb
  'qt6-base'
  'qt6-multimedia'
  'sdl2'
  'soundtouch'
)
makedepends=(
  'boost'
  'catch2'
  'clang'
  'cmake'
  'doxygen'
  'git'
  'lld'
  'llvm'
  'ninja'
  'nlohmann-json'
  'rapidjson'
)

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

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

prepare() {
  cd "$_pkgsrc"
  git rm -r externals/boost
  git rm -r externals/catch2
  git rm -r externals/enet
  git rm -r externals/fmt
  git rm -r externals/inih/inih
  git rm -r externals/libusb/libusb
  git rm -r externals/openal-soft
  git rm -r externals/sdl2/SDL
  git rm -r externals/soundtouch
  git submodule update --init --recursive --depth=1

  # don't check for unwanted submodules
  sed -e '/check_submodules_present()/d' -i CMakeLists.txt

  # fix version
  local _pkgver _pkgrev
  _pkgver=$(pkgver)
  _pkgrev=$(git rev-parse --short=7 HEAD)
  sed -E \
    -e "s&@BUILD_DATE@&$(date -u --rfc-3339=date)&" \
    -e "s&@BUILD_FULLNAME@&$_pkgver&" \
    -e "s&@GIT_BRANCH@&master&" \
    -e "s&@GIT_DESC@&$_pkgrev&" \
    -e "s&@BUILD_VERSION@&${_pkgver%%.r*}&" \
    -e "s&@GIT_REV@&$_pkgrev&" \
    -e "s&@REPO_NAME@&${_pkgname^}&" \
    -i src/common/scm_rev.cpp.in

  # fix for Qt 6.10
  sed -e '1i find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)' \
    -e '$a target_link_libraries(citra_qt PRIVATE Qt6::GuiPrivate)' \
    -i src/citra_qt/CMakeLists.txt
}

pkgver() {
  cd "$srcdir/$_pkgsrc"
  local _tag _version _revision _hash
  _tag=$(git tag -l '[0-9]*' | grep -Ev '[A-Za-z][A-Za-z]' | sort -rV | head -1)
  _version="${_tag:?}"
  _revision=$(git rev-list --count --cherry-pick "$_tag"...HEAD)
  _commit=$(git rev-parse --short=7 HEAD)
  printf '%s.r%s.g%s' "${_version:?}" "${_revision:?}" "${_commit:?}"
}

build() {
  export CC CXX CFLAGS CXXFLAGS LDFLAGS
  CC=clang
  CXX=clang++
  CFLAGS="${CFLAGS//_FORTIFY_SOURCE=?/_FORTIFY_SOURCE=2} -Wno-error=deprecated-declarations"
  CXXFLAGS="${CFLAGS//_FORTIFY_SOURCE=?/_FORTIFY_SOURCE=2} -Wno-error=deprecated-declarations -I/usr/lib/libusb-1.0"

  local _ldflags=(${LDFLAGS})
  LDFLAGS="${_ldflags[@]//*fuse-ld*/} -fuse-ld=lld"

  local _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX='/usr'
    -DENABLE_QT_TRANSLATION=OFF # translations have spurious errors
    -DUSE_DISCORD_PRESENCE=ON
    -DUSE_SYSTEM_BOOST=ON
    -DUSE_SYSTEM_CATCH2=ON
    -DUSE_SYSTEM_CPP_HTTPLIB=OFF
    -DUSE_SYSTEM_CPP_JWT=OFF
    -DUSE_SYSTEM_CRYPTOPP=OFF
    -DUSE_SYSTEM_CUBEB=OFF
    -DUSE_SYSTEM_DYNARMIC=OFF
    -DUSE_SYSTEM_ENET=ON
    -DUSE_SYSTEM_FFMPEG_HEADERS=OFF
    -DUSE_SYSTEM_FMT=ON
    -DUSE_SYSTEM_GLSLANG=OFF
    -DUSE_SYSTEM_INIH=ON
    -DUSE_SYSTEM_JSON=ON
    -DUSE_SYSTEM_LIBUSB=ON
    -DUSE_SYSTEM_LODEPNG=OFF
    -DUSE_SYSTEM_OPENAL=ON
    -DUSE_SYSTEM_OPENSSL=ON
    -DUSE_SYSTEM_SDL2=ON
    -DUSE_SYSTEM_SOUNDTOUCH=ON
    -DUSE_SYSTEM_VMA=OFF
    -DUSE_SYSTEM_VULKAN_HEADERS=OFF
    -DUSE_SYSTEM_XBYAK=OFF
    -DUSE_SYSTEM_ZSTD=OFF
    -DUSE_SANITIZERS=OFF
    -DBUILD_TESTING=OFF
    -Wno-dev
  )

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

package() {
  DESTDIR="$pkgdir/" cmake --install build
  rm -rf $pkgdir/usr/include/
  rm -rf $pkgdir/usr/lib/
}
