#!/bin/sh

set -e

export HOME="${AUTOPKGTEST_TMP:-/tmp}"

# We want to test if the user can build all the packages and applications that
# we ship in Debian.

# Quite a lot of the packages fail, most (if not all) on broken dependencies
# (that are not even in the lazarus source), but it seems that the result is
# not everywhere the same. Building them, but ignoring the failure.

FILES="$(find /usr/lib/lazarus/ -name "*.lpk" | sort)"

FAILED=""
for FILE in $FILES ; do
    echo
    echo "CI building $FILE"
    lazbuild --max-process-count=1 -B --verbose $FILE || FAILED="${FAILED} $FILE"
done

NOT_EXPECTED=""
EXPECTED=""
for FILE in $FAILED ; do
    case ${FILE##*/} in
        LazActiveX.lpk) EXPECTED="$EXPECTED $FILE" ;;
        fppkgpackagemanager.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lazidefpreport.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lclfpreport.lpk) EXPECTED="$EXPECTED $FILE" ;;
        fpvectorial2aggpaspkg.lpk) EXPECTED="$EXPECTED $FILE" ;;
        fpvectorialpkg.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lazwebextra.lpk) EXPECTED="$EXPECTED $FILE" ;;
        gdbmitestutils.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lazfpreportdesign.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lr_officeimport.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lrspreadsheetexport.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lazreportpdfexport.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lr_zeosdb.lpk) EXPECTED="$EXPECTED $FILE" ;;
        pascalscriptfcl.lpk) EXPECTED="$EXPECTED $FILE" ;;
        tachartfpvectorial.lpk) EXPECTED="$EXPECTED $FILE" ;;
        tachartbgra.lpk) EXPECTED="$EXPECTED $FILE" ;;
        lazdebugtestbase.lpk) EXPECTED="$EXPECTED $FILE" ;;
        *) NOT_EXPECTED="$NOT_EXPECTED $FILE" ;;
    esac
done

if [ -n "${EXPECTED}" ] ; then
    echo
    echo "The following files failed expectedly:"
    for FILE in $EXPECTED ; do
        echo $FILE
    done
fi

if [ -n "${NOT_EXPECTED}" ] ; then
    echo
    echo "The following files failed unexpectedly:"
    for FILE in $NOT_EXPECTED ; do
        echo $FILE
    done
    exit 1
fi
