# Maintainer: MVZ Labor Ludwigsburg <edv@mvz-labor-lb.de>

_realname=mupdf
pkgbase=mingw-w64-${_realname}
pkgname=(
  "${MINGW_PACKAGE_PREFIX}-libmupdf"
  "${MINGW_PACKAGE_PREFIX}-python-mupdf"
  "${MINGW_PACKAGE_PREFIX}-mupdf"
  "${MINGW_PACKAGE_PREFIX}-mupdf-gl"
  "${MINGW_PACKAGE_PREFIX}-mupdf-tools"
)
pkgver=1.27.0
pkgrel=4
pkgdesc='Lightweight PDF and XPS viewer (mingw-w64)'
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url='https://mupdf.com/'
msys2_repository_url='https://github.com/ArtifexSoftware/mupdf/'
msys2_documentation_url='https://mupdf.readthedocs.io/'
msys2_references=(
  'archlinux: mupdf'
  "cpe: cpe:/a:artifex:mupdf"
)
license=('spdx:AGPL-3.0-or-later')
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-gcc"
  "${MINGW_PACKAGE_PREFIX}-pkgconf"
  "${MINGW_PACKAGE_PREFIX}-python"
  "${MINGW_PACKAGE_PREFIX}-swig"
  "${MINGW_PACKAGE_PREFIX}-brotli"
  "${MINGW_PACKAGE_PREFIX}-clang"
  "${MINGW_PACKAGE_PREFIX}-freetype"
  "${MINGW_PACKAGE_PREFIX}-freeglut"
  "${MINGW_PACKAGE_PREFIX}-gumbo-parser"
  "${MINGW_PACKAGE_PREFIX}-harfbuzz"
  "${MINGW_PACKAGE_PREFIX}-jbig2dec"
  "${MINGW_PACKAGE_PREFIX}-jxrlib"
  "${MINGW_PACKAGE_PREFIX}-leptonica"
  "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo"
  "${MINGW_PACKAGE_PREFIX}-libwinpthread"
  "${MINGW_PACKAGE_PREFIX}-libc++"
  "${MINGW_PACKAGE_PREFIX}-libiconv"
  "${MINGW_PACKAGE_PREFIX}-openjpeg2"
  "${MINGW_PACKAGE_PREFIX}-openssl"
  "${MINGW_PACKAGE_PREFIX}-zlib"
  "lzip"
  "unzip"
)
if [ ${MSYSTEM} == "CLANG64" ] || [ ${MSYSTEM} == "CLANGARM64" ] ; then
    makedepends+=(
          "${MINGW_PACKAGE_PREFIX}-gcc-compat"
    )
fi
source=("https://mupdf.com/downloads/archive/${_realname}-${pkgver}-source.tar.lz"
        "mupdf.pc"
        "001-makerules-search-system-libraries.patch"
        "002-makerules-fix-gl-libraries.patch"
        "003-makerules-fix-inline-error.patch"
        "004-gl-main-no-msc-ver-no-warning.patch"
        "005-win32-build-rules.patch"
        "006-makefile-shared-build.patch"
        "007-cpp-binding-build-fix.patch"
        "008-python-binding-build-fix.patch"
        "009-makefile-install-target.patch"
)
noextract=("${_realname}-${pkgver}-source.tar.lz")
sha256sums=('61b109c82093a1c39b1b7f58c04b6d8ad6fe8e83e266ce1d8423e1e5c9310911'
            '92ca3f25217333b48f3c8c50907cf1d0f90fda82d2bd8c48e4256aea290da8c0'
            'd0f98dead83ac341cbe21de9ccd3c27538763ab4f88fdea6776900c138d429e4'
            '9cdf7a1e009be8fa2b1fc270910a401c322ae9df2f2d67dd671191c3af27168c'
            '22d1c4878edd6e58cfb41dbb9bbc13efcd9b37843b78bccb421d1d235892a26c'
            '7f5b4286fa193d78dd9cc581171690109e13276c3bb9196a20749c44b0b392fa'
            'c95fc26c8b9948999161fbdb2fdccf8b3a9fc681a90f8778e8081c0e47242d4f'
            '329aea6dc1a8a2aaebc41e5c06fda7278e52d6cf8d540c754faa4cc30d1e135d'
            'e972cf4811460dcdf831ef3c4bc979630bb3707cfe1fa6c169215895034ab3bb'
            'ca0f742cf84939fc709dc5d644bd145bc4cad006523c5411a6090998f447111b'
            'db02aea2df78c01c1671d8b46a490d85a000ae4b660aadb90e48fcb29746b41b')

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

