# Maintainer: Oleg Tolmatcev <oleg.tolmatcev@gmail.com>

_realname=cvise
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
_pkgver=2.12.0
pkgver=2.12.0.r301
pkgrel=3
pkgdesc="Super-parallel Python port of the C-Reduce (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://github.com/marxin/cvise"
msys2_repository_url='https://github.com/marxin/cvise'
msys2_references=(
  "aur: cvise"
)
license=('spdx:BSD-3-Clause-Clear')
depends=(
  "${MINGW_PACKAGE_PREFIX}-cc-libs"
  "${MINGW_PACKAGE_PREFIX}-clang-libs"
  "${MINGW_PACKAGE_PREFIX}-clang"
  "${MINGW_PACKAGE_PREFIX}-llvm-libs"
  "${MINGW_PACKAGE_PREFIX}-python"
  "${MINGW_PACKAGE_PREFIX}-python-chardet"
  "${MINGW_PACKAGE_PREFIX}-python-msgspec"
  "${MINGW_PACKAGE_PREFIX}-python-pebble"
  "${MINGW_PACKAGE_PREFIX}-python-psutil"
  "${MINGW_PACKAGE_PREFIX}-python-zstandard"
  "${MINGW_PACKAGE_PREFIX}-unifdef"
)
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-cmake"
  "${MINGW_PACKAGE_PREFIX}-ninja"
  "${MINGW_PACKAGE_PREFIX}-clang-tools-extra"
  "${MINGW_PACKAGE_PREFIX}-llvm"
  "${MINGW_PACKAGE_PREFIX}-tree-sitter"
  "git"
)
checkdepends=(
  "${MINGW_PACKAGE_PREFIX}-python-jsonschema"
  "${MINGW_PACKAGE_PREFIX}-python-pytest"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-mock"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-subprocess"
)
optdepends=("colordiff")
_commit=3c97aa487cd22bf6057c77b32c174209c94efeba
source=("${_realname}::git+https://github.com/marxin/cvise#commit=${_commit}"
        #"https://github.com/marxin/cvise/archive/v${pkgver}/${_realname}-${pkgver}.tar.gz"
        "001-fix-llvm-definitions.patch"
        "002-make-relocatable.patch"
        "003-fix-cvise-delta.patch"
        "004-add-basic-bash-support.patch"
        "005-fix-readFile-call.patch"
        "006-platform-mp-start-method.patch"
        "013-fix-atomic-replace-on-windows.patch"
        "014-avoid-manager-for-process-monitor.patch"
        "015-fix-preprocessed-param-to-global-crash.patch"
        "016-fix-callexpr-to-value-rewrite-crash.patch"
        "017-fix-callexpr-to-value-generate-hints-order.patch")
sha256sums=('dc22c7cd9a660576185c79b78e62ece1eb2aff480173a4550b9166797062b019'
            '71fbe46ac0c0c39129543a9531e587ee6be23aee7c69b5b8dbc03869dd7a39f4'
            'ab215fe791b19621848914b33980c7dd8f1f161b654884d5fa31d409949e52ff'
            '2544e65b5100f72961066e314d0ee0ccded1241e2c48c0d85e8157c932a6966b'
            '9dd2b999ef7bc14c611f91a7cc95eef30d13eac850616df684cc5941956eff45'
            '82bf7b515e55c0d8f433ac93227199fb5088bef62f2d35105f5abd69a5a285e1'
            'f6cad4ec9101d6ae62d8dfb791c32cb277e732fbc6368421793f84740ace4d57'
            '5154e47cc1dde40b65607adfc41cef7593e34dee5a5974de4285a9b77a70b897'
            'bd17943eafad3032fa9277b34de5059f5d495c3aa614b8ec32f82479fb20f286'
            '0d4a1c2bb54ff78d0c640501d87a868eb891721b96b4f1bdc47639ef09d991c2'
            'e031858f4be41566a71ae27293f3fa1b0a8bd370645d6253e4e18da389b7baf8'
            'bab0e1946fb589b433dbf3db3ddd767e24496dbde3cb8ccf88a40a2f7da74932')

apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

pkgver() {
  cd "${srcdir}/${_realname}"
  echo "${_pkgver}.r"`git rev-list --count v${_pkgver}..${_commit}`
}

prepare() {
  cd ${_realname}
  apply_patch_with_msg \
    001-fix-llvm-definitions.patch \
    002-make-relocatable.patch \
    003-fix-cvise-delta.patch \
    004-add-basic-bash-support.patch \
    005-fix-readFile-call.patch \
    006-platform-mp-start-method.patch \
    013-fix-atomic-replace-on-windows.patch \
    014-avoid-manager-for-process-monitor.patch \
    015-fix-preprocessed-param-to-global-crash.patch \
    016-fix-callexpr-to-value-rewrite-crash.patch \
    017-fix-callexpr-to-value-generate-hints-order.patch

  sed -i "s|-Werror||g" CMakeLists.txt
}

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

  # LLVM_DIR="${MINGW_PREFIX}/opt/llvm-21/lib/cmake/llvm" \
  # Clang_DIR="${MINGW_PREFIX}/opt/llvm-21/lib/cmake/clang" \
  ${MINGW_PREFIX}/bin/cmake \
    -Wno-dev \
    -G Ninja \
    -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \
    -DCMAKE_INSTALL_LIBEXECDIR=lib \
    -DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python \
    "${_extra_config[@]}" \
    -B build-${MSYSTEM} \
    -S "${_realname}"

  ${MINGW_PREFIX}/bin/cmake --build build-${MSYSTEM}
}

check() {
    ${MINGW_PREFIX}/bin/ctest --test-dir build-${MSYSTEM} --output-on-failure
}

package() {
  ${MINGW_PREFIX}/bin/cmake --install build-${MSYSTEM} --prefix "${pkgdir}"${MINGW_PREFIX}

  ${MINGW_PREFIX}/bin/python -m compileall -o 0 -o 1 -q "${pkgdir}"${MINGW_PREFIX}/share/cvise

  install -Dm644 "${srcdir}"/${_realname}/LICENSE \
    "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE
}
