#!/bin/bash ## Version: 1.6 GSB Package SlackBuild - Do not remove this line! ## Copyright (c) 2007, 2008: ## Darren 'Tadgy' Austin , Coventry, UK. ## Steve Kennedy , Exeter, UK. ## Licenced under the terms of the GNU General Public Licence version 3. ## ## Some portions are Copyright 2006, 2008 Patrick J. Volkerding, Sebeka, MN, USA ## All rights reserved. ## Package variables. BUILD=7gsb VERSION=4.37 ## List any packages here that are required to build this package. ## The list is space seperated and case sensitive. REQUIRED_PACKAGES="alsa-lib dbus glib2 gstreamer gst-plugins-base libsndfile cups" ## Build variables. ARCH=${ARCH:-i586} TUNE=${TUNE:-i586} DISTRO=${DISTRO:-slackware} TMP=${TMP:-/tmp} PKGDEST=${PKGDEST:-$TMP} ## Script variables. PKGNAME=$(basename $0 .SlackBuild) PKG=$TMP/package-$PKGNAME CWD=$(pwd) NOCLEANUP=0 FORCEBUILD=0 ## Usage. function usage() { cat << EOF Usage: ${0##*/} [options] Options: --force The package will not be built if a package of the same name is already installed, or any of the packages required to build are missing. This option over-rides these checks and attempts a build anyway. --no-cleanup By default any temporary source, build and package directories will be deleted once the package is built. This option prevents those files from being removed. --help Show this help screen. EOF } ## Parse command line arguments. while [ $# -gt 0 ]; do if [ "$1" = "-force" ] || [ "$1" = "--force" ]; then FORCEBUILD=1 shift elif [ "$1" = "-no-cleanup" ] || [ "$1" = "--no-cleanup" ]; then NOCLEANUP=1 shift elif [ "$1" = "-help" ] || [ "$1" = "--help" ]; then usage exit 0 else echo "${0##*/}: Unknown option: $1" exit 1 fi done ## Package requirements and installation checks. [ "$FORCEBUILD" = "0" ] && { function check_installed() { ls -1 /var/log/packages | grep "^${1}-[^-]*-[^-]*-[^-]*$" >/dev/null 2>&1 return $? } check_installed "$PKGNAME" && { echo "${0##*/}: Remove installed '$PKGNAME' package before build." exit 1 } check_installed "bluez-libs" && { echo "${0##*/}: Remove installed 'bluez-libs' package before build." exit 1 } check_installed "bluez-utils" && { echo "${0##*/}: Remove installed 'bluez-utils' package before build." exit 1 } for REQ in $REQUIRED_PACKAGES; do check_installed "$REQ" || { echo "${0##*/}: Required package '$REQ' not installed." exit 1 } done } ## Temporary space and package storage. mkdir -p $TMP rm -rf $PKG mkdir -p $PKG mkdir -p $PKG/install mkdir -p $PKGDEST ## Decompress archive. cd $TMP && rm -rf $PKGNAME-$VERSION && tar xzf $CWD/$PKGNAME-$VERSION.tar.gz && cd $PKGNAME-$VERSION || exit 1 # Apply ARCH specific patches. if [ "$ARCH" = "i386" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "i486" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "i586" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "i686" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "x86_64" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose elif [ "$ARCH" = "powerpc" ]; then echo "${0##*/}: Applying any patches for $ARCH" #cat $CWD/patches/foo.patch | patch -p0 --verbose fi zcat ${CWD}/patches/bluez-utils-oui-usage.patch.gz | patch -p0 -E || exit 1 zcat ${CWD}/patches/bluez-try-utf8-harder.patch.gz | patch -p1 -E || exit 1 # http://thread.gmane.org/gmane.linux.bluez.kernel/1754 zcat ${CWD}/patches/bluez-activate-wacom-mode2.patch.gz | patch -p1 -E || exit 1 ## Fix permissions for building. chown -R root.root . find . -perm 664 -exec chmod 644 {} \; find . -perm 600 -exec chmod 644 {} \; find . -perm 444 -exec chmod 644 {} \; find . -perm 400 -exec chmod 644 {} \; find . -perm 440 -exec chmod 644 {} \; find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 511 -exec chmod 755 {} \; find . -perm 711 -exec chmod 755 {} \; find . -perm 555 -exec chmod 755 {} \; ## Configure, Tuning, GCC and Make options. CONFIGURE_FLAGS=${GSB_CONFIGURE_FLAGS:-""} if [ "$ARCH" = "i386" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH -mtune=$TUNE"} elif [ "$ARCH" = "i486" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH -mtune=$TUNE"} elif [ "$ARCH" = "i586" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O3 -march=$ARCH -mtune=$TUNE -pipe -fomit-frame-pointer"} elif [ "$ARCH" = "i686" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O3 -march=$ARCH -mtune=$TUNE -pipe -fomit-frame-pointer"} elif [ "$ARCH" = "x86_64" ]; then if [ "$TUNE" = "k8" -o "$TUNE" = "opteron" -o "$TUNE" = "athlon64" -o "$TUNE" = "athlon-fx" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O3 -march=$TUNE -mtune=$TUNE -pipe -fomit-frame-pointer -fPIC"} else TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O3 -march=k8 -mtune=k8 -pipe -fomit-frame-pointer -fPIC"} fi [ -z "$CONFIGURE_FLAGS" ] && { CONFIGURE_FLAGS="--libdir=/usr/lib64" } elif [ "$ARCH" = "powerpc" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"} else TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2"} fi EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""} MAKE_FLAGS=${GSB_MAKE_FLAGS:-""} CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --mandir=/usr/man $CONFIGURE_FLAGS --target=$ARCH-$DISTRO-linux \ --enable-shared \ --disable-static \ --enable-gstreamer \ --enable-alsa \ --enable-usb \ --enable-netlink \ --enable-tools \ --enable-bccmd \ --enable-hid2hci \ --enable-dfutool \ --enable-hidd \ --enable-pand \ --enable-dund \ --enable-cups \ --enable-manpages \ --enable-configfiles \ --enable-initscripts \ --enable-pcmciarules \ || exit 1 ## Build and install. make $MAKE_FLAGS && make $MAKE_FLAGS DESTDIR=$PKG install || exit 1 mkdir -p $PKG/lib/udev/rules.d cat scripts/bluetooth.rules > $PKG/lib/udev/rules.d/60-bluetooth.rules rm -fr $PKG/etc/udev mkdir -p $PKG/lib/udev && mv $PKG/usr/libexec/udev/bluetooth_serial $PKG/lib/udev ; rm -fr $PKG/usr/libexec ; ## Users now can add themselves to the "netdev" group to use bluetooth. sed -i "s/at_console=\"true\"/group=\"netdev\"/g" $PKG/etc/dbus-1/system.d/bluetooth.conf ## compatibility for previous bluez-libs 3 package if [ "$ARCH" = "x86_64" ]; then ( cd $PKG/usr/lib64 ; ln -s libbluetooth.so libbluetooth.so.2 ) ; else ( cd $PKG/usr/lib ; ln -s libbluetooth.so libbluetooth.so.2 ) ; fi # Move/rename/patch init script: mv $PKG/etc/init.d $PKG/etc/rc.d mv $PKG/etc/rc.d/bluetooth $PKG/etc/rc.d/rc.bluetooth # Replace with our own Slackware version cp $CWD/rc.bluetooth $PKG/etc/rc.d/rc.bluetooth # Edit "default" configuration script: sed -i "s:\(HIDD_ENABLE=\).*:\1false:" $PKG/etc/default/bluetooth || exit 1 sed -i "s:\(HID2HCI_ENABLE=\).*:\1false:" $PKG/etc/default/bluetooth || exit 1 # Install other configuration files: mkdir -p $PKG/etc/bluetooth cp -a audio/audio.conf $PKG/etc/bluetooth cp -a input/input.conf $PKG/etc/bluetooth cp -a network/network.conf $PKG/etc/bluetooth cp -a rfcomm/rfcomm.conf $PKG/etc/bluetooth chmod 644 $PKG/etc/bluetooth/*.conf # Install Debian's add-passkey program: if [ "$ARCH" = "x86_64" ]; then DEBDEST=/usr/lib64/bluetooth else DEBDEST=/usr/lib/bluetooth fi gcc $(pkg-config --libs --cflags dbus-1) -DDBUS_API_SUBJECT_TO_CHANGE \ $CWD/add-passkey.c -o $PKG/$DEBDEST/add-passkey || exit 1 cp $CWD/register-passkeys $PKG/$DEBDEST chmod a+x $PKG/$DEBDEST/* # Default PIN (using "1234" seems insecure, so let's use an empty file instead): mkdir -p $PKG/etc/bluetooth/passkeys chmod 700 $PKG/etc/bluetooth/passkeys #echo "1234" > $PKG/etc/bluetooth/passkeys/default touch $PKG/etc/bluetooth/passkeys/default # Do not overwrite configuration ( cd $PKG for file in \ etc/bluetooth/audio.conf \ etc/bluetooth/input.conf \ etc/bluetooth/main.conf \ etc/bluetooth/network.conf \ etc/bluetooth/rfcomm.conf \ etc/bluetooth/passkeys/default \ etc/rc.d/rc.bluetooth \ etc/default/bluetooth ; do mv ${file} ${file}.new done ) ## Strip debugging symbols. { find $PKG | xargs file | egrep "executable|shared object" | grep "ELF" | \ cut -d: -f1 | xargs strip --strip-unneeded ; } 2>/dev/null ## Compress and fix manpage links. [ -e $PKG/usr/man ] && { find $PKG/usr/man -type f -name \*.? -exec gzip -9f {} \; find $PKG/usr/man -type l -name \*.? -printf \ "( cd '%h'; [ -e '%l.gz' ] && { rm -f '%f'; ln -sf '%l.gz' '%f.gz'; } );\n" | bash } ## Deal with .info files. [ -e $PKG/usr/info ] && { rm -f $PKG/usr/info/dir gzip -9 $PKG/usr/info/*.info } ## Copy extra documentation into package. mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION cp -a \ AUTHORS COPYING* ChangeLog NEWS README \ $PKG/usr/doc/$PKGNAME-$VERSION find $PKG/usr/doc/$PKGNAME-$VERSION/ -type f -exec chmod 644 {} \; chown -R root:root $PKG/usr/doc/$PKGNAME-$VERSION ## Package meta files for FILE in doinst.sh slack-desc slack-required slack-conflicts slack-suggests do [ -e $CWD/$FILE ] && { cat $CWD/$FILE >>$PKG/install/$FILE } done ## Create the package cd $PKG makepkg -p -l y -c n $PKGDEST/$PKGNAME-${VERSION//-/_}-$ARCH-$BUILD.tgz ## Cleanup [ "$NOCLEANUP" = "0" ] && { rm -rf $PKG $TMP/$PKGNAME-$VERSION }