#!/bin/sh

PRGNAM=${PRGNAM:-tdebase}
VERSION=${VERSION:-r14.0.3}

CWD=`pwd`
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
BUILD=${BUILD:-inpito}
PKGNAM="$PRGNAM"

# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i486 ;;
    arm*) ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) ARCH=$( uname -m ) ;;
  esac
fi

# Some Trinity programs need single thread compiling
export NUMJOBS="-j1"

# Use this as CFLAGS and CXXFLAGS:
if [ "$ARCH" = "i386" ]; then
  CPUOPT="-O2 -march=i386 -mcpu=i686"
  TARGET=i486
  LIBDIRSUFFIX=
elif [ "$ARCH" = "i486" ]; then
  CPUOPT="-O2 -march=i486 -mtune=i686"
  TARGET=i486
  LIBDIRSUFFIX=
elif [ "$ARCH" = "i686" ]; then
  CPUOPT="-O2 -march=i686"
  TARGET=i686
  LIBDIRSUFFIX=
elif [ "$ARCH" = "s390" ]; then
  CPUOPT="-O2"
  TARGET=s390
  LIBDIRSUFFIX=
elif [ "$ARCH" = "x86_64" ]; then
  CPUOPT="-O2 -fPIC"
  TARGET=x86_64
  LIBDIRSUFFIX=64
  APPEND="-64"
fi

rm -rf $PKG
rm -fr $TMP/$PRGNAM*

# Set Export Variables Globally
export PREFIX="/usr"
export SYSCONFDIR="/etc/trinity"
export LIBDIR="${PREFIX}/lib${LIBDIRSUFFIX}"
export MANDIR="/usr/man"

export QTDIR="/usr/lib${LIBDIRSUFFIX}/tqt3"
export QT_INCLUDE_DIR="${QTDIR}/include"
export QT_LIB_DIR="${QTDIR}/lib${LIBDIRSUFFIX}"

export PATH="${QTDIR}:${PATH}"
export LD_LIBRARY_PATH="${QT_LIB_DIR}:/usr/lib${LIBDIRSUFFIX}"
export PKG_CONFIG_PATH="${QT_LIB_DIR}/pkgconfig:/usr/lib${LIBDIRSUFFIX}/pkgconfig"

# Qt Settings - enable only one of the following:
# DEBUG_AUTOTOOL_OPT="--disable-debug"
export DEBUG_CMAKE_OPT=""

mkdir -p $PKG${PREFIX}
mkdir -p $PKG/usr/bin
mkdir -p $PKG/usr/share/apps/tdm/sessions

cd $TMP
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $TMP/$PRGNAM-$VERSION
SOURCE_DIR=`pwd`

sleep 1

echo "Updating build environment file and directory permissions..."
chown -R root:root .
find . -type d -exec chmod 755 {} \;
find . -type f ! -perm -o=r -exec chmod o+r {} \;

rm CMakeCache.txt 2>/dev/null
mkdir -p ${TMP}/${PRGNAM}.build

#if [ -x /usr/sbin/hald ]; then
#  BUILD_HAL=${BUILD_HAL:-ON}
#  BUILD_TDEHWLIB=${BUILD_TDEHWLIB:-OFF}
#else
#  BUILD_HAL=${BUILD_HAL:-OFF}
#  BUILD_TDEHWLIB=${BUILD_TDEHWLIB:-ON}
#  # pmount is required to use TDEHWLIB. pmount is not part of the stock Slackware.
#  preinstall_check pmount
#fi

#if [ -x /usr/bin/upower ]; then
#  BUILD_UPOWER=${BUILD_UPOWER:-ON}
#else
#  BUILD_UPOWER=${BUILD_UPOWER:-OFF}
#fi

BUILD_TDEHWLIB=${BUILD_TDEHWLIB:-ON}
BUILD_UPOWER=${BUILD_UPOWER:-ON}

