#!/bin/bash
set -xe
######################################################
# Build script for Core 6.0                          #
######################################################

######################################################
# Configure extension creation parameters            #
######################################################
S=$(basename $0)
PACKAGE=${S%%.build}

VERSION=0.9.1
SRCNAM=$PACKAGE-$VERSION.tar.bz2
WRKDIR=$PACKAGE-$VERSION
EXTNAM=$PACKAGE
TMPDIR=/tmp/$PACKAGE-$VERSION
OUTDIR=$PWD/../../build/$(version)
SRCDIR=$PWD

ENTRIES=(fltk qt4 gtk-2 curses)

######################################################
# Prepare extension creation                         #
######################################################
rm -r -f $WRKDIR
sudo rm -r -f $TMPDIR
sudo rm -r -f $TMPDIR-doc
for ENTRY in ${ENTRIES[@]}; do
	sudo rm -Rf $TMPDIR-$ENTRY
done

# Crete temporary directory
mkdir -p $TMPDIR

######################################################
# Compile extension                                  #
######################################################

# Export variables needed for compilation
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
export CPPFLAGS="-I/usr/local/include -I/usr/include"
export CFLAGS="-Os -pipe -march=i486 -mtune=i686"
export CXXFLAGS="-Os -pipe -fno-rtti -march=i486 -mtune=i686 -fexceptions -std=c++11"
export LDFLAGS="-Wl,-Os"

# Unpack source in to WRK directory
tar -xf $SRCNAM
pushd $WRKDIR
tar -xf "$SRCDIR/$PACKAGE-$VERSION-fltk.tar.bz2"
patch -p1 < "$SRCDIR/$PACKAGE-$VERSION-1-fltk.patch"
tar -xf "$SRCDIR/$PACKAGE-$VERSION-fltk-configure.tar.bz2"
patch -p1 < "$SRCDIR/$PACKAGE-$VERSION-2-configure-qt4.patch"

cp ./tty/pinentry-tty.c ./fltk/pinentry-tty.c
touch ./fltk/pinentry-tty.h
patch -p1 < "$SRCDIR/$PACKAGE-$VERSION-3-fallback-tty.patch"

# Configure,Compile,Check,Install in base temp dir
PREFIX=/usr/local
./configure --prefix=/usr/local --enable-pinentry-tty --enable-pinentry-gtk2 --enable-pinentry-qt4 --enable-pinentry-fltk --enable-fallback-curses
make
make install DESTDIR=$TMPDIR

# Delete compilation work directory
popd
rm -r -f $WRKDIR

# Strip executables
find $TMPDIR | xargs file | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded

# Move files to doc extension
mkdir -p $TMPDIR-doc/usr/local/share/
mv $TMPDIR/usr/local/share/info $TMPDIR-doc/usr/local/share

for ENTRY in ${ENTRIES[@]}; do
	mkdir -p $TMPDIR-$ENTRY/usr/local/bin
	mv $TMPDIR/usr/local/bin/pinentry-$ENTRY $TMPDIR-$ENTRY/usr/local/bin/

	mkdir -p $TMPDIR-$ENTRY/usr/local/tce.installed

	cat >$TMPDIR-$ENTRY/usr/local/tce.installed/$PACKAGE-$ENTRY <<EOS
#!/bin/sh
which pinentry >/dev/null 2>&1 || ln -s ${PACKAGE}-${ENTRY} /usr/local/bin/pinentry
EOS
done

unlink $TMPDIR/usr/local/bin/pinentry
# if empty one
rmdir $TMPDIR/usr/local/share || true

###################################################
# Startup script
###################################################
mkdir -p $TMPDIR/usr/local/tce.installed
cat >$TMPDIR/usr/local/tce.installed/$PACKAGE <<EOS
#!/bin/sh
which pinentry >/dev/null 2>&1 || ln -s  pinentry-tty /usr/local/bin/pinentry
EOS

###################################################
# Create extensions
###################################################
sudo chown -R root:root $TMPDIR
sudo chown root:staff $TMPDIR/usr/local/tce.installed
sudo chmod 775 $TMPDIR/usr/local/tce.installed
sudo chown tc:staff $TMPDIR/usr/local/tce.installed/*
sudo chmod 755 $TMPDIR/usr/local/tce.installed/*

mksquashfs $TMPDIR $OUTDIR/$EXTNAM.tcz -noappend -no-xattrs
mksquashfs $TMPDIR-doc $OUTDIR/$EXTNAM-doc.tcz -noappend -no-xattrs -all-root

sudo rm -rf $TMPDIR
rm -rf $TMPDIR-doc

for ENTRY in ${ENTRIES[@]}; do
	sudo chown -R root:root $TMPDIR-$ENTRY
	sudo chown root:staff $TMPDIR-$ENTRY/usr/local/tce.installed
	sudo chmod 775 $TMPDIR-$ENTRY/usr/local/tce.installed
	sudo chown tc:staff $TMPDIR-$ENTRY/usr/local/tce.installed/*
	sudo chmod 755 $TMPDIR-$ENTRY/usr/local/tce.installed/*
	mksquashfs $TMPDIR-$ENTRY $OUTDIR/$EXTNAM-$ENTRY.tcz -noappend -no-xattrs
	sudo rm -rf $TMPDIR-$ENTRY
done

###################################################
# Update info/tree/dep/build-dep
cp $EXTNAM.tcz.build-dep $OUTDIR/
for INFO in *.tcz.info; do
        TCZ=${INFO%%.info}
        SIZE=$(ls -sh "$OUTDIR/$TCZ" | cut -f1 -d' ')
        sed -re "s/\{SIZE\}/$SIZE/g" -e "s/\{TITLE\}/$TCZ/g" -e "s/\{VERSION\}/$VERSION/g" <$INFO >$OUTDIR/$INFO
        if [ -f $TCZ.tree ]; then
                cp $TCZ.tree $OUTDIR/$TCZ.tree
                cat $TCZ.tree | grep -wv "$TCZ" | sed -re 's/^[ \t]+//' | sort | uniq > $OUTDIR/$TCZ.dep
        fi
done

###################################################
# generate md5/list and check package with submitqc
pushd $OUTDIR
submitqc --libs --tcz=$EXTNAM.tcz
submitqc --libs --tcz=$EXTNAM-doc.tcz
for ENTRY in ${ENTRIES[@]}; do
	submitqc --libs --tcz=$EXTNAM-$ENTRY.tcz
done
popd
