#!/bin/sh

PROGRAMNAME="rhapsody"
PROGRAMVER="0.28b"

###########################################################
# Get command line parameters                             #
###########################################################

COMPILERCHOICE="gcc"
LASTPARAM=""

while [ $# -gt 0 ] ; do
	LASTPARAM=$1
	shift

	case $LASTPARAM in
		-i)
			INSTALLPATH=$1
			shift
			;;
		-h)
			ADDTLHEADERPATH=$1
			shift
			;;
		-l)
			ADDTLLIBPATH=$1
			shift
			;;
		-c)
			COMPILERCHOICE=$1
			shift
			;;
		-d)
			ALTDOCSPATH=$1
			shift
			;;
		--help)
			echo "Usage: configure [-i install-path] [-h header-path] [-l library-path]"
			echo "       [-c compiler] [-d docs-install-path] "
			echo "where  install-path is the alternate installation directory."
			echo "       header-path is the location of ncurses header files."
			echo "       library-path is the location of the ncurses library."
			echo "       docs-install-path is the alternate documentation directory."
			echo "       compiler is either \"gcc\" or the standard \"cc\"."
			echo ""
			exit
			;;
		*)
			echo "Option $LASTPARAM is not a valid command line option"
			exit -1
			;;
	esac
done


###########################################################
# Get the operating system name and version               #
###########################################################

echo ""
echo "Rhapsody IRC configure script version $PROGRAMVER."
echo "run \"configure --help\" to get a list of available configuration options."

OS=`uname -s 2>/dev/null`
OSNAME=`uname -o 2>/dev/null`
OSVER=`uname -r 2>/dev/null`
USER=`whoami 2>/dev/null`

echo "The OS appears to be $OS ($OSNAME) version $OSVER."
echo ""


if [ "$OS" = "Linux" ] ; then
	CCPATH="/usr/bin /usr/local/bin"
	CURSESPATH="/usr/include /usr/include/ncurses /usr/local/include /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses"
	GCCBASELIBPATHS="-L/usr/lib"
	GCCBASEINCPATHS="-I/usr/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "SunOS" ] ; then
	CCPATH="/usr/bin /usr/local/bin"
	CURSESPATH="/usr/include /usr/include/ncurses /usr/local/include /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses -lnsl -lsocket" 
	GCCBASELIBPATHS=""
	GCCBASEINCPATHS="-I/usr/local/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	CCBASELIBS="-lncurses -lnsl -lsocket" 
	CCBASELIBPATHS=""
	CCBASEINCPATHS="-I/usr/local/include"
	CCBASEFLAGS="-g -Wall"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "Darwin" ] ; then
	CCPATH="/usr/bin /usr/local/bin"
	CURSESPATH="/sw/include /usr/include /sw/include/ncurses /usr/include/ncurses /usr/local/include /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/sw/lib"
	GCCBASEINCPATHS="/usr/include /usr/local/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused -no-cpp-precomp"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "OpenBSD" -o $OS = "FreeBSD" -o $OS = "NetBSD" ] ; then
	CCPATH="/usr/bin /usr/local/bin"
	CURSESPATH="/usr/include /usr/include/ncurses /usr/local/include /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/lib"
	GCCBASEINCPATHS="-I/usr/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "IRIX64" ] ; then
	CCPATH="/usr/freeware/bin /usr/bin"
	CURSESPATH="/usr/freeware/include/ncurses /usr/include /usr/local/include /usr/include/ncurses /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/freeware/lib64"
	GCCBASEINCPATHS=""
	GCCBASEFLAGS="-mabi=64 -g -Wall -Wno-unused"

	CCBASELIBS="-lncurses" 
	CCBASELIBPATHS=""
	CCBASEINCPATHS=""
	CCBASEFLAGS="-mabi=64"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "IRIX" ] ; then
	CCPATH="/usr/freeware/bin /usr/bin"
	CURSESPATH="/usr/freeware/include/ncurses /usr/include /usr/local/include /usr/include/ncurses /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/freeware/lib32"
	GCCBASEINCPATHS=""
	GCCBASEFLAGS="-mabi=n32 -g -Wall -Wno-unused"

	CCBASELIBS="-lncurses" 
	CCBASELIBPATHS=""
	CCBASEINCPATHS=""
	CCBASEFLAGS="-mabi=n32 -g -Wall"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "BeOS" -o "$OS" = "Zeta" ] ; then
	CCPATH="/boot/develop/bin /bin /usr/bin /usr/local/bin"
	CURSESPATH="/boot/develop/headers /boot/develop/headers/gnu /boot/home/config/include"

	GCCBASELIBS="-lncurses -lsocket -lbind"
	GCCBASELIBPATHS="-L/boot/home/config/lib"
	GCCBASEINCPATHS="-I/boot/home/config/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	CCBASELIBS=""
	CCBASELIBPATHS=""
	CCBASEINCPATHS=""
	CCBASEFLAGS=""

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "HP-UX" ] ; then
	CCPATH="/bin /usr/bin /usr/local/bin"
	CURSESPATH="/usr/include /usr/local/include /usr/include/ncurses /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/lib -L/lib -L/usr/local/lib"
	GCCBASEINCPATHS="-I/usr/local/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	CCBASELIBS="-lncurses" 
	CCBASELIBPATHS="-L/usr/lib -L/lib -L/usr/local/lib"
	CCBASEINCPATHS="-I/usr/local/include"
	CCBASEFLAGS="-g"

	STDDOCSPATH="/usr/share/doc/rhapsody"

elif [ "$OS" = "OSF1" ] ; then
	CCPATH="/bin /usr/bin /usr/local/bin"
	CURSESPATH="/usr/include /usr/local/include /usr/include/ncurses /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/lib -L/lib -L/usr/local/lib"
	GCCBASEINCPATHS="-I/usr/include -I/usr/local/include"
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	CCBASELIBS="-lncurses" 
	CCBASELIBPATHS="-L/usr/lib -L/lib -L/usr/local/lib"
	CCBASEINCPATHS="-I/usr/include -I/usr/local/include"
	CCBASEFLAGS="-g"

	STDDOCSPATH="/usr/doc/rhapsody"

elif [ "$OSNAME" = "Cygwin" ] ; then
	CCPATH="/usr/bin /usr/local/bin"
	CURSESPATH="/usr/freeware/include/ncurses /usr/include /usr/local/include /usr/include/ncurses /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses" 
	GCCBASELIBPATHS="-L/usr/lib -L/lib"
	GCCBASEINCPATHS=""
	GCCBASEFLAGS="-g -Wall -Wno-unused"

	PROGRAMNAME="rhapsody.exe"
	STDDOCSPATH="/usr/share/doc/rhapsody"

else	
	echo "This OS is not currently supported, but I will try to make it work."
	CCPATH="/bin /sbin /usr/bin /usr/sbin/ /usr/local/bin/ /usr/local/sbin" 
	CURSESPATH="/include /usr/include /include/ncurses /usr/include/ncurses /usr/local/include /usr/local/include/ncurses"

	GCCBASELIBS="-lncurses"
	GCCBASELIBPATHS="-L/usr/lib"
	GCCBASEINCPATHS="-I/usr/include -I/include"
	GCCBASEFLAGS=""

	CCBASELIBS="-lncurses"
	CCBASELIBPATHS="-L/usr/lib"
	CCBASEINCPATHS="-I/usr/include -I/include"
	CCBASEFLAGS=""

	BASEOS=$OS
	STDDOCSPATH="/usr/share/doc/rhapsody"
fi 

###########################################################
# Set install, docs, header and lib path if not provided  #
###########################################################

if [ $USER = "root" ] ; then
	echo "Running as root."

	if [ -z "$INSTALLPATH" ] ; then 
		INSTALLPATH="/usr/local/bin"
	fi	
	if [ -z "$ALTDOCSPATH" ] ; then 
		INSTDOCSPATH="$STDDOCSPATH"
	else
		INSTDOCSPATH="$ALTDOCSPATH"
	fi

else
	echo "NOT RUNNING AS ROOT."
	if [ -z "$INSTALLPATH" ] ; then 
		INSTALLPATH="$HOME/rhapsody"
	fi	
	if [ -z "$ALTDOCSPATH" ] ; then 
		INSTDOCSPATH="$INSTALLPATH/docs"
	else
		INSTDOCSPATH="$ALTDOCSPATH"
	fi
fi
echo "Install path is \"$INSTALLPATH\"."
echo "Documentation path is \"$INSTDOCSPATH\"."	
echo "You can override the default install and document path by running:"
echo "configure -i <install-path> -d <document-path>"

