# vim: syn=sh ft=sh et sw=2 sts=2 ts=2 tw=0:
#Packager: Dimitris Tzemos <dijemos@gmail.com>

pkgname=grub
pkgver=2.12
_unifontver=17.0.03
_dejavuver=2.37
pkgrel=2dj

source=(
  "grub-default"
  "slackel.png"
  "update-grub"
  "windows_uefi"
  "setup.grubconfig"
  "grubconfig"
  "ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-$pkgver.tar.xz"
  "http://unifoundry.com/pub/unifont/unifont-$_unifontver/font-builds/unifont-$_unifontver.pcf.gz"
  "http://sourceforge.net/projects/dejavu/files/dejavu/$_dejavuver/dejavu-sans-ttf-$_dejavuver.zip"
  "grub.dejavusansmono.gfxterm.font.diff"
  "grub.gfxterm.font.diff"
  "0198-align-struct-efi_variable-better.patch"
  "0001-skip-new-and-orig-files-in-etc-grub.d.patch"
  "0001-00_header-add-GRUB_COLOR_-variables.patch"
  "0003-support-dropins-for-default-configuration.patch"
  "b835601c7639ed1890f2d3db91900a8506011a8e.patch"
  "10_linux.osname.patch"
  "0004-initrd_fallback_name.patch"
  "0005-GRUB_DISPLAY_KERNEL_FILETYPES.patch"
  "0006-warn-grub.d-overwrites-docs.patch"
  "0333-dont-double-space-header.patch"
  "06_local_colors"
)
docs=("AUTHORS" "BUGS" "COPYING*" "INSTALL" "NEWS" "README*" "THANKS" "TODO")
url=http://www.gnu.org/software/grub/
options=('noextract' 'nostrip' 'noautodotnew')
dotnew=('etc/default/grub' 'etc/grub.d/00_header' 'etc/grub.d/10_linux' 'etc/grub.d/20_linux_xen' 'etc/grub.d/25_bli' 'etc/grub.d/30_os-prober' 'etc/grub.d/30_uefi-firmware' 'etc/grub.d/40_custom' 'etc/grub.d/41_custom')

slackdesc=\
(
#|-----handy-ruler------------------------------------------------------|
"$pkgname (the second GNU GRand Unified Bootloader)"
"GRUB 2 has been rewritten from scratch to clean up everything for"
"modularity and portability."
"Features are: Scripting support, Graphical interface, Rescue mode,"
"cross-platform and many more"
"Briefly, boot loader is the first software program that runs when a"
"computer starts. It is responsible for loading and transferring"
"control to the operating system kernel software (such as the Hurd or"
"the Linux). The kernel initializes the rest of the operating system."
"* gettextvar, eval, getdate commands added."
)

