#!/bin/sh
#require cc
#require cflags
#phase library
disp "Loading compile testing helper function"
rm -f compiletest.log

library_test() {
	$ECHO "$1" > compiletest.c
	$ECHO "

== START PROGRAM ==
$1
== END PROGRAM ==" >>compiletest.log
	$ECHO "== EXECUTING: $CC $FM_CFLAGS $2 -c -o compiletest.o compiletest.c $3 == " >>compiletest.log
	$CC $FM_CFLAGS $2 -c -o compiletest.o compiletest.c $3 >>compiletest.log 2>>compiletest.log
	if test "$?" = "0"; then
		rm -f compiletest.o compiletest.c
		$ECHO "== COMPILE OK ==" >>compiletest.log
		true
		return
	else
		rm -f compiletest.o compiletest.c
		$ECHO "== COMPILE FAIL ==" >>compiletest.log
		false
		return
	fi
}

shared_test() {
	$ECHO "$1" > compiletest.c
	$ECHO "

== START PROGRAM ==
$1
== END PROGRAM ==" >>compiletest.log
	$ECHO "== EXECUTING: $CC $FM_CFLAGS $FM_LDFLAGS $FM_SHAREDFLAGS $2 -o compiletest.so compiletest.c $3 == " >>compiletest.log
	$CC $FM_CFLAGS $FM_LDFLAGS $FM_SHAREDFLAGS $2 -o compiletest.so compiletest.c $3 >>compiletest.log 2>>compiletest.log
	if test "$?" = "0"; then
		rm -f compiletest.so compiletest.c
		$ECHO "== COMPILE OK ==" >>compiletest.log
		true
		return
	else
		rm -f compiletest.so compiletest.c
		$ECHO "== COMPILE FAIL ==" >>compiletest.log
		false
		return
	fi
}

compile_test() {
	$ECHO "$1" > compiletest.c
	$ECHO "

== START PROGRAM ==
$1
== END PROGRAM ==" >>compiletest.log
	$ECHO "== EXECUTING: $CC $FM_CFLAGS $FM_LDFLAGS $2 -o compiletest compiletest.c $3 == " >>compiletest.log
	$CC $FM_CFLAGS $FM_LDFLAGS $2 -o compiletest compiletest.c $3 >>compiletest.log 2>>compiletest.log
	if test "$?" = "0"; then
		$ECHO "== COMPILE OK ==" >>compiletest.log
		$ECHO "== EXECUTING: ./compiletest ==" >>compiletest.log
		./compiletest >>compiletest.log 2>>compiletest.log
		if test "$?" = "0"; then
			rm -f compiletest compiletest.c
			$ECHO "== RUN OK ==" >>compiletest.log
			true
			return
		else
			rm -f compiletest compiletest.c
			$ECHO "== RUN FAIL ==" >>compiletest.log
			false
			return
		fi
	else
		rm -f compiletest compiletest.c
		$ECHO "== COMPILE FAIL ==" >>compiletest.log
		false
		return
	fi
}

compile_test_wrapper() {
	# Args:
	# $1 - Program
	# $2 - CFLAGS
	# $3 - LDFLAGS
	# $4 - LIBS
	if (compile_test "$1" "$2 $3"  "$4" > /dev/null); then
		disp "found"
		if test "$2" != ""; then
			disp "Adding \"$2\" to CFLAGS"
			FM_CFLAGS="$FM_CFLAGS $2"
		fi
		if test "$3" != ""; then
			disp "Adding \"$3\" to LDFLAGS"
			FM_LDFLAGS="$FM_LDFLAGS $3"
		fi
		if test "$4" != ""; then
			disp "Adding \"$4\" to LIBS"
			FM_LIBS="$FM_LIBS $4"
		fi
		return 0
	else
		return 1
	fi
}
