#!/bin/bash # Slackware build script for pcc (Portable C Compiler) # Originally written by Armin Besirovic # Modified by B. Watson # 20141031 bkw: # - took over maintentance. # - upgraded for 1.1.0 beta series. # - combined pcc and pcc-libs into one build, since either one is # useless without the other. # - removed pcc-lib's 002-build-libpcc-with-pcc.patch as it's been # applied upstream in the 1.1.0 branch. # - use private /usr/libexec/pcc/ dir instead of installing stuff # directly in /usr/libexec. Probably just paranoia. # - rename cpp-pcc man page to pcpp, since the beta installs a # /usr/bin/pcpp. # - get rid of -j1 in make command, seems to no longer be needed. # - add logic to choose which compiler to use if CC not set. # - extract license from source, install to /usr/doc # 20150126 bkw: # - upgraded for pcc-1.1.0 release, no more beta # - add seddery to fix typo in cc.c (ifdef => ifndef) cd $(dirname $0) ; CWD=$(pwd) PRGNAM=pcc VERSION=${VERSION:-1.1.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} # non-standard stanza here: we're not going to use -march= or -mtune= # on 32-bit Slackware, because doing so prevents pcc from being used # to compile itself. I could add logic to use those flags only if # CC is gcc, but the extra complexity isn't worth the dubious benefit. SLKCFLAGS="-O2 -fPIC" if [ "$ARCH" = "x86_64" ]; then LIBDIRSUFFIX="64" else LIBDIRSUFFIX="" fi set -e # which compiler shall we use? if [ "$CC" = "" ]; then # user didn't specify, autodetect. if pcc --version &>/dev/null; then CC=pcc elif gcc --version &>/dev/null; then CC=gcc elif clang --version &>/dev/null; then CC=clang else echo "Can't find any of pcc, gcc, or clang in \$PATH. Giving up." 1>&2 fi fi export CC WITHCC="$( basename $CC )" [ "$CC" = "pcc" ] && WITHCC="pcc itself" # enable TLS? upstream disables it by default. TLSOPT="--disable-tls" if [ "${TLS:-no}" = "yes" ]; then TLSOPT="--enable-tls" fi rm -rf $PKG $TMP/$PRGNAM mkdir -p $TMP/$PRGNAM $PKG $OUTPUT cd $TMP/$PRGNAM tar xvf $CWD/$PRGNAM-$VERSION.tgz tar xvf $CWD/$PRGNAM-libs-$VERSION.tgz chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # first, the compiler itself: cd $PRGNAM-$VERSION # fix typo, ref http://marc.info/?l=pcc-list&m=141824411830017&w=2 sed -i '0,/^#ifdef MULTI/!s,^#ifdef \(MULTI\),#ifndef \1,' cc/cc/cc.c CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ $TLSOPT \ --prefix=/usr \ --mandir=/usr/man \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --libexecdir=/usr/libexec/$PRGNAM \ --build=$ARCH-slackware-linux # no install-strip, but binaries are already stripped by default. make make install DESTDIR=$PKG gzip -9 $PKG/usr/man/man?/*.? # Don't overwrite Slackware's man page. mv $PKG/usr/man/man1/cpp.1.gz $PKG/usr/man/man1/pcpp.1.gz # why are there no docs in the @##!$^ tarball?! mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild # license is BSD-style, in comments in the code. sed -n '/Copyright/,/^ *$/s,^...,,p' cc/cc/cc.c \ > $PKG/usr/doc/$PRGNAM-$VERSION/LICENSE # now, build the libs. we don't attempt to build them with the just-built # pcc (maybe possible, but not worth the effort). cd $TMP/$PRGNAM/$PRGNAM-libs-$VERSION CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --build=$ARCH-slackware-linux # pcc-libs installs nothing we can strip. make make install DESTDIR=$PKG # there is a bit of documentation included with pcc-libs, but nothing # really relevant unless you're hacking on pcc itself, not gonna bother. mkdir -p $PKG/install sed -e "s,@WITHCC@,$WITHCC," \ -e "s,@TLSOPT@,$TLSOPT," \ $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}