#!/bin/sh -e

#CCXXADDITIONALFLAGS="${CCXXADDITIONALFLAGS} -pedantic-errors"
#export CCXXADDITIONALFLAGS

run_check=false
if grep '^check:' Makefile 1>&2; then
	run_check=true
fi

test_source_code()
{
	make clean
	echo GCC="${GCC}" GXX="${GXX}"
	if [ ${run_check} = 'true' ]; then
		make check GCC="${GCC}" GXX="${GXX}" \
			|| (echo "failed GCC=${GCC} GXX=${GXX}"; exit 1)
	fi
	make all GCC="${GCC}" GXX="${GXX}" \
		|| (echo "failed GCC=${GCC} GXX=${GXX}"; exit 1)
}

if [ X"${GCC_LIST}" = X"" ]; then
	GCC_LIST='g++43:gcc43 g++42:gcc42 g++41:gcc41 g++40:gcc40 g++34:gcc34 g++33:gcc33 g++32:gcc32 gcc295:g++295 g++:gcc'
fi

for v in ${GCC_LIST}
do
	cxx=`echo "${v}" | sed s/:.*$//`
	cc=`echo "${v}" | sed s/^[^:]*://`

	if which "${cc}" > /dev/null && which "${cxx}" > /dev/null; then
		if "${cc}" -v 2> /dev/null && "${cxx}" -v 2> /dev/null; then
			GCC="${cc}" GXX="${cxx}" test_source_code
			echo
			echo "succeeded GCC=${cc} GXX=${cxx}"
			echo
		fi
	fi
done


if [ ${run_check} = 'true' ]; then
	make check GCC=gcc GXX=g++ CCXXADDITIONALFLAGS=-std=iso9899:199409
fi
/usr/bin/make all GCC=gcc GXX=g++ CCXXADDITIONALFLAGS=-std=iso9899:199409
/usr/bin/make clean

if [ ${run_check} = 'true' ]; then
	make check GCC=gcc GXX=g++ CCXXADDITIONALFLAGS=-std=iso9899:1999
fi
/usr/bin/make all GCC=gcc GXX=g++ CCXXADDITIONALFLAGS=-std=iso9899:1999
/usr/bin/make clean


if [ X`uname` = X'FreeBSD' -o X`uname` = X'NetBSD' ]; then
	echo checking BSD make

	if [ ${run_check} = 'true' ]; then
		/usr/bin/make check GCC=gcc GXX=g++
	fi
	/usr/bin/make all GCC=gcc GXX=g++
	/usr/bin/make clean

	if [ ${run_check} = 'true' ]; then
		/usr/bin/make check GCC=gcc GXX=g++
	fi
	/usr/bin/make all GCC=gcc GXX=g++
	/usr/bin/make clean
fi

make clean

echo 1>&2
echo "--------------------------------" 1>&2
if [ ${run_check} = 'true' ]; then
	echo " all tests succeeded!!" 1>&2
else
	echo " all compile succeeded!!" 1>&2
fi
echo "--------------------------------" 1>&2
echo 1>&2
