# Maintainer: Alexey Pavlov <Alexpux@gmail.com>

_realname=doxygen
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.17.0
pkgrel=1
pkgdesc="A documentation system for C++, C, Java, IDL and PHP (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://www.doxygen.nl/"
msys2_repository_url="https://github.com/doxygen/doxygen"
msys2_references=(
  'archlinux: doxygen'
  "cpe: cpe:/a:doxygen:doxygen"
)
license=('spdx:GPL-2.0-only')
depends=(
  "${MINGW_PACKAGE_PREFIX}-cc-libs"
  $([[ ${CARCH} == i686 ]] || echo "${MINGW_PACKAGE_PREFIX}-clang-libs")
  "${MINGW_PACKAGE_PREFIX}-fmt"
  "${MINGW_PACKAGE_PREFIX}-libiconv"
  "${MINGW_PACKAGE_PREFIX}-sqlite3"
  "${MINGW_PACKAGE_PREFIX}-spdlog"
  "${MINGW_PACKAGE_PREFIX}-xapian-core"
)
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-cmake"
  "${MINGW_PACKAGE_PREFIX}-ninja"
  "${MINGW_PACKAGE_PREFIX}-pkgconf"
  "${MINGW_PACKAGE_PREFIX}-python"
  $([[ ${CARCH} == i686 ]] || echo \
    "${MINGW_PACKAGE_PREFIX}-clang-tools-extra" \
    "${MINGW_PACKAGE_PREFIX}-llvm" \
    "${MINGW_PACKAGE_PREFIX}-qt6-svg")
)
if [[ ${CARCH} != i686 ]]; then
  optdepends=("${MINGW_PACKAGE_PREFIX}-qt6-svg: for doxywizard")
fi
source=("${msys2_repository_url}/archive/Release_${pkgver//./_}/${_realname}-${pkgver}.tar.gz"
        'cmake-mingw.patch'
        '0002-clang-19-fix.patch'
        '0003-enable-lto-with-clang.patch'
        '0004-fix-llvm-definitions.patch')
sha256sums=('28199ea88989fc56e302c927ef979596fe9247dd231e767ba6edcdbaa49f78aa'
            '24f669b833c1e075d951774db2df4e9db6e61ea4cb7fa5cf666370ab420a94a5'
            'cfe1218b5897ad9ec88dab6dd86f592f941feac464646df619bb8ccb90bbdc4e'
            '7ec2711f7da6ec0d1d0610f1efbc0eb38eaee8b0f0ffee660507fed5147bdb67'
            '983d2cc5571f7077fc4cc9a0806cde8b30805ba04fc11ed5a885b54de4e95eda')

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

prepare() {
  mv "${srcdir}/${_realname}-Release_${pkgver//./_}" "${srcdir}/${_realname}-${pkgver}"
  cd "${srcdir}/${_realname}-${pkgver}"

  apply_patch_with_msg \
    cmake-mingw.patch \
    0003-enable-lto-with-clang.patch \
    0004-fix-llvm-definitions.patch

  # llvm 19 fixes
  # https://github.com/doxygen/doxygen/issues/10928
  apply_patch_with_msg \
    0002-clang-19-fix.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+=("-Dbuild_wizard=ON" "-Duse_libclang=ON")
  fi

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
    cmake \
      -GNinja \
      "${_extra_config[@]}" \
      -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
      -DCMAKE_INSTALL_LIBDIR=lib \
      -DCMAKE_INSTALL_BINDIR=bin \
      -Dbuild_parse=ON \
      -Dbuild_search=ON \
      -Duse_sys_fmt=ON \
      -Duse_sys_spdlog=ON \
      -Duse_sys_sqlite3=ON \
      -Dforce_qt="Qt6" \
      -DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python \
      -S ${_realname}-${pkgver} \
      -B build-${MSYSTEM}

  cmake --build build-${MSYSTEM}
}

check() {
  ctest --test-dir "build-${MSYSTEM}" --output-on-failure || warning "Tests failed"
}

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

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