#!/bin/sh

test -z "$TMP" && TMP=/tmp
PREFIX=/usr/local

usage()
{
	cat << EOF
Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [$PREFIX]

By default, 'make install' will install all the files in
'$PREFIX/bin', '$PREFIX/lib' etc.  You can specify
an installation prefix other than '$PREFIX' using '--prefix',
for instance '--prefix=$HOME'.


Platform:
  --platform=PLATFORM     select platform specific Makefile

Use a file of your choosing from the Makefiles directory.
Default: autodetect.


Optional Packages:
  --with-gdbm             enable trivial Gdbm queries
  --with-lago             enable Lago database queries
  --with-msql             enable MiniSQL database queries
  --with-mysql            enable Mysql database queries
  --with-sqlite           enable Sqlite database queries
  --with-sqlite3          enable Sqlite version 3 database queries
  --with-mimer            enable Mimer database support
  --with-postgres         enable Postgres database queries
  --with-oracle           enable Oracle database queries
  --with-odbc=library     enable database queries over ODBC

Report bugs to <ulric@siag.nu>.
EOF

	exit
}

DIRS=

trylib()
{
        echo "int main(){main();}" > tryconf.c
        gcc tryconf.c $DIRS "$1" $LDFLAGS > /dev/null 2>&1
}

tryheader()
{
	cat < EOF > tryconf.c
#include <$1>
int x;
EOF
	gcc tryconf.c $LDFLAGS > /dev/null 2>&1
}

tryprog()
{
	PROG=`which $1`
	test ! -z "$PROG" -a -x "$PROG"
}

if trylib -lsocket; then
	LDFLAGS="$LDFLAGS -lsocket"
	LDFLAGS_CFG="$LDFLAGS_CFG -lsocket"
fi

if trylib -lnsl; then
	LDFLAGS="$LDFLAGS -lnsl"
	LDFLAGS_CFG="$LDFLAGS_CFG -lnsl"
fi

UNAME=`uname`
case "$UNAME" in
Darwin )
	PLATFORM=Darwin
	;;
Linux )
	PLATFORM=Linux
	;;
* )
	PLATFORM=Other
	;;
esac

CFLAGS=-Wall

