# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Mario Emmenlauer <memmenlauer@biodataanalysis.de>

_realname=ccache
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=4.14
pkgrel=1
pkgdesc="Compiler cache that speeds up recompilation by caching previous compilations (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'mingw32' 'ucrt64' 'clang64' 'clangarm64')
url="https://ccache.dev/"
msys2_repository_url="https://github.com/ccache/ccache"
msys2_changelog_url="https://ccache.dev/releasenotes.html"
msys2_references=(
  'anitya: 257'
  'archlinux: ccache'
  'gentoo: dev-util/ccache'
)
license=("spdx:GPL-3.0-or-later")
depends=(
  "${MINGW_PACKAGE_PREFIX}-cc-libs"
  "${MINGW_PACKAGE_PREFIX}-fmt"
  "${MINGW_PACKAGE_PREFIX}-xxhash"
  "${MINGW_PACKAGE_PREFIX}-zstd"
  $([[ ${CARCH} == i686 ]] || echo \
    "${MINGW_PACKAGE_PREFIX}-hiredis" \
    "${MINGW_PACKAGE_PREFIX}-libblake3")
)
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-cmake"
  "${MINGW_PACKAGE_PREFIX}-ninja"
  $([[ ${CARCH} == i686 ]] || echo "${MINGW_PACKAGE_PREFIX}-asciidoctor")
)
source=("https://github.com/ccache/ccache/releases/download/v${pkgver}/${_realname}-${pkgver}.tar.xz"{,.minisig}
        "0001-generate-docs-bash.patch"
        "0002-use-sed-instead-of-perl.patch")
sha256sums=('b093ac5d38204cb4d9f29b0bbd570675aa5a592a78e6675b2c506dbe045234e7'
            '9f870c123b8f4a52b34b28b68f9dda333d3bcf096150554ca235763a566955f4'
            '55e60c7413774387f0b2b36f654fa5ad736e828c95372d85a65d15c8a784fb12'
            '037731448ddbe50b6d128a0a1f999b1f9f23c5e506b5d27013cf2675935c7424')
validpgpkeys=('5A939A71A46792CF57866A51996DDA075594ADB8') # Joel Rosdahl <joel@rosdahl.net>

prepare() {
  cd "${_realname}-${pkgver}"
  patch -p1 -i "${srcdir}/0001-generate-docs-bash.patch"
  patch -p1 -i "${srcdir}/0002-use-sed-instead-of-perl.patch"
}
build() {
  declare -a extra_config
  if check_option "debug" "n"; then
    extra_config+=("-DCMAKE_BUILD_TYPE=Release")
  else
    extra_config+=("-DCMAKE_BUILD_TYPE=Debug")
  fi

  if [[ ${CARCH} == i686 ]]; then
    extra_config+=(
      "-DENABLE_DOCUMENTATION=OFF"
      "-DREDIS_STORAGE_BACKEND=OFF"
    )
  else
    extra_config+=(
      "-DENABLE_DOCUMENTATION=ON"
      "-DREDIS_STORAGE_BACKEND=ON"
    )
  fi

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
    cmake \
      -GNinja \
      -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
      "${extra_config[@]}" \
      -DBUILD_SHARED_LIBS=ON \
      -DSTATIC_LINK=OFF \
      -DENABLE_TESTING=OFF \
      -DCCACHE_DEV_MODE=OFF \
      -DWARNINGS_AS_ERRORS=OFF \
      -S ${_realname}-${pkgver} \
      -B build-${MSYSTEM}

  cmake --build build-${MSYSTEM}
}

check() {
  # run unittest to verify that the program is not broken
  cmake -DENABLE_TESTING=ON -S ${_realname}-${pkgver} -B build-${MSYSTEM}
  cmake --build build-${MSYSTEM}
  ctest -R unittest --test-dir build-${MSYSTEM} --output-on-failure
}

package() {
  DESTDIR="${pkgdir}" cmake --install build-${MSYSTEM}

  # hack: use bash scripts as shortcuts since we cannot use symlinks
  install -d "${pkgdir}"${MINGW_PREFIX}/lib/ccache/bin
  cd "${pkgdir}"${MINGW_PREFIX}/lib/ccache/bin
  scripts=(c++ cc cpp ${CC} ${CXX} ${MINGW_CHOST}-${CXX} ${MINGW_CHOST}-c++ ${MINGW_CHOST}-${CC})
  for fn in ${scripts[*]}; do
    echo -e '#!/bin/bash\n\nccache '${MINGW_PREFIX}'/bin/'$fn' "$@"' > $fn
  done
}
