# Contributor: Roman Ustyugov <qtdevel@gmail.com>

# Use desired number here or put empty string to get HEAD
revision=""

# Use powersave
powersave=0

# Use crash handling dialog (only for KDE)
# (Not useful yet, so you may safely say 0 here)
usecrash=0

# Use whiteboarding
# CAUTION: you may see build error if you say "1" here :)
whiteboarding=0

# Use WebKit
# CAUTION: webkit is EXPERIMENTAL feature! Use it at your own risk!
usewebkit=0

#
# GENERAL SETTINGS
#
pkgname="psi-plus"

# DO NOT EDIT next two variables. These are will be changed during build process
pkgver=2179
pkgrel=1
#

pkgdesc="Psi IM Mod by psi-dev@conference.jabber.ru"
url="http://code.google.com/p/psi-dev/"
license=('GPL2')
arch=('i686' 'x86_64')
depends=('qt' 'qca' 'qca-ossl' 'qca-gnupg' 'aspell' 'libxss' 'openssl' 'dbus' 'zlib')
makedepends=('subversion' 'git')
conflicts=('psi' 'psi-svn' 'psi-git' 'psi-plus-svn' 'psi-plus-i18n-ru')
provides=('psi-plus' 'psi+' 'psi')

_svntrunk="http://psi-dev.googlecode.com/svn/trunk"
_svnmod="patches"
_gitroot__="git://git.psi-im.org/psi.git"
_gitname__="psi"
_iconsetssvntrunk="http://psi-dev.googlecode.com/svn/trunk/iconsets"
_iconsetssvnmod="iconsets"
_skinssvntrunk="http://psi-dev.googlecode.com/svn/trunk/skins"
_skinssvnmod="skins"
_certssvntrunk="http://psi-dev.googlecode.com/svn/trunk/certs"
_certssvnmod="certs"
_pluginssvntrunk="http://psi-dev.googlecode.com/svn/trunk/plugins"
_pluginssvnmod="plugins"
_langpacksvntrunk="http://psi-ru.googlecode.com/svn/trunk/"
_langpacksvnmod="psi-ru"

# options for 'make' utility for parallel compilation
MAKEOPT=${MAKEOPT:--j$((`cat /proc/cpuinfo | grep processor | wc -l`+1))}

