Skip to content

Instantly share code, notes, and snippets.

@ilmich
Created March 6, 2020 13:00
Show Gist options
  • Select an option

  • Save ilmich/5e948013699c71a529b42a38ce1d2bc6 to your computer and use it in GitHub Desktop.

Select an option

Save ilmich/5e948013699c71a529b42a38ce1d2bc6 to your computer and use it in GitHub Desktop.
#!/bin/sh
# Slackware build script for v
# Copyright 2020 ilmich<[email protected]>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=v
VERSION=${VERSION:-0.1.24}
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
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
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 {} \;
# build compiler
gcc $SLKCFLAGS -o v v.c -lm
# build tools
cat > tools/vup.v << EOF
fn main(){
println('This is a packaged v installation. v up is disabled')
}
EOF
for tool in tools/vrepl.v tools/vtest.v tools/vfmt.v tools/vcreate.v tools/vup.v; do
echo "build $tool"
./v build $tool
done
# build libraries
for lib in thirdparty/cJSON/cJSON thirdparty/bignum/bn thirdparty/glad/glad thirdparty/zip/zip ; do
(
cd ${lib%/*}
echo "build $lib.c"
gcc $SLKCFLAGS -I. -c ${lib##*/}.c -o ${lib##*/}.o
)
done
# manually install binaries
mkdir -p $PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/
install -D -m0755 v $PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/v
for instdir in tools vlib thirdparty; do
echo "installing $instdir"
cp -r $instdir $PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/
done
# install wrapper
mkdir -p $PKG/usr/bin
cat > $PKG/usr/bin/v << EOF
#!/bin/sh
/usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/v \$@
EOF
chmod 0755 $PKG/usr/bin/v
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
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
LICENSE README.md CHANGELOG.md \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
# update timestamps of executables post install to avoid recompilation of some tools
cat > $PKG/install/doinst.sh << EOF
touch /usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/tools/vrepl
touch /usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/tools/vtest
touch /usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/tools/vcreate
touch /usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/tools/vfmt
touch /usr/lib$LIBDIRSUFFIX/$PRGNAM-$VERSION/tools/vup
EOF
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment