#!/bin/bash # Version: 1.7 GSB Package SlackBuild. # Copyright (c) 2007,2008,2009 Darren 'Tadgy' Austin # Copyright (c) 2007,2008,2009 Steve Kennedy # Portions are Copyright 2008, 2009 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Licenced under the terms of the GNU General Public Licence version 3. # # 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. # Package variables. BUILD=1 VERSION=2.16.6 # List any packages here that are required to build this package. # The list is space seperated and case sensitive. REQUIRED_PACKAGES="pango cairo glib2 libpng libjpeg libtiff libXrender xproto renderproto libX11 kbproto libXau libXdmcp libxcb libpthread-stubs libXext cups inputproto libXi libXinerama libXrandr jasper" # Build variables. TAG=${TAG:-gsb} ARCH=${ARCH:-i486} TUNE=${TUNE:-i486} DISTRO=${DISTRO:-slackware} TMP=${TMP:-/tmp} PKGDEST=${PKGDEST:-$TMP} # Script variables. PKGNAME="$(basename $0 .SlackBuild)" SRCNAME="gtk+" 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 } 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 $SRCNAME-$VERSION || exit 1 tar xjf $CWD/$SRCNAME-$VERSION.tar.bz2 && cd $SRCNAME-$VERSION || exit 1 # Apply ARCH specific patches. if [ "$ARCH" = "i486" -o "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then echo "${0##*/}: Applying any patches for $ARCH" elif [ "$ARCH" = "x86_64" ]; then echo "${0##*/}: Applying any patches for $ARCH" elif [ "$ARCH" = "powerpc" ]; then echo "${0##*/}: Applying any patches for $ARCH" fi # There's been this long standing debate about PNG and -lz # and this patch is the workaround. ;-) zcat $CWD/gtk.pnglz.diff.gz | patch -p1 || exit 1 ## Fix for x86_64 (does not hurt the other archs but note that we will start ## using /etc/gtk-2.0/$host instead of /etc/gtk-2.0/ now): sed -i "s/GTK_SYSCONFDIR, \\\"gtk-2\\.0\\\"/GTK_SYSCONFDIR, \\\"gtk-2\\.0\\\", HOST/g" ./gtk/gtkrc.c ./gdk-pixbuf/gdk-pixbuf-io.c sed -i 's/sysconfdir)\\"/& \\\n\t-DHOST=\\\"$(host_triplet)\\\"/g' \ gdk-pixbuf/Makefile.am \ gtk/Makefile.am \ modules/input/Makefile.am # The original config.{guess,sub} do not work on x86_64 cp -p /usr/share/libtool/config.{guess,sub} . # Fix permissions for building. chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; # Configure, Tuning, GCC and Make options. CONFIGURE_FLAGS=${GSB_CONFIGURE_FLAGS:-""} if [ "$ARCH" = "i486" -o "$ARCH" = "i586" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH -mtune=$TUNE"} LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then TUNE_CFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then TUNE_CFLAGS="-O2" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -fPIC"} LIBDIRSUFFIX="64" elif [ "$ARCH" = "powerpc" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"} fi EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""} MAKE_FLAGS=${GSB_MAKE_FLAGS:-""} libtoolize --force autoreconf -vif # Autoconf changes linux to linux-gnu. # Our host is $ARCH-slackware-linux not $ARCH-slackware-linux-gnu: sed -i -e 's#linux|linux-gnu|#linux|linux|#' config.sub # Configure. CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \ ./configure --prefix=/usr \ --sysconfdir=/etc \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --mandir=/usr/man \ --with-xinput=yes \ --build=$ARCH-$DISTRO-linux \ || exit 1 make $MAKE_FLAGS || exit 1 # Check the host value that is passed to the compile to the one in this script: host="$ARCH-slackware-linux" compile_host=$(grep 'host_triplet =' gtk/Makefile | sed -e "s/.* = //") if [ "x$compile_host" != "x$host" ]; then echo "Host mismatch: compile='$compile_host', SlackBuild='$host'" && exit 1 fi make install DESTDIR=$PKG \ RUN_QUERY_IMMODULES_TEST=false RUN_QUERY_LOADER_TEST=false \ || exit 1 # I'm spamming your root partition because /etc/gtk-2.0 won't install to $DESTDIR make install || exit 1 cp -a /etc/gtk-2.0/* $PKG/etc/gtk-2.0/ rm -rf $PKG/etc/gtk-2.0/$host mkdir -p $PKG/etc/gtk-2.0/$host mv $PKG/etc/gtk-2.0/* $PKG/etc/gtk-2.0/$host/ mv $PKG/etc/gtk-2.0/$host/im-multipress.conf $PKG/etc/gtk-2.0/$host/im-multipress.conf.new # We need to have separate 32-bit and 64-bit binaries # for places where we have two copies of the GTK+ package installed. # (we might have x86_64 and i486 packages on the same system, for example.) case "$host" in s390x*|x86_64*) mv $PKG/usr/bin/gtk-query-immodules-2.0{,-64} mv $PKG/usr/bin/gdk-pixbuf-query-loaders{,-64} ( cd $PKG/usr/bin ln -sf gtk-query-immodules-2.0-64 gtk-query-immodules-2.0 ln -sf gdk-pixbuf-query-loaders-64 gdk-pixbuf-query-loaders ) ;; *) mv $PKG/usr/bin/gtk-query-immodules-2.0{,-32} mv $PKG/usr/bin/gdk-pixbuf-query-loaders{,-32} ( cd $PKG/usr/bin ln -sf gtk-query-immodules-2.0-32 gtk-query-immodules-2.0 ln -sf gdk-pixbuf-query-loaders-32 gdk-pixbuf-query-loaders ) ;; esac # Install wrappers for the binaries: cp $CWD/update-gdk-pixbuf-loaders $PKG/usr/bin/update-gdk-pixbuf-loaders cp $CWD/update-gtk-immodules $PKG/usr/bin/update-gtk-immodules chmod 0755 $PKG/usr/bin/update-* # I'm almost inclined to think this stuff is obsolete but I don't know for sure. # I do know that leaving it in doesn't hurt (aside from a few wasted bytes, but # probably less than the comments here waste ;-) mkdir -p $PKG/etc/profile.d cp $CWD/profile.d/* $PKG/etc/profile.d chmod 755 $PKG/etc/profile.d/* # 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/share/info ] && { mkdir -p $PKG/usr && mv $PKG/usr/share/info $PKG/usr || exit 1; rmdir -p $PKG/usr/share } [ -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 NEWS README \ $PKG/usr/doc/$PKGNAME-$VERSION ( cd $PKG/usr/doc/$PKGNAME-$VERSION ln -s /usr/share/gtk-doc/html/gail-libgail-util . ln -s /usr/share/gtk-doc/html/gdk . ln -s /usr/share/gtk-doc/html/gdk-pixbuf . ln -s /usr/share/gtk-doc/html/gtk . ) 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 | sed "s,@ARCH@,${ARCH},g" >>$PKG/install/$FILE } done # Create the package cd $PKG makepkg -p -l y -c n $PKGDEST/$PKGNAME-${VERSION//-/_}-$ARCH-${BUILD}${TAG}.txz # Cleanup [ "$NOCLEANUP" = "0" ] && { rm -rf $PKG $TMP/$SRCNAME-$VERSION }