# Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit mount-boot eutils flag-o-matic gnuconfig toolchain-funcs DESCRIPTION="GNU GRUB boot loader" HOMEPAGE="http://www.gnu.org/software/grub/" SRC_URI="mirror://gentoo/${P}.tar.gz mirror://gentoo/${P}-splash.patch.bz2" LICENSE="GPL-2" SLOT="0" KEYWORDS="~x86 ~amd64" IUSE="static netboot" RDEPEND=">=sys-libs/ncurses-5.2-r5" DEPEND="${RDEPEND} >=sys-devel/automake-1.8 >=sys-devel/autoconf-2.5" PROVIDE="virtual/bootloader" pkg_setup() { has_m32 || die "your compiler seems to be unable to compile 32bit code. if you are on amd64, make sure you compile gcc with USE=multilib FEATURES=-sandbox" ABI_ALLOW="x86" ABI="x86" } src_unpack() { unpack ${A} cd ${S} epatch ${WORKDIR}/${P}-splash.patch # PIC patch by psm & kevin f. quinn epatch ${FILESDIR}/${P}-PIC2.patch # -fwritable-strings is deprecated epatch ${FILESDIR}/${P}-warnings.patch # disable tests for BSD file systems that always fail (bug #71811) epatch ${FILESDIR}/${P}-bounced-checks.patch # add i2o RAID support (patch from Christian Zoffoli) epatch ${FILESDIR}/${P}-i2o-raid.patch # gfxboot menu support epatch ${FILESDIR}/${P}-gfxboot.patch gnuconfig_update } src_compile() { # non-default block sizes can kill compilation (bug #73499) unset BLOCK_SIZE use static && append-ldflags -static einfo "Running aclocal.."; aclocal || die "aclocal failed" einfo "Running autoconf.."; autoconf || die "autoconf failed" einfo "Running automake.."; WANT_AUTOMAKE=1.8 automake || die "automake failed" # grub-0.95 got added -fno-stack-protector detection, to disable ssp for stage2 # but the objcopy's (faulty) test fails if -fstack-protector is default # create a cache telling configure that objcopy is ok # added -C to econf to make use of the cache # CFLAGS has to be undefined running econf, else -fno-stack-protector detection fails # STAGE2_CFLAGS is not allowed to be used on emake command-line, it overwrites # -fno-stack-protector detected by configure, removed from netboot's emake has_ssp && echo "grub_cv_prog_objcopy_absolute=yes" > config.cache local myconf="--sbindir=/sbin --disable-auto-linux-mem-opt" # build the net-bootable grub first, but only if "netboot" is set if use netboot; then CFLAGS="" \ econf -C ${myconf} \ --enable-diskless \ --enable-{3c{5{03,07,09,29,95},90x},cs89x0,davicom,depca,eepro{,100}} \ --enable-{epic100,exos205,ni5210,lance,ne2100,ni{50,65}10,natsemi} \ --enable-{ne,ns8390,wd,otulip,rtl8139,sis900,sk-g16,smc9000,tiara} \ --enable-{tulip,via-rhine,w89c840} || die "netboot econf failed" emake w89c840_o_CFLAGS="-O" || die "making netboot" mv stage2/{nbgrub,pxegrub} ${S} mv stage2/stage2 stage2/stage2.netboot make clean || die "make clean failed" fi # Now build the regular grub # Note that FFS and UFS2 support are broken for now - stage1_5 files too big CFLAGS="" econf -C ${myconf} || die "econf failed" emake || die "making regular grub" } src_test() { # non-default block size also gives false pass/fails. unset BLOCK_SIZE make check || die "make check failed" } src_install() { make DESTDIR=${D} install || die exeinto /usr/lib/grub doexe stage2/stage2 use netboot && doexe nbgrub pxegrub stage2/stage2.netboot insinto /boot/grub doins ${FILESDIR}/splash.xpm.gz newins docs/menu.lst grub.conf.sample dodoc AUTHORS BUGS COPYING ChangeLog NEWS README THANKS TODO newdoc docs/menu.lst grub.conf.sample } pkg_preinst() { mount-boot_pkg_preinst } pkg_postinst() { [[ "$ROOT" != "/" ]] && return 0 # change menu.lst to grub.conf if [[ ! -e /boot/grub/grub.conf && -e /boot/grub/menu.lst ]]; then mv /boot/grub/menu.lst /boot/grub/grub.conf ewarn ewarn "*** IMPORTANT NOTE: menu.lst has been renamed to grub.conf" ewarn fi einfo "Linking grub.conf to menu.lst.." ln -sf grub.conf /boot/grub/menu.lst [[ -e /boot/grub/stage2 ]] && mv /boot/grub/stage2{,.old} einfo "Copying files to /boot/grub.." cp -p /usr/lib/grub/*/* /boot/grub > /dev/null 2>&1 cp -p /usr/lib/grub/* /boot/grub > /dev/null 2>&1 [[ -x /sbin/chpax ]] && /sbin/chpax -spme /sbin/grub ||: [[ -x /sbin/paxctl ]] && /sbin/paxctl -spme /sbin/grub # Not sure what this is exactly for, but "if it works, don't fix it". [[ -e /boot/grub/grub.conf ]] \ && /sbin/grub --batch --device-map=/boot/grub/device.map \ < /boot/grub/grub.conf > /dev/null 2>&1 }