#!/bin/sh

# Heavily based on the Slackware 13.1 SlackBuild
# Written by Loris Vincenzi ( http://www.slacky.eu )
# Last build from Tommaso D'Anna aka tasodan ( www.slacky.eu )

# Slackware build script for Openbox
# Official Site: http://openbox.org/

# 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.

set -e

# Catching variables
PKGNAME=${PKGNAME:-openbox}
VERSION=${VERSION:-3.4.11.2}
BUILD=${BUILD:-1}
TAG=${TAG:-sl}
ARCH=${ARCH:-i486}
SOURCE="http://openbox.org/dist/$PKGNAME/$PKGNAME-$VERSION.tar.gz"

CWD=${CWD:-`pwd`}
TMP=${TMP:-/tmp/buildpkgs/$PKGNAME}
PKG=${PKG:-$TMP/package-$PKGNAME}
OUTPUT=${OUTPUT:-$CWD}

CHOST="i486"
if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$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"
  CHOST="x86_64"
fi

# Set these to "YES" if you want your package to include a xinitrc file
# for running Openbox in KDE or GNOME, respectively.
# Otherwise, you can add the xinitrc files manually to /etc/X11/xinit and
# the openbox-kde-session and openbox-gnome-session files to /usr/bin.
# The files can be found under /usr/doc/openbox
# Don't forget to make them executable if you copy them from /usr/doc!
#
# This can be specified on the command line when calling the build script:
#   KXINIT=YES ./openbox.SlackBuild
KXINIT=${KXINIT:-NO}
GXINIT=${GXINIT:-NO}

# Source file avaiability
if [ ! -e $CWD/$PKGNAME-$VERSION.tar.gz ] ; then
  wget $SOURCE
fi

# Create working directories:
rm -rf $TMP
mkdir -p $TMP $PKG $OUTPUT

# Package building
cd $TMP
tar xzvf $CWD/$PKGNAME-$VERSION.tar.gz
cd $PKGNAME-$VERSION

chown -R root:root .
chmod -R u+w,go+r-w,a-s .

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib$LIBDIRSUFFIX \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --mandir=/usr/man \
  --docdir=/usr/doc/$PKGNAME-$VERSION \
  --program-prefix= \
  --program-suffix= \
  --enable-startup-notification \
  --build=$CHOST-slackware-linux
make
make install DESTDIR=$PKG

# Add xinitrc.openbox so that openbox will show up as an option in xwmconfig
install -D -m 0755 $CWD/xinitrc.openbox $PKG/etc/X11/xinit/xinitrc.openbox

# Add xinitrc.openbox-session so that openbox-session will show up as an option in xwmconfig
install -D -m 0755 $CWD/xinitrc.openbox-session $PKG/etc/X11/xinit/xinitrc.openbox-session

# Optionally install xinitrc scripts for running Openbox in KDE or GNOME
# Move the scripts from /usr/bin if the xinitrc scripts are not installed.
if [ "$KXINIT" == "YES" ]; then
  install -D -m 0755 $CWD/xinitrc.kde-openbox $PKG/etc/X11/xinit/xinitrc.kde-openbox
else
  cat $PKG/usr/bin/openbox-kde-session > $PKG/usr/doc/$PKGNAME-$VERSION/openbox-kde-session
  rm -vf $PKG/usr/bin/openbox-kde-session
fi
if [ "$GXINIT" == "YES" ]; then
  install -D -m 0755 $CWD/xinitrc.gnome-openbox $PKG/etc/X11/xinit/xinitrc.gnome-openbox
else
  cat $PKG/usr/bin/openbox-gnome-session > $PKG/usr/doc/$PKGNAME-$VERSION/openbox-gnome-session
  rm -vf $PKG/usr/bin/openbox-gnome-session
fi

# Change name of openbox.desktop KDM session file so it corresponds to openbox-session
( cd $PKG/usr/share/xsessions
  mv openbox.desktop openbox-session.desktop
  sed -i "s/Name=Openbox/Name=Openbox-Session/" openbox-session.desktop
)

# Create symlinks to KDM session desktop files so KDM will use them
mkdir -p $PKG/usr/share/apps/kdm/sessions
( cd $PKG/usr/share/apps/kdm/sessions
  for i in $PKG/usr/share/xsessions/openbox*.desktop ; do
    ln -s /usr/share/xsessions/$(basename $i) $(basename $i) ;
  done
)

# Adding supplementary documentation
cp -a ABOUT-NLS $PKG/usr/doc/$PKGNAME-$VERSION
mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION/xinit
for i in $CWD/xinitrc.*openbox* ; do
  cat $i > $PKG/usr/doc/$PKGNAME-$VERSION/xinit/$(basename $i) ;
done
cat $CWD/slack-desc > $PKG/usr/doc/$PKGNAME-$VERSION/slack-desc
cat $CWD/$PKGNAME.SlackBuild > $PKG/usr/doc/$PKGNAME-$VERSION/$PKGNAME.SlackBuild

# Compressing man pages
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

# Stripping binaries
cd $PKG
chown -R root:root $PKG

find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true

# Adding slack-desc and slack-required
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

if [ -x "$(which requiredbuilder 2>/dev/null)" ];then
  requiredbuilder -y -v -s $CWD $PKG
fi

# Make the package
/sbin/makepkg -l y -c n $OUTPUT/$PKGNAME-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}

# Clean up the extra stuff
if [ "$1" = "--cleanup" ]; then
  rm -rf $TMP $PKG
fi
