#!/bin/bash
set -xe

######################################################
# Build script for Core 6.0                          #
######################################################

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

VERSION=1.8.15
SRCNAM=$PACKAGE-$VERSION.tar.bz2
WRKDIR=$PACKAGE-$VERSION
EXTNAM=$PACKAGE
TMPDIR=/tmp/$PACKAGE-$VERSION
OUTDIR=../

######################################################
# Prepare extension creation                         #
######################################################

# Remove dirs and files left from previous creation

rm -r -f $WRKDIR
rm -r -f $TMPDIR
rm -r -f $TMPDIR-doc
rm -r -f $TMPDIR-tools
rm -r -f $TMPDIR-dev

# 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-exceptions -fno-rtti -march=i486 -mtune=i686"
export LDFLAGS="-Wl,-Os -L/usr/local/lib -L/usr/lib"

# Unpack source in to WRK directory
tar -xf $SRCNAM
cd $WRKDIR

# Configure,Compile,Check,Install in base temp dir
./configure --prefix=/usr/local --enable-debugatr --disable-libusb --enable-libudev --enable-confdir=/usr/local/etc/reader.conf.d --enable-static --enable-shared #--enable-embedded
make
#make check
make install DESTDIR=$TMPDIR
rm -f $TMPDIR/usr/local/share/doc/pcsc-lite/README.polkit
cp GPL-3.0.txt AUTHORS COPYING ChangeLog DRIVERS HELP INSTALL NEWS README SECURITY TODO $TMPDIR/usr/local/share/doc/pcsc-lite/
install -D src/.libs/testpcsc $TMPDIR/usr/local/bin/testpcsc


# Delete compilation work directory
cd ..
rm -Rf $WRKDIR

#extra file(s)
install -D pcscd.service $TMPDIR/usr/local/etc/init.d/pcscd

# Adjust directory access rigths
#find $TMPDIR/ -type d | xargs chmod -v 755;

# 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/$PACKAGE
mv $TMPDIR/usr/local/share/man $TMPDIR-doc/usr/local/share
mv $TMPDIR/usr/local/share/doc $TMPDIR-doc/usr/local/share
#mv $TMPDIR/usr/local/share/$PACKAGE/help.txt $TMPDIR-doc/usr/local/share/$PACKAGE

# Move files to tools extension
mkdir -p $TMPDIR-tools/usr/local/bin $TMPDIR-tools/usr/local/lib
mv $TMPDIR/usr/local/lib/libpcscspy.so* $TMPDIR-tools/usr/local/lib
mv $TMPDIR/usr/local/bin/pcsc-spy $TMPDIR/usr/local/bin/testpcsc $TMPDIR-tools/usr/local/bin

#mv $TMPDIR/usr/local/share/tools $TMPDIR-tools/usr/local/share
#mv $TMPDIR/usr/local/share/$PACKAGE/help.*.txt $TMPDIR-tools/usr/local/share/$PACKAGE

# Move files to dev extension
mkdir -p $TMPDIR-dev/usr/local $TMPDIR-dev/usr/local/lib 
mv $TMPDIR/usr/local/include $TMPDIR-dev/usr/local/
mv $TMPDIR/usr/local/lib/*.la $TMPDIR/usr/local/lib/*.a $TMPDIR-dev/usr/local/lib/
mv $TMPDIR/usr/local/lib/pkgconfig $TMPDIR-dev/usr/local/lib/

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

###################################################
# Create extensions
###################################################
mksquashfs $TMPDIR $OUTDIR/$EXTNAM.tcz -noappend -no-xattrs -all-root
unsquashfs -li -ls -d 'root-dir' $OUTDIR/$EXTNAM.tcz | grep 'root-dir/' | grep -vE '^d' | awk '{print substr($6,9);}' >$OUTDIR/$EXTNAM.tcz.list
mksquashfs $TMPDIR-doc $OUTDIR/$EXTNAM-doc.tcz -noappend -no-xattrs -all-root
unsquashfs -li -ls -d 'root-dir' $OUTDIR/$EXTNAM-doc.tcz | grep 'root-dir/' | grep -vE '^d' | awk '{print substr($6,9);}' >$OUTDIR/$EXTNAM-doc.tcz.list
mksquashfs $TMPDIR-tools $OUTDIR/$EXTNAM-tools.tcz -noappend -no-xattrs -all-root
unsquashfs -li -ls -d 'root-dir' $OUTDIR/$EXTNAM-tools.tcz | grep 'root-dir/' | grep -vE '^d' | awk '{print substr($6,9);}' >$OUTDIR/$EXTNAM-tools.tcz.list
mksquashfs $TMPDIR-dev $OUTDIR/$EXTNAM-dev.tcz -noappend -no-xattrs -all-root
unsquashfs -li -ls -d 'root-dir' $OUTDIR/$EXTNAM-dev.tcz | grep 'root-dir/' | grep -vE '^d' | awk '{print substr($6,9);}' >$OUTDIR/$EXTNAM-dev.tcz.list

rm -rf $TMPDIR
rm -rf $TMPDIR-doc
rm -rf $TMPDIR-tools
rm -rf $TMPDIR-dev

pushd $OUTDIR
md5sum $EXTNAM.tcz > $EXTNAM.tcz.md5.txt
md5sum $EXTNAM-doc.tcz > $EXTNAM-doc.tcz.md5.txt
md5sum $EXTNAM-tools.tcz > $EXTNAM-tools.tcz.md5.txt
md5sum $EXTNAM-dev.tcz > $EXTNAM-dev.tcz.md5.txt
popd

###################################################
# Update info/tree/dep
###################################################
size() {
        local MIN=$[9*1024/10] # 799 and less
        local MAX=100  # 3.5 and less
        local PWR=1
        local V=$1
        local M=""
        for F in "" "K" "M" "G"; do
                M=$F
                V1=$[($1*10)/$PWR]
                R=$[$V1%10]
                V=$[$V1/10]
                [ $V1 -le $MAX ] && { [ $R -ne 0 ] && V="$V.$R"; break; }
                [ $V -lt $MIN ] && break;
                PWR=$[$PWR*1024]
        done
        echo "$V$M"
}

cp $EXTNAM.tcz.build-dep $OUTDIR/

for INFO in *.tcz.info; do
        TCZ=${INFO%%.info}
        LEN=$(stat -c%s $OUTDIR/$TCZ)
        SIZE=$(size $LEN)
        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

pushd $OUTDIR
submitqc --libs --tcz=$EXTNAM.tcz
submitqc --libs --tcz=$EXTNAM-doc.tcz
submitqc --libs --tcz=$EXTNAM-tools.tcz
submitqc --libs --tcz=$EXTNAM-dev.tcz
popd

