#!/bin/bash # # This is a generic build.sh script # It can be used nearly unmodified with many packages # # The concept of "method" registering and the logic that implements it was shamelessly # stolen from jhlj's Compile.sh script :) # # Check the following 4 variables before running the script topdir=gcc version=3.3.1 pkgver=1bu source[0]=$topdir-$version.tar.bz2 ## If there are no patches, simply comment this #patch[0]= # Source function library . ${HOME}/buildpkg/scripts/buildpkg.functions # Define abbreviated version number abbrev_ver=331 # Fill in pkginfo values if necessary # using pkgname,name,pkgcat,pkgvendor & pkgdesc pkgname="$pkgprefix""gcc""$abbrev_ver" name="GCC - GNU Compiler Collection" pkgvendor="http://gcc.gnu.org" pkgdesc="GNU Compiler Collection" # depend is created by build.sh so make sure # it's removed by distclean META_CLEAN="$META_CLEAN depend" # We're going to build more than one package from this source # define helpervars to do that libgcc_stage=$BUILDPKG_BASE/$topdir/stage.libgcc gcc_dir=$prefix/gcc-$version libgcc_pkgname="$pkgprefix""libgcc" libgcc_name="libgcc - GCC runtime support" libgcc_pkgcat="library" libgcc_pkgvendor="http://gcc.gnu.org" libgcc_pkgdesc="Runtime support for programs built with gcc 3.x" libgcc_pkgver="1bu_$abbrev_ver" libstdc_stage=$BUILDPKG_BASE/$topdir/stage.libstdc libstdc_pkgname="$pkgprefix""libstdc""$abbrev_ver" libstdc_name="libstdc++ - GCC runtime support" libstdc_pkgcat="library" libstdc_pkgvendor="http://gcc.gnu.org" libstdc_pkgdesc="Runtime support for c++ programs built with gcc $version" libstdc_pkgver="1bu" MV=/usr/bin/mv # Define script functions and register them METHODS="" reg() { METHODS="$METHODS $1" } reg prep prep() { generic_prep } reg build build() { setdir $srcdir $MKDIR objdir setdir "$srcdir/objdir" $srcdir/$topsrcdir/configure --prefix=/usr/local/gcc-$version --disable-nls --with-as=/usr/local/bin/as --with-ld=/usr/local/bin/ld --with-system-zlib --enable-languages=c,c++ $MAKE_PROG } reg install install() { setdir $srcdir/objdir $MAKE_PROG DESTDIR=$stagedir install } reg pack pack() { # We want to create gcc, libstdc++ and libgcc packages # Move files for libgcc package $MKDIR -p $libgcc_stage$prefix/lib $MKDIR -p $libgcc_stage$prefix/lib/sparcv9 $MV $stagedir$gcc_dir/lib/libgcc_s* $libgcc_stage$prefix/lib $MV $stagedir$gcc_dir/lib/sparcv9/libgcc_s* $libgcc_stage$prefix/lib/sparcv9 # Move files for libstdc++ package $MKDIR -p $libstdc_stage$prefix/lib $MKDIR -p $libstdc_stage$prefix/lib/sparcv9 cp $stagedir$gcc_dir/lib/libstdc++.so* $libstdc_stage$prefix/lib cp $stagedir$gcc_dir/lib/sparcv9/libstdc++.so* $libstdc_stage$prefix/lib/sparcv9 rm -f $libstdc_stage$prefix/lib/libstdc++.so.5 rm -f $libstdc_stage$prefix/lib/sparcv9/libstdc++.so.5 rm -f $libstdc_stage$prefix/lib/libstdc++.so rm -f $libstdc_stage$prefix/lib/sparcv9/libstdc++.so # now create gcc package and make sure it depends on libstdc++331 echo "P $libgcc_pkgname $libgcc_pkgdesc" > $metadir/depend # Create dependency file generic_pack # Prepare for libgcc package $MV $stagedir $stagedir.1 $MV $libgcc_stage $stagedir pkgname=$libgcc_pkgname name=$libgcc_name pkgcat=$libgcc_pkgcat pkgvendor=$libgcc_pkgvendor pkgdesc=$libgcc_pkgdesc pkgver=$libgcc_pkgver distfile=libgcc-$version-$pkgver.sb-$os-$cpu-$pkgdirdesig usedepend=0 # don't use $metadir/depend file generic_pack # don't embed any pre/post scripts # Prepare for libstdc++ package $MV $stagedir $libgcc_stage $MV $libstdc_stage $stagedir pkgname=$libstdc_pkgname name=$libstdc_name pkgcat=$libstdc_pkgcat pkgvendor=$libstdc_pkgvendor pkgdesc=$libstdc_pkgdesc pkgver=$libstdc_pkgver distfile=libstdc++-$version-$pkgver.sb-$os-$cpu-$pkgdirdesig usedepend=0 generic_pack # clean up $stagedir # We will need to do build.sh install to use it again since we've moved files around # so we might as well nuke it now $MV $stagedir.1 $stagedir # move gcc stagedir into the current stagedir $MV $libgcc_stage $stagedir # move libgcc stagedir into the current stagedir setdir source clean stage # Nuke all of it :) } reg distclean distclean() { clean distclean pkgname=$libgcc_pkgname clean meta pkgname=$libstdc_pkgname clean meta } ################################################### # No need to look below here ################################################### reg all all() { for METHOD in $METHODS do case $METHOD in all*|*clean) ;; *) $METHOD ;; esac done } reg usage() { echo Usage $0 "{"$(echo $METHODS | tr " " "|")"}" exit 1 } OK=0 for METHOD in $* do METHOD=" $METHOD *" if [ "${METHODS%$METHOD}" == "$METHODS" ] ; then usage fi OK=1 done if [ $OK = 0 ] ; then usage; fi for METHOD in $* do ( $METHOD ) done