#!/bin/sh

TF_C=testit.c
TF_E=./testit

PREFIX='/usr/local'
PREFIX_BIN=''
PREFIX_LIB=''
PREFIX_INC=''
PREFIX_MAN=''

SHARED='-shared'
SHARED_CF=''
SHARED_SUFFIX='.so'
fPIC=true

TARGET_WIN32=false

echo -n "checking for C compiler... "
if [ "$CC" != '' ]
then
 echo $CC
else
 CC=$(which gcc cc 2> /dev/null | grep ^/ | head -n 1)
 if [ "$CC" = '' ]
 then
  echo 'none'
  exit 1;
 fi
 echo $CC
fi

echo -n "checking for ranlib... "
if [ "$RANLIB" != '' ]
then
 echo $RANLIB
else
 _guess=`echo $CC | sed 's/[gp]*cc\(-.*\)*//'`
 RANLIB=$(which ${_guess}ranlib ranlib 2> /dev/null | grep ^/ | head -n 1)
 if [ "$RANLIB" = '' ]
 then
  echo 'none'
 fi
 echo $RANLIB
fi

echo -n "checking for sysname... "
SYSNAME=$(uname -s)
echo "$SYSNAME"

while [ "$1" != '' ]
do
 case "$1" in
  '--help'|'-h')
   echo '--help                      - This Help'
   echo
   echo '--prefix DIR                - Set general prefix (default: '"$PREFIX"')'
   echo '--prefix-bin DIR            - Set prefix for binarys (default: $PREFIX/bin)'
   echo '--prefix-lib DIR            - Set prefix for librarys (default: $PREFIX/lib)'
   echo '--prefix-inc DIR            - Set prefix for include files (default: $PREFIX/include)'
   echo '--prefix-man DIR            - Set prefix for manpages (default: $PREFIX/share/man)'
   echo
   echo '--target-win32              - Compile for win32'
   exit 0;
  ;;
  '--prefix')
   PREFIX="$2"
   shift;
  ;;
  '--prefix-bin')
   PREFIX_BIN="$2"
   shift;
  ;;
  '--prefix-lib')
   PREFIX_LIB="$2"
   shift;
  ;;
  '--prefix-inc')
   PREFIX_INC="$2"
   shift;
  ;;
  '--prefix-man')
   PREFIX_MAN="$2"
   shift;
  ;;
####################################
# autof* options block:
  '--prefix=*')
   PREFIX=$(echo "$1" | cut -d= -f2)
  ;;
  '--prefix-bin=*')
   PREFIX_BIN=$(echo "$1" | cut -d= -f2)
  ;;
  '--prefix-lib=*')
   PREFIX_LIB=$(echo "$1" | cut -d= -f2)
  ;;
  '--prefix-inc=*')
   PREFIX_INC=$(echo "$1" | cut -d= -f2)
  ;;
  '--prefix-man=*')
   PREFIX_MAN=$(echo "$1" | cut -d= -f2)
  ;;
####################################
  '--target-win32')
   TARGET_WIN32=true
  ;;
  *)
   echo "Error: unknown option: $1" >&2;
   echo "Try: $0 --help" >&2;
   exit 1;
  ;;
 esac;

 shift;
done

exec 4> Makefile.conf 5> config.log

TARGET_WIN32=`echo  "$SYSNAME" | if grep MINGW32 > /dev/null; then echo true; else echo $TARGET_WIN32; fi`

if $TARGET_WIN32
then
 echo "Adding win32 build arguments..."
 fPIC=false
 SHARED_SUFFIX='.dll'
fi

[ "$PREFIX_BIN"  = '' ] && PREFIX_BIN="$PREFIX/bin/"
[ "$PREFIX_LIB"  = '' ] && PREFIX_LIB="$PREFIX/lib/"
[ "$PREFIX_INC"  = '' ] && PREFIX_INC="$PREFIX/include/"
[ "$PREFIX_MAN"  = '' ] && PREFIX_MAN="$PREFIX/share/man/"

