# Maintainer : Christian Hesse <mail@eworm.de>
# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
# Contributor: Ronald van Haren <ronald.archlinux.org>
# Contributor: Keshav Amburay <(the ddoott ridikulus ddoott rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>

pkgname=grub
slackdesc="$pkgname (GNU GRand Unified Bootloader)"
epoch=2
_pkgver=2.14_rc1
_unifont_ver=17.0.01pkgver=${_pkgver/-/}
pkgver=2.14~rc1
pkgrel=1
url='https://www.gnu.org/software/grub/'
arch=('x86_64')
license=('GPL-3.0-or-later')
backup=(
  etc/default/grub
  etc/grub.d/40_custom
)
install="${pkgname}.install"
source=(
  git+https://git.savannah.gnu.org/git/grub.git#tag=grub-${_pkgver}?signed
  https://git.savannah.gnu.org/git/grub.git#tag=grub-${_pkgver}?signed
  git+https://git.savannah.gnu.org/git/gnulib.git
  https://ftp.gnu.org/gnu/unifont/unifont-${_unifont_ver}/unifont-${_unifont_ver}.bdf.gz{,.sig}
  0001-00_header-add-GRUB_COLOR_-variables.patch
  0002-10_linux-detect-archlinux-initramfs.patch
  0003-support-dropins-for-default-configuration.patch
  grub.default
  sbat.csv
)

prepare() {
  cd "${srcdir}/grub/"
  echo "Patch to enable GRUB_COLOR_* variables in grub-mkconfig..."
  ## Based on http://lists.gnu.org/archive/html/grub-devel/2012-02/msg00021.html
  patch -Np1 -i "${srcdir}/0001-00_header-add-GRUB_COLOR_-variables.patch"

  echo "Patch to detect of Arch Linux initramfs images by grub-mkconfig..."
  patch -Np1 -i "${srcdir}/0002-10_linux-detect-archlinux-initramfs.patch"

  echo "Patch to support dropins for default configuration..."
  patch -Np1 -i "${srcdir}/0003-support-dropins-for-default-configuration.patch"

  echo "Fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme..."
  sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "configure.ac"

  echo "Fix mkinitcpio 'rw' FS#36275..."
  sed 's| ro | rw |g' -i "util/grub.d/10_linux.in"

  echo "Fix OS naming FS#33393..."
  sed 's|GNU/Linux|Linux|' -i "util/grub.d/10_linux.in"

  echo "Pull in latest language files..."
  ./linguas.sh

  echo "Avoid problem with unifont during compile of grub..."
  # http://savannah.gnu.org/bugs/?40330 and https://bugs.archlinux.org/task/37847
  gzip -cd "${srcdir}/unifont-${_unifont_ver}.bdf.gz" > "unifont.bdf"

  echo "Run bootstrap..."
  ./bootstrap --gnulib-srcdir="${srcdir}/gnulib"

  echo "Make translations reproducible..."
  sed -i '1i /^PO-Revision-Date:/ d' po/*.sed
}

_configure_options=(
  --prefix="/usr"
  --bindir="/usr/bin"
  --sbindir="/usr/bin"
  --mandir="/usr/share/man"
  --infodir="/usr/share/info"
  --datarootdir="/usr/share"
  --sysconfdir="/etc"
  --program-prefix=""
  --with-bootdir="/boot"
  --with-grubdir="grub"
  --enable-boot-time
  --enable-cache-stats
)

export _configure_options
_platform="i386-pc i386-efi x86_64-efi x86_emu"
build() {
  for i in ${_platform}; do
    echo "Unset CFLAGS for build..."
    unset CFLAGS
    cp -r "${srcdir}/grub" "${srcdir}/grub-${i}"
    cd "${srcdir}/grub-${i}"
    echo "Run ./configure for ${i} build..."

    # Handle different platforms and append to _configure_options
    _configure_options=""
    if [ "$i" = "i386-pc" ]; then
      _configure_options="--enable-efiemu --with-platform=pc --target=i386"
    elif [ "$i" = "i386-efi" ]; then
      _configure_options="--disable-efiemu --with-platform=efi --target=i386"
    elif [ "$i" = "x86_64-efi" ]; then
      _configure_options="--with-platform=efi --target=x86_64"
    fi

    ./configure PACKAGE_VERSION="${epoch}:${pkgver}-${pkgrel}" ${_configure_options}

    if [ "$i" = "x86_64-efi" ]; then
      echo "Build language and doc files only for most common variant..."
      # language directory does not like -j option, build it first with -j1
      make -j1 po/
    else
      sed -i -e 's#po docs##' Makefile
    fi

    echo "Run make for ${i} build..."
    make

    # Ensure reproducibility of info pages if SOURCE_DATE_EPOCH is set
    if [ -n "$SOURCE_DATE_EPOCH" ]; then
      echo "Make info pages reproducible..."
      find . -name '*.texi' -exec touch -d "@${SOURCE_DATE_EPOCH}" {} \;
    fi
  done
}

package() {
  for i in ${_platform[@]}; do
    cd "${srcdir}/grub-${i}"
    echo "Run make install for ${i} build..."
    make DESTDIR="${pkgdir}/" bashcompletiondir="/usr/share/bash-completion/completions" install
    echo "Remove gdb debugging related files for ${i}..."
    rm -f "${pkgdir}/usr/lib/grub/${i}"/*.module
    rm -f "${pkgdir}/usr/lib/grub/${i}"/*.image
    rm -f "${pkgdir}/usr/lib/grub/${i}"/{kernel.exec,gdb_grub,gmodule.pl}
  done
  echo "Install /etc/default/grub (used by grub-mkconfig)..."
  install -D -m0644 "${srcdir}/grub.default" "${pkgdir}/etc/default/grub"
  sed -e "s/%PKGVER%/${epoch}:${pkgver}-${pkgrel}/" < "${srcdir}/sbat.csv" > "${pkgdir}/usr/share/grub/sbat.csv"
}