echo
echo "HAL support: $BUILD_HAL"
echo "TDEHWLIB support: $BUILD_TDEHWLIB"
echo "Upower support: $BUILD_UPOWER"
echo

mkdir -p ${SOURCE_DIR}/.build

echo && printenv && echo

cd ${SOURCE_DIR}/.build
cmake ${SOURCE_DIR} \
  -DCMAKE_C_FLAGS:STRING="$CPUOPT" \
  -DCMAKE_CXX_FLAGS:STRING="$CPUOPT $DEBUG_CMAKE_OPT" \
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \
  -DCMAKE_SKIP_RPATH=OFF \
  -DSYSCONF_INSTALL_DIR=${SYSCONFDIR} \
  -DLIB_SUFFIX=${LIBDIRSUFFIX} \
  -DMAN_INSTALL_DIR=${MANDIR} \
  -DWITH_XCOMPOSITE=ON \
  -DWITH_XCURSOR=ON \
  -DWITH_XFIXES=ON \
  -DWITH_XRANDR=ON \
  -DWITH_ARTS=ON \
  -DWITH_XINERAMA=ON \
  -DWITH_XDMCP=ON \
  -DWITH_XRENDER=ON \
  -DWITH_XFIXES=ON \
  -DWITH_XDAMAGE=ON \
  -DWITH_XEXT=ON \
  -DWITH_XTEST=ON \
  -DWITH_XSCREENSAVER=ON \
  -DWITH_LIBART=ON \
  -DWITH_SHADOW=ON \
  -DWITH_OPENEXR=ON \
  -DWITH_SASL=ON \
  -DWITH_LDAP=ON \
  -DWITH_SAMBA=ON \
  -DWITH_LIBRAW1394=ON \
  -DWITH_SUDO_TDESU_BACKEND=off \
  -DWITH_GCC_VISIBILITY=ON \
  -DWITH_PAM=OFF \
  -DWITH_HAL=${BUILD_HAL} \
  -DWITH_TDEHWLIB=${BUILD_TDEHWLIB} \
  -DWITH_UPOWER=${BUILD_UPOWER} \
  -DWITH_USBIDS="/usr/share/misc/usb.ids" \
  -DBUILD_CRASHTEST=ON \
  -DBUILD_TSAK=OFF \
  -DBUILD_ALL=ON || exit 1

# Grab a copy of CMakeCache.txt.
if [ -r CMakeCache.txt ]; then
  echo
  echo "Contents of CMakeCache.txt:"
  echo
  cat CMakeCache.txt
  echo
  echo
fi

if [ "$TEE_OUTPUT" = "false" ]; then
  make $NUMJOBS --silent || exit 1
else
  make $NUMJOBS VERBOSE=1 || exit 1
fi

make install DESTDIR=$PKG || exit 1

DESKTOP=trinity

# Move files some place FHS compliant:
mkdir -p $PKG/etc/$DESKTOP
mkdir -p $PKG/etc/rc.d
mv $PKG${PREFIX}/share/config/tdm $PKG/etc/$DESKTOP
( cd $PKG${PREFIX}/share/config ; ln -sf ../../../../etc/$DESKTOP/tdm tdm )

# mkdir $PKG${PREFIX}/share/config/kdisplay
# mv $PKG${PREFIX}/share/config/kdisplay $PKG/etc/$DESKTOP
# ( cd $PKG${PREFIX}/share/config ; ln -sf ../../../../etc/$DESKTOP/kdisplay kdisplay )

# mkdir $PKG${PREFIX}/share/config/iccconfig
# mv $PKG${PREFIX}/share/config/iccconfig $PKG/etc/$DESKTOP
# ( cd $PKG${PREFIX}/share/config ; ln -sf ../../../../etc/$DESKTOP/iccconfig iccconfig )

