###################################################
## Generic template for SlackBuilds
##
## Version 0.3.3 - Luis ( luis at riseup d0t net)
##
###################################################
 all
#!/bin/bash
#
# SlackBuild for [[PROGRAM NAME]]
# [[PROGRAM URL]]
#
# Author: [[SLACKBUILD AUTHOR]]
#
 all
# Look for slackbuildrc
if [ -f ~/.slackbuildrc ]; then
  source ~/.slackbuildrc
elif [ -f /etc/slackbuildrc ]; then
  source /etc/slackbuildrc
fi
 all
# Set variables
CWD=`pwd`
SRC_NAME="[[SOURCE NAME]]"
PKG_NAME="[[PACKAGE NAME]]"
ARCH=${ARCH:=[[ARCH]]}
VERSION=${VERSION:=[[VERSION]]}
BUILD=${BUILD:=1[[SLACKBUILD AUTHOR INITIALS]]}
SRC_DIR=${SRC_DIR:=$CWD}
TMP=${TMP:=/tmp}
PKG=${PKG:=$TMP/package-$PKG_NAME}
REPOS=${REPOS:=$TMP}
PREFIX=${PREFIX:=[[PREFIX]]}
PKG_SRC="$SRC_DIR/$SRC_NAME-$VERSION"
 all
# Set system libraries' path and optmization flags based on $ARCH
LIBDIR="$PREFIX/lib"
if [ "$ARCH" = "i386" ]; then
  SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mcpu=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686"
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2"
  LIBDIR="$PREFIX/lib64"
fi
 on
# Set error codes (used by createpkg)
ERROR_WGET=31;      ERROR_MAKE=32;      ERROR_INSTALL=33
ERROR_MD5=34;       ERROR_CONF=35;      ERROR_HELP=36
ERROR_TAR=37;       ERROR_MKPKG=38;     ERROR_GPG=39
ERROR_PATCH=40;     ERROR_VCS=41;       ERROR_MKDIR=42
 all
# Clean up any leftovers of previous builds
rm -rf "$PKG_SRC" 2> /dev/null
rm -rf "$PKG" 2> /dev/null
# Create directories, if necessary
mkdir -p "$SRC_DIR" || exit $ERROR_MKDIR
mkdir -p "$PKG" || exit $ERROR_MKDIR
mkdir -p "$REPOS" || exit $ERROR_MKDIR
 off
# Import (minimized) signing key from
# [[SIGNING KEY URL]]
gpg --import << EOKEY || exit $ERROR_GPG
[[SIGNING KEY]]
EOKEY
 on
# Dowload source and its signature, if necessary
SRC="$SRC_NAME-$VERSION.tar.[[SOURCE EXTENSION]]"
URL="[[DOWNLOAD FOLDER URL]]/$SRC"
if [ ! -f "$SRC_DIR/$SRC" ] || ! [[DECOMPRESSOR]] [[DECOMPRESSOR TEST FLAG]] "$SRC_DIR/$SRC" 2> /dev/null; then
  wget "$URL" -O "$SRC_DIR/$SRC" || exit $ERROR_WGET
fi
 off
if [ ! -f "$SRC_DIR/$SRC.sig" ]; then
  wget "$URL.sig" -O "$SRC_DIR/$SRC.sig" || exit $ERROR_WGET
fi
# Check source's signature
gpg --verify "$SRC_DIR/$SRC.sig" "$SRC_DIR/$SRC" || exit $ERROR_GPG
 all
# Untar, patch, configure, compile and install
cd "$SRC_DIR"
tar --no-same-owner --no-same-permissions -xvf "$SRC_DIR/$SRC" || exit $ERROR_TAR
cd "$PKG_SRC"
 off
patch -Np[[NUMBER OF PREFIX SLASHES TO STRIP]] < "$CWD/[[PATCH FILE]]"
 on
CFLAGS="$SLKCFLAGS" \
  CXXFLAGS="$SLKCFLAGS" \
  ./configure \
  --prefix="$PREFIX" --libdir="$LIBDIR" [[OTHER CONFIGURE ARGS]] || exit $ERROR_CONF
 all
make || exit $ERROR_MAKE
 all
make install DESTDIR="$PKG" || exit $ERROR_INSTALL
 all
# Strip binaries
( cd "$PKG"
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null
)
 off
# Compress and link manpages
if [ -d "$PKG/$PREFIX/man" ]; then
  ( cd "$PKG/$PREFIX/man"
    for manpagedir in $(find . -type d -name "man*") ; do
      ( cd $manpagedir
        for eachpage in $( find . -type l -maxdepth 1) ; do
          ln -s $( readlink $eachpage ).gz $eachpage.gz
          rm $eachpage
        done
        gzip -9 *.?
      )
    done
  )
fi
 off
# Compress info files
if [ -d "$PKG/$PREFIX/info" ]; then
  ( cd "$PKG/$PREFIX/info"
    rm -f dir
    gzip -9 *
  )
fi
 on
# Install documentation
DOCS="[[DOCUMENTATION FILES]]"
mkdir -p "$PKG/$PREFIX/doc/$PKG_NAME-$VERSION" || exit $ERROR_MKDIR
cp -a $DOCS "$PKG/$PREFIX/doc/$PKG_NAME-$VERSION"
 on
# Add package description (slack-desc)
mkdir -p "$PKG/install" || exit $ERROR_MKDIR
cat << EODESC > "$PKG/install/slack-desc"
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in.  You must
# make exactly 11 lines for the formatting to be correct.  It's also
# customary to leave one space after the ':'.
        |-----handy-ruler------------------------------------------------------|
[[SLACK-DESC]]
EODESC
 off
# Add a post-installation script (doinst.sh)
cat << EOSCRIPT > "$PKG/install/doinst.sh"
config() {
  NEW="\$1"
  OLD="\$(dirname \$NEW)/\$(basename \$NEW .new)"
  # If there's no config file by that name, mv it over:
  if [ ! -r \$OLD ]; then
    mv \$NEW \$OLD
  elif [ "\$(cat \$OLD | md5sum)" = "\$(cat \$NEW | md5sum)" ]; then
    # toss the redundant copy
    rm \$NEW
  fi
  # Otherwise, we leave the .new copy for the admin to consider...
}
config path/to/config_file.new
[[REST OF DOINST.SH]]
EOSCRIPT
 all
# Build the package
cd "$PKG"
makepkg -l y -c n "$REPOS/$PKG_NAME-$VERSION-$ARCH-$BUILD.tgz" || exit $ERROR_MKPKG
 on
# Delete source and build directories, if requested
if [ "$CLEANUP" == "yes" ]; then
  rm -rf "$PKG_SRC" "$PKG"
fi