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

pkgbase=guile
pkgname=("${pkgbase}" "lib${pkgbase}" "lib${pkgbase}-devel")
pkgver=3.0.11
pkgrel=1
pkgdesc="a portable, embeddable Scheme implementation written in C"
url="https://www.gnu.org/software/guile/"
msys2_references=(
  "cpe: cpe:/a:gnu:guile"
)
arch=(i686 x86_64)
license=('spdx:LGPL-3.0-or-later')
options=('!libtool')
makedepends=('autotools'
             'gcc'
             'gettext-devel'
             'gmp-devel'
             'libxcrypt-devel'
             'libffi-devel'
             'libgc-devel'
             'libiconv-devel'
             'libintl'
             'libreadline-devel'
             'libunistring-devel'
             'pkgconf'
             'gperf')
source=("https://ftp.gnu.org/gnu/${pkgbase}/${pkgbase}-${pkgver}.tar.xz"
        '0001-Avoid-warnings-when-Guile-headers-are-included-in-a-.patch'
        '0002-system-foreign-library-Use-uname-to-distinguish-MSYS.patch'
        '0003-Activate-test-pthread-create-secondary-for-Cygwin.patch'
        '0004-test-ffi-Fix-qsort-availability-check-on-MSYS2.patch'
        '0005-test-suite-standalone-Fix-MSYS2-loading-and-enforce-.patch'
        '0006-test-guild-compile-Skip-cleanup-test-on-Windows.patch'
        '0007-test-suite-standalone-Skip-resource-limit-tests-on-M.patch'
        '0008-libguile-posix-Fix-const-warning-in-CPU_ISSET-usage.patch'
        '0009-lightening-Fix-x86-compilation-and-ABI-compliance-on.patch'
        '0010-libguile-Makefile.am-Fix-race-condition-in-install-d.patch'
)
sha256sums=('818c79d236657a7fa96fb364137cc7b41b3bdee0d65c6174ca03769559579460'
            '59076314b96d5ac430c2eff675b1cb365b08f4bd2cfeadf91580ba2ec98a0f68'
            '65dcbc7a1241ae8ea0df5edddca741cc61a5e91ea9baf357c013d171a30f6d66'
            '61edb7c2f77aca3bdff316f0f72fe474c5a57b44be00a8fc3cd4209da1d7f33d'
            '8edb3d722b500c5421e0cadac23538204217de437793fb33395bfbcd0d6f7e0b'
            '078f61480ea543679ae3cb3ff3cb35b6908bca0a72fde7c444f02fcd36cff3a6'
            '185687fa4ca1198d82260b8a9ff42e6abd99332abaaf2582824a1af230c50f60'
            '67fc8c5aa698dcacfe5c5540173a52676600b84941dcb7035fe5ac89d9cc0fc0'
            '68f2c5541b7d4cc6b8d56b9e668824951d478c7e6b584ff56d16984d0f7f8940'
            'a87db1d2ce00f922d075f2102aaa2ed17d121ba6138ae41201ee9a60fb62bfd5'
            '0ac681d5dc7fd27729d56662e19a9be413888306b212b77cc0fb933f53c1e1d0'
)

prepare() {
  cd "${srcdir}"/${pkgbase}-${pkgver}
  
  patch -p1 -i "${srcdir}"/'0001-Avoid-warnings-when-Guile-headers-are-included-in-a-.patch'
  patch -p1 -i "${srcdir}"/'0002-system-foreign-library-Use-uname-to-distinguish-MSYS.patch'
  patch -p1 -i "${srcdir}"/'0003-Activate-test-pthread-create-secondary-for-Cygwin.patch'
  patch -p1 -i "${srcdir}"/'0004-test-ffi-Fix-qsort-availability-check-on-MSYS2.patch'
  patch -p1 -i "${srcdir}"/'0005-test-suite-standalone-Fix-MSYS2-loading-and-enforce-.patch'
  patch -p1 -i "${srcdir}"/'0006-test-guild-compile-Skip-cleanup-test-on-Windows.patch'
  patch -p1 -i "${srcdir}"/'0007-test-suite-standalone-Skip-resource-limit-tests-on-M.patch'
  patch -p1 -i "${srcdir}"/'0008-libguile-posix-Fix-const-warning-in-CPU_ISSET-usage.patch'
  patch -p1 -i "${srcdir}"/'0009-lightening-Fix-x86-compilation-and-ABI-compliance-on.patch'
  patch -p1 -i "${srcdir}"/'0010-libguile-Makefile.am-Fix-race-condition-in-install-d.patch'

  autoreconf -fi
}

