#!/bin/sh

# Build script for Anki
# Author: Ejis <ejis@mailoo.org>

# Homepage: http://ichi2.net/anki/


set -e


SOFTNAME=anki
VERSION=1.2.7
ZENVER=70
BUILD=1

CATEGORY=extra/xap

MARCH=i486
FLAGS="-O2 -march=$MARCH -mtune=i686"

CWD=$(pwd)

PKG=$SOFTNAME-$VERSION-$MARCH-$ZENVER.$BUILD

SOFTDIR=$CWD/$SOFTNAME-$VERSION
PKGDIR=$CWD/$PKG

PKGFILE=$PKGDIR.txz
MD5=$PKGDIR.md5
SRC=$PKGDIR.src
DEP=$PKGDIR.dep

SRCFILE=$SOFTNAME-$VERSION.tgz
HOSTURL=http://zenwalk.pinguix.com/user-accounts/ejis/$CATEGORY/$SOFTNAME/$ZENVER
SRCURL=http://anki.googlecode.com/files/

SRCLINKS=($SRCURL/$SRCFILE)

DOC=(
	$SOFTDIR/ChangeLog
	$SOFTDIR/COPYING
	$SOFTDIR/CREDITS
	$SOFTDIR/README
	$SOFTDIR/README.development
	$SOFTDIR/README.translating
)

EXTRADEPS=(
	sip
	python
	pysqlite
	PyQt
	sqlalchemy
	simplejson
	numpy
	matplotlib
	mplayer
	sox
	pyaudio
	beautifulsoup
)

LESSDEPS=(
)


# Check for source files and download it if necessary

if [ ! -f $CWD/$SRCFILE ]; then
	wget -c -t 0 -T 50 -w 0 $SRCURL/$SRCFILE
fi


# Erase the previous build files

rm -rf $SOFTDIR $PKGDIR $MD5 $SRC $DEP
mkdir -p $PKG


# Build

tar -xvf $CWD/$SRCFILE

cd $SOFTDIR/libanki
python setup.py install --prefix=/usr --root=$PKGDIR
cd $SOFTDIR
python setup.py install --prefix=/usr --root=$PKGDIR


mkdir -vp $PKGDIR/usr/share/icons/hicolor/32x32/apps
mkdir -vp $PKGDIR/usr/share/applications

mv -v ./icons/$SOFTNAME.png $PKGDIR/usr/share/icons/hicolor/32x32/apps/
mv -v ./anki.desktop $PKGDIR/usr/share/applications/


# Packaging

cd $PKGDIR

mkdir -p $PKGDIR/install
mkdir -p $PKGDIR/usr/src/$SOFTNAME-$VERSION
mkdir -p $PKGDIR/usr/doc/$SOFTNAME-$VERSION


	   #|-----handy-ruler------------------------------------------------------|
cat > $PKGDIR/install/slack-desc <<EOF
$SOFTNAME: $SOFTNAME - Friendly, intelligent flashcards
$SOFTNAME:
$SOFTNAME: Anki is a spaced repetition system (SRS). It helps you remember things
$SOFTNAME: by intelligently scheduling flashcards, so that you can learn a lot of
$SOFTNAME: information with a minimum amount of effort.
$SOFTNAME: 
$SOFTNAME: 
$SOFTNAME: 
$SOFTNAME: 
$SOFTNAME: 
$SOFTNAME:
EOF


# Redundent

if [ -d $PKGDIR/usr/share/doc ]; then
	mv $PKGDIR/usr/share/doc/$SOFTNAME/* $PKGDIR/usr/doc/$SOFTNAME-$VERSION/
	rm -rvf $PKGDIR/usr/share/doc
fi

if [ -d $PKGDIR/etc ]; then
	if [ $DOTNEW == 1 ]; then
		dotnewfiles=$(find $PKGDIR/etc -type f -print -exec \
			mv {} {}.new \;)
		cat << EOF > $PKGDIR/install/doinst.sh
dotnewfiles=(${dotnewfiles[@]})

for file in \${dotnewfiles[@]}; do
	if [ ! -f \$file ]; then
		mv \$file.new \$file
	fi
done
EOF
		sed -i "s:$PKGDIR/::g" $PKGDIR/install/doinst.sh
	fi
fi

find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
	xargs strip --strip-unneeded 2> /dev/null || true
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
	xargs strip --strip-unneeded 2> /dev/null || true

if [ -d $PKGDIR/usr/man ]; then
	
	( cd $PKGDIR/usr/man
		find . -type f -exec gzip -9 {} \;
		for i in $( find . -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
	)
	
fi

if [ -d $PKGDIR/usr/info ]; then
	
	rm -f $PKGDIR/usr/info/dir
	gzip -9 $PKGDIR/usr/info/*.info*
	
fi

find . -name perllocal.pod \
	-o -name ".packlist" \
	-o -name "*.bs" \
	| xargs rm -f


cp -v $CWD/build-$SOFTNAME.sh \
	$PKGDIR/usr/src/$SOFTNAME-$VERSION/

cp -rv	${DOC[@]} $PKGDIR/usr/doc/$SOFTNAME-$VERSION/


# fix permissions
find . -perm 777 -exec chmod 755 {} \;
find . -perm 775 -exec chmod 755 {} \;
find . -perm 666 -exec chmod 644 {} \;
find . -perm 664 -exec chmod 644 {} \;
find . -perm 600 -exec chmod 644 {} \;
find . -perm 444 -exec chmod 644 {} \;
find . -perm 400 -exec chmod 644 {} \;
find . -perm 440 -exec chmod 644 {} \;
find . -perm 511 -exec chmod 755 {} \;
find . -perm 711 -exec chmod 755 {} \;
find . -perm 555 -exec chmod 755 {} \;


fakeroot /sbin/makepkg -l y -c n $PKGFILE


cd $CWD

echo 'Creating .md5 file'
md5sum $PKG.txz > $MD5

echo 'Creating .src file'
echo "$HOSTURL/build-$SOFTNAME.sh" > $SRC
for link in ${SRCLINKS[@]}; do
	echo $link >> $SRC
done

echo 'Checking for dependencies'
deps=$(depfinder $PKGFILE)

for dep in ${EXTRADEPS[@]}; do
	deps="$deps,$dep"
done

for dep in ${LESSDEPS[@]}; do
	deps=${deps/$dep/}
done

order=$(echo ${deps//,/ } | sort -d)
echo ${order// /,} > $DEP

echo "Removing build directories"
rm -rf $SOFTDIR $PKGDIR
