#!/bin/bash # Version: 1.7 GSB Package SlackBuild. # Copyright (c) 2007,2008,2009 Darren 'Tadgy' Austin # Copyright (c) 2007,2008,2009 Steve Kennedy # 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=3.1.1.1 WITH_LANGUAGES=${WITH_LANGUAGES:-"YES"} LANGUAGES="en-GB de fr it ar da el es fi he hi-IN hu ja ko \ nb nl pl pt ro ru sv th tr uk zh-CN zh-TW" # List any packages here that are required to build this package. REQUIRED_PACKAGES="gtk+2 libgnomeui neon libsndfile gnome-vfs boost libgnomeui mozilla-xulrunner nss sane zlib librsvg libjpeg jre nss jdk apache-ant" # We will want to build with gtk/kde and native widgets. KDE_REQUIRED_PACKAGES="kdebase-workspace kdelibs qt" # 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) 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 for REQ in $KDE_REQUIRED_PACKAGES; do check_installed "$REQ" || { echo "${0##*/}: KDE package '$REQ' required for build to stay compatible with Slackware." slapt-get --install $REQ || 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 && tar xzf $CWD/ooo-build-$VERSION.tar.gz && cd ooo-build-$VERSION || exit 1 # Apply ARCH specific patches. if [ "$ARCH" = "i486" -o "$ARCH" = "i586" -o "$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. 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" CONFIGURE_FLAGS="$CONFIGURE_FLAGS --without-java" elif [ "$ARCH" = "powerpc" ]; then TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"} fi EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""} MAKE_FLAGS=${GSB_MAKE_FLAGS:-""} # Configure for GNOME SlackBuild cp $CWD/GNOMESlackBuild*.conf.in ./distro-configs || exit 1 zcat $CWD/ooo-build.gsb.diff.gz | patch -p1 # We need to temporarily spam a directory on the build machine mkdir -p /usr/share/openclipart [ -z "${ANT_HOME}" ] && . /etc/profile.d/ant.sh [ -f "/etc/profile.d/qt4.sh" ] && . /etc/profile.d/qt4.sh export QTDIR="${QT4DIR}" export QTINC="$QTDIR/include" export QTLIB="$QTDIR/lib" # Support multiple languages if [ "${WITH_LANGUAGES}" = "YES" ]; then LANGUAGES="en-US ${LANGUAGES}" else LANGUAGES="en-US" fi; CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib \ --mandir=/usr/man \ $CONFIGURE_FLAGS \ --with-lang="${LANGUAGES}" \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --with-distro=GNOMESlackBuild${LIBDIRSUFFIX} \ --with-ant-home=/usr/lib${LIBDIRSUFFIX}/apache-ant \ --disable-odk \ --disable-pam \ --disable-pam-link \ --disable-post-install-scripts \ --enable-access \ --enable-cairo \ --disable-kde \ --enable-kde4 \ --enable-gtk \ --with-system-cairo \ --with-system-neon \ --with-system-icu \ --with-system-expat \ --with-system-boost \ --with-system-mozilla \ --disable-mono \ --with-binsuffix=3.1 \ --with-docdir=/usr/share/doc/openoffice.org \ --with-gcc-speedup=ccache \ --with-openclipart=/usr/share/openclipart \ --with-drink=ale \ || exit 1 # Copy over downloaded sources, rather than run the download script for i in $CWD/{ooo_*,ooo-cli*,ooo310*,lib*,biblio*,extras*,mdbtools*} ; do if [ ! -f ./src/${i} ]; then echo "Linking to source tree: $(basename $i)" (cd src ; ln -fs $i ) fi; done; echo # Build and Install make || exit 1 # Do a full install cd bin ; OODESTDIR=$PKG ./package-ooo || exit 1 # Split out language packs if [ "${WITH_LANGUAGES}" = "YES" ]; then cd $PKG ; for lang in ${LANGUAGES//en-US/} ; do echo "Splitting langpack $lang." ( mkdir -p $TMP/$PKGNAME-l10n-$lang ; tar cf - --remove-files $(find . -name "README*$lang*" \ -o -name "LICENSE*${lang}*" \ -o -type d -name "${lang}" \ -o -name "Lang_*${lang}.xba" \ -o -name "Langpack-${lang}.xcu" \ -o -name "*${lang}.oxt" ) | ( cd $TMP/$PKGNAME-l10n-$lang ; tar xf - ) mkdir -p $TMP/$PKGNAME-l10n-$lang/install && cat $CWD/l10n/slack-desc.openoffice3-l10n-${lang} > \ $TMP/$PKGNAME-l10n-$lang/install/slack-desc ; # doinst dictionary installation cat $CWD/doinst-l10n.sh | sed "s,@LIBDIRSUFFIX@,${LIBDIRSUFFIX},g" \ | sed "s,@LANG@,${lang//en-GB/en},g" > $TMP/$PKGNAME-l10n-$lang/install/doinst.sh ; ( cd $TMP/$PKGNAME-l10n-$lang ; makepkg -p -l y -c n $PKGDEST/$PKGNAME-l10n-${lang}-${VERSION//-/_}-noarch-${BUILD}${TAG}.txz) ) rm -fr $TMP/$PKGNAME-l10n-$lang ; done; fi; # Add /usr/share/pixmaps directory and link icons to it mkdir -p $PKG/usr/pixmaps ( cd $PKG/usr/pixmaps for APP in base calc draw impress math writer ; do ln -sf /usr/share/icons/hicolor/48x48/apps/ooo-${APP}3.1.png . ; done ) # Make sure our GNOME icons specify that we're using 3.1 since both # ooo 3.1 and ooo 2.4 can exist on the same system at once for i in $PKG/usr/share/applications/*.desktop ; do sed -i '/^Name/s/$/ 3.1/g' $i; done; # Preserve files mv $PKG/etc/bash_completion.d/ooffice3.1.sh $PKG/etc/bash_completion.d/ooffice3.1.sh.new # Strip debugging symbols. { find $PKG | xargs file | egrep "executable|shared object" | grep "ELF" | \ cut -d: -f1 | xargs strip --strip-unneeded ; } 2>/dev/null # Link extra documentation into /usr/doc mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION for i in README README.html LICENSE LICENSE.html THIRDPARTYLICENSEREADME.html ; do ln -s $PKG/usr/lib${LIBDIRSUFFIX}/ooo-3.1/$i $PKG/usr/doc/$PKGNAME-$VERSION ; done find $PKG/usr/doc/$PKGNAME-$VERSION/ -type f -exec chmod 644 {} \; chown -R root:root $PKG/usr/doc/$PKGNAME-$VERSION # 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 } # 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}${TAG}.txz || exit 1 # Cleanup [ "$NOCLEANUP" = "0" ] && { rm -rf $PKG $TMP/ooo-build-$VERSION # Make sure to clean up build machine of any kde packages to prevent # unwanted dependencies. removepkg $KDE_REQUIRED_PACKAGES }