# Maintainer: Konstantin Gizdov <arch at kge dot pw>
# Contributor: Baptiste Jonglez <baptiste--aur at jonglez dot org>
# Contributor: acieroid
# Contributor: spider-mario <spidermario@free.fr>
# Contributor: Thomas Dziedzic < gostrc at gmail >
# Contributor: George Giorgidze <giorgidze@gmail.com>
# Contributor: William J. Bowman <bluephoenix47@gmail.com>

pkgbase=coq
pkgname=("${pkgbase}" "${pkgbase}ide" "${pkgbase}-doc")
pkgver=8.13.2
pkgrel=2
pkgdesc='Formal proof management system'
arch=('x86_64')
url='https://coq.inria.fr/'
license=('GPL')
groups=('coq')
options=('!emptydirs')
depends=('ocaml>=4.12.0' 'ocaml-num' 'ocaml-zarith' 'gtk3' 'gtksourceview3')
makedepends=('ocaml-findlib'
             'lablgtk3' 'gendesk' # coqide
             'texlive-bin' 'texlive-latexextra' 'texlive-pictures' # coq-doc
             'texlive-fontsextra' 'texlive-science'
             'fig2dev' 'imagemagick' 'hevea' 'ghostscript'
             'python' 'python-sphinx' 'python-sphinx_rtd_theme' 'python-pexpect'
             'python-beautifulsoup4' 'python-sphinxcontrib-bibtex' 'python-antlr4')
source=("coq-${pkgver}.tar.gz::https://github.com/coq/coq/archive/V${pkgver}.tar.gz")
sha512sums=('d5c16689a3a08d9be58e15d502e5c9bbe13ce8b9755334d1c096307260a804eeb59116c3a7b5fd85910e7f468ee728c69d04735769998a6e6369bf5352f5ec05')

build() {
  # generate a desktop file
  cd "${srcdir}"
  gendesk -f -n --pkgname "${pkgbase}ide" \
    --name "CoqIDE Proof Assistant" \
    --pkgdesc "Graphical interface for the Coq proof assistant" \
    --categories "Development;Science;Math;IDE;GTK"

  # build package
  cd "${srcdir}/${pkgbase}-${pkgver}"

  ./configure \
    -prefix '/usr' \
    -mandir '/usr/share/man' \
    -configdir '/etc/xdg/coq/' \
    -coqide opt \
    -with-doc yes
  # https://github.com/coq/coq/issues/12332
  SPHINXWARNERROR=0 make world
}

package_coq() {
  depends=('ocaml')
  optdepends=('coqide: graphical Coq IDE'
              'coq-doc: offline documentation'
              'coin-or-csdp: for psatz plugin'
              'python-argparse: needed by some coq tools (e.g. TimeFileMaker)')
  # coq-nox was the old name for coq without coqide
  replaces=('coq-nox')
  conflicts=('coq-nox')

  cd "${srcdir}/${pkgbase}-${pkgver}"

  # fix intermittent bug with folder creation
  install -d "${pkgdir}/usr/bin"
  install -d "${pkgdir}/usr/lib/coq"
  # Workaround for FS#58203
  mkdir -p "${pkgdir}/usr/lib/ocaml/"
  ln -s /usr/lib/coq "${pkgdir}/usr/lib/ocaml/coq"

  # The second target is needed to install coqidetop.cmxs (needed for some
  # frontend other than coqide, for instance coquille)
  make COQINSTALLPREFIX="${pkgdir}" install-coq install-ide-toploop install-meta
  rm -f "${pkgdir}/usr/share/man/man1/coqide.1"
}

package_coqide() {
  pkgdesc="GTK-based graphical interface for the Coq proof assistant"
  depends=("${pkgbase}" 'ocaml' 'gtk3' 'gtksourceview3')

  cd "${srcdir}/${pkgbase}-${pkgver}"

  mkdir -p "${pkgdir}/usr/bin"
  make COQINSTALLPREFIX="${pkgdir}" install-coqide
  install -D -m 644 -t "${pkgdir}/usr/share/man/man1/" man/coqide.1

  # Remove toploop files installed by "install-ide-toploop" in the main package
  rm -f "${pkgdir}/usr/lib/coq/toploop"/coqidetop.{cma,cmxs}
  rm -f "${pkgdir}/usr/bin"/coqidetop{,.opt}
  # In coq 8.7 this file is installed both by install-coq and install-coqide, remove the duplicate.
  rm -f "${pkgdir}/usr/lib/coq/vernac/topfmt.cmi"

  # Desktop file generated by gendesk
  install -D -m 644 "${srcdir}/${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
  install -D -m 644 ide/coqide/coq.png "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
}

package_coq-doc() {
  pkgdesc="HTML and PDF documentation for the Coq proof assistant"
  depends=()

  cd "${srcdir}/${pkgbase}-${pkgver}"

  make COQINSTALLPREFIX="${pkgdir}" install-doc
}
