#!/bin/sh # Heavily based on the Slackware 13.37 SlackBuild # Written by tom ( www.slacky.eu ) # Last build from tom ( www.slacky.eu ) # Slackware build script for GRUB Legacy # Official Site: http://www.gnu.org/software/grub/grub-legacy.en.html # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # IMPORTANT NOTE: # # This source won't compile on x86_64 machines. To build a x86_64 package # run the following command on a x86 machine: # # CHOST=x86_64 ./grub-legacy.SlackBuild # Exit the script on errors: set -e trap 'echo "$0 FAILED at line ${LINENO}"' ERR # Catch variables: PKGNAME=grub SUFFIX=legacy VERSION=0.97 GCVER=1.28 BUILD=${BUILD:-4} TAG=${TAG:-sl} ARCH=${ARCH:-i486} CWD=${CWD:-`pwd`} TMP=${TMP:-/tmp/buildpkgs/$PKGNAME-$SUFFIX} PKG=${PKG:-$TMP/package-$PKGNAME-$SUFFIX} OUTPUT=${OUTPUT:-$CWD} SOURCE="ftp://alpha.gnu.org/gnu/$PKGNAME/$PKGNAME-$VERSION.tar.gz" # Set destination architecture: CHOST=${CHOST:-i486} if [ "$CHOST" = "x86_64" ]; then SLKCFLAGS="-static" LIBDIRSUFFIX="64" else # Set building architecture: if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then echo "This package has to be built on x86, won't compile on x86_64" exit 1 fi fi # Source file availability: if [ ! -e $CWD/$PKGNAME-$VERSION.tar.gz ]; then wget $SOURCE fi # Create working directories: rm -rf $TMP mkdir -p $TMP $PKG $OUTPUT # Package build: cd $TMP tar xvf $CWD/$PKGNAME-$VERSION.tar.gz cd $PKGNAME-$VERSION chown -R root:root . chmod -R u+w,go+r-w,a-s . echo -e "\e[0;32m+------------------------------+\e[m" echo -e "\e[0;32m| Start SlackBuild grub-legacy |\e[m" echo -e "\e[0;32m+------------------------------+\e[m" if [ "$CHOST" = "x86_64" ]; then zcat $CWD/all_grub-0.96-nxstack.patch.gz | patch -p1 zcat $CWD/grub-0.97-initrdaddr.patch.gz | patch -p1 fi zcat $CWD/grub-0.97-graphics.patch.gz | patch -p1 zcat $CWD/special-devices.patch.gz | patch -p1 zcat $CWD/i2o.patch.gz | patch -p1 zcat $CWD/more-raid.patch.gz | patch -p1 zcat $CWD/intelmac.patch.gz | patch -p1 zcat $CWD/grub-inode-size.patch.gz | patch -p1 zcat $CWD/ext4.patch.gz | patch -p1 sed -i -e'/^AC_PROG_CC/ a\AM_PROG_CC_C_O\ ' configure.ac sed -i -e'/^AC_PROG_CC/ a\AM_PROG_AS\ ' configure.ac aclocal autoconf automake CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --infodir=/usr/info \ --libdir=/usr/lib$LIBDIRSUFFIX \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PKGNAME-$SUFFIX-$VERSION \ --build=$CHOST-slackware-linux make -j3 make install DESTDIR=$PKG # Fool makepkg into building a x86_64 package if CHOST is x86_64: if [ "$CHOST" = "x86_64" ]; then export ARCH="x86_64" fi # Add extra stuff: ( # Kent Robotti's grubconfig tool: cd $TMP rm -rf grubconfig-$GCVER tar xzf $CWD/grubconfig-$GCVER.tar.gz cd grubconfig-$GCVER zcat $CWD/grubconfig_localefix.patch.gz | patch chown -R root:root . chmod 644 README chmod 755 grubconfig mkdir -p $PKG/usr/doc/grubconfig-$GCVER cp -a README $PKG/usr/doc/grubconfig-$GCVER cp -a grubconfig $PKG/usr/sbin/grubconfig # An ext4_stage1_5 file: if [ `ls $PKG/usr/lib$LIBDIRSUFFIX/grub` != "$ARCH-slackware" ] ; then cd $PKG/usr/lib$LIBDIRSUFFIX/grub mv * $ARCH-slackware fi cd $PKG/usr/lib$LIBDIRSUFFIX/grub/$ARCH-slackware cp -a e2fs_stage1_5 ext4_stage1_5 # A splashimage and a sample of menu.lst using it: mkdir -p $PKG/boot/grub/splashimages cp -a $CWD/grass.xpm.gz $PKG/boot/grub/splashimages cp -a $CWD/menu.lst.sample $PKG/boot/grub ) # Compress man pages: if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man find . -type f -exec gzip -9 {} \; for i in $( find . -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done ) fi # Compress info pages and purge "dir" file from the package: if [ -d $PKG/usr/info ]; then ( cd $PKG/usr/info rm -f dir gzip -9 * ) fi # Add documentation: mkdir -p $PKG/usr/doc/$PKGNAME-$SUFFIX-$VERSION cp -a \ AUTHORS BUGS COPYING INSTALL MAINTENANCE NEWS README THANKS TODO \ $PKG/usr/doc/$PKGNAME-$SUFFIX-$VERSION cat $CWD/$PKGNAME-$SUFFIX.SlackBuild > $PKG/usr/doc/$PKGNAME-$SUFFIX-$VERSION/$PKGNAME-$SUFFIX.SlackBuild cat $CWD/slack-desc > $PKG/usr/doc/$PKGNAME-$SUFFIX-$VERSION/slack-desc # Strip binaries: cd $PKG chown -R root:root $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true # Add slack-desc and slack-required: mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc if [ -x "$(which requiredbuilder 2>/dev/null)" ];then requiredbuilder -y -v -s $CWD $PKG fi # Make the package: /sbin/makepkg -l y -c n $OUTPUT/$PKGNAME-$SUFFIX-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz} # Clean up the extra stuff: if [ "$1" = "--cleanup" ]; then rm -rf $TMP $PKG fi