# Maintainer: Biswapriyo Nath <nathbappai@gmail.com>

_realname=cpputest
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=4.0
pkgrel=3
pkgdesc="Unit testing and mocking framework for C and C++ (mingw-w64)"
url="https://cpputest.github.io/"
msys2_repository_url='https://github.com/cpputest/cpputest'
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('spdx:BSD-3-Clause')
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-cmake"
  "${MINGW_PACKAGE_PREFIX}-ninja"
)
source=("${msys2_repository_url}/releases/download/v${pkgver}/${_realname}-${pkgver}.tar.gz"
        "010-timespec.patch")
sha256sums=('21c692105db15299b5529af81a11a7ad80397f92c122bd7bf1e4a4b0e85654f7'
            '29f9e5360f499f74971923ea8aece0eb98a47abd1ed09c0c4bbb7b1e2eb93e60')

prepare() {
  cd "${srcdir}"/${_realname}-${pkgver}
  patch -p1 -i "${srcdir}"/010-timespec.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 [[ ${MSYSTEM} == CLANG* ]]; then
    # Otherwise realloc is a macro, and std::realloc fails to compile.
    extra_config+=("-DMEMORY_LEAK_DETECTION=OFF")
  fi

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  cmake \
    -GNinja \
    -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
    -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
    "${extra_config[@]}" \
    -DC++11=ON \
    -DTESTS=ON \
    -DEXAMPLES=ON \
    -S ${_realname}-${pkgver} \
    -B build-${MSYSTEM}

  cmake --build build-${MSYSTEM}
}

check() {
  ctest --test-dir build-${MSYSTEM} --output-on-failure || true
}

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

  install -Dm644 "${srcdir}"/${_realname}-${pkgver}/README.md \
    "${pkgdir}"${MINGW_PREFIX}/share/doc/${_realname}/README.md
  install -Dm644 "${srcdir}"/${_realname}-${pkgver}/COPYING \
    "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}/COPYING
}