build() {
	cd $srcdir

	# Fix package info
	pkgrel=archlinux

	[ -z $revision ] && revision=$pkgver
	msg2 "SVN revision $revision will be used"

    msg "Getting patches from SVN"
    msg "connecting to $_svntrunk/$_svnmod"
	if [ -d $srcdir/$_svnmod ] ; then
	    svn up $_svnmod -r $revision
	    msg "$srcdir/$_svnmod"
	else
	    svn checkout $_svntrunk/$_svnmod $srcdir/$_svnmod -r $pkgver
	fi
    msg "SVN Checkout done or server timeout"

    msg "Getting iconsets from SVN"
    msg "connecting to $_iconsetssvntrunk"
	if [ -d $srcdir/$_iconsetssvnmod ] ; then
	    svn up $_iconsetssvnmod -r $revision
	    msg "$srcdir/$_iconsetssvnmod"
	else
	    svn checkout $_iconsetssvntrunk $srcdir/$_iconsetssvnmod
	fi
    msg "SVN Checkout done or server timeout"

    msg "Getting skins from SVN"
    msg "connecting to $_skinssvntrunk"
	if [ -d $srcdir/$_skinssvnmod ] ; then
	    svn up $_skinssvnmod -r $revision
	    msg "$srcdir/$_skinssvnmod"
	else
	    svn checkout $_skinssvntrunk $srcdir/$_skinssvnmod
	fi
    msg "SVN Checkout done or server timeout"

    msg "Getting certs from SVN"
    msg "connecting to $_certssvntrunk"
	if [ -d $srcdir/$_certssvnmod ] ; then
	    svn up $_certssvnmod -r $revision
	    msg "$srcdir/$_certssvnmod"
	else
	    svn checkout $_certssvntrunk $srcdir/$_certssvnmod
	fi
    msg "SVN Checkout done or server timeout"

   msg "Getting plugins from SVN"
   msg "connecting to $_pluginssvntrunk"
	if [ -d $srcdir/$_pluginssvnmod ] ; then
	    svn up $_pluginssvnmod -r $revision
	    msg "$srcdir/$_pluginssvnmod"
	else
	    svn checkout $_pluginssvntrunk $srcdir/$_pluginssvnmod
	fi
    msg "SVN Checkout done or server timeout"

   msg "Getting langpack from SVN"
   msg "connecting to $_langpacksvntrunk"
	if [ -d $srcdir/$_langpacksvnmod ] ; then
	    svn up $_langpacksvnmod
	    msg "$srcdir/$_langpacksvnmod"
	else
	    svn checkout $_langpacksvntrunk $srcdir/$_langpacksvnmod
	fi
    msg "SVN Checkout done or server timeout"

    msg "Connecting to $_gitroot__ ..."
	if [ -d $srcdir/$_gitname__ ] ; then
		cd $_gitname__ && git pull origin
		msg "Updating iris ..."
		git submodule update
		msg "The local files are updated."
	  else
		git clone $_gitroot__
		cd psi
		msg "Getting iris ..."
		git submodule init
		git submodule update
	fi
   msg "GIT checkout done or server timeout"

	[ -d $srcdir/$_gitname__-build ] && rm -r $srcdir/$_gitname__-build
	cp -r $srcdir/$_gitname__ $srcdir/$_gitname__-build

    msg "Copying patches to build directory"
	mkdir $srcdir/$_gitname__-build/patches
	cp -r $srcdir/patches/* $srcdir/$_gitname__-build/patches/

    msg "Applying patches"
	cd $srcdir/$_gitname__-build/patches
	rm -f *-psi-win32-*         #useless windows patches
	rm -f *dirty-check*         #useless update check
	if [ $powersave -eq "1" ] ; then
	    cp dev/psi-reduce-power-consumption.patch psi-reduce-power-consumption.diff
	fi

	cd $srcdir/$_gitname__-build
	log=$srcdir/$_gitname__-build/PATCHING.log
	for i in $srcdir/$_gitname__-build/patches/*.diff; do
	    pn=$(basename $i)
	    msg2 "Applying '$pn'"
	    patch -p1 < "$i" >> $log  2>&1
	    if [ "$?" -ne 0 ]; then
		error "Patching failed. Please, see log at '$log'."
		return 1
	    fi
	done

	# Get program version
	ver=$(cat src/applicationinfo.cpp | awk 'BEGIN {} { ver = match($0, /PROG_VERSION "..../); if (ver) { print substr($0,RSTART+14,4); exit; }}')
	[ $usewebkit -eq "1" ] && revision=$revision"webkit"
	pkgver="$ver.$revision"
	sed "s/\(.xxx\)/.$revision/" -i src/applicationinfo.cpp || return 1

    msg "Adding extra plugins"
	cp -rf $srcdir/$_pluginssvnmod $srcdir/$_gitname__-build/src

   msg "Building $pkgname ..."
	# We use system libraries
	rm -rf third-party/qca

	# enable plugins if disabled
	sed 's/#CONFIG += psi_plugins/CONFIG += psi_plugins/' -i src/src.pro
	if [ $usecrash -eq "1" ] ; then
	    sed 's/#CONFIG += use_crash/CONFIG += use_crash/' -i src/src.pro
	    msg2 "Using crash handler: yes"
	else
	    msg2 "Using crash handler: no"
	fi

	if [ $powersave -eq "1" ] ; then
	    msg2 "Using powersave: yes"
	else
	    msg2 "Using powersave: no"
	fi

	# enable whiteboarding
	if [ $whiteboarding -eq "1" ] ; then
		sed 's/#CONFIG += whiteboarding/CONFIG += whiteboarding/' -i src/src.pro

		# fix undefined qdebug
		sed '/qDebug/d' -i ../src/sxe/sxeedit.cpp
		sed '/qDebug/d' -i ../src/sxe/sxerecord.cpp
		msg2 "Using whiteboarding: yes"
		warning "Whiteboarding is very unstable thing. Don't post bug reports about it!"
	else
		msg2 "Using whiteboarding: no"
	fi

	# Webkit setup
	if [ $usewebkit -eq "1" ] ; then
		msg2 "Using webkit: yes"
		warning "webkit is VERY COOL feature! Use it at your own risk!"
	else
		msg2 "Using webkit: no"
	fi

    msg2 "Fixing iconsets..."
	mkdir -p $srcdir/$_gitname__-build/iconsets/system/default
	cp -r $srcdir/iconsets/* $srcdir/$_gitname__-build/iconsets/

     msg2 "Running configure ..."
	./configure --prefix=/usr --release --disable-bundled-qca --disable-growl || return 1

	# Enable webkit support
	[ $usewebkit -eq "1" ] && echo "CONFIG += webkit" >> conf.pri

     msg2 "Building ..."
	make $MAKEOPT || return 1
     msg2 "Installing ..."
	make INSTALL_ROOT="$pkgdir" install || return 1

   # Copy Psi license
	install -D COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"

	cd $startdir/pkg/usr/share/psi
	msg2 "Getting iconsets and certs from psi-dev svn..."
	cp -rf $srcdir/iconsets ./
	cp -rf $srcdir/skins ./
	cp -rf $srcdir/certs ./

   # Copy langpack
   msg "Copying langpack ..."
	install -D -m 644 $srcdir/$_langpacksvnmod/*.qm ./
	install -D -m 644 $srcdir/$_langpacksvnmod/qt/*.qm ./

   msg "Building extra plugins ..."
	cd $srcdir/$_gitname__-build/src/plugins/generic
	# Create project file for extra plugins and compile them
	echo "TEMPLATE = subdirs" > extraplugins.pro
	echo -n "SUBDIRS = " >> extraplugins.pro
	ls -1 ../../../../plugins/* | grep -v testoptplugin | sed -e :a -e '$b;N;s/\n/ /;ba' >> extraplugins.pro
	qmake extraplugins.pro || return 1
	# Fix bad project name
	sed 's/screenshot\.pro/screenshotplugin\.pro/' -i Makefile
	make -j3 || return 1
	# Copy plugins
	mkdir $startdir/pkg/usr/share/psi/plugins
	find . -name "lib*plugin.so" -exec cp -f {} $startdir/pkg/usr/share/psi/plugins \;
	# Remove useless entries
	find $startdir/pkg -name ".svn" -exec rm -rf {} > /dev/null 2>&1 \;
	rm -f $startdir/pkg/usr/bin/*.debug

	rm -rf $srcdir/$_gitname__-build
}
