# Maintainer: Jeremy Drake <github@jdrake.com>
# borrowed heavily from https://github.com/mstorsjo/llvm-mingw/blob/22ef26848995f2a3ccd0f1c13a2fcff60613a54b/build-libssp.sh

_realname=libssp
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=7.3.0
pkgrel=3
pkgdesc="A library for stack smashing protection (mingw-w64)"
arch=('any')
mingw_arch=('clang32' 'clang64' 'clangarm64')
url="https://gcc.gnu.org"
license=('LGPL' 'custom')
makedepends=("${MINGW_PACKAGE_PREFIX}-clang")
source=("libssp.tar.bz2::https://gitlab.com/watched/gcc-mirror/gcc/-/archive/releases/gcc-7.3.0/gcc-releases-gcc-7.3.0.tar.bz2?path=libssp"
        "https://gitlab.com/watched/gcc-mirror/gcc/-/raw/releases/gcc-7.3.0/COPYING.RUNTIME"
        "libssp-Makefile")
noextract=("libssp.tar.bz2")
sha256sums=('f5fa12f8e0ec23fa018c9545459255cfc37fb34b7a1661cff2500dd1b116d057'
            '9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74'
            'd617dd5bc3af20d474d3a50dddc0027eab4e69b4a3d0aa3039abe0159d40c6b4')

prepare() {
  cd "${srcdir}"
  rm -rf libssp
  tar -jxf "${srcdir}/libssp.tar.bz2" --strip-components=1
  cp -f libssp-Makefile libssp/Makefile
  cd libssp
  # gcc/libssp's configure script runs checks for flags that clang doesn't
  # implement. We actually just need to set a few HAVE defines and compile
  # the .c sources.
  cp -f config.h.in config.h
  for i in HAVE_FCNTL_H HAVE_INTTYPES_H HAVE_LIMITS_H HAVE_MALLOC_H \
    HAVE_MEMMOVE HAVE_MEMORY_H HAVE_MEMPCPY HAVE_STDINT_H HAVE_STDIO_H \
    HAVE_STDLIB_H HAVE_STRINGS_H HAVE_STRING_H HAVE_STRNCAT HAVE_STRNCPY \
    HAVE_SYS_STAT_H HAVE_SYS_TYPES_H HAVE_UNISTD_H HAVE_USABLE_VSNPRINTF \
    HAVE_HIDDEN_VISIBILITY; do
    cat config.h | sed 's/^#undef '$i'$/#define '$i' 1/' > tmp
    mv -f tmp config.h
  done
  cat ssp/ssp.h.in | sed 's/@ssp_have_usable_vsnprintf@/define/' > ssp/ssp.h
}

build() {
  [[ -d "${srcdir}/build-${MSYSTEM}" ]] && rm -rf "${srcdir}/build-${MSYSTEM}"
  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"
  make libssp-0.dll -f ../libssp/Makefile
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"
  mkdir -p "${pkgdir}${MINGW_PREFIX}"/bin
  cp -f libssp-0.dll "${pkgdir}${MINGW_PREFIX}/bin"

  install -Dm644 "${srcdir}"/COPYING.RUNTIME "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE"
}
