#!/bin/bash

# toplevel rsync destination for www targets (without trailing slash)
: ${RSYNC_DEST:=root@www.clusterlabs.org:/var/www/html}

UPLOAD=0
if [ $1 = "-u" ]; then
    UPLOAD=1; shift
fi

PACKAGE=$1; shift

function tag() {
    if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
        echo Pacemaker-$1
    else
        echo $1
    fi
}

function version() {
    echo $1 | sed s:.*-::
}

function extract() {

    TAG=$1
    VERSION=$2

    if [ $VERSION = HEAD ]; then
        rm -rf abi_dumps/$PACKAGE/${PACKAGE}_$VERSION.abi.tar.gz

    elif [ -f abi_dumps/$PACKAGE/${PACKAGE}_$VERSION.abi.tar.gz ]; then
        return
    fi

    echo "Building ABI dump for $*"
    BUILD_ROOT=.ABI-build

    rm -rf $BUILD_ROOT
    git archive --prefix $BUILD_ROOT/ $TAG | tar xv

    BUILD_ROOT=$(pwd)/$BUILD_ROOT
    DESC=$BUILD_ROOT/$VERSION.xml

    sed -i.sed 's: doc::' $BUILD_ROOT/Makefile.am

    cat <<EOF >$DESC
<?xml version="1.0" encoding="utf-8"?>
<descriptor>
<version>
    $VERSION
</version>
<headers>
        $BUILD_ROOT/root/usr/include/pacemaker/crm
</headers>
<libs>
EOF

    ( cd $BUILD_ROOT && ./autogen.sh )
    ( cd $BUILD_ROOT && ./configure  --disable-fatal-warnings )
    make -C $BUILD_ROOT V=0 DESTDIR=${BUILD_ROOT}/root install
    if [ $? -ne 0 ]; then
        echo "Build for $TAG failed. Repair, populate <libs/> and re-run: "
        echo "  abi-compliance-checker -l $PACKAGE -dump_abi $DESC"
        echo ""
        echo "To find libraries after building:"
        echo "  find $BUILD_ROOT/root -name "*.so" -print"

    else
        find $BUILD_ROOT/root -name "*.so" -print >> $DESC
    fi

    cat <<EOF >>$DESC
</libs>
</descriptor>
EOF

    abi-compliance-checker -l $PACKAGE -dump_abi $DESC \
        -dump-path abi_dumps/${PACKAGE}/${PACKAGE}_${VERSION}.abi.tar.gz
    rm -rf $BUILD_ROOT
}

for arg in $*; do
    T=$(tag $arg)
    V=$(version $T)
    extract $T $V
done

if [ $# -eq 2 ]; then
    V1=$(version $1)
    V2=$(version $2)

    abi-compliance-checker -l ${PACKAGE} \
        -d1 abi_dumps/${PACKAGE}/${PACKAGE}_${V1}.abi.tar.gz \
        -d2 abi_dumps/${PACKAGE}/${PACKAGE}_${V2}.abi.tar.gz

    if [ $UPLOAD = 1 -a -d compat_reports/pacemaker/${V1}_to_${V2} ]; then
        rsync -azxlSD --progress compat_reports/pacemaker/${V1}_to_${V2} ${RSYNC_DEST}/${PACKAGE}/abi/
    fi
fi