prepare() {
  sed -e "s/VERSION/${pkgver}/" -i "mupdf.pc"
  sed -e "s|@PREFIX@|${MINGW_PREFIX}|" -i "mupdf.pc"

  tar -xf "${_realname}-${pkgver}-source.tar.lz" || true

  cd "${_realname}-${pkgver}-source"

  # remove bundled packages, we want our system libraries
  rm -rf thirdparty/{curl,freetype,freeglut,harfbuzz,jbig2dec,libjpeg,openjpeg,brotli,tesseract,zint,zxing-cpp,zlib,gumbo-parser,leptonica}

  apply_patch_with_msg \
    001-makerules-search-system-libraries.patch \
    002-makerules-fix-gl-libraries.patch

  # ARM64 don't support CFLAGS -ssme4.1
  if [ ${MSYSTEM} != "CLANGARM64" ]; then
    apply_patch_with_msg \
      003-makerules-fix-inline-error.patch
  fi

  apply_patch_with_msg \
    004-gl-main-no-msc-ver-no-warning.patch \
    005-win32-build-rules.patch \
    006-makefile-shared-build.patch \
    007-cpp-binding-build-fix.patch \
    008-python-binding-build-fix.patch \
    009-makefile-install-target.patch
}

build() {
  [[ -d build-${MSYSTEM} ]] && rm -rf build-${MSYSTEM}
  cp -r ${_realname}-${pkgver}-source build-${MSYSTEM} && cd build-${MSYSTEM}

  local make_opts=(
      VENV_FLAG=
      USE_SYSTEM_LIBS=yes
      USE_SYSTEM_JPEGXR=yes
      USE_SYSTEM_MUJS=no
      HAVE_GLUT=yes
      HAVE_WIN32=yes
      HAVE_OBJCOPY=no
      WINDRES=windres
      prefix=${MINGW_PREFIX}
      DESTDIR=install
      build=release
      shared=yes
  )

  export PIPCL_PYTHON_CONFIG=${MINGW_PREFIX}/bin/python-config

  make "${make_opts[@]}" libs apps extra-apps
  make "${make_opts[@]}" c++ python
  make "${make_opts[@]}" install install-extra-apps install-shared-c++
}

package_libmupdf() {
  pkgdesc='Library for Lightweight PDF and XPS viewer (mingw-w64)'
  depends=(
    "${MINGW_PACKAGE_PREFIX}-brotli"
    "${MINGW_PACKAGE_PREFIX}-cc-libs"
    "${MINGW_PACKAGE_PREFIX}-freetype"
    "${MINGW_PACKAGE_PREFIX}-gumbo-parser"
    "${MINGW_PACKAGE_PREFIX}-harfbuzz"
    "${MINGW_PACKAGE_PREFIX}-jbig2dec"
    "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo"
    "${MINGW_PACKAGE_PREFIX}-openjpeg2"
    "${MINGW_PACKAGE_PREFIX}-zlib"
  )

  cd build-${MSYSTEM}

  install -D -m0644 install${MINGW_PREFIX}/bin/libmupdf.dll "${pkgdir}${MINGW_PREFIX}/bin/libmupdf.dll"
  install -D -m0644 install${MINGW_PREFIX}/bin/libmupdfcpp.dll "${pkgdir}${MINGW_PREFIX}/bin/libmupdfcpp.dll"
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/licenses/libmupdf" README COPYING CHANGES
  cp -r install${MINGW_PREFIX}/{include,lib} "${pkgdir}${MINGW_PREFIX}/"

  install -D -m0644 "${srcdir}/mupdf.pc" "${pkgdir}${MINGW_PREFIX}/lib/pkgconfig/mupdf.pc"
}

