# Maintainer: Giancarlo Razzolini <grazzolini@archlinux.org>
# Maintainer: Frederik Schwan <freswa at archlinux dot org>
# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
# Contributor: Allan McRae <allan@archlinux.org>

# toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
# NOTE: valgrind requires rebuilt with each major glibc version

pkgname=minglibc
pkgver=2.39
_commit=31da30f23cddd36db29d5b6a1c7619361b271fb4
pkgrel=2.1
url='https://www.gnu.org/software/libc'
license=(GPL-2.0-or-later LGPL-2.1-or-later)
ncxfab_makedepends=(base-devel git python) #
ncxfat_makedepends=(binutils linux-api-headers)
cat_makedepends=(mingcc)
xat_makedepends=(gcc)
options=(staticlibs !lto)
source=(git+https://sourceware.org/git/glibc.git#commit=${_commit})
validpgpkeys=(7273542B39962DF7B299931416792B4EA25340F8 # Carlos O'Donell
              BC7C7372637EC10C57D7AA6579C43DFBF1CF2187) # Siddhesh Poyarekar
b2sums=('SKIP')

prepare() {
  mkdir -p glibc-build

  [[ -d glibc-$pkgver ]] && ln -s glibc-$pkgver glibc
  cd glibc

}

build() {
  local _configure_flags=(
      --enable-bind-now
      --enable-fortify-source
      --enable-kernel=4.4
      --enable-multi-arch
      --enable-stack-protector=strong
      --enable-systemtap
      --disable-nscd
      --disable-profile
      --disable-werror
      --disable-systemtap
  )

  cd glibc-build

  echo "slibdir=$MPKG_USRPATH/lib" >> configparms
  echo "rtlddir=$MPKG_USRPATH/lib" >> configparms
  echo "sbindir=$MPKG_USRPATH/bin" >> configparms
  echo "rootsbindir=$MPKG_USRPATH/bin" >> configparms

  # Credits @allanmcrae
  # https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/glibc/PKGBUILD
  # remove fortify for building libraries
  # CFLAGS=${CFLAGS/-Wp,-D_FORTIFY_SOURCE=2/}

  "${srcdir}"/glibc/configure \
             --prefix=$MPKG_USRPATH \
             --host=$MPKG_TARGETMACHINE \
             --with-headers=$MPKG_BUILDSYSROOT/include \
             --libdir=$MPKG_USRPATH/lib \
             --libexecdir=$MPKG_USRPATH/lib \
             --enable-cet \
             "${_configure_flags[@]}"
}

package() {
  pkgdesc='GNU C Library'
  ncxfat_depends=('linux-api-headers>=4.10')
  provides=("glibc=$pkgver")
  conflicts=('glibc')

  cd glibc-build
  
  make DESTDIR="$pkgdir" install-bootstrap-headers=yes install-headers

  make csu/subdir_lib
  install -D csu/{crt1.o,crti.o,crtn.o,Mcrt1.o,Scrt1.o} -t "$pkgdir$MPKG_USRPATH/lib/"

  $MPKG_TARGETMACHINE-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o "$pkgdir/$MPKG_USRPATH/lib/libc.so"
  touch "$pkgdir/$MPKG_USRPATH/include/gnu/stubs.h"
}