build() {
	
  # CFLAGS and CXXFLAGS should not contains fPIC or compile will fail
  export CFLAGS=" -Os "
  export CFLAGS=$(echo "$CFLAGS"|sed 's/-fPIC/-fno-PIC/')
  export CXXFLAGS=$(echo "$CXXFLAGS"|sed 's/-fPIC/-fno-PIC/')
  cd $SRC || return 1
  tar xf grub-$pkgver.tar.xz || return 1
  unzip $SRC/dejavu-sans-ttf-$_dejavuver.zip || return 1
  cd grub-$pkgver || return 1

  # Support DejaVuSansMono font (dejavusansmono.pf2) by default:
  #cat $SRC/grub.dejavusansmono.gfxterm.font.diff | patch -p1 --verbose || return 1
  
  # Set default gfxterm font:
  cat $SRC/grub.gfxterm.font.diff | patch -p1 --verbose || return 1

  # Fix alignment error with gcc8:
  cat $SRC/0198-align-struct-efi_variable-better.patch | patch -p1 --verbose || return 1

  # Skip processing any files in /etc/grub.d/ that end in .new or .orig:
  cat $SRC/0001-skip-new-and-orig-files-in-etc-grub.d.patch | patch -p1 --verbose || return 1

  # From Arch, add a couple more GRUB_COLOR options:
  cat $SRC/0001-00_header-add-GRUB_COLOR_-variables.patch | patch -p1 --verbose || return 1

  # Also from Arch, support drop-in config bits in /etc/default/grub.d/:
  cat $SRC/0003-support-dropins-for-default-configuration.patch | patch -p1 --verbose || return 1

  # Fix 2.12 release with upstream commit (won't compile otherwise):
  cat $SRC/b835601c7639ed1890f2d3db91900a8506011a8e.patch | patch -p1 --verbose || return 1

  # For Slackware, opt-out of having our operating system renamed:
  cat $SRC/10_linux.osname.patch | patch -p1 --verbose || return 1

  # Allow defining an initrd fallback name with the
  # GRUB_INITRD_FALLBACK_NAME variable in /etc/default/grub.
  # Commented out by default.
  cat $SRC/0004-initrd_fallback_name.patch | patch -p1 --verbose || return 1

  # Support displaying only kernels that are files, only kernels that are
  # symlinks, or both. This is set with the GRUB_DISPLAY_KERNEL_FILETYPES
  # variable in /etc/default/grub:
  cat $SRC/0005-GRUB_DISPLAY_KERNEL_FILETYPES.patch | patch -p1 --verbose || return 1

  # Add a warning to the README in /etc/grub.d/ so that users know that the
  # standard files in here will be overwritten with every upgrade:
  cat $SRC/0006-warn-grub.d-overwrites-docs.patch | patch -p1 --verbose || return 1

  # This double space at the top of the menu just looks bad.
  cat $SRC/0333-dont-double-space-header.patch | patch -p1 --verbose || return 1

  # Still won't compile. Someday they'll remember how to cut a new release.
  touch grub-core/extra_deps.lst

  #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" || return 1
  # "Avoid problem with unifont during compile of grub..."
  # http://savannah.gnu.org/bugs/?40330 and https://bugs.archlinux.org/task/37847
  gzip -cd "${SRC}/unifont-${_unifontver}.pcf.gz" > "unifont.pcf"  || return 1


autoreconf -vif  
  ./configure \
    --with-platform="pc" \
    --target="i386" \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --localstatedir=/var \
    --sysconfdir=/etc \
    --mandir=/usr/man \
    --infodir=/usr/share/info \
    --docdir=/usr/doc/$pkgname-$pkgver \
    --program-prefix= \
    --enable-cache-stats \
    --enable-boot-time \
    --enable-device-mapper \
    $([ $ARCH = x86_64 ] && echo '--enable-efiemu' || echo '--disable-efiemu') \
    --enable-grub-mkfont \
    --enable-grub-mount \
    --enable-nls \
    --with-bootdir="/boot" \
    --with-grubdir="grub" \
    --disable-silent-rules \
    --disable-werror \
    --build=$arch-slackware-linux || return 1
  make -j $numjobs || return 1
  make install DESTDIR=$PKG bashcompletiondir="/usr/share/bash-completion/completions" || return 1
  # EFI compilation
  ./configure \
    --with-platform="efi" \
    --target=$(echo $ARCH | grep -q "i.86" && echo "i386" || echo $ARCH) \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --localstatedir=/var \
    --sysconfdir=/etc \
    --mandir=/usr/man \
    --infodir=/usr/share/info \
    --docdir=/usr/doc/$pkgname-$pkgver \
    --program-prefix= \
    --disable-efiemu \
    --enable-cache-stats \
    --enable-boot-time \
    --enable-device-mapper \
    --enable-grub-mkfont \
    --enable-grub-mount \
    --enable-nls \
    --with-bootdir="/boot" \
    --with-grubdir="grub" \
    --disable-silent-rules \
    --disable-werror \
    --build=$arch-slackware-linux || return 1
  make clean || return 1
  make -j $numjobs || return 1
  make install DESTDIR=$PKG bashcompletiondir="/usr/share/bash-completion/completions" || return 1
  
  #"Run ./configure for emu build..."
  ./configure \
    --with-platform="emu" \
    -target=$(echo $ARCH | grep -q "i.86" && echo "i386" || echo $ARCH) \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --localstatedir=/var \
    --sysconfdir=/etc \
    --mandir=/usr/man \
    --infodir=/usr/share/info \
    --docdir=/usr/doc/$pkgname-$pkgver \
    --program-prefix= \
    --enable-grub-emu-sdl=no \
    --disable-grub-emu-pci \
	--enable-nls \
	--enable-device-mapper \
	--enable-cache-stats \
	--enable-grub-mkfont \
	--enable-grub-mount \
	--program-prefix= \
	--with-bootdir="/boot" \
	--with-grubdir="grub" \
	--disable-silent-rules \
	--disable-werror \
    --build=$arch-slackware-linux || return 1
  make clean || return 1
  make -j $numjobs || return 1
  make install DESTDIR=$PKG bashcompletiondir="/usr/share/bash-completion/completions" || return 1
   
  install -D -m644 $SRC/grub-default $PKG/etc/default/grub || return 1
  install -D -m644 $SRC/slackel.png $PKG/boot/grub/slackel.png || return 1
  install -D -m755 $SRC/update-grub $PKG/usr/sbin/update-grub || return 1
  install -D -m755 $SRC/windows_uefi $PKG/usr/sbin/windows_uefi || return 1
  install -D -m755 $SRC/grubconfig $PKG/sbin/grubconfig || return 1
  install -D -m755 $SRC/setup.grubconfig $PKG/var/log/setup/setup.grubconfig || return 1
  install -D -m755 $SRC/06_local_colors $PKG/etc/grub.d/06_local_colors || return 1
  
  # Add fonts, if found on the system:
	FONT_SIZE=${FONT_SIZE:-19}
	if [ -r /usr/share/fonts/TTF/unifont.ttf ]; then
		$PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/unifont.pf2 -abv \
		-s $FONT_SIZE /usr/share/fonts/TTF/unifont.ttf || return 1
	fi
	if [ -r /usr/share/fonts/TTF/DejaVuSansMono.ttf ]; then
		$PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/dejavusansmono.pf2 -abv \
		-s $FONT_SIZE /usr/share/fonts/TTF/DejaVuSansMono.ttf || return 1
	fi	
	if [ -r /usr/share/fonts/TTF/Hack-Regular.ttf ]; then
		$PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/hack.pf2 -av \
		-s $FONT_SIZE /usr/share/fonts/TTF/Hack-Regular.ttf || return 1
		$PKG/usr/bin/grub-mkfont -o $PKG/usr/share/grub/hackbold.pf2 -abv \
		-s $FONT_SIZE /usr/share/fonts/TTF/Hack-Regular.ttf || return 1
	fi
	
}