build() {
  cd "${srcdir}"/${pkgbase}-${pkgver}
  ./configure \
    --build=${CHOST} \
    --prefix=/usr \
    --disable-rpath \
    --disable-lto --enable-error-on-warning

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

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

  make -i check

  echo " ****  Running last tests in a complete way    ****"
  for i in  ./test-suite/tests/*.test
    do ./check-guile $(basename $i) || true
    done
}

package_guile() {
  depends=("libguile=${pkgver}")

  mkdir -p "${pkgdir}"/usr/bin
  cp -rf "${srcdir}"/dest/usr/bin "${pkgdir}"/usr/
  rm -f "${pkgdir}"/usr/bin/*.dll
  rm -f "${pkgdir}"/usr/bin/*-config*

  mkdir -p "${pkgdir}"/usr/share
  cp -rf "${srcdir}"/dest/usr/share/info "${pkgdir}"/usr/share/
  cp -rf "${srcdir}"/dest/usr/share/man "${pkgdir}"/usr/share/
}

package_libguile() {
  depends=('gmp'
           'libxcrypt'
           'libffi'
           'libgc'
           'libreadline'
           'libunistring')
  groups=('libraries')

  mkdir -p "${pkgdir}"/usr/bin
  install -Dm755 "${srcdir}"/dest/usr/bin/*.dll "${pkgdir}"/usr/bin/

  mkdir -p "${pkgdir}"/usr/share
  cp -rf "${srcdir}"/dest/usr/share/guile "${pkgdir}"/usr/share/

  mkdir -p "${pkgdir}"/usr/lib
  cp -rf "${srcdir}"/dest/usr/lib/guile "${pkgdir}"/usr/lib/

  mkdir -p "${pkgdir}"/usr/share/gdb/auto-load/usr/bin
  install -Dm644 "${srcdir}"/dest/usr/lib/*.scm \
                 "${pkgdir}"/usr/share/gdb/auto-load/usr/bin/$(dlltool \
                   -I "${srcdir}"/dest/usr/lib/libguile-*.dll.a)-gdb.scm

  install -D -m644 "${srcdir}"/${pkgbase}-${pkgver}/LICENSE \
    "${pkgdir}"/usr/share/licenses/${pkgbase}/LICENSE
  install -D -m644 "${srcdir}"/${pkgbase}-${pkgver}/COPYING \
    "${pkgdir}"/usr/share/licenses/${pkgbase}/COPYING
  install -D -m644 "${srcdir}"/${pkgbase}-${pkgver}/COPYING.LESSER \
    "${pkgdir}"/usr/share/licenses/${pkgbase}/COPYING.LESSER
}

package_libguile-devel() {
  depends=("libguile=${pkgver}"
           'gmp-devel'
           'libgc-devel'
           'pkgconf')
  groups=('development')
  options=('staticlibs')

  mkdir -p "${pkgdir}"/usr/bin
  install -Dm755 "${srcdir}"/dest/usr/bin/*-config* "${pkgdir}"/usr/bin/
  cp -rf "${srcdir}"/dest/usr/include "${pkgdir}"/usr/
  mkdir -p "${pkgdir}"/usr/lib
  cp -rf "${srcdir}"/dest/usr/lib/*.a "${pkgdir}"/usr/lib/
  cp -rf "${srcdir}"/dest/usr/lib/pkgconfig "${pkgdir}"/usr/lib/
  mkdir -p "${pkgdir}"/usr/share
  cp -rf "${srcdir}"/dest/usr/share/aclocal "${pkgdir}"/usr/share/
}
