# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Martell Malone <martellmalone@gmail.com>
# Contributor: Renato Silva <br.renatosilva@gmail.com>

_realname=winpthreads
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}" "${MINGW_PACKAGE_PREFIX}-libwinpthread")
pkgver=13.0.0.r388.gbb8673e5f
pkgrel=1
_commit='bb8673e5f137300b018d1dcdeab1c28c1d292e97'
pkgdesc="MinGW-w64 winpthreads library (mingw-w64)"
url="https://www.mingw-w64.org/"
msys2_repository_url="https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-libraries/winpthreads"
# The main license of `winpthreads' is MIT, but parts of this library are
# derived from the "POSIX Threads for Microsoft Windows" library, which is
# licensed under BSD [1].
license=('spdx:MIT AND BSD-3-Clause-Clear')
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
groups=("${MINGW_PACKAGE_PREFIX}-toolchain")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-autotools"
             "${MINGW_PACKAGE_PREFIX}-crt"
             "${MINGW_PACKAGE_PREFIX}-headers"
             "git")
options=('!emptydirs')
source=("mingw-w64"::"git+https://git.code.sf.net/p/mingw-w64/mingw-w64#commit=$_commit"
        "0001-Define-__-de-register_frame_info-in-fake-libgcc_s.patch")
sha256sums=('8668e7f398b98b493e131fee57500466ab334c3fff0e6cf754e49aee5f223b44'
            '2e779bcc60a1422b23e0cfdb5c0f6851f2382592bb4675d08a6bdef78d5e5c10')

pkgver() {
  cd "${srcdir}/mingw-w64"
  git describe --long ${_commit} | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//g'
}

prepare() {
  cd "${srcdir}/mingw-w64"
  [[ -f mingw-w64-libraries/winpthreads/src/libgcc/dll_frame_info.c ]] && rm -rf mingw-w64-libraries/winpthreads/src/libgcc/dll_frame_info.c
  git apply "${srcdir}"/0001-Define-__-de-register_frame_info-in-fake-libgcc_s.patch

  cd "${srcdir}"/mingw-w64/mingw-w64-libraries/winpthreads
  autoreconf -vfi
}

build() {
  mkdir -p "${srcdir}"/build-${MSYSTEM} && cd "${srcdir}"/build-${MSYSTEM}

  # https://github.com/msys2/MINGW-packages/issues/7043
  CFLAGS="${CFLAGS//-Wp,-D__USE_MINGW_ANSI_STDIO=1/}"
  CXXFLAGS="${CXXFLAGS//-Wp,-D__USE_MINGW_ANSI_STDIO=1/}"

  declare -a extra_config
  if check_option "debug" "y"; then
    extra_config+=("CFLAGS=-O0 -g -DWINPTHREAD_DBG")
    extra_config+=("CXXFLAGS=-O0 -g -DWINPTHREAD_DBG")
    extra_config+=("CXXFLAGS=")
  fi

  ../mingw-w64/mingw-w64-libraries/winpthreads/configure \
    --prefix=${MINGW_PREFIX} \
    --enable-static \
    --enable-shared \
    "${extra_config[@]}"

  # I failed to figure out how to disable stripping, this
  # will have to do instead.
  if check_option "strip" "n"; then
    sed -i 's,^STRIP = .*$,STRIP = true,g'                Makefile
    sed -i 's,^STRIP=.*$,STRIP=true,g'                    libtool
    sed -i 's,old_striplib=.*$strip,old_striplib=true,g'  libtool
    sed -i 's,striplib=.*$,striplib=true,g'               libtool
  fi

  make
}

_install_licenses() {
  # TODO: any more license files?
  install -Dm644 "${srcdir}"/mingw-w64/mingw-w64-libraries/winpthreads/COPYING "${pkgdir}"${MINGW_PREFIX}/share/licenses/$1/COPYING
}

package_winpthreads() {
  depends=("${MINGW_PACKAGE_PREFIX}-crt" "${MINGW_PACKAGE_PREFIX}-libwinpthread=${pkgver}")
  provides=("${MINGW_PACKAGE_PREFIX}-${_realname}-git")
  conflicts=("${MINGW_PACKAGE_PREFIX}-${_realname}-git")
  replaces=("${MINGW_PACKAGE_PREFIX}-${_realname}-git")

  cd "${srcdir}"/build-${MSYSTEM}
  make DESTDIR="${pkgdir}" install

  rm -rf "${pkgdir}"${MINGW_PREFIX}/bin

  _install_licenses ${_realname}
}

package_libwinpthread() {
  provides=("${MINGW_PACKAGE_PREFIX}-libwinpthread-git")
  conflicts=("${MINGW_PACKAGE_PREFIX}-libwinpthread-git")
  replaces=("${MINGW_PACKAGE_PREFIX}-libwinpthread-git")

  cd "${srcdir}"/build-${MSYSTEM}
  make DESTDIR="${pkgdir}" install

  rm -rf "${pkgdir}"${MINGW_PREFIX}/include
  rm -rf "${pkgdir}"${MINGW_PREFIX}/lib

  _install_licenses libwinpthread
}

# 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;

# [1] https://locklessinc.com/articles/pthreads_on_windows/
