====== Slackware Buildscript Template ====== This is my version of a Slack Buildscript. I tried to separete the boilerplate code which stays the same in most buildscripts from the part which is really specific to the actual package. This script is based on the very good [[http://www.slackwiki.org/Writing_A_SlackBuild_Script|howto]] from rworkman. Howto use a buildscript for Slackware is described [[http://slackbuilds.org/howto/|here]]. #!/bin/sh # Slackware build script for # Written by Stefan Beckert (becki AT web DOT de) # ==== PACKAGE CONFIGURATION ==== APP='' VERSION='0.0.0' # The dash character ("-") is not allowed EXT='tar.gz' # Extension of source tarball: tar.gz, tgz, tar.bz2, tbz MAKEINSTALL='install-strip' # make target: install or install-strip # Flags for ./configure: CONFIGFLAGS="\ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var\ --mandir=/usr/man\ " # Provide a function wich copies the necessary docs to the doc directory: # pwd is the sourcecode dir when this function is called function copydocs() { cp -a BUGS Changes FAQ INSTALL LICENSE MANIFEST README TODO docs/ $PKG/usr/doc/$APP-$VERSION # alternatively, if make install has already created # a doc dir somwhere in the package tree: #mv $PKG/usr/share/$APP/docs/* $PKG/usr/doc/$APP-$VERSION #rmdir $PKG/usr/share/$APP/docs/ } # ==== PACKAGE INDEPENDENT STUFF ==== ARCH=${ARCH:-i486} # respcets possibly existing environment variable BUILD=${BUILD:-1} # - " - TAG=${TAG:-_SBo} # - " - TMP=${TMP:-/tmp/SBo} # - " - CWD=$(pwd) PKG=$TMP/package-$APP # directory structure of package will be created here # set compiler flags: (http://linuxreviews.org/howtos/compiling/) if [ "$ARCH" = "i386" ] || [ "$ARCH" = "i486" ] || [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=$ARCH -mtune=i686" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" else echo "Error: ARCH $ARCH is not supported!"; exit 1 fi # get proper extract command: if [ "$EXT" = 'tgz' ] || [ "$EXT" = 'tar.gz' ]; then TAROPTS='xzf' elif [ "$EXT" = 'tbz' ] || [ "$EXT" = 'tar.bz2' ]; then TAROPTS='xjf' else echo "Error: Package format $EXT is not supported!"; exit 1 fi # cleanup & prepare: rm -rf $PKG # remove old package structure rm -rf $TMP/$APP-$VERSION # remove old source directory if [ ! -d $TMP ]; then mkdir -p $TMP; fi mkdir -p $PKG # extract source: cd $TMP || exit 1 tar -$TAROPTS $CWD/$APP-$VERSION.$EXT || exit 1 # Extract source in TMP cd $APP-$VERSION || exit 1 chown -R root:root . chmod -R u+w,go+r-w,a-s . # run configure script: CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" ./configure $CONFIGFLAGS || exit 1 # compile the source: make || exit 1 # Install everything into the package directory: make $MAKEINSTALL DESTDIR=$PKG || exit 1 # copy docs: mkdir -p $PKG/usr/doc/$APP-$VERSION copydocs # package specific function find $PKG/usr/doc/$APP-$VERSION -type f -exec chmod 644 {} \; # fill slack install directory: mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc if [ -e $CWD/doinst.sh ]; then cat $CWD/doinst.sh > $PKG/install/doinst.sh fi # Compress man pages if they exist if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man find . -type f -exec gzip -9 {} \; for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done ) fi # Compress info pages if they exist (and remove the dir file) if [ -d $PKG/usr/info ]; then gzip -9 $PKG/usr/info/*.info rm -f $PKG/usr/info/dir fi # Build the Package: cd $PKG /sbin/makepkg -l y -c n $TMP/$APP-$VERSION-$ARCH-$BUILD$TAG.tgz