#!/bin/sh # build gcc for Slackware VERSION=3.2.2 ARCH=i386 BUILD=2 CWD=`pwd` TARGET=$ARCH-slackware-linux TMP=/gcc PKG=$TMP/package-gcc # Clear the build locations: rm -rf $PKG $TMP/gcc-$VERSION $TMP/gcc.build.lnx mkdir -p $PKG # 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 $TMP tar xjvf $CWD/gcc-$VERSION.tar.bz2 # install docs ( cd gcc-$VERSION # Fix perms/owners chown -R root.root . find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 754 -exec chmod 755 {} \; find . -perm 664 -exec chmod 644 {} \; mkdir -p $PKG/usr/doc/gcc-$VERSION # Only the most recent ChangeLog... shouldn't be too big. :) cp -a \ BUGS COPYING COPYING.LIB ChangeLog FAQ GNATS INSTALL MAINTAINERS README *.html \ $PKG/usr/doc/gcc-$VERSION mkdir -p $PKG/usr/doc/gcc-${VERSION}/gcc mkdir -p $PKG/usr/doc/${DF}gcc-${VERSION}/gcc/f ( cd gcc cp -a ABOUT* COPYING* LANG* NEWS README* SERVICE \ $PKG/usr/doc/gcc-$VERSION/gcc cd f cp -a BUGS NEWS README RELEASE-PREP \ $PKG/usr/doc/${DF}gcc-${VERSION}/gcc/f cd ../objc mkdir -p $PKG/usr/doc/${DO}gcc-${VERSION}/gcc/objc cp -a README $PKG/usr/doc/${DO}gcc-${VERSION}/gcc/objc ) mkdir -p $PKG/usr/doc/${DJ}gcc-${VERSION}/fastjar ( cd fastjar cp -a \ AUTHORS CHANGES COPYING ChangeLog NEWS README \ $PKG/usr/doc/${DJ}gcc-${VERSION}/fastjar ) mkdir -p $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c mkdir -p $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libF77 mkdir -p $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libI77 mkdir -p $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libU77 ( cd libf2c cp -a \ README TODO disclaimer.netlib permission.netlib readme.netlib \ $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c ( cd libF77 cp -a Notice README.netlib \ $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libF77 ) ( cd libI77 cp -a Notice README.netlib \ $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libI77 ) ( cd libU77 cp -a COPYING.LIB PROJECTS README \ $PKG/usr/doc/${DF}gcc-${VERSION}/libf2c/libU77 ) ) mkdir -p $PKG/usr/doc/${DJ}gcc-${VERSION}/libjava ( cd libjava cp -a \ COPYING ChangeLog HACKING LIBGCJ_LICENSE NEWS README THANKS \ $PKG/usr/doc/${DJ}gcc-${VERSION}/libjava ) mkdir -p $PKG/usr/doc/${DO}gcc-${VERSION}/libobjc ( cd libobjc cp -a README README.threads THREADS THREADS.MACH \ $PKG/usr/doc/${DO}gcc-${VERSION}/libobjc ) mkdir -p $PKG/usr/doc/${DX}gcc-${VERSION}/libstdc++-v3 ( cd libstdc++-v3 cp -a README $PKG/usr/doc/${DX}gcc-${VERSION}/libstdc++-v3 cp -a docs/html/faq/index.html $PKG/usr/doc/${DX}gcc-${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" ../gcc-$VERSION/configure --prefix=/usr \ --enable-shared \ --enable-threads=posix \ --enable-__cxa_atexit \ --disable-checking \ --with-gnu-ld \ --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 ( cd gcc make gnatlib GNATLIBCFLAGS="-g -O2" # This wants a shared -ladd2line? #make gnatlib-shared make gnattools ) make info make check; make install DESTDIR=$PKG # make ada.install-common DESTDIR=$PKG # make install-gnatlib DESTDIR=$PKG make -i install-info DESTDIR=$PKG chmod 755 $PKG/usr/lib/libgcc_s.so.1 # This is provided by binutils, so delete it here: rm -f $PKG/usr/lib/libiberty.a # Strip out unneeded stuff from the libraries and binaries: ( cd $PKG find . | xargs file | grep "ELF 32-bit LSB executable" | grep 80386 | cut -f 1 -d : | xargs strip --strip-unneeded find . | xargs file | grep "ELF 32-bit LSB shared object" | grep 80386 | cut -f 1 -d : | xargs strip --strip-unneeded ) # Most people debug their own code (not the libraries), so we'll strip these. # It cuts the size down quite a bit. find $PKG/usr/lib/gcc-lib -name "*.a" | xargs strip -g # Fix stuff up: ( cd $PKG/usr/info ; rm dir ; gzip -9 * ) ( cd $PKG mkdir -p lib cd lib ln -sf /usr/bin/cpp . ) ( cd $PKG/usr/bin mv g++ g++-gcc-$VERSION mv gcc gcc-$VERSION mv g77 g77-gcc-$VERSION ln -sf g++-gcc-$VERSION g++ ln -sf gcc-$VERSION gcc ln -sf g77-gcc-$VERSION g77 ln -sf g++ c++ ln -sf gcc cc ln -sf gcc-$VERSION i386-slackware-linux-gcc ln -sf g++-gcc-$VERSION i386-slackware-linux-c++ ln -sf g++-gcc-$VERSION i386-slackware-linux-g++ ln -sf g77 f77 chown root.bin * . ) ( cd $PKG/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 ) mkdir -p $PKG/install # This big package will need to be split... ( cd $CWD for file in slack-desc* ; do cat $file > $PKG/install/$file done ) # Leave a default so the package can work as-is: cp $PKG/install/slack-desc.gcc $TMP/package-gcc/install/slack-desc # build the tgz package ( cd $PKG; makepkg -l y -c n $TMP/gcc-$VERSION-$ARCH-$BUILD.tgz ) # keep a log ) 2>&1 | tee $TMP/gcc.build.log cat << EOF ************************************************ * OK, now you must edit the *.la files to make * * sure libtool in it's infinate wisdom has not * * inserted lots of $TMP paths into the * * dependancy_libs section. I've verified that * * it's not the "make install prefix=/...." * * (or now, the "make install DESTDIR=$PKG") * * causing this -- it's libtool failing to have * * a clue. It's possible that a sed script * * could also strip this garbage out, but I * * trust doing it myself more. YMMV. * ************************************************ EOF