#!/bin/bash

echo
echo "***********************************"
echo "Arquivo de configuracao para o HLBR"
echo "     Configure script for HLBR"
echo "***********************************"
echo ""
echo ""

#remove the old Makefile and config.h
if [ -f "Makefile" ]; then
mv -f Makefile Makefile.old
fi
if [ -f "config.h" ]; then
mv -f config.h config.h.old
fi

#start up the config.h file
echo "#ifndef _HLBR_CONFIG_H_" >> config.h
echo "#define _HLBR_CONFIG_H_" >> config.h

#Check for the OS
echo -n "Buscando SO / Checking OS.........................."
echo "/* OS */" >> config.h
THIS_OS=`uname`
OS=""
if [ "$THIS_OS" == "Darwin" ]; then
	OS="OSX"
	echo "#define HAS_THREADS" >> config.h
	echo "THREAD=-lpthread" >> Makefile
fi
if [ "$THIS_OS" == "Linux" ]; then
	OS="LINUX"
	echo "#define HAS_THREADS" >> config.h
	echo "THREAD=-lpthread" >> Makefile
fi
if [ "$THIS_OS" == "SunOS" ]; then
	OS="SOLARIS"
	echo "#define HAS_THREADS" >> config.h
	echo "THREAD=-lpthread" >> Makefile
	echo "EXTRA_LIBS=-lsocket -lnsl" >> Makefile
fi
if [ "$THIS_OS" == "OpenBSD" ]; then
	OS="OBSD"
	echo "typedef pthread_mutex_t int;" >> config.h
	echo "typedef pthread_t int;" >> config.h
	echo "THREAD=-pthread" >> Makefile
fi

if [ "$OS" == "" ]; then
	echo "Nao posso determinar o SO / Couldn't determine OS"
	exit
fi

echo -n "#define _" >> config.h
echo -n $OS >> config.h
echo "_" >> config.h
echo "" >> config.h
echo "$OS"

#done checking the OS

#check for a c compiler
CCompiler=""
echo -n "Buscando compilador C / Checking for a C compiler.."
if [ -f "/usr/local/bin/gcc" ]; then
	CCompiler="/usr/local/bin/gcc"
	echo $CCompiler
elif [ -f "/usr/bin/gcc" ]; then
	CCompiler="/usr/bin/gcc"
	echo $CCompiler
elif [ -f "/bin/gcc" ]; then
	CCompiler="/bin/gcc"
	echo $CCompiler
fi

if [ "$CCompiler" == "" ]; then
	echo "Nao encontrado / Not found"
	exit
fi

#check the endian
echo -n "Buscando endianness / Checking endianness.........."
ENDIAN=""
cat << EOF > conftest.endian.c
#include <stdio.h>

int main() {
   long           l;
   unsigned char* c;
   
   l=0x01020304;
   c=(unsigned char*)&l;
   
   if (c[0]==0x04) {
   	printf("LITTLE\n");
   }
   else {
   	printf("BIG\n");
   }
}
EOF

$CCompiler -o conftest.endian conftest.endian.c
ENDIAN_TEST=`./conftest.endian`

rm -f conftest.endian
rm -f conftest.endian.c 

if [ "$ENDIAN_TEST" == "LITTLE" ]; then
	ENDIAN="LITTLE"
	echo "#define HLBR_LITTLE_ENDIAN" >> config.h
	echo "" >> config.h
	echo "LITTLE"
fi

if [ "$ENDIAN_TEST" == "BIG" ]; then
	ENDIAN="BIG"
	echo "#define HLBR_BIG_ENDIAN" >> config.h
	echo "" >> config.h
	echo "BIG";
fi

if [ "$ENDIAN" == "" ]; then
	echo "Falha ao determinar o endianness / Failed to determine endianness";
	exit	
fi

#done checking the endian

