# Maintainer: Frederik Carlier <frederik.carlier@keysight.com>

_realname=gnustep-base
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.29.0
pkgrel=7
pkgdesc="GNUstep Base library (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64')
url='https://gnustep.github.org/'
license=('spdx:LGPL-2.1-or-later')
makedepends=("${MINGW_PACKAGE_PREFIX}-autotools"
             "${MINGW_PACKAGE_PREFIX}-clang"
             "${MINGW_PACKAGE_PREFIX}-lld"
             "${MINGW_PACKAGE_PREFIX}-gnustep-make"
             "${MINGW_PACKAGE_PREFIX}-curl"
             patchutils
             rsync)
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-gnutls"
         "${MINGW_PACKAGE_PREFIX}-icu"
         "${MINGW_PACKAGE_PREFIX}-libffi"
         "${MINGW_PACKAGE_PREFIX}-libiconv"
         "${MINGW_PACKAGE_PREFIX}-libobjc2"
         "${MINGW_PACKAGE_PREFIX}-libxml2"
         "${MINGW_PACKAGE_PREFIX}-libxslt"
         "${MINGW_PACKAGE_PREFIX}-zlib"
)
source=("https://github.com/gnustep/libs-base/releases/download/base-${pkgver//./_}/${_realname}-${pkgver}.tar.gz"
        # Fix GSXML compatibility with libxml2 v2.11.0
        # https://github.com/gnustep/libs-base/pull/295, merged
        "https://github.com/gnustep/libs-base/commit/37913d006d96a6bdcb963f4ca4889888dcce6094.patch"
        # Use absolute paths in ./configure
        # https://github.com/gnustep/libs-base/pull/371, in review
        "https://github.com/gnustep/libs-base/commit/2039840e0e1f013f2d73deb6e083b88987cfa6af.patch"
        # MinGW: Add dllimport/dllexport attributes when compiling with clang
        # https://github.com/gnustep/libs-base/pull/363, merged
        "https://github.com/gnustep/libs-base/commit/9041539ea25274cf92b7a3489ed5b03762d4af3f.patch"
        # Fix incompatible function pointer types in config check
        # https://github.com/gnustep/libs-base/pull/303, merged
        'https://github.com/gnustep/libs-base/commit/fe863c981d61e50e3ea9cbe7f2b23135c1f2faf1.patch'
        # Fix undeclared function in config check
        'https://github.com/gnustep/libs-base/commit/87fc1f5e2e4094f49b330bece89ba8aa4436c684.patch'
        # Two small xml fixes
        # https://github.com/gnustep/libs-base/pull/405, merged
        'https://github.com/gnustep/libs-base/commit/0935f77d8f0a31ba24c9758bf6da3d84d750e7b0.patch')
sha256sums=('fa58eda665c3e0b9c420dc32bb3d51247a407c944d82e5eed1afe8a2b943ef37'
            'a7a3bad7bda7e63599677294f0ee0b2273b680168b6fd9b4b4c5618ba8a184d5'
            '2a325471df00494a2ff7b87a954e7ecee2e45c31296636326880a78078fa249f'
            'ceb7cfc82ff3801e82e12b791f18c04c42ba3ab9ee0cc79ee453c157bf89d8d0'
            '0026c621970d40f80eb007159ed07ec471cca2d06ca31c245912ac6ca0a95656'
            '5673a594ddcd5010d099d8878ec20f3895914e96a00fe00bbf8101a507f323c3'
            '600c9a319bf6e7ab81e62e0450d5aee9761d2f6ac08d60b8bf5047128f279292')

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

  patch -p1 -i ${srcdir}/37913d006d96a6bdcb963f4ca4889888dcce6094.patch
  patch -p1 -i ${srcdir}/2039840e0e1f013f2d73deb6e083b88987cfa6af.patch
  patch -p1 -i ${srcdir}/9041539ea25274cf92b7a3489ed5b03762d4af3f.patch
  patch -p1 -i ${srcdir}/fe863c981d61e50e3ea9cbe7f2b23135c1f2faf1.patch
  patch -p1 -i ${srcdir}/87fc1f5e2e4094f49b330bece89ba8aa4436c684.patch
  filterdiff -x '*/ChangeLog' ${srcdir}/0935f77d8f0a31ba24c9758bf6da3d84d750e7b0.patch > ${srcdir}/filtered0935f77d8f0a31ba24c9758bf6da3d84d750e7b0.patch
  patch -p1 -i ${srcdir}/filtered0935f77d8f0a31ba24c9758bf6da3d84d750e7b0.patch
}

build() {
  rsync --recursive --times --links "${srcdir}/${_realname}-${pkgver}"/* "${srcdir}/build-${MSYSTEM}"
  cd "${srcdir}/build-${MSYSTEM}"

  case ${MSYSTEM} in
    MINGW*|UCRT*)
      export LDFLAGS="-fuse-ld=lld -lstdc++ -lgcc_s"
      ;;
    CLANG*)
      export LDFLAGS="-lc++"
      ;;
  esac

  CC="$MINGW_PREFIX/bin/clang" \
  CXX="$MINGW_PREFIX/bin/clang++" \
  ./configure \
    --prefix="${MINGW_PREFIX}"
  
  CC="$MINGW_PREFIX/bin/clang" \
  CXX="$MINGW_PREFIX/bin/clang++" \
  make
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"

  make install DESTDIR="${pkgdir}"

  install -Dm644 "${srcdir}/${_realname}-${pkgver}/COPYING" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/COPYING"
}
