#!/bin/sh
export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

# Always run from the directory where the script lives
cd "$(dirname "$0")" || exit 1

PLATFORM=$( uname -s )
echo "Build platform: ${PLATFORM}"

# Export for configure (cbsd_fwatch / cbsd_fwatch_linux choice, etc.)
export CBSD_PLATFORM="${PLATFORM}"

# debug memleaks/free/invalid pointer
#export CFLAGS="-g -fsanitize=address"
#export LDFLAGS="-fsanitize=address"

case "${PLATFORM}" in
	Linux)
		MAKE_CMD=$( which make )
		export CPPFLAGS="-I/usr/include"
		export LDFLAGS="-L/usr/lib"
		export LD_LIBRARY_PATH="/usr/lib"
		export C_INCLUDE_PATH="/usr/include"
		export CONFIGURE_ARGS="--with-libsqlite3 --with-libjq"
		;;
	FreeBSD)
		MAKE_CMD=$( which gmake )
		export CPPFLAGS="-I/usr/include -I/usr/local/include"
		export LDFLAGS="-L/usr/lib -L/usr/local/lib"
		export LD_LIBRARY_PATH="/usr/lib /usr/local/lib"
		export C_INCLUDE_PATH="/usr/include /usr/local/include"
		export CONFIGURE_ARGS="--with-libsqlite3 --with-libjail --with-libjq"
		;;
	DragonFly)
		MAKE_CMD=$( which gmake )
		export CPPFLAGS="-I/usr/include -I/usr/local/include -D__BSD_VISIBLE=0"
		export LDFLAGS="-L/usr/lib -L/usr/local/lib"
		export LD_LIBRARY_PATH="/usr/lib /usr/local/lib"
		export C_INCLUDE_PATH="/usr/include /usr/local/include"
		export CONFIGURE_ARGS="--with-libsqlite3 --with-libjq"
		;;
	NetBSD)
		export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/pkg/bin"
		MAKE_CMD=$( which gmake )
		export CPPFLAGS="-I/usr/include -I/usr/pkg/include"
		# Ensure /usr/pkg/lib is also searched at runtime (not only during linking).
		# On NetBSD the dynamic linker may not consult build-time LD_LIBRARY_PATH,
		# so we embed an rpath.
		export LDFLAGS="-L/usr/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib"
		export LD_LIBRARY_PATH="/usr/lib /usr/pkg/lib"
		export C_INCLUDE_PATH="/usr/include /usr/pkg/include"
		export CONFIGURE_ARGS="--with-libsqlite3 --with-libjq"
		;;
	*)
		MAKE_CMD="make"
		;;
esac

AUTORECONF_CMD=$( which autoreconf )

if [ ! -x "${MAKE_CMD}" ]; then
	echo "no such make: ${MAKE_CMD}"
	exit 1
fi
if [ ! -x "${AUTORECONF_CMD}" ]; then
	echo "no such autoreconf cmd"
	exit 1
fi

${MAKE_CMD} distclean >/dev/null 2>&1 || true
${AUTORECONF_CMD} -i
ret=$?
if [ ${ret} -ne 0 ]; then
	echo "${AUTORECONF_CMD} -i failed, errcode: ${ret}"
	exit ${ret}
fi

./configure ${CONFIGURE_ARGS}
ret=$?
if [ ${ret} -ne 0 ]; then
	echo "configure failed, errcode: ${ret}"
	exit ${ret}
fi

${MAKE_CMD} -C src
ret=$?

if [ ${ret} -ne 0 ]; then
	echo "${MAKE_CMD} error: ${ret}"
	exit ${ret}
fi
