#!/bin/sh
#
# Copyright 2016 Garrett D'Amore <garrett@damore.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom
# the Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
#
# This configure script provides the usual autoconf style interface for
# installation, but simply uses cmake.
#
SRCDIR=`dirname $0`
CURDIR=`pwd`

strip_arg()
{
	x=`echo "$1" | sed "s/[^=]*=//"`
	eval $2=\"$x\"
}

warn() {
	echo "$*" 1>&2
}

find_prog() {
	SIFS="${IFS=	 }"
	IFS=:
	for p in $PATH; do
		if [ -x ${p}/$1 ]
		then
			IFS="${SIFS}"
			echo "${p}/${1}"
			return 0
		fi
	done
	IFS="${SIFS}"
	return 1
}

need_cmake() {
	warn "This program requires CMake 2.6 or newer to build."
	warn "Obtain CMake from www.cmake.org"
	exit 1
}

help() {
	echo "This configure script is a convenience wrapper around"
	echo "CMake.  Only a limited subset of configuration options"
	echo "are supported.  For a fully featured build, use CMake".
	echo
	echo "Execute as $0 [options]"
	echo
	echo "Options supported are:"
	echo
	echo " --prefix={path}      Set installation directory prefix."
	echo " --with-cmake={path}  Location of CMake executable."
	echo
	exit 1
}

CMAKE_ARGS=()
# Argument parsing
while [ -n "$1" ]; do
	case "$1" in
	--with-cmake)
		CMAKE="$2"
		shift 2
		;;
	--with-cmake=*)
		strip_arg "$1" CMAKE
		shift
		;;
	--prefix)
		CMAKE_ARGS+=( "-DCMAKE_INSTALL_PREFIX=$2" )
		shift 2
		;;
	--prefix=*)
		strip_arg "$1" PFX
		CMAKE_ARGS+=( "-DCMAKE_INSTALL_PREFIX=$PFX" )
		shift
		;;
	*)
		help
		;;
	esac
done

if [ -z "${CMAKE}" ]; then
	CMAKE=`find_prog cmake` || need_cmake
fi

if [ -f src/nn.h ]
then
	warn "NOTE: Building in the source directory is not recommended."
fi

GENERATOR="Unix Makefiles"

"$CMAKE" "${CMAKE_ARGS[@]}" -G "$GENERATOR" $SRCDIR
