#!/bin/sh
# $Id: keytouch.SlackBuild,v 1.8 2007/12/23 20:44:58 root Exp root $
# Copyright (c) 2005-2007 Eric Hameleers <alien@slackware.com>
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
# any purpose with or without fee is hereby granted, provided that
# the above copyright notice and this permission notice appear in all
# copies.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
# CONTRIBUTORS 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.
# -----------------------------------------------------------------------------
#
# Slackware SlackBuild script
# ===========================
# By: Eric Hameleers <alien@slackware.com>
# For: keytouch
# Descr: configure a keyboard's multimedia keys
# URL: http://keytouch.sourceforge.net/
# Needs: gnome-menus,kdesu,glade
# Changelog:
# 2.0.0.beta2-1: 08/Sep/2005 by Eric Hameleers <alien@slackware.com>
# * Initial build.
# 2.0.0.beta2-2: 09/Sep/2005 by Eric Hameleers <alien@slackware.com>
# * Make sure an existing '/etc/keytouch/current-keyboard.xml' does
# not get overwritten on upgrade.
# 2.0.0.beta2-3: 09/Sep/2005 by Eric Hameleers <alien@slackware.com>
# * Better handling of the '/etc/keytouch/current-keyboard.xml' on
# install and upgrade.
# 2.0.0-1: 22/Nov/2005 by Eric Hameleers <alien@slackware.com>
# * Rebuilt for the final release.
# 2.3.1-1: 01/Aug/2007 by Eric Hameleers <alien@slackware.com>
# * This release unfortunately also depends on gnome-menus.
# 2.3.2-1: 23/dec/2007 by Eric Hameleers <alien@slackware.com>
# * Update. Also, check for an already keytouchd in
# /etc/xprofile
#
# Run 'sh keytouch.SlackBuild --cleanup' to build a Slackware package.
# The package (.tgz) plus descriptive .txt file are created in /tmp .
# Install using 'installpkg'.
#
# -----------------------------------------------------------------------------
# Set initial variables:
PRGNAM=keytouch
VERSION=${VERSION:-2.3.2}
ARCH=${ARCH:-i486}
BUILD=${BUILD:-1}
DOCS="AUTHORS COPYING ChangeLog IMPORTANT-INSTALLATION NEWS README"
# Where do we look for sources?
CWD=`pwd`
SRCDIR=`dirname $0`
[ "${SRCDIR:0:1}" == "." ] && SRCDIR=${CWD}/${SRCDIR}
# Place to build (TMP) package (PKG) and output (OUTPUT) the program:
TMP=${TMP:-/tmp/build}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
SOURCE="$SRCDIR/${PRGNAM}-${VERSION}.tar.gz"
SRCURL="http://downloads.sourceforge.net/${PRGNAM}/${PRGNAM}-${VERSION}.tar.gz"
##
## --- with a little luck, you won't have to edit below this point --- ##
##
# Exit the script on errors:
set -e
trap 'echo "$0 FAILED at line $LINENO!" | tee $OUTPUT/error-${PRGNAM}.log' ERR
# Catch unitialized variables:
set -u
P1=${1:-1}
# Slackware 11 and up need other option (gcc > 3.3.x)
if [ `gcc -dumpversion | tr -d '.' |cut -c 1-2` -gt 33 ]; then
MOPT=tune
else
MOPT=cpu
fi
case "$ARCH" in
i386) SLKCFLAGS="-O2 -march=i386 -m${MOPT}=i686"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
i486) SLKCFLAGS="-O2 -march=i486 -m${MOPT}=i686"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
s390) SLKCFLAGS="-O2"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
powerpc) SLKCFLAGS="-O2"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
x86_64) SLKCFLAGS="-O2 -fPIC"
SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
;;
athlon-xp) SLKCFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
esac
# Create working directories:
mkdir -p $TMP/tmp-$PRGNAM # location to build the source
rm -rf $TMP/tmp-$PRGNAM/* # we remove the remnants of previous build
mkdir -p $PKG # place for the package to be built
rm -rf $PKG/* # We always erase old package's contents:
mkdir -p $OUTPUT # place for the package to be saved
# Source file availability:
if ! [ -f ${SOURCE} ]; then
if ! [ "x${SRCURL}" == "x" ]; then
# Check if the $SRCDIR is writable at all - if not, download to $OUTPUT
[ -w "$SRCDIR" ] || SOURCE="$OUTPUT/`basename $SOURCE`"
echo "Source '`basename ${SOURCE}`' not available yet..."
echo "Will download file to `dirname $SOURCE`"
wget -nv -T 20 -O "${SOURCE}" "${SRCURL}" || true
if [ $? -ne 0 -o ! -s "${SOURCE}" ]; then
echo "Downloading '`basename ${SOURCE}`' failed... aborting the build."
mv -f "${SOURCE}" "${SOURCE}".FAIL
exit 1
fi
else
echo "File '`basename ${SOURCE}`' not available... aborting the build."
exit 1
fi
fi
if [ "$P1" == "--download" ]; then
echo "Download complete."
exit 0
fi
# --- PACKAGE BUILDING ---
echo "++"
echo "|| $PRGNAM-$VERSION"
echo "++"
cd $TMP/tmp-$PRGNAM
echo "Extracting the source archive(s) for $PRGNAM..."
if `file ${SOURCE} | grep -q ": bzip2"`; then
tar -xjvf ${SOURCE}
elif `file ${SOURCE} | grep -q ": gzip"`; then
tar -xzvf ${SOURCE}
fi
cd ${PRGNAM}-${VERSION}
chown -R root:root .
chmod -R u+w,go+r-w,a-s .
echo Building ...
# Make sure that the install-data-local part is skipped:
sed -i 's/install-data-local//1' keytouch{-acpid,d,-init}/Makefile.in
for cdir in . keytouch-config keytouch-keyboard ; do
( cd $cdir
LDFLAGS="$SLKLDFLAGS" \
CFLAGS="$SLKCFLAGS" \
./configure --prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc \
--program-prefix="" \
--program-suffix="" \
--build=$ARCH-slackware-linux \
2>&1 | tee $OUTPUT/configure-${PRGNAM}.log
make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log
)
done
# Install all the needed stuff to the package dir
# Use installwatch if available, to produce a logfile of the installation
# process that is more easily readable:
mkdir -p $PKG/etc/rc.d
#mkdir -p $PKG/etc/init.d
if $(which installwatch > /dev/null 2>&1); then
for cdir in . keytouch-config keytouch-keyboard ; do
( cd $cdir
installwatch -o $OUTPUT/install-${PRGNAM}.log make DESTDIR=$PKG install
)
done
else
for cdir in . keytouch-config keytouch-keyboard ; do
( cd $cdir
make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log
)
done
fi
# Fix the permissions of keyboard definitions:
[ -d $PKG/usr/share/keytouch/keyboards ] && \
chmod 644 $PKG/usr/share/keytouch/keyboards/*
# A keytouch.desktop file:
mkdir -p $PKG/usr/share/applications
cat <<-_EOT_ > $PKG/usr/share/applications/keytouch.desktop
[Desktop Entry]
Exec=keytouch
Icon=/usr/share/keytouch-keyboard/pixmaps/icon.png
Terminal=false
Name=Keytouch
Comment=Configure a keyboard's extra keys
Type=Application
Categories=Application;Settings
_EOT_
if [ -f $PKG/etc/keytouch/current_keyboard.xml ]; then
# Safeguard the configfile:
mv $PKG/etc/keytouch/current_keyboard.xml{,.new}
# Add this to the doinst.sh:
! [ -d $PKG/install ] && mkdir -p $PKG/install
cat <<EOINS >> $PKG/install/doinst.sh
# Handle the incoming configuration files:
config() {
for infile in \$1; do
NEW="\$infile"
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...
done
}
config etc/keytouch/current_keyboard.xml.new
if [ -x usr/bin/update-desktop-database ]; then
chroot . /usr/bin/update-desktop-database /usr/share/applications >/dev/null 2>&1
fi
EOINS
fi
# Add documentation:
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true
# Fix incorrect location:
# mv $PKG/usr/share/keytouch/doc/html $PKG/usr/doc/$PRGNAM-$VERSION/
#rmdir $PKG/usr/share/keytouch/doc
chmod -R a-w $PKG/usr/doc/$PRGNAM-$VERSION/*
# Compress the man page(s):
if [ -d $PKG/usr/man ]; then
find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \;
for i in `find $PKG/usr/man -type l -name "*.?"` ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
fi
# Strip binaries:
cd $PKG
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
cd -
# Add a package description:
mkdir -p $PKG/install
cat $SRCDIR/slack-desc > $PKG/install/slack-desc
if [ -f $SRCDIR/doinst.sh ]; then
cat $SRCDIR/doinst.sh >> $PKG/install/doinst.sh
fi
if [ -f $SRCDIR/slack-required ]; then
cat $SRCDIR/slack-required > $PKG/install/slack-required
fi
# Build the package:
cd $PKG
makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log
cd $OUTPUT
md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz.md5
cd -
cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txt
if [ -f $PKG/install/slack-required ]; then
cat $PKG/install/slack-required > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.dep
fi
# Clean up the extra stuff:
if [ "$P1" = "--cleanup" ]; then
rm -rf $TMP/tmp-$PRGNAM
rm -rf $PKG
fi