{
 echo "SHARED=$SHARED"
 echo "SHARED_CF=$SHARED_CF"
 echo "SHARED_SUFFIX=$SHARED_SUFFIX"
 $fPIC && echo 'fPIC=-fPIC'
 echo
 echo "CC=$CC"
 echo "RANLIB=$RANLIB"
# echo "LDPATH=$LDPATH"
# echo "INCPATH=$INCPATH"
 echo
 echo "PREFIX=$PREFIX"
 echo "PREFIX_BIN=$PREFIX_BIN"
 echo "PREFIX_LIB=$PREFIX_LIB"
 echo "PREFIX_INC=$PREFIX_INC"
 echo "PREFIX_MAN=$PREFIX_MAN"
 echo
} >&4

CCTF="$CC $CFLAGS $LDFLAGS $LDPATH $INCPATH -I. -o $TF_E $TF_C"

{
 cat <<'EOF'
//config.log:

/*
 * Logfile for configure script $Revision: 1.14 $ of µRoar
 */

EOF
 echo '/* uname: ' $(uname -a) '*/'
 echo '/* Date : ' $(date)  '*/'
 echo

 echo
 echo

 echo "ARGS(): $_CARGS"

 for i in PATH SHELL CC RANLIB PKG_CONFIG SYSNAME \
          TARGET_WIN32
 do
  eval echo "BASICCONF\($i\): \$$i";
 done

 echo
 echo
} >&5


test_lib () {
 echo > $TF_C

 name="$1"
 echo -n "checking for $name... "
 echo "TEST LIB: $name" >&5
 shift;

 lib="$1"

 LIBS=''
 HEADER=''

 while [ "$1" != '--' ]
 do
  case "$1" in
   'c'|'-lc')
    :; # no need to do anything
   ;;
   '-'*)
    LIBS="$LIBS $1"
   ;;
   *)
    LIBS="-l$1"
   ;;
  esac
  shift;
 done

 shift;

 echo "LIB($name) IS TESTED USING LIBS: $LIBS" >&5

 while [ "$1" != '' ]
 do
  echo "#include <$1>" >> $TF_C
  HEADER="$HEADER $1"
  shift;
 done

 echo 'int main (void) { return 0; }' >> $TF_C

 echo "LIB($name) IS TESTED USING TEST CODE:" >&5
 echo "--- BEGIN OF CODE BLOCK ---" >&5
 cat $TF_C >&5
 echo "--- END OF CODE BLOCK ---" >&5

 echo "LIB($name) HAS COMPILER/LINKER OUTPUT:" >&5
 echo "--- BEGIN OF CHILD OUTPUT BLOCK ---" >&5
 $CCTF $LIBS >&5 2>&5;
 R=$?
 echo "--- END OF CHILD OUTPUT BLOCK ---" >&5

 echo >&4
 echo "# config for lib $name" >&4

 if [ "$R" = '0' ]
 then
  echo 'yes'
  echo "LIB($name) WAS FOUND" >&5

  # write config for headers:
  for h in $HEADER
  do
   hn=`echo $h | tr A-Z/. a-z__`
   hd=`echo $h | tr a-z/. A-Z__`
   echo "header_$hn=$h" >&4
   echo "def_header_$hn=-DHAVE_HEADER_$hd" >&4
  done

  # write config for libs:
  if [ "$lib" != 'c' ]
  then
   echo "lib_$lib=$LIBS" >&4
   echo "def_$lib=-DHAVE_LIB_"`echo $lib | tr a-z A-Z` >&4
  fi
 else
  echo 'no'
  echo "# lib $name not found" >&4
  echo "LIB($name) NOT FOUND" >&5
 fi

 return $R
}


test_lib         endian.h      c          -- endian.h
test_lib         DECnet        dnet       -- sys/socket.h netdnet/dn.h netdnet/dnetdb.h
test_lib         WinSockP0     wsock32    -- winsock2.h
test_lib         WinSockP1     ws2_32     -- winsock2.h


echo >&4
echo -n 'checking if cp supports -v... '
if cp -v --help > /dev/null 2> /dev/null
then
 echo "cp_v=-v" >&4
 echo yes
else
 echo "cp_v=" >&4
 echo no
fi

echo >&5
echo '//ll' >&5

rm -f $TF_C $TF_E

#ll
