#!/bin/sh

# defaults
DEBUG=0

# parse options
while [ $# -gt 0 ]; do
  case $1 in
    --with-debug|--debug|-d)
      DEBUG=1
      ;;
    --help|-help|-h)
      echo "usage: $0 [ options ]"
      echo "available options:"
      echo "    --with-debug (or -d): enable debugging"
      echo "    --help (or -h):       show this message"
      exit 1
      ;;
    *)
      echo "Unknown option '$1', try -h for help"
      exit 1
      ;;
  esac
  shift
done

# Some known configs:
#
# uname -s   uname -r      uname -m   uname -p
# ========   ===========   ========   ========
# SunOS      5.6           sun4u      sparc
# Linux      2.2.17        i686       unknown
# FreeBSD    4.1-RELEASE   i386       i386

UNAME_S=`uname -s`
UNAME_R=`uname -r`
UNAME_M=`uname -m`
UNAME_P=`uname -p`
ARCH=${UNAME_S}-${UNAME_R}-${UNAME_M}-${UNAME_P}
GCC=`which gcc`

case "$UNAME_S" in
  Linux)
    if [ "$DEBUG" -ne 0 ]; then
      CCDBG="-g"
      LDDBG="-g"
    else
      CCDBG="-DNDEBUG"
      LDDBG=""
    fi
    CC=gcc
    CFLAGS="$CCDBG -D_UNIX -D_LINUX -Wall -I/usr/local/include"
    CXX=g++
    CXXFLAGS=${CFLAGS}
    AR=ar
    ARFLAGS="-rc"
    LD=gcc
    LDFLAGS="$LDDBG -L/usr/local/lib"
    SYSLIBS="-lpthread"
    ;;
  FreeBSD)
    case "$UNAME_R" in
      2.*)
        OSVER=20
        ;;
      3.*)
        OSVER=30
        ;;
      4.*)
        OSVER=40
        ;;
      *)
        # Assume 5.0 +
        OSVER=50
        ;;
    esac
    if [ "$DEBUG" -ne 0 ]; then
      CCDBG="-g"
      LDDBG="-g"
    else
      CCDBG="-DNDEBUG"
      LDDBG=""
    fi
    CC=gcc
    CFLAGS="$CCDBG -D_UNIX -D_BSD=$OSVER -Wall -I/usr/local/include"
    CXX=g++
    CXXFLAGS=${CFLAGS}
    AR=ar
    ARFLAGS="-rc"
    LD=gcc
    LDFLAGS="$LDDBG -pthread -L/usr/local/lib"
    SYSLIBS=""
    ;;
  SunOS)
    case "$UNAME_R" in
      5.6)
        OSVER=56
        ;;
      5.7)
        # not tested, check socklen_t and getsockopt(2)
        OSVER=57
        ;;
      5.8)
        OSVER=58
        ;;
      *)
        OSVER=1
        ;;
    esac
    # Prefer gcc to the native cc here because I don't have a native
    # compiler to test with
    if [ -n "$GCC" ]; then
      if [ "$DEBUG" -ne 0 ]; then
        CCDBG="-g"
        LDDBG="-g"
      else
        CCDBG="-DNDEBUG"
        LDDBG=""
      fi
      CC=gcc
      CFLAGS="$CCDBG -D_UNIX -D_SOLARIS=$OSVER -Wall -I/usr/local/include"
      CXX=g++
      CXXFLAGS=${CFLAGS}
      LD=gcc
      LDFLAGS="$LDDBG -L/usr/local/lib"
    else
      CC=cc
      CFLAGS="-DNDEBUG -D_UNIX -D_SOLARIS=$OSVER -I/usr/local/include"
      CXX=c++
      CXXFLAGS=${CFLAGS}
      LD=ld
      LDFLAGS="-L/usr/local/lib"
    fi
    AR=ar
    ARFLAGS="-rc"
    SYSLIBS="-lnsl -lsocket"
    ;;
  *)
    CC=cc
    CFLAGS="-DNDEBUG -D_UNIX -I/usr/local/include"
    CXX=c++
    CXXFLAGS=${CFLAGS}
    AR=ar
    ARFLAGS="-rc"
    LD=ld
    LDFLAGS="-L/usr/local/lib"
    ;;
esac

if [ ! -x "`which $CC`" ]; then
  echo "Error: compiler '$CC' not found"
  exit 1
fi

if [ "$CC" = "gcc" ]; then
  # gcc 2.7.2.3 has problems with RTTI
  # i haven't tested gcc 2.8 but assume it works
  # gcc 2.95 and later is preferred
  GCCVER=`gcc --version`
  case "$GCCVER" in
    2.7.*)
      echo "gcc 2.7 detected."
      echo "Upgrading to gcc 2.95 or later is HIGHLY recommended."
      if [ "$UNAME_S" = "SunOS" ]; then
        CFLAGS="-DSOLARIS_GCC_HACK $CFLAGS"
        CXXFLAGS="-DSOLARIS_GCC_HACK $CFLAGS"
      fi
      CXXFLAGS="$CXXFLAGS -DNO_RTTI"
      ;;
    2.8.*)
      # adjust as necessary, these are guesses ;-)
      echo "gcc 2.8 detected."
      echo "Upgrading to gcc 2.95 or later is recommended."
      if [ "$UNAME_S" = "SunOS" ]; then
        CFLAGS="-DSOLARIS_GCC_HACK $CFLAGS"
        CXXFLAGS="-DSOLARIS_GCC_HACK $CFLAGS"
      fi
      CXXFLAGS="$CXXFLAGS -frtti"
      ;;
    2.9*)
      # no problem (NB: haven't tested Redhat 7.0's compiler)
      ;;
    3.*)
      # assume it will work
      ;;
    *)
      echo "Warning: gcc version is unknown"
      ;;
  esac
fi

for D in . libapp librtsp rtspproxy; do
  cat $D/Makefile.in | sed "s%@CC@%${CC}%g
	s%@CXX@%${CXX}%g
	s%@AR@%${AR}%g
	s%@LD@%${LD}%g
	s%@CFLAGS@%${CFLAGS}%g
	s%@CXXFLAGS@%${CXXFLAGS}%g
	s%@ARFLAGS@%${ARFLAGS}%g
	s%@LDFLAGS@%${LDFLAGS}%g
	s%@SYSLIBS@%${SYSLIBS}%" > $D/Makefile || exit 1
done

echo "configuration successful"