# Ensure correct login manager session file is available.
rm -f $PKG${PREFIX}/share/apps/tdm/sessions/tde.desktop
cat $CWD/$DESKTOP.desktop | sed "s|PREFIX/|$PREFIX/|g" > $PKG${PREFIX}/share/apps/tdm/sessions/$DESKTOP.desktop
cp $PKG${PREFIX}/share/apps/tdm/sessions/$DESKTOP.desktop $PKG/usr/share/apps/tdm/sessions/

cat $CWD/rc.4 | sed "s|PREFIX/|$PREFIX/|g" > $PKG/etc/rc.d/rc.4.new

# Is this old kludge really needed any more? Unlikely but preserved for historical purposes.
# cat $CWD/kludge/kcmartsrc > $PKG${PREFIX}/share/config/kcmartsrc

# In the old days these files were copied over existing files. Folks who customized these
# files got smacked. So now they are *.new files. The doinst.sh install script will
# either remove the .new extension or leave things be for the user to decide.
mkdir -p $PKG/etc/X11/xinit $PKG/etc/profile.d
cat $CWD/xinit/xinitrc.$DESKTOP | sed "s|PREFIX|$PREFIX|g" > $PKG/etc/X11/xinit/xinitrc.$DESKTOP.new
cat $CWD/profile.d/$DESKTOP.sh | sed "s|PREFIX|$PREFIX|g" > $PKG/etc/profile.d/$DESKTOP.sh.new
# cat $CWD/profile.d/$DESKTOP.csh | sed "s|PREFIX|$PREFIX|g" > $PKG/etc/profile.d/$DESKTOP.csh.new
chmod 755 $PKG/etc/X11/xinit/xinitrc.*.new $PKG/etc/profile.d/*.*.new
mv $PKG${PREFIX}/bin/starttde $PKG${PREFIX}/bin/starttde.new
chmod +x $PKG${PREFIX}/bin/starttde*
cat $CWD/xinit/xwmconfig > $PKG/usr/bin/xwmconfig.new
chmod +x $PKG/usr/bin/xwmconfig.new

#=================================================
# Subjective Default Usability Tweaks
# Enable or disable these settings as desired.
#=================================================

# Change the konsole defaults to look like the standard Linux console. The default konsole uses the
# BlackOnWhite.schema (white background, black text). This config file uses the Linux.schema (black
# background, white text). The config file also adds some sane keyboard shortcuts.
cat $CWD/config/konsolerc > $PKG${PREFIX}/share/config/konsolerc
chmod 644 $PKG${PREFIX}/share/config/konsolerc

# The original Slackware build script made konsole a login shell by default. I don't like that
# and prefer to leave konsole as an xterm shell. Change that here if you want.
# sed -i -e 's/Exec=konsole/Exec=konsole --ls/' $PKG${PREFIX}/share/applications/kde/konsole.desktop

# Set some anti-aliasing defaults. The settings will be overridden and deleted when the user elects
# to use system settings (KControl/Fonts). System font settings are defined in /etc/fonts/fonts.conf
# and /etc/fonts/local.conf.
if [ ! -e $PKG${PREFIX}/share/config/kdeglobals ]; then
  cat $CWD/config/kdeglobals > $PKG${PREFIX}/share/config/kdeglobals
  chmod 644 $PKG${PREFIX}/share/config/kdeglobals
else
  # This might be fixed or unsafe. Better check.
  echo
  echo "BAILOUT: kdeglobals already exists. Check to see if anti-aliased"
  echo "         fonts work out-of-the-box now..."
  echo
  exit 1
fi

# Modify the default mouse double-click interval. I'm tired of developers who think I have
# to click mouse buttons like a rabbit having sex. Developers consume too much caffeine.
# Changed in the build version of kdeglobals: [KDE]DoubleClickInterval=700

# Single-click or double-click as the desktop default? Default is single-click.
# Changed in the build version of kdeglobals: [KDE]SingleClick=false

# Setup config files for TDM:
$PKG${PREFIX}/bin/gentdmconf --no-old --no-old-scripts --no-backup --in $PKG/etc/$DESKTOP/tdm

# Not allowing root to login is silly. The anti-root religion is stupid.
cat $PKG/etc/$DESKTOP/tdm/tdmrc | perl -pi -e 's|AllowRootLogin=false|AllowRootLogin=true|' > $PKG/etc/$DESKTOP/tdm/tdmrc.new
rm -f $PKG/etc/$DESKTOP/tdm/tdmrc
mv $PKG/etc/$DESKTOP/tdm/Xsession $PKG/etc/$DESKTOP/tdm/Xsession.orig
cat $CWD/config/Xsession | sed "s|PREFIX|$PREFIX|g" > $PKG/etc/$DESKTOP/tdm/Xsession
mv $PKG/etc/$DESKTOP/tdm/backgroundrc $PKG/etc/$DESKTOP/tdm/backgroundrc.new
if [ -r $PKG${PREFIX}/etc/$DESKTOP/tdm/README ]; then
  sed -i "s|${TMP}/package-tdebase/etc/$DESKTOP/tdm|/etc/$DESKTOP/tdm|" $PKG${PREFIX}/etc/$DESKTOP/tdm/README
fi

# Change the default konqueror file manager view. The default is Icon View.
# The viewing options are iconview, listview, treeview, multicolumnview,
# infolistview, textview, detailedlistview. Notice in the config file the view is
# prefixed with 'konq_'.
VIEW="treeview"
sed -i "s/View2_ServiceName=konq_iconview/View2_ServiceName=konq_${VIEW}/" $PKG${PREFIX}/share/apps/konqueror/profiles/filemanagement

# Make hidden files viewable as the default in file manager. How?
# Probably not a good idea for non-technical users.

# Default desktop icon text is black with shadows. Change to no shadows, white.
cp $CWD/config/kdesktop.kcfg $PKG${PREFIX}/share/config.kcfg/

# Kill the Bouncing Cursor! Change default mouse cursor launch feedback mode to Non-Busy.
# Non-Busy is the default in Trinity. If you want the stupid thing then edit the referenced
# file and enable the command. I'm not helping you!
# cp $CWD/config/klaunch.kcfg $PKG${PREFIX}/share/config.kcfg/

# Default panel height is "Normal."

# Change panel clock applet default to Plain. Plain is the default in Trinity.

# Add Logout/Lock buttons on panel.

# Disable panel tooltip popups, icon activation effect, mouseover popups, and new K-Menu search bar.
cp $CWD/config/kickerSettings.kcfg $PKG${PREFIX}/share/config.kcfg/

# Add a nice Slackware login splash theme.
cp -dR $CWD/FBSlackware ${PKG}${PREFIX}/share/apps/ksplash/Themes/

#=================================================
# End of Subjective Default Usability Tweaks
#=================================================

# Now that we are done messing with it lets fix the ugly links to look pretty
cd $PKG${PREFIX}/share/config
rm -f tdm
ln -sf /etc/$DESKTOP/tdm tdm
cd ${SOURCE_DIR}

cd $PKG/usr/bin
cp starttde.new starttde

cd ${SOURCE_DIR}
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -dR AUTHORS COPYING* INSTALL README* $PRGNAM.lsm $PKG/usr/doc/$PRGNAM-$VERSION

mkdir -p $PKG/install
cat $CWD/doinst.sh | sed -e "s|DESKTOP|$DESKTOP|g" -e "s|PREFIX/bin/starttde.new|${PREFIX}/bin/starttde.new|" > $PKG/install/doinst.sh
cat $CWD/slack-desc > $PKG/install/slack-desc

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

if [ -d $PKG${MANDIR} ]; then
  gzip -9 $PKG${MANDIR}/man?/*
fi

cd $PKG
makepkg -l y -c n $OUTPUT/$PKGNAM-$VERSION-$ARCH-$BUILD${TAG}.${PKGTYPE:-tgz}
