diff --git a/development/pcc/README b/development/pcc/README index 59a3ef7e16..b76f30bc5a 100644 --- a/development/pcc/README +++ b/development/pcc/README @@ -1,3 +1,20 @@ pcc (Portable C Compiler) is based on the original Portable C Compiler -by S. C. Johnson, written in the late 70's. About 50% of the frontend +by S. C. Johnson, written in the late 70's. About 50% of the frontend code and 80% of the backend code has been rewritten. + +Build options (environment variables): +TLS - Enable thread local storage? Default=no, export TLS=yes to enable. +CC - Compiler to use. Default is to look for pcc, gcc, clang (in that order). + +This build is for the 1.1.0.BETA branch of pcc. The 1.0 branch no +longer works on modern Slackware versions (newer than 13.37). The old +pcc 1.0 had separate builds for pcc and pcc-libs; this build includes +the libraries so no separate pcc-libs is needed (or exists). + +Optional step: To bootstrap pcc, first remove any old versions of pcc +(and pcc-libs, if present), then build and install pcc twice (without +setting CC). The first time, pcc will be built with gcc. The second time, +it will be built with itself. + +Note: pcc is a C compiler only. There is experimental, incomplete support +for C++ and Fortran 77 in the pcc codebase, but neither is usable yet. diff --git a/development/pcc/pcc.SlackBuild b/development/pcc/pcc.SlackBuild index 3c7ad85e87..1635ff4be8 100644 --- a/development/pcc/pcc.SlackBuild +++ b/development/pcc/pcc.SlackBuild @@ -1,11 +1,46 @@ #!/bin/sh # Slackware build script for pcc (Portable C Compiler) -# Written by Armin Besirovic + +# 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 + +# notes: + +# - pcc 1.0 hasn't worked since Slackware 13.37. It builds & installs +# fine, but anything compiled with it just segfaults in the +# startup code. Hence the upgrade to a beta snapshot, which at +# least can compile a working "hello world" on Slack 14.1. + +# - upstream only keeps about a weeks' worth of snapshot tarballs, so +# so I'm self-hosting them. I do plan to update the snapshot version +# from time to time, but *not* on a weekly basis. Eventually 1.1.0 +# will be released, and there will be much rejoicing. + +# - upstream filenames are pcc-1.1.0.BETA-. If you want to +# try a different snapshot, set VERSION=1.1.0_beta_ in +# the env. AFAIK, the pcc and pcc-libs snapshot dates must always +# match (this script enforces it). PRGNAM=pcc -VERSION=${VERSION:-1.0.0} -BUILD=${BUILD:-2} +VERSION=${VERSION:-1.1.0_beta_20141031} +BUILD=${BUILD:-1} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then @@ -21,58 +56,114 @@ TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "i686" ]; then - SLKCFLAGS="-O2 -march=i686 -mtune=i686" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O2 -fPIC" +# 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 - SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e +# All this cruft will go away, when 1.1.0 is released. +SHORTVER=$( echo $VERSION | cut -d_ -f1 ) +SNAPVER=$( echo $VERSION | cut -d_ -f3 ) +TARBALL=$PRGNAM-$SHORTVER.BETA-$SNAPVER.tgz +TARDIR=$PRGNAM-$SHORTVER.BETA +LIBTARBALL=$PRGNAM-libs-$SHORTVER.BETA-$SNAPVER.tgz +LIBTARDIR=$PRGNAM-libs-$SHORTVER.BETA + +# 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 -mkdir -p $TMP $PKG $OUTPUT -cd $TMP -rm -rf $PRGNAM-$VERSION -tar xvf $CWD/$PRGNAM-$VERSION.tgz -cd $PRGNAM-$VERSION +mkdir -p $TMP/$PRGNAM $PKG $OUTPUT +cd $TMP/$PRGNAM +rm -rf $TARDIR $LIBTARDIR +tar xvf $CWD/$TARBALL +tar xvf $CWD/$LIBTARBALL 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 {} \; + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# first, the compiler itself: +cd $TARDIR +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/$LIBTARDIR CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ - --mandir=/usr/man \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --build=$ARCH-slackware-linux -make -j1 +# pcc-libs installs nothing we can strip. +make make install DESTDIR=$PKG -find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ - | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true - -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/cpp-pcc.1.gz - -mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION -cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +# 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 -cat $CWD/slack-desc > $PKG/install/slack-desc +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} diff --git a/development/pcc/pcc.info b/development/pcc/pcc.info index d43209deb4..530e57c69b 100644 --- a/development/pcc/pcc.info +++ b/development/pcc/pcc.info @@ -1,10 +1,12 @@ PRGNAM="pcc" -VERSION="1.0.0" +VERSION="1.1.0_beta_20141031" HOMEPAGE="http://pcc.ludd.ltu.se/" -DOWNLOAD="ftp://pcc.ludd.ltu.se/pub/pcc-releases/pcc-1.0.0.tgz" -MD5SUM="6e5d851ee57fe58702fe4e80ecd1f852" +DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/pcc-1.1.0.BETA-20141031.tgz \ + http://urchlay.naptime.net/~urchlay/src/pcc-libs-1.1.0.BETA-20141031.tgz" +MD5SUM="59897ec21d9322551b86161d839caa9b \ + 5694ae8f07340cee67af706580367d8e" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" -MAINTAINER="Armin Besirovic" -EMAIL="armin[at]linux[dot]org[dot]ba" +MAINTAINER="B. Watson" +EMAIL="yalhcru@gmail.com" diff --git a/development/pcc/slack-desc b/development/pcc/slack-desc index 93aae0a597..a04f018fea 100644 --- a/development/pcc/slack-desc +++ b/development/pcc/slack-desc @@ -15,5 +15,5 @@ pcc: wiki page for details. pcc: pcc: Project website: http://pcc.ludd.ltu.se/ pcc: -pcc: +pcc: This package was built by @WITHCC@, with @TLSOPT@. pcc: