#!/bin/sh
#
# This file is part of msrtool.
#
# Copyright (c) 2008 Peter Stuge <peter@stuge.se>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#

# If this is left unset, try to set the version string from the highest
# revision number of the checked out files later.
VERSION=""

REV="$(svnversion -c . 2>/dev/null)"; REV="${REV/*:}"
VERSION="${VERSION:-$REV}"

function findprog() {
	local WHAT FROMENV FILE
	WHAT="${1}"
	shift
	FROMENV="${1}"
	shift
	echo -n "searching for ${WHAT} (${*})..." 1>&2
	test -n "${FROMENV}" && {
		echo "  using environment: ${FROMENV}" 1>&2
		echo "${FROMENV}"
		exit 0
	}
	for parm in $(seq 0 $#); do
		test -z "${1}" && {
			shift
			continue
		}
		FILE="$(which "${1}" 2>/dev/null)"
		test $? -eq 0 && {
			echo "${1}"
			break
		}
		shift
	done
	test -z "${1}" && {
		echo "  not found!" 1>&2
		echo 1>&2
		echo "This is a fatal error, configure is exiting!" 1>&2
		exit 1
	}
	echo "  using ${FILE} in PATH" 1>&2
	exit 0
}

function trycompile() {
	local WHAT OUT
	WHAT="${1}"
	shift
	echo -n "finding CFLAGS for ${WHAT}... " 1>&2
	OUT="${OUT}\n${CC} ${CFLAGS} -o .config.o -c .config.c"
	OUT="${OUT}\n$(${CC} ${CFLAGS} -o .config.o -c .config.c 2>&1)"
	test $? -eq 0 && {
		echo " using: ${CFLAGS}" 1>&2
		echo "${CFLAGS}"
		exit 0
	}
	for parm in $(seq 1 $#); do
		OUT="${OUT}\n${CC} ${CFLAGS} ${1} -o .config.o -c .config.c 2>&1"
		OUT="${OUT}\n$(${CC} ${CFLAGS} ${1} -o .config.o -c .config.c 2>&1)"
		test $? -eq 0 && {
			echo " using: ${CFLAGS} ${1}" 1>&2
			echo "${CFLAGS} ${1}"
			exit 0
		} 
		shift
	done
	echo "failed!" 1>&2
	echo 1>&2
	echo -n "The following compiler commands were executed:" 1>&2
	echo -e "${OUT}\n" 1>&2
	echo "This is a fatal error, configure is exiting!" 1>&2
	echo 1>&2
	echo "You can try to fix this by manually setting CFLAGS in the environment before" 1>&2
	echo "running configure. E.g.:" 1>&2
	echo "CFLAGS=-I/opt/somedir/include ${0}" 1>&2
	echo 1>&2
	exit 1
}

function trylink() {
	local WHAT OUT
	WHAT="${1}"
	shift
	echo -n "finding LDFLAGS for ${WHAT}... " 1>&2
	OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} 2>&1"
	OUT="${OUT}\n$(${CC} -o .config .config.o ${LDFLAGS} 2>&1)"
	test $? -eq 0 && {
		echo " using: ${LDFLAGS}" 1>&2
		echo "${LDFLAGS}"
		exit 0
	}
	for parm in $(seq 1 $#); do
		OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} ${1} 2>&1"
		OUT="${OUT}\n$(${CC} -o .config .config.o ${LDFLAGS} ${1} 2>&1)"
		test $? -eq 0 && {
			echo " using: ${LDFLAGS} ${1}" 1>&2
			echo "${LDFLAGS} ${1}"
			exit 0
		}
		shift
	done
	echo "failed!" 1>&2
	echo 1>&2
	echo -n "The following linker commands were executed:" 1>&2
	echo -e "${OUT}\n" 1>&2
	echo "This is a fatal error, configure is exiting!" 1>&2
	echo 1>&2
	echo "You can try to fix this by manually setting LDFLAGS in the environment before" 1>&2
	echo "running configure. E.g.:" 1>&2
	echo "LDFLAGS=-L/opt/somedir/lib ${0}" 1>&2
	echo 1>&2
	exit 1
}

CC=$(findprog "compiler" "${CC}" gcc cc icc) || exit
INSTALL=$(findprog "install" "${INSTALL}" install ginstall) || exit

test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
CFLAGS="${CFLAGS} ${myCFLAGS} -Wall -Werror"

PREFIX="${PREFIX:-/usr/local}"

OS_ARCH=$(uname)

echo
echo "configured using the following settings:"
echo
echo "VERSION=${VERSION}"
echo "CC=${CC}"
echo "CFLAGS=${CFLAGS}"
echo "LDFLAGS=${LDFLAGS}"
echo "INSTALL=${INSTALL}"
echo "PREFIX=${PREFIX}"
echo
echo -n "creating Makefile..."
echo "# This file was automatically generated by configure" > Makefile
sed -e "s#@VERSION@#${VERSION}#g" \
	-e "s#@CC@#${CC}#g" \
	-e "s#@CFLAGS@#${CFLAGS}#g" \
	-e "s#@LDFLAGS@#${LDFLAGS}#g" \
	-e "s#@INSTALL@#${INSTALL}#g" \
	-e "s#@PREFIX@#/usr/local#g" \
	Makefile.in >> Makefile
echo "  done"
echo
