#!/bin/bash
set -e
######################################################
# Configure parameters
S=$(basename $0)
PACKAGE=${S%%.build}

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

MUPDF=1.8
MUPDFDIR="mupdf-${MUPDF}-source"
MUPDFSRC="${MUPDFDIR}.tar.gz"

######################################################
# Build
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 -flto -fuse-linker-plugin"
export CXXFLAGS="$CFLAGS -fno-exceptions -fno-rtti"
export LDFLAGS="-Wl,-Os"
export CFLAGS_MUPDF="-fPIC -shared -Os -pipe -ffunction-sections -Wl,--gc-sections -march=i486 -mtune=i686"
export LDFLAGS_MUPDF="$CFLAGS_MUPD"

# Unpack source in to WRK directory
rm -Rf "$WRKDIR" "$TMPDIR" || :

tar -xf "$SRCNAM"
pushd "$WRKDIR"

# Build MU-PDF
tar -xf "$SRCDIR/$MUPDFSRC"
pushd "$MUPDFDIR"
env CFLAGS="$CFLAGS_MUPDF" LDFLAGS="$LDFLAGS_MUPDF" make HAVE_GLFW=no HAVE_CURL=no HAVE_WIN32=no build=release

# use system ones
mv build/release/libz.a build/release/libz.a.bak
mv build/release/libfreetype.a build/release/libfreetype.a.bak             
popd

# Configure
./configure --prefix=/usr/local --with-mupdf="${PWD}/$MUPDFDIR" --disable-poppler_pdf --disable-static

make

# Install
mkdir -p "$TMPDIR"
make install DESTDIR="$TMPDIR"

# Add documents
mkdir -p "$TMPDIR/usr/local/share/doc/$PACKAGE"
cp AUTHORS COPYING NEWS README HACKING "$TMPDIR/usr/local/share/doc/$PACKAGE/"
cp "$MUPDFDIR/README" "$TMPDIR/usr/local/share/doc/$PACKAGE/README.mupdf"
cp "$MUPDFDIR/COPYING" "$TMPDIR/usr/local/share/doc/$PACKAGE/COPYING.mupdf"

# Add MAN-page (so pandoc is not needed)
tar -xjf "${SRCDIR}/${PACKAGE}-man-${VERSION}.tar.bz2" -C "$TMPDIR/usr/local/share/"

popd
rm -Rf "$WRKDIR"

# Strip executables
find $TMPDIR | xargs file | grep ELF | cut -f 1 -d : | while read F; do
  test -w "$F" && unset RO || { chmod u+w "$F"; RO="1"; }
  strip --strip-unneeded "$F"
  test -n "$RO" && chmod u-w "$F"
  true
done

######################################################
# Split to set of extensions
rm -Rf "$TMPDIR-doc" "$TMPDIR-locale" "$TMPDIR-dev" "$TMPDIR-mupdf" "$TMPDIR-libtiff" || :

#rm unused
rm ${TMPDIR}/usr/local/lib/flviewer/*.la

# Move files to dev extension
mkdir -p "$TMPDIR-dev/usr/local" "$TMPDIR-dev/usr/local/lib" "$TMPDIR-dev/usr/local/share/doc/$PACKAGE"
mv "$TMPDIR/usr/local/include" "$TMPDIR-dev/usr/local/"
mv "$TMPDIR/usr/local/lib/pkgconfig" "$TMPDIR-dev/usr/local/lib/"
mv "$TMPDIR/usr/local/share/doc/$PACKAGE/HACKING" "$TMPDIR-dev/usr/local/share/doc/$PACKAGE"

# plugin libtiff
mkdir -p "$TMPDIR-libtiff/usr/local/lib/flviewer"
mv "$TMPDIR/usr/local/lib/flviewer/fvp_libtiff.so" "$TMPDIR-libtiff/usr/local/lib/flviewer/"

# plugin mupdf
mkdir -p "$TMPDIR-mupdf/usr/local/lib/flviewer" "$TMPDIR-mupdf/usr/local/share/doc/$PACKAGE"
mv "$TMPDIR/usr/local/lib/flviewer/fvp_mupdf.so" "$TMPDIR-mupdf/usr/local/lib/flviewer/"
mv "$TMPDIR/usr/local/share/doc/$PACKAGE/README.mupdf" "$TMPDIR-mupdf/usr/local/share/doc/$PACKAGE/"
mv "$TMPDIR/usr/local/share/doc/$PACKAGE/COPYING.mupdf" "$TMPDIR-mupdf/usr/local/share/doc/$PACKAGE/"

# Move files to locale extension
mkdir -p "$TMPDIR-locale/usr/local/share"
mv "$TMPDIR/usr/local/share/locale" "$TMPDIR-locale/usr/local/share"

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

# if empty one
rmdir "$TMPDIR/usr/local/lib/$PACKAGE" || :
rmdir "$TMPDIR/usr/local/lib" || :
rmdir "$TMPDIR/usr/local/share/man" || :
rmdir "$TMPDIR/usr/local/share/doc" || :
rmdir "$TMPDIR/usr/local/share" || :

###################################################
# Create extensions
mkdir -p "$OUTDIR"

mksquashfs $TMPDIR $OUTDIR/$EXTNAM.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-doc $OUTDIR/$EXTNAM-doc.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-locale $OUTDIR/$EXTNAM-locale.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-dev $OUTDIR/$EXTNAM-dev.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-dev $OUTDIR/$EXTNAM-dev.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-mupdf $OUTDIR/$EXTNAM-mupdf.tcz -noappend -no-xattrs -all-root
mksquashfs $TMPDIR-libtiff $OUTDIR/$EXTNAM-libtiff.tcz -noappend -no-xattrs -all-root

rm -rf $TMPDIR
rm -rf $TMPDIR-doc
rm -rf $TMPDIR-locale
rm -rf $TMPDIR-dev
rm -rf $TMPDIR-libtiff
rm -rf $TMPDIR-mupdf

###################################################
# 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
submitqc --libs --tcz=$EXTNAM-locale.tcz
submitqc --libs --tcz=$EXTNAM-dev.tcz
submitqc --libs --tcz=$EXTNAM-libtiff.tcz
submitqc --libs --tcz=$EXTNAM-mupdf.tcz
popd
