#!/bin/sh
# $Id: check,v 1.9 2021-01-26 06:14:21 phil Exp $
# Test a combination of include/code/libs ~sigh~
# Phil Budne
# January 2, 2012

# XXX options to enable output, run program?

## ACK! accept options in any order?
while [ "x$1" ]; do
    case "$1" in
    -r) RUN=1; shift;;
    -d) DEBUG_CHECK=1; shift;;
    -*) echo bad option $1; exit 1;;
    *) break;;
    esac
done

INCLUDES="$1"
BODY="$2"
LIBS="$3"

if [ -d /tmp ]; then
    TMP=/tmp/check$$
else
    # Android
    TMP=check$$
fi
TMP_C=${TMP}.c
TMP_ERRS=${TMP}.errs
trap "rm -f $TMP $TMP_C $TMP_ERRS" 0

rm -f $TMP $TMP_C
for I in $INCLUDES; do
    echo "#include <$I>" >> $TMP_C
done
echo "int main(int argc, char *argv[]) {" >> $TMP_C
echo "    $BODY;"	>> $TMP_C
echo "    return 0;"	>> $TMP_C
echo "}"		>> $TMP_C

if [ "x$DEBUG_CHECK" != x ]; then
    cat $TMP_C
    CHECK_OUT=$TMP_ERRS
    PS4='++ '
    set -x
else
    CHECK_OUT=/dev/null
fi

if ${CC:-cc} $CFLAGS $CPPFLAGS -o $TMP $TMP_C $LDFLAGS $LIBS >$CHECK_OUT 2>&1; then
    if [ "$RUN" ]; then
	$TMP
	exit $?
    else
	exit 0
    fi
else
    [ "x$DEBUG_CHECK" != x ] && cat $CHECK_OUT
    exit 1
fi