if [ -n "$ADDTLHEADERPATH" ] ; then
	echo "Additional header path is \"$ADDTLHEADERPATH\""
	ADDTLHEADERPATH="-I$ADDTLHEADERPATH"
fi
if [ -n "$ADDTLLIBPATH" ] ; then
	echo "Additional library path is \"$ADDTLLIBPATH\""
	ADDTLLIBPATH="-L$ADDTLLIBPATH"
fi
echo ""



###########################################################
# Get available compilers                                 #
###########################################################

for CURRPATH in $CCPATH ; do 
	echo "Looking for compilers in $CURRPATH..."

	if [ -z "$CC" ] ; then
		CC=`ls $CURRPATH/cc 2>/dev/null`
	fi

	if [ -z "$GCC" ] ; then
		GCC=`ls $CURRPATH/gcc 2>/dev/null`
	fi
	
done

if [ -n "$GCC" -a "$COMPILERCHOICE" = "gcc" ] ; then
	echo "Found gcc in $GCC, using gcc."
	COMPILER=$GCC
	BASELIBS=$GCCBASELIBS
	BASELIBPATHS=$GCCBASELIBPATHS
	BASEINCPATHS=$GCCBASEINCPATHS
	BASEFLAGS=$GCCBASEFLAGS
elif [ -n "$CC" -a "$COMPILERCHOICE" = "cc" ] ; then
	echo "Found cc in $CC, using cc."
	COMPILER=$CC
	BASELIBS=$CCBASELIBS  
        BASELIBPATHS=$CCBASELIBPATHS  
        BASEINCPATHS=$CCBASEINCPATHS 	
	BASEFLAGS=$CCBASEFLAGS
fi

if [ -z "$COMPILER" ] ; then
	echo "No suitable compiler found or selected... stopping"
	exit 1
fi 

###########################################################
# Find ncurses.h if required                              #
###########################################################

for CURRPATH in $CURSESPATH ; do 
	echo "Looking for curses headers in $CURRPATH..."

	HEADER=`ls $CURRPATH/ncurses.h 2>/dev/null`
	if [ -n "$HEADER" ] ; then
		echo "Found ncurses.h in $CURRPATH"
		CURSESHEADERPATH="-I$CURRPATH"
		break
	fi
done

if [ -z "$CURSESHEADERPATH" ] ; then
	echo ""
	echo "WARNING: Unable to find ncurses.h. Rhapsody may not compile."
	echo "         Please check your system configuration and provide the path to" 
	echo "         the file with the -h option."
fi
			



###########################################################
# Write Makefile.inc                                      #
###########################################################

cd src

echo "OS=$OS" > Makefile.inc
echo "BASEOSNAME=$OSNAME" > Makefile.inc
echo "CC=$COMPILER" >> Makefile.inc
echo "BASELIBS=$BASELIBS" >> Makefile.inc
echo "BASELIBPATHS=$BASELIBPATHS" >> Makefile.inc
echo "BASEINCPATHS=$BASEINCPATHS $CURSESHEADERPATH $ADDTLHEADERPATH" >> Makefile.inc
echo "BASEFLAGS=$BASEFLAGS" >> Makefile.inc
echo "INSTALLPATH=$INSTALLPATH" >> Makefile.inc
echo "INSTDOCSPATH=$INSTDOCSPATH" >> Makefile.inc
echo "PROGRAMVER=$PROGRAMVER" >> Makefile.inc
echo "PROGRAMNAME=$PROGRAMNAME" >> Makefile.inc
echo


###########################################################
# Write autodefs.h                                        #
###########################################################

echo "#define INSTALL_PATH \"$INSTALLPATH\"" > autodefs.h
echo "#define DOCS_PATH \"$INSTDOCSPATH\"" >> autodefs.h
echo "#define PROGRAM_NAME \"$PROGRAMNAME\"" >> autodefs.h
echo "#define PROGRAM_VERSION \"$PROGRAMVER\"" >> autodefs.h
echo "#define OS_NAME \"$OS\"" >> autodefs.h

echo "Finished creating makefile, run 'make clean' then 'make' to compile, then"
echo "finally 'make install' to install. The installation step is optional. You"
echo "can run rhapsody from this directory once it is compiled."
