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

pkgbase=pcre2
pkgname=('pcre2' 'libpcre2_8' 'libpcre2_16' 'libpcre2_32' 'libpcre2posix' 'pcre2-devel')
pkgver=10.47
pkgrel=1
pkgdesc="A library that implements Perl 5-style regular expressions"
arch=('i686' 'x86_64')
url="https://www.pcre.org/"
license=('BSD')
makedepends=('libreadline-devel' 'libbz2-devel' 'zlib-devel')
source=(https://github.com/PCRE2project/pcre2/releases/download/${pkgbase}-${pkgver}/${pkgbase}-${pkgver}.tar.bz2{,.sig}
        0001-Allow-building-an-MSYS-DLL.patch
        0002-RunTest-skip-ISO-8859-1-tests-for-Cygwin.patch
        0003-pcre2-10.40-cygwin-jit.patch)
sha256sums=('47fe8c99461250d42f89e6e8fdaeba9da057855d06eb7fc08d9ca03fd08d7bc7'
            'SKIP'
            '75d0b002035698d427b31a81c2efc518beea17e0e410f59185ef02e599b45f04'
            'c4e1c22bf0eca8ceaceaa1888bc1cd545adf1c5e93e2a83fb89eadc9d4b748f5'
            'e90e776d43a57767ac551e896e6191920577bbfc659bbd6fc6b48380c2c8fd44')
validpgpkeys=('A95536204A3BB489715231282A98E77EB6F24CA8') # Nicholas Wilson <nicholas@nicholaswilson.me.uk>

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

  patch -p1 -i "${srcdir}"/0001-Allow-building-an-MSYS-DLL.patch
  patch -p1 -i "${srcdir}"/0002-RunTest-skip-ISO-8859-1-tests-for-Cygwin.patch
  patch -p1 -i "${srcdir}"/0003-pcre2-10.40-cygwin-jit.patch

  autoreconf -fi
}

build() {
  cd "${srcdir}"/${pkgname}-${pkgver}
  ./configure \
      --build=${CHOST} \
      --prefix=/usr \
      --enable-jit \
      --enable-pcre2-8 \
      --enable-pcre2-16 \
      --enable-pcre2-32 \
      --enable-newline-is-anycrlf \
      --enable-unicode \
      --enable-pcre2grep-jit \
      --enable-pcre2grep-libbz2 \
      --enable-pcre2grep-libz \
      --disable-pcre2test-libedit \
      --enable-pcre2test-libreadline \
      ac_cv_header_windows_h=no

  make
  make DESTDIR="${srcdir}/dest" install
}

check() {
  cd "${srcdir}"/${pkgname}-${pkgver}

  # Work around bug in PCRE2 10.44
  test i686 != "$CARCH" ||
  for f in testdata/testoutput8-8-2 testdata/testoutput8-16-2
  do
    cp "../${pkgname}-${pkgver}/$f" "../${pkgname}-${pkgver}/$f.backup"
    perl -pi -e 's{^(Memory allocation - compiled block : )(\d+)$}{$1 . ($2 - 24)}e' "../${pkgname}-${pkgver}/$f"
  done

  make -j1 check

  for f in testdata/testoutput8-8-2 testdata/testoutput8-16-2
  do
    test ! -f "../${pkgname}-${pkgver}/$f.backup" ||
    mv "../${pkgname}-${pkgver}/$f.backup" "../${pkgname}-${pkgver}/$f"
  done
}

package_pcre2() {
  depends=('libreadline' 'libbz2' 'zlib' "libpcre2_8=${pkgver}" "libpcre2_16=${pkgver}" "libpcre2_32=${pkgver}" "libpcre2posix=${pkgver}")

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*.exe ${pkgdir}/usr/bin/
  cp -rf ${srcdir}/dest/usr/share ${pkgdir}/usr/
  install -Dm644 ${srcdir}/${pkgname}-${pkgver}/LICENCE.md "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.md
}

package_libpcre2_8() {
  groups=('libraries')
  depends=('gcc-libs')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*pcre2-8-0.dll ${pkgdir}/usr/bin/
}

package_libpcre2_16() {
  groups=('libraries')
  depends=('gcc-libs')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*pcre2-16-0.dll ${pkgdir}/usr/bin/
}

package_libpcre2_32() {
  groups=('libraries')
  depends=('gcc-libs')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*pcre2-32-0.dll ${pkgdir}/usr/bin/
}

package_libpcre2posix() {
  depends=("libpcre2_8=${pkgver}")
  groups=('libraries')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*pcre2-posix-[0-9]*.dll ${pkgdir}/usr/bin/
}

package_pcre2-devel() {
  pkgdesc="PCRE headers and libraries"
  options=('staticlibs')
  groups=('development')
  depends=("libpcre2_8=${pkgver}" "libpcre2_16=${pkgver}" "libpcre2_32=${pkgver}" "libpcre2posix=${pkgver}")

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*-config ${pkgdir}/usr/bin/
  cp -rf ${srcdir}/dest/usr/include ${pkgdir}/usr/
  cp -rf ${srcdir}/dest/usr/lib ${pkgdir}/usr/
}