#select language
echo
echo '-----------------------------------------------------------'
echo 'Por favor, selecione o idioma / Please, select the language'
echo 
echo 'Portugues - Pressione p e ENTER'
echo 'English - Press ENTER'
echo '-----------------------------------------------------------'
echo
read INSTALL_LANG

if [ "$INSTALL_LANG" = "p" ]
    then echo 'INSTALL_LANG=portuguese' >> Makefile; echo 'Idioma: portugues.'
    else echo 'INSTALL_LANG=english' >> Makefile; echo 'Language: english'
fi
echo
echo

#check for a built-in daemon call
echo -n "Buscando o daemon / Checking for daemon............"
ENDIAN=""
cat >conftest.daemon.c <<EOF
#include <unistd.h>
int main(){
	daemon(0,0);
	return 0;
}
EOF
if $CCompiler -o conftest.daemon conftest.daemon.c > /dev/null 2>&1
then 
	echo "#define HAS_DAEMON" >> config.h
	echo "" >> config.h
	echo "Encontrado / Found"
else
	echo "Nao encontrado / Not found"
fi
rm -f conftest.daemon conftest.daemon.c 
#end checking for daemon

#check for a built-in freopen call
echo -n "Buscando freopen / Checking for freopen............"
cat >conftest.freopen.c <<EOF
#include <stdio.h>
int main() { freopen("/dev/null", "w", stdin); return 0; }
EOF
if $CCompiler -o conftest.freopen conftest.freopen.c > /dev/null 2>&1
then
	echo "Encontrado / Found"
        echo "#define HAS_FREOPEN" >> config.h
else
        echo "Nao encontrado / Not found"
fi
rm -f conftest.freopen conftest.freopen.c
#end checking for freopen

#check for a built-in dlopen call
echo -n "Buscando dlopen / Checking for dlopen.............."
cat >conftest.dlopen.c <<EOF
#include <unistd.h>
int main() { dlopen(0,0); return 0; }
EOF
if $CCompiler -o conftest.dlopen conftest.dlopen.c -ldl -rdynamic > /dev/null 2>&1
then
        echo "#define HAS_DLOPEN" >> config.h
        echo "" >> config.h
        echo "Encontrado / Found"
	echo "LIB_DL=-ldl" >> Makefile
	echo "LATE_BINDING=-rdynamic" >> Makefile
else
        echo "Nao encontrado / Not found"
fi
rm -f conftest.dlopen conftest.dlopen.c
#end checking for dlopen

#check for libpcre presence
echo -n "Buscando libpcre / Checking for libpcre............"
if [ -e /usr/include/pcre.h ]
then
	echo "Encontrado / Found"
else
        echo "Nao encontrado / Not found"
        exit 1
fi
#end checking for libpcre

#finish off the config.h file
echo "#ifndef TRUE" >> config.h
echo "#define TRUE	1" >> config.h
echo "#endif" >> config.h
echo "#ifndef FALSE" >> config.h
echo "#define FALSE 0" >> config.h
echo "#endif" >> config.h
echo "#ifndef NULL" >> config.h
echo "#define NULL ((void *)0)" >> config.h
echo "#endif" >> config.h
echo "" >> config.h
echo "" >> config.h
echo "#endif //ifdef hlbr" >> config.h


#add in all the stock stuff to the Makefile
cat Makefile.in >> Makefile

echo
echo
echo
echo "-------------------------------"
echo
cat ./VERSION
echo
echo "Pronto / Done."
echo
echo "-------------------------------"
echo 'Execute "# make" para compilar.'
echo 'Run "# make" to compile.'
echo "-------------------------------"
echo

#check svn presence
if [ -d "./.svn" ]; then
echo
echo -----------------------------------
echo 'ATENCAO: Estrutura do SVN presente!'
echo 'WARNING: SVN structure present!'
echo -----------------------------------
echo
echo 'Para remover / To remove: "# find|fgrep .svn|xargs rm -rf"'
echo
echo 'Saindo... / Exiting...'
echo
fi

