#!/bin/sh
# build gcc for Slackware

VERSION=gcc-3.1
ARCH=i386
BUILD=1

CWD=`pwd`
TARGET=$ARCH-slackware-linux
TEMPDIR=/tmp

# These are to install the docs for easy package splitting.
# Comment these out if you plan to leave gcc as a single large package.
DF=gcc-g77/
DX=gcc-gxx/
DJ=gcc-java/
DO=gcc-objc/

cd $TEMPDIR
tar xjvf $CWD/$VERSION.tar.bz2
# install docs
( cd $VERSION
  # Fix perms/owners
  chown -R root.root .
  find . -perm 777 -exec chmod 755 {} \;
  find . -perm 775 -exec chmod 755 {} \;
  find . -perm 664 -exec chmod 644 {} \;
  mkdir -p $TEMPDIR/package-gcc/usr/doc/$VERSION
  # Only the most recent ChangeLog... shouldn't be too big. :)
  cp -a \
    BUGS COPYING COPYING.LIB ChangeLog FAQ GNATS INSTALL MAINTAINERS README *.html \
    $TEMPDIR/package-gcc/usr/doc/$VERSION
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${VERSION}/gcc
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/gcc/f
  ( cd gcc
    cp -a ABOUT* COPYING* LANG* NEWS README* SERVICE \
       $TEMPDIR/package-gcc/usr/doc/$VERSION/gcc
    cd f
    cp -a BUGS NEWS README RELEASE-PREP \
       $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/gcc/f
    cd ../objc
    mkdir -p $TEMPDIR/package-gcc/usr/doc/${DO}${VERSION}/gcc/objc
    cp -a README $TEMPDIR/package-gcc/usr/doc/${DO}${VERSION}/gcc/objc
  )
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DJ}${VERSION}/fastjar
  ( cd fastjar
    cp -a \
      AUTHORS CHANGES COPYING ChangeLog NEWS README \
      $TEMPDIR/package-gcc/usr/doc/${DJ}${VERSION}/fastjar
  )
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libF77
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libI77
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libU77
  ( cd libf2c
    cp -a \
      README TODO disclaimer.netlib permission.netlib readme.netlib \
      $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c
      ( cd libF77
        cp -a Notice README.netlib \
          $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libF77
      )
      ( cd libI77
        cp -a Notice README.netlib \
          $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libI77
      )
      ( cd libU77
        cp -a COPYING.LIB PROJECTS README \
          $TEMPDIR/package-gcc/usr/doc/${DF}${VERSION}/libf2c/libU77
      )
  )
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DJ}${VERSION}/libjava
  ( cd libjava
    cp -a \
      COPYING ChangeLog HACKING LIBGCJ_LICENSE NEWS README THANKS \
      $TEMPDIR/package-gcc/usr/doc/${DJ}${VERSION}/libjava
  )
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DO}${VERSION}/libobjc
  ( cd libobjc
    cp -a README README.threads THREADS THREADS.MACH \
      $TEMPDIR/package-gcc/usr/doc/${DO}${VERSION}/libobjc
  )
  mkdir -p $TEMPDIR/package-gcc/usr/doc/${DX}${VERSION}/libstdc++-v3
  ( cd libstdc++-v3
    cp -a README $TEMPDIR/package-gcc/usr/doc/${DX}${VERSION}/libstdc++-v3
    cp -a docs/html/faq/index.html $TEMPDIR/package-gcc/usr/doc/${DX}${VERSION}/libstdc++-v3/faq.html
  )
)
# build gcc
( mkdir gcc.build.lnx;
  cd gcc.build.lnx;
  # CFLAGS="-Wall -g1 -O2"
  # CFLAGS="-Wall -O2" LDFLAGS=-s
  # CXXFLAGS="-O2"
  ../$VERSION/configure --prefix=/usr \
              --enable-shared \
              --with-gnu-ld \
              --enable-threads \
              --verbose \
              --target=${TARGET} \
              --host=${TARGET}
  # Include all debugging info:
  #make bootstrap;
  # Include less debugging info:
  #make CFLAGS='-O2' LIBCFLAGS='-g -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
  # Include even less debugging info:
  make BOOT_CFLAGS='-O2 -march=i386 -mcpu=i686' STAGE1_CFLAGS='-O2 -march=i386 -mcpu=i686' CFLAGS='-O2 -march=i386 -mcpu=i686' CXXFLAGS='-O2 -march=i386 -mcpu=i686' LIBCFLAGS='-O2 -g -march=i386 -mcpu=i686' LIBCXXFLAGS='-O2 -g -march=i386 -mcpu=i686 -fno-implicit-templates' GCJFLAGS='-O2 -march=i386 -mcpu=i686' bootstrap
  make info
  make check;
  make install prefix=$TEMPDIR/package-gcc/usr;
  make -i install-info prefix=$TEMPDIR/package-gcc/usr;

  # Fix stuff up:
  chown -R root.root $TEMPDIR/package-gcc
  ( cd $TEMPDIR/package-gcc/usr/info ; rm dir ; gzip -9 * )
  cd $TEMPDIR/package-gcc
  mkdir -p lib
  ( cd lib ; ln -sf /usr/bin/cpp . )
  ( cd usr/bin
    mv g++ g++-$VERSION
    mv gcc $VERSION
    mv g77 g77-$VERSION
    ln -sf g++-$VERSION g++
    ln -sf $VERSION gcc
    ln -sf g77-$VERSION g77 
    ln -sf g++ c++
    ln -sf gcc cc
    ln -sf $VERSION i386-slackware-linux-gcc 
    ln -sf g++-$VERSION i386-slackware-linux-c++
    ln -sf g++-$VERSION i386-slackware-linux-g++
    ln -sf g77 f77
    strip *
    chown root.bin * .
  )
  ( cd usr/lib/gcc-lib/i386-slackware-linux/3.0
    strip cc1* collect2 cpp f771 jc1 jvgenmain 
  )
  ( cd usr/man
    gzip -9 */*
    cd man1
    ln -sf g++.1.gz c++.1.gz
    ln -sf g77.1.gz f77.1.gz
    ln -sf gcc.1.gz cc.1.gz
  )  
  # The new tar ignores umask...
  find $TEMPDIR/package-gcc/usr/doc -type f -exec chmod 644 {} \;
  find $TEMPDIR/package-gcc/usr/doc -type d -exec chmod 755 {} \;

  mkdir -p $TEMPDIR/package-gcc/install
  # This big package will need to be split...
  ( cd $CWD
    for file in slack-desc* ; do
      cat $file > $TEMPDIR/package-gcc/install/$file
    done )
  # Leave a default so the package can work as-is:
  cp $TEMPDIR/package-gcc/install/slack-desc.gcc $TEMPDIR/package-gcc/install/slack-desc

  # build the tgz package
  (
    cd $TEMPDIR/package-gcc;
    makepkg -l y -c n $TEMPDIR/$VERSION-$ARCH-$BUILD.tgz
  )
# keep a log
) 2>&1 | tee $TEMPDIR/gcc.build.log

