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

_realname=docbook-xsl
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.79.2
pkgrel=9
pkgdesc='XML stylesheets for Docbook-xml transformations (mingw-w64)'
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('custom')
url='https://docbook.org/'
msys2_repository_url='https://github.com/docbook/xslt10-stylesheets'
depends=("${MINGW_PACKAGE_PREFIX}-libxml2"
         "${MINGW_PACKAGE_PREFIX}-libxslt"
         "${MINGW_PACKAGE_PREFIX}-docbook-xml")
install=${_realname}-${MSYSTEM}.install
source=(https://github.com/docbook/xslt10-stylesheets/releases/download/release%2F${pkgver}/docbook-xsl{,-nons}-${pkgver}.tar.gz
        "0002-fix-infinity.patch")
sha256sums=('966188d7c05fc76eaca115a55893e643dd01a3486f6368733c9ad974fcee7a26'
            'f89425b44e48aad24319a2f0d38e0cb6059fdc7dbaf31787c8346c748175ca8e'
            '4a27dd468bb803290b73aeb3a0fde190a1897b97945b59eaf39d8535bb6332a5')

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying $_patch"
    patch -Nbp1 -i "${srcdir}/$_patch"
  done
}

del_file_exists() {
  for _fname in "$@"
  do
    if [ -f $_fname ]; then
      rm -rf $_fname
    fi
  done
}
# =========================================== #

prepare() {
  cd "${srcdir}"/${_realname}-${pkgver}

  msg2 "${_realname}-${pkgver}"
  apply_patch_with_msg \
    0002-fix-infinity.patch

  cd "${srcdir}"/${_realname}-nons-${pkgver}

  msg2 "${_realname}-nons-${pkgver}"
  apply_patch_with_msg \
    0002-fix-infinity.patch
}

package() {
  cd "${srcdir}"
  mkdir -p "$pkgdir${MINGW_PREFIX}/etc/xml"
  xmlcatalog --noout --create "${pkgdir}${MINGW_PREFIX}/etc/xml/docbook-xsl"

  local pkgroot ns dir
  for ns in -nons ''; do
    pkgroot="$pkgdir${MINGW_PREFIX}/share/xml/docbook/xsl-stylesheets$ns-$pkgver"
    dir=${_realname}$ns-$pkgver
    install -Dt ${pkgroot} -m644 $dir/catalog.xml
    install -Dt "$pkgroot" -m644 $dir/VERSION{,.xsl}

    (
      shopt -s nullglob  # ignore missing files
      for fn in assembly common eclipse epub epub3 fo highlighting html \
        htmlhelp javahelp lib manpages params profiling roundtrip template \
        website xhtml xhtml-1_1 xhtml5
      do
        install -Dt "$pkgroot/$fn" -m644 $dir/$fn/*.{xml,xsl,dtd,ent}
      done
    )
  done

  local nons_catalog="${pkgdir}${MINGW_PREFIX}/share/xml/docbook/xsl-stylesheets-nons-$pkgver/catalog.xml"
  local catalog="${pkgdir}${MINGW_PREFIX}/share/xml/docbook/xsl-stylesheets-$pkgver/catalog.xml"

  # rewrites: <catalog> <scheme-base>
  #   SF 'xsl/'   + CDN 'xsl-nons/' -> non-namespaced catalog
  #   SF 'xsl-ns/' + CDN 'xsl/'     -> namespaced catalog
  local rewrites=(
    "$nons_catalog|http://docbook.sourceforge.net/release/xsl"
    "$nons_catalog|http://cdn.docbook.org/release/xsl-nons"
    "$catalog|http://docbook.sourceforge.net/release/xsl-ns"
    "$catalog|http://cdn.docbook.org/release/xsl"
  )
  for entry in "${rewrites[@]}"; do
    cat=${entry%%|*}
    base=${entry#*|}
    for ver in current "$pkgver"; do
      xmlcatalog --noout --add rewriteURI    "$base/$ver/" "./" "$cat"
      xmlcatalog --noout --add rewriteSystem "$base/$ver/" "./" "$cat"
    done
  done

  # delegations: <scheme-base> <target-catalog-relative-path>
  local rootcat="${pkgdir}${MINGW_PREFIX}/etc/xml/docbook-xsl"
  local nons_rel="../../share/xml/docbook/xsl-stylesheets-nons-$pkgver/catalog.xml"
  local ns_rel="../../share/xml/docbook/xsl-stylesheets-$pkgver/catalog.xml"
  local delegations=(
    "http://docbook.sourceforge.net/release/xsl/|$nons_rel"
    "http://cdn.docbook.org/release/xsl-nons/|$nons_rel"
    "http://docbook.sourceforge.net/release/xsl-ns/|$ns_rel"
    "http://cdn.docbook.org/release/xsl/|$ns_rel"
  )
  for entry in "${delegations[@]}"; do
    from=${entry%%|*}
    target=${entry#*|}
    xmlcatalog --noout --add delegateURI    "$from" "$target" "$rootcat"
    xmlcatalog --noout --add delegateSystem "$from" "$target" "$rootcat"
  done

  install -Dt "$pkgdir${MINGW_PREFIX}/share/licenses/$pkgname" -m644 $dir/COPYING
}