while test $# != 0; do
	case "$1" in
	--help | -h )
		usage
		;;
	--prefix=* )
		PREFIX=`echo "$1"|cut -f 2- -d =`
		echo "PREFIX=$PREFIX"
		;;
	--platform=* )
		PLATFORM=`echo "$1"|cut -f 2- -d =`
		echo "PLATFORM=$PLATFORM"
		;;
	--with-gdbm )
		echo "With gdbm"
		LDFLAGS_CFG="$LDFLAGS_CFG -lgdbm"
		if trylib -lgdbm; then
			echo "gdbm found"
			LDFLAGS="$LDFLAGS -lgdbm"
			CFLAGS="$CFLAGS -DHAVE_LIBGDBM"
		else
			echo "gdbm not found"
			exit 1
		fi
		;;
	--with-lago )
		echo "With lago"
		if test -d /usr/local/lago/lib; then
			LDFLAGS="$LDFLAGS -L/usr/local/lago/lib"
			LDFLAGS_CFG="$LDFLAGS_CFG -L/usr/local/lago/lib"
		fi
		LDFLAGS_CFG="$LDFLAGS_CFG -llago"
		if trylib -llago; then
			echo "lago found"
			LDFLAGS="$LDFLAGS -llago"
			CFLAGS="$CFLAGS -DHAVE_LIBLAGO"
		else
			echo "lago not found"
			exit 1
		fi
		;;
	--with-msql )
		echo "With msql"
		if test -d /usr/local/Hughes; then
			LDFLAGS="$LDFLAGS -L/usr/local/Hughes/lib"
			LDFLAGS_CFG="$LDFLAGS_CFG -L/usr/local/Hughes/lib"
			CFLAGS="$CFLAGS -I/usr/local/Hughes/include"
			CFLAGS_CFG="$CFLAGS_CFG -I/usr/local/Hughes/include"
		fi
		LDFLAGS_CFG="$LDFLAGS_CFG -lmsql"
		if trylib -lmsql; then
			echo "msql found"
			LDFLAGS="$LDFLAGS -lmsql"
			CFLAGS="$CFLAGS -DHAVE_LIBMSQL"
		else
			echo "msql not found"
			exit 1
		fi
		;;
	--with-mysql )
		echo "With mysql"
		if tryprog mysql_config; then
			echo "mysql_config found"
			LDFLAGS_CFG="$LDFLAGS_CFG `mysql_config --libs`"
			LDFLAGS="$LDFLAGS `mysql_config --libs`"
			CFLAGS_CFG="$CFLAGS_CFG `mysql_config --cflags`"
			CFLAGS="$CFLAGS `mysql_config --cflags`"
			CFLAGS="$CFLAGS -DHAVE_LIBMYSQLCLIENT"
		else
			echo "mysql_config not found"
			exit 1
		fi
		;;
	--with-sqlite )
		echo "With sqlite"
		if trylib -lsqlite; then
			echo "sqlite found"
			LDFLAGS="$LDFLAGS -lsqlite"
			LDFLAGS_CFG="$LDFLAGS_CFG -lsqlite"
			CFLAGS="$CFLAGS -DHAVE_LIBSQLITE"
		else
			echo "sqlite not found"
			exit 1
		fi
		;;
	--with-sqlite3 )
		echo "With sqlite3"
		if trylib -lsqlite3; then
			echo "sqlite3 found"
			LDFLAGS="$LDFLAGS -lsqlite3"
			LDFLAGS_CFG="$LDFLAGS_CFG -lsqlite3"
			CFLAGS="$CFLAGS -DHAVE_LIBSQLITE3"
		else
			echo "sqlite3 not found"
			exit 1
		fi
		;;
	--with-mimer )
		echo "With mimer"
		LDFLAGS_CFG="$LDFLAGS_CFG -lmimer"
		if trylib -lpthread; then
			echo "pthread found"
			LDFLAGS_CFG="-lpthread $LDFLAGS_CFG"
			LDFLAGS="-lpthread $LDFLAGS"
		fi
		if trylib -lmimer; then
			echo "mimer found"
			LDFLAGS_CFG="-lmimer $LDFLAGS"
			LDFLAGS="-lmimer $LDFLAGS"
			CFLAGS="$CFLAGS -DHAVE_LIBMIMER"
		else
			echo "mimer not found"
			exit 1
		fi
		;;
	--with-postgres )
		echo "With postgres"
		if test -d /usr/local/pgsql; then
			CFLAGS_CFG="$CFLAGS_CFG -I/usr/local/pgsql/include"
			LDFLAGS_CFG="$LDFLAGS_CFG -L/usr/local/pgsql/lib -lpq"
			CFLAGS="$CFLAGS -I/usr/local/pgsql/include"
			LDFLAGS="$LDFLAGS -L/usr/local/pgsql/lib"
		fi
		if trylib -lpq; then
			echo "pq found"
			LDFLAGS="$LDFLAGS -lpq"
			CFLAGS="$CFLAGS -DHAVE_LIBPQ"
		else
			echo "pq not found"
		fi
		;;
	--with-oracle )
		echo "With oracle"
		CFLAGS_CFG="$CFLAGS_CFG -L$ORACLE_HOME/rdbms/demo"
		LDFLAGS_CFG="$LDFLAGS_CFG -L$ORACLE_HOME/lib -lclntsh"
		CFLAGS="$CFLAGS -I$ORACLE_HOME/rdbms/demo"
		LDFLAGS="$LDFLAGS -L$ORACLE_HOME/lib"
		if trylib -lclntsh; then
			echo "clntsh found"
			LDFLAGS="$LDFLAGS -lclntsh"
			CFLAGS="$CFLAGS -DHAVE_LIBCLNTSH"
		else
			echo "clntsh not fond"
			exit 1
		fi
		;;
	--with-odbc* )
		echo "enable database queries over ODBC"
		ODBCLIB=`echo "$1"|cut -f 2- -d =`
		test -z "$ODBCLIB" && ODBCLIB=odbc
		echo "ODBCLIB=$ODBCLIB"
		if trylib -l$ODBCLIB; then
			echo "$ODBCLIB found"
			LDFLAGS="$LDFLAGS -l$ODBCLIB"
			if tryheader windows.h; then
				CFLAGS="$CFLAGS -DHAVE_WINDOWS_H"
			fi
			CFLAGS="$CFLAGS -DHAVE_LIBODBC"
		else
			echo "$ODBCLIB not found"
			exit 1
		fi
		;;
	* )
		usage
		;;
	esac
	shift
done

rm -f Makefile

echo "LDFLAGS = $LDFLAGS" >> Makefile
echo "CFLAGS = $CFLAGS" >> Makefile
echo "LDFLAGS_CFG = $LDFLAGS_CFG" >> Makefile
echo "CFLAGS_CFG = $CFLAGS_CFG" >> Makefile
echo "PREFIX = $PREFIX" >> Makefile

cat config.in >> Makefile

echo "$PLATFORM ($UNAME)"

if test ! -s "Makefiles/$PLATFORM"; then
	echo "No Makefile for $PLATFORM"
	exit 1
fi

cat "Makefiles/$PLATFORM" >> Makefile

echo '.all: $(SHAREDLIB) $(STATICLIB) $(PROGS)' >> Makefile

rm -f a.out tryconf.c
