#!/bin/bash ## Version: 1.6 GSB Package SlackBuild. ## Copyright (c) 2007 Darren 'Tadgy' Austin ## Copyright (c) 2007 Steve Kennedy ## ## Licenced under the terms of the GNU General Public Licence version 3. ## ## Package variables. BUILD=1gsb VERSION=3.0.12 ## List any packages here that are required to build this package. ## The list is space seperated and case sensitive. REQUIRED_PACKAGES="gtk+2 glib2 cairo pango libgnomeui nss pkg-config mozilla-xulrunner" ## Build variables. ARCH=${ARCH:-i586} TUNE=${TUNE:-i586} DISTRO=${DISTRO:-slackware} TMP=${TMP:-/tmp} PKGDEST=${PKGDEST:-$TMP} ## Script variables. PKGNAME=$(basename $0 .SlackBuild) SRCNAME=firefox 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 cat << EOF Building Mozilla Firefox can take a long time. Please be patient. EOF ## Decompress archive. cd $TMP ; echo -n "Cleaning temporary space..." rm -fr $PKGNAME-$VERSION ; echo "done." echo -n "Extracting source files..." tar xjf $CWD/$SRCNAME-$VERSION-source.tar.bz2 || exit 1 echo "done." mv mozilla $PKGNAME-$VERSION ; 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 ## Fix permissions for building. echo "Please be patient. This may take a while." echo -n "Setting file permissions for building..." chown -R root.root . find . -perm 664 -exec chmod 644 {} \; find . -perm 775 -exec chmod 755 {} \; echo "done." ## 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" LIBDIR=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:-""} LIBDIR=${LIBDIR:-"lib"} ## Configure. export MOZILLA_OFFICIAL="1" && export BUILD_OFFICIAL="1" && export MOZ_PHOENIX="1" && export CFLAGS="$TUNE_CFLAGS" && export CXXFLAGS="$TUNE_CFLAGS" && ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib \ --mandir=/usr/man $CONFIGURE_FLAGS --target=$ARCH-$DISTRO-linux \ --with-default-mozilla-five-home=/usr/$LIBDIR/firefox-$VERSION \ --enable-application=xulrunner \ --enable-optimize="$TUNE_CFLAGS" \ --enable-system-cairo \ --enable-system-lcms \ --enable-official-branding \ --enable-strip \ --enable-safe-browsing \ --disable-pedantic \ --disable-long-long-warning \ --disable-debug \ --disable-tests \ --disable-gnomevfs \ --disable-mailnews \ --disable-javaxpcom \ --disable-mochitest \ --disable-installer \ --disable-crashreporter \ --disable-updater \ --with-system-zlib \ --with-system-jpeg \ --with-system-bz2 \ --with-system-sqlite \ --with-system-nspr \ --with-system-nss \ --enable-application=browser \ --with-libxul-sdk=/usr/lib/xulrunner-devel \ || exit 1 ## Build and install. make $MAKE_FLAGS && make $MAKE_FLAGS DESTDIR=$PKG install || exit 1 ## For GNOME mkdir -p $PKG/usr/share/applications && cp $CWD/gnome/mozilla-firefox.desktop $PKG/usr/share/applications && mkdir -p $PKG/usr/share/pixmaps && cp $CWD/gnome/mozilla-firefox.png $PKG/usr/share/pixmaps && cp $CWD/gnome/firefox.png $PKG/usr/share/pixmaps && rm -fr $PKG/usr/bin/firefox && sed "s,@VERSION@,$VERSION,g" $CWD/firefox.sh > $PKG/usr/bin/firefox || exit 1 chmod 755 $PKG/usr/bin/firefox chown -R root:root $PKG/usr/bin chown -R root.root $PKG/usr/share ## Make plugins dir if [ "$ARCH" = "x86_64" ]; then mkdir -p $PKG/usr/lib64/mozilla/plugins else mkdir -p $PKG/usr/lib/mozilla/plugins fi # These files/directories are usually created if Firefox is run as root, which on many # systems might (and possibly should) be never. Therefore, if we don't see them we'll # put stubs in place to prevent startup errors. ( cd $PKG/usr/$LIBDIR/firefox-$VERSION if [ -d extensions/talkback\@mozilla.org ]; then if [ ! -r extensions/talkback\@mozilla.org/chrome.manifest ]; then echo > extensions/talkback\@mozilla.org/chrome.manifest fi fi if [ ! -d updates ]; then mkdir -p updates/0 fi ) # Some icons aren't in the right place #mkdir -p chrome/icons/default #cp icons/{default,mozicon50}.xpm chrome/icons/default/ ## 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 \ LEGAL LICENSE README.txt \ $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 ## Install our doinst.sh cat $CWD/doinst.sh | sed "s:@VERSION@:${VERSION}:g" \ | sed "s:@LIBDIR@:${LIBDIR}:g" >> $PKG/install/doinst.sh ## Package meta files for FILE in 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 }