#!/bin/sh

# IDs officaly assigned
DEV_VENDOR=0
DEV_VENDOR_NAME='RoarAudio'
#--------

TF_C=testit.c
TF_E=./testit
LDPATH=''
INCPATH=''

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

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

BUILD_SHARED=true

TARGET_WIN32=false
TARGET_MICROCONTROLLER=false

DRIVER=''
DRIVER_LIBS=''

echo -n "checking for version of this package... "
VERSION=`head -n 1 ChangeLog | cut -d' ' -f2`
echo "$VERSION"

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 '--ldpath DIR                - Add DIR to (compile time) search list for libs'
   echo '--incpath DIR               - Add DIR to search list for headers'
   echo '--addpath DIR               - Add DIR/lib to lib, DIR/include to header search list'
   echo
   echo '--cc CC                     - Set name of C compiler (CC) to CC'
   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 '--distribution-version-string STRING'
   echo '                            - Sets distribution part of version string'
   echo
   echo '--driver DRIVER             - Set the driver to use'
   echo
   echo '--target-win32              - Compile for win32'
   echo '--target-microcontroller    - Set Options for mircocontrollers without a OS'
   exit 0;
  ;;
  '--ldpath')
   LDPATH="$LDPATH -L$2"
   shift;
  ;;
  '--incpath')
   INCPATH="$INCPATH -I$2"
   shift;
  ;;
  '--addpath')
   LDPATH="$LDPATH -L$2/lib/"
   INCPATH="$INCPATH -I$2/include/"
   shift;
  ;;
  '--cc')
   CC="$2"
   shift;
  ;;
  '--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)
  ;;
####################################
  '--distribution-version-string')
   DISTRIBUTION_VERSION_STRING="$2"
   shift;
  ;;
  '--driver')
   DRIVER="$2"
   shift;
  ;;
  '--target-win32')
   TARGET_WIN32=true
  ;;
  '--target-microcontroller')
   TARGET_MICROCONTROLLER=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'
 BUILD_SHARED=false
 [ "$DRIVER" = '' ] && DRIVER='WMM'
elif [ "`uname -s`" = 'OpenBSD' ]
then
 echo "Adding OpenBSD build arguments..."
 [ "$DRIVER" = '' ] && DRIVER='OSS'
fi

if $TARGET_MICROCONTROLLER
then
 echo "Adding microcontroller build arguments..."
 BUILD_SHARED=false
fi

DRIVER=`echo "$DRIVER" | tr a-z A-Z`
case "$DRIVER" in
 'MUROAR')
  DRIVER_LIBS='$(lib_muroar)'
 ;;
 'ESD')
  DRIVER_LIBS='-lesd'
 ;;
 'LIBAO')
  DRIVER_LIBS='$(lib_ao)'
 ;;
 'OSS')
  : # no need to do anything
  # NOTE: some systems need -lossaudio or simular.
  #       users need to pass it in this case DRIVER_LIBS=-lossaudio make ...
  DRIVER_LIBS='$(lib_ossaudio)'
 ;;
 'WMM')
  DRIVER_LIBS='$(lib_winmm)'
 ;;
 'SNDIO')
  DRIVER_LIBS='-lsndio'
 ;;
 'TINYALSA')
  DRIVER_LIBS='-ltinyalsa'
 ;;
esac


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

# Check for -Wextra
#Wextra
echo -n "checking if compiler supports -Wextra... "
echo 'int main (void) { return 0; }' > $TF_C
if $CCTF -Wextra 2> /dev/null;
then
 echo yes
 Wextra=true
else
 echo no
 Wextra=false
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 "EMPTY="
 echo "VERSION=$VERSION"
 echo "DEV_VENDOR=$DEV_VENDOR"
 echo "DEV_VENDOR_NAME=$DEV_VENDOR_NAME"
 echo "DEV_VENDOR_STRING=$DEV_VENDOR/$DEV_VENDOR_NAME"
 if [ "$DISTRIBUTION_VERSION_STRING" = '' ]
 then
  echo "DISTRIBUTION_VERSION_STRING="
 else
  echo "DISTRIBUTION_VERSION_STRING=\$(EMPTY) ($DISTRIBUTION_VERSION_STRING)"
 fi
 if [ "$DRIVER" = '' ]
 then
  echo "DRIVER_def="
 else
  echo "DRIVER_def=-DMUROARD_FEATURE_DRIVER=MUROARD_DRIVER_$DRIVER"
 fi
 echo "DRIVER_LIBS+=$DRIVER_LIBS"
 echo
 echo "SHARED=$SHARED"
 echo "SHARED_CF=$SHARED_CF"
 echo "SHARED_SUFFIX=$SHARED_SUFFIX"
 $fPIC && echo 'fPIC=-fPIC'
 $Wextra && echo 'Wextra=-Wextra'
 echo "BUILD_SHARED=$BUILD_SHARED"
 echo
 echo "CC=$CC"
 echo "RANLIB=$RANLIB"
 echo "LDPATH=$LDPATH"
 echo "INCPATH=$INCPATH"
 echo
 echo "CFLAGS=$CFLAGS"
 echo "LDPATH=$LDPATH"
 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
 $TARGET_MICROCONTROLLER && echo "TARGET_MICROCONTROLLER=-DTARGET_MICROCONTROLLER"
} >&4

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

/*
 * Logfile for configure script $Revision: 1.19 $ of µRoarD
 */

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 TARGET_MICROCONTROLLER
 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=''

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

 shift;

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

 while [ "$1" != '' ]
 do
  echo "#include <$1>" >> $TF_C
  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

 if [ "$R" = '0' ]
 then
  echo 'yes'
  echo "LIB($name) WAS FOUND" >&5
  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" >&5
 fi

 return $R
}


test_lib         DECnet        dnet             -- sys/socket.h netdnet/dn.h netdnet/dnetdb.h
test_lib         DECnetDaemon  dnet_daemon dnet -- sys/socket.h netdnet/dn.h netdnet/dnetdb.h
test_lib         WinSockP0     wsock32          -- winsock2.h
test_lib         WinSockP1     ws2_32           -- winsock2.h
test_lib         libao         ao               -- ao/ao.h
test_lib         BSDOSS        ossaudio         -- sys/ioctl.h
test_lib         libwinmm      winmm            -- windows.h mmsystem.h
test_lib         libvorbisfile vorbisfile       -- vorbis/vorbisfile.h
test_lib         muRoar        muroar           -- muroar.h
if [ "$?" != '0' ]
then
 echo "Error: can not find libmuroar" >&2
 exit 1
fi


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
