mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-22 19:44:21 +01:00
92522b59bb
Signed-off-by: B. Watson <yalhcru@gmail.com> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
179 lines
5.3 KiB
Bash
179 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Slackware build script for pcc (Portable C Compiler)
|
|
|
|
# Originally written by Armin Besirovic <email removed>
|
|
# Modified by B. Watson <yalhcru@gmail.com>
|
|
|
|
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
|
|
|
|
# 20210906 bkw:
|
|
# - updated for 1.2.0.DEVEL+20210905. Putting the .DEVEL in VERSION
|
|
# is a bit unsightly, but it matches the output of "pcc --version"
|
|
# and also Debian's version numbering scheme.
|
|
# - compiling with gcc no longer works, use clang or pcc. actually,
|
|
# compiling with gcc gives us a pcc that seems to compile stuff OK,
|
|
# but anything compiled with that pcc will segfault on startup.
|
|
# - add WTPL (since there was no license at all).
|
|
|
|
# 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)
|
|
|
|
# Note to self: when updating to a new CVS snapshot, first download
|
|
# the latest: http://pcc.ludd.ltu.se/ftp/pub/pcc/pcc-current.tgz Then
|
|
# look at the file DATESTAMP inside that tarball, and use that date's
|
|
# snapshot. This is because the CVS snap tarballs are generated
|
|
# nightly, whether or not there actually were any code changes,
|
|
# and we want VERSION to be the date of the last actual code change.
|
|
# For pcc-libs, just use the same snapshot date as pcc.
|
|
|
|
cd $(dirname $0) ; CWD=$(pwd)
|
|
|
|
PRGNAM=pcc
|
|
VERSION=${VERSION:-1.2.0.DEVEL+20210905}
|
|
BUILD=${BUILD:-1}
|
|
TAG=${TAG:-_SBo}
|
|
PKGTYPE=${PKGTYPE:-tgz}
|
|
|
|
if [ -z "$ARCH" ]; then
|
|
case "$( uname -m )" in
|
|
i?86) ARCH=i586 ;;
|
|
arm*) ARCH=arm ;;
|
|
*) ARCH=$( uname -m ) ;;
|
|
esac
|
|
fi
|
|
|
|
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
|
|
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
|
|
exit 0
|
|
fi
|
|
|
|
TMP=${TMP:-/tmp/SBo}
|
|
PKG=$TMP/package-$PRGNAM
|
|
OUTPUT=${OUTPUT:-/tmp}
|
|
|
|
TARVER=${VERSION/*+}
|
|
|
|
# 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 clang --version &>/dev/null; then
|
|
CC=clang
|
|
SLKCFLAGS+=" -fcommon"
|
|
else
|
|
echo "Can't find pcc or clang in \$PATH. Giving up." 1>&2
|
|
fi
|
|
fi
|
|
|
|
# let the user shoot himself in the foot if he insists, but at least
|
|
# warn him how much it's going to hurt.
|
|
if [ "$CC" = "gcc" ]; then
|
|
echo
|
|
echo "!!! CC is gcc, this will produce a non-working pcc. You asked for it..."
|
|
echo
|
|
sleep 3
|
|
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-$TARVER.tgz
|
|
tar xvf $CWD/$PRGNAM-libs-$TARVER.tgz
|
|
chown -R root:root .
|
|
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
|
|
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
|
|
|
|
# first, the compiler itself:
|
|
cd $PRGNAM-$TARVER
|
|
|
|
CFLAGS="$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-$TARVER
|
|
|
|
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
|