package_python-mupdf() {
	pkgdesc="Library for Lightweight PDF and XPS viewer - Python bindings (mingw-w64)"
    depends=(
      "${MINGW_PACKAGE_PREFIX}-cc-libs"
      "${MINGW_PACKAGE_PREFIX}-libmupdf"
      "${MINGW_PACKAGE_PREFIX}-python"
  )
    cd build-${MSYSTEM}
    make prefix=${MINGW_PREFIX} DESTDIR="${pkgdir}" SO_INSTALL_MODE=755 install-shared-python
}

package_mupdf() {
  pkgdesc='Lightweight PDF and XPS viewer (mingw-w64)'
  depends=(
    "${MINGW_PACKAGE_PREFIX}-libmupdf"
    "${MINGW_PACKAGE_PREFIX}-openssl"
  )

  cd build-${MSYSTEM}

  install -D -m0755 install${MINGW_PREFIX}/bin/mupdf-w32 "${pkgdir}${MINGW_PREFIX}/bin/mupdf.exe"
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/licenses/mupdf" README COPYING CHANGES
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/man/man1" install${MINGW_PREFIX}/share/man/man1/mupdf.1*
  install -d -m0755 "${pkdir}${MINGW_PREFIX}/share/doc"
  cp -r install${MINGW_PREFIX}/share/doc/mupdf "${pkgdir}${MINGW_PREFIX}/share/doc/"
}

package_mupdf-gl() {
  pkgdesc='Lightweight PDF and XPS viewer with OpenGL backend (mingw-w64)'
  depends=(
    "${MINGW_PACKAGE_PREFIX}-libmupdf"
    "${MINGW_PACKAGE_PREFIX}-openssl"
    "${MINGW_PACKAGE_PREFIX}-freeglut"
  )
  conflicts=("${MINGW_PACKAGE_PREFIX}-mupdf")
  provides=("${MINGW_PACKAGE_PREFIX}-mupdf=${pkgver}")

  cd build-${MSYSTEM}

  install -D -m0755 install${MINGW_PREFIX}/bin/mupdf-gl "${pkgdir}${MINGW_PREFIX}/bin/mupdf.exe"
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/licenses/mupdf" README COPYING CHANGES
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/man/man1" install${MINGW_PREFIX}/share/man/man1/mupdf.1*
  install -d -m0755 "${pkdir}${MINGW_PREFIX}/share/doc"
  cp -r install${MINGW_PREFIX}/share/doc/mupdf "${pkgdir}${MINGW_PREFIX}/share/doc/"
}

package_mupdf-tools() {
  pkgdesc='Tools for Lightweight PDF and XPS viewer (mingw-w64)'
  depends=(
    "${MINGW_PACKAGE_PREFIX}-libmupdf"
    "${MINGW_PACKAGE_PREFIX}-openssl"
  )

  cd build-${MSYSTEM}

  install -D -m0755 -t "${pkgdir}${MINGW_PREFIX}/bin" install${MINGW_PREFIX}/bin/mu{raster,tool}
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/licenses/mupdf-tools" README COPYING CHANGES
  install -D -m0644 -t "${pkgdir}${MINGW_PREFIX}/share/man/man1" install${MINGW_PREFIX}/share/man/man1/mutool.1*
}

# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :

# generate wrappers
for _name in "${pkgname[@]}"; do
  _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
  _func="$(declare -f "${_short}")"
  eval "${_func/#${_short}/package_${_name}}"
done
# template end;
