#!/bin/bash
## Version: 1.6 GSB Package SlackBuild.
## Copyright (c) 2007 Darren 'Tadgy' Austin <darren (at) gnomeslackbuild.org>
## Copyright (c) 2007 Steve Kennedy <sk238 (at) exeter.ac.uk>
##
## Licenced under the terms of the GNU General Public Licence version 3.
##

## Package variables.
BUILD=1gsb
VERSION=3.0.1.3

## List any packages here that are required to build this package.
## We build with mono/java support on x86.  x86_64 does not yet support
## this configuration.
if [ "$ARCH" = "x86_64" ]; then
  REQUIRED_PACKAGES="gtk+2 libgnomeui neon libsndfile gnome-vfs boost libgnomeui mozilla-xulrunner nss sane zlib librsvg libjpeg nss"
else
  REQUIRED_PACKAGES="gtk+2 libgnomeui neon libsndfile gnome-vfs boost libgnomeui mozilla-xulrunner nss sane zlib librsvg libjpeg jre nss jdk apache-ant"
fi;


## 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
  }

  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 &&
# Disabled in case build fails;  ooo-build can
# resume broken builds.
#rm -rf $PKGNAME-$VERSION &&
tar xzf $CWD/ooo-build-$VERSION.tar.gz &&
cd ooo-build-$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

## 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
  LIBDIR=lib64
  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 --with-num-cpus=2 --without-java --disable-mono"
  }
elif [ "$ARCH" = "powerpc" ]; then
  TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"}
  [ -z "$CONFIGURE_FLAGS" ] && {
    CONFIGURE_FLAGS="--with-arch=ppc"
  }
else
  TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2"}
fi
EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""}
MAKE_FLAGS=${GSB_MAKE_FLAGS:-""}
LIBDIR=${LIBDIR:-"lib"}

## Add GNOMESlackBuild sections to go-oo configure system
#cp $CWD/gsb_art/*.bmp ./src || exit 1
cp $CWD/patches/GNOMESlackBuild* ./distro-configs || exit 1
patch -p1 < $CWD/patches/addgsb-$VERSION.patch || exit 1

## We need to temporarily spam a directory on the build machine
mkdir -p /usr/share/openclipart

## Set our distro configuration
if [ "$ARCH" = "x86_64" ]; then
  OO_DISTRO=GNOMESlackBuild64
else
  OO_DISTRO=GNOMESlackBuild
fi;

## Configure.
CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \
  ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib \
  --mandir=/usr/man $CONFIGURE_FLAGS --target=$ARCH-$DISTRO-linux \
  --with-distro=$OO_DISTRO \
  --disable-static --enable-shared \
  --disable-odk \
  --enable-access \
  --enable-cairo \
  --with-system-cairo \
  --with-system-sndfile \
  --with-system-neon \
  --enable-gtk \
  --disable-kde \
  --disable-mono \
  --disable-pam \
  --disable-pam-link \
  --disable-post-install-scripts \
  --enable-openxml \
  --with-system-libsvg \
  --with-binsuffix=3.0 \
  --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
for i in $CWD/{ooo300*,lib*,biblio*,extras*,mdbtools*,scsolver*} ;
do 
	echo "Copying to source tree: $i"
	cp $i ./src 
done;
echo

## Build and Install
make $MAKE_FLAGS -j1 || exit 1
cd bin ; 
OODESTDIR=$PKG ./package-ooo || exit 1

# 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.0.png . ;
  done
)

# Make sure our icons specify that we're using 3.0 (and not 2.4)
# since both can exist on the same system at once
for i in $PKG/usr/share/applications/*.desktop ;
do 
   sed -i '/^Name/s/$/ 3.0/g' $i; 
done;

# Preserve files
mv $PKG/etc/bash_completion.d/ooffice3.0.sh $PKG/etc/bash_completion.d/ooffice3.0.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

## Copy extra documentation into package.
mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION
for i in README README.html LICENSE LICENSE.html THIRDPARTYLICENSEREADME.html ; do
  mv -f $PKG/usr/$LIBDIR/ooo-3.0/$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.tgz || exit 1

## Cleanup
[ "$NOCLEANUP" = "0" ] && {
  rm -rf $PKG $TMP/ooo-build-$VERSION
}
