#!/bin/sh
#

F="configure-android"

if test "$*" = "--help" -o "$*" = "-h"; then
  echo "$F [--use-ndk-cflags] [OPTIONS]"
  echo ""
  echo "where:"
  echo "  --use-ndk-cflags Optional parameter to use the same compilation flags"
  echo "              	   as the one used by ndk-build"
  echo "  OPTIONS     	   Other options that will be passed directly to"
  echo "                   ./aconfigure script. Run ./aconfigure --help"
  echo "                   for more info."
  echo ""
  echo "Environment variables:"
  echo "  ANDROID_NDK_ROOT Specify the directory of Android NDK to use."
  echo "  APP_PLATFORM     Optionally specify the platform level used, e.g."
  echo "                   android-9. By default, configure will use the"
  echo "                   maximum platform level detected."
  echo "  TARGET_ABI       Optionally specify a single target architecture,"
  echo "                   e.g. armeabi-v7a, mips, x86. By default, the target"
  echo "                   architecture is armeabi. Only used when"
  echo "                   --use-ndk-cflags is specified."
  echo "  IGNORE_CFLAGS    Optionally specify compilation flags to be ignored."
  echo "                   Each grepped flag that satisfies the criteria will"
  echo "                   be ignored. Default:"
  echo "                   IGNORE_CFLAGS=\"\-M\|\-f*stack\|\-f*alias\""
  echo "                   Only used when --use-ndk-cflags is specified."
  echo ""
  exit 0
fi

if test "x${ANDROID_NDK_ROOT}" = "x"; then
  echo "$F error: ANDROID_NDK_ROOT must be specified"
  exit 0
fi

#if test "$1" = "--simulator"; then
if test "1" = "0"; then
  shift
  TARGET_HOST="i686-android-linux"
  TC_DIR="x86"
else
  TARGET_HOST="arm-linux-androideabi"
  TC_DIR=${TARGET_HOST}
fi

if test "x$APP_PLATFORM" = "x"; then
  APP_PLATFORM=`ls ${ANDROID_NDK_ROOT}/platforms/ | sed 's/android-//' | sort -gr | head -1`
  APP_PLATFORM="android-${APP_PLATFORM}"
  echo "$F: APP_PLATFORM not specified, using ${APP_PLATFORM}"
fi

if test "x$TARGET_ABI" = "x"; then
  TARGET_ABI="armeabi"
  echo "$F: TARGET_ABI not specified, using ${TARGET_ABI}"
fi

if test "$1" = "--use-ndk-cflags"; then
  shift
  ADD_CFLAGS="1"
  if test "x${IGNORE_CFLAGS}" = "x"; then
    IGNORE_CFLAGS="\-M\|\-f*stack\|\-f*alias"
  fi
  for i in `${ANDROID_NDK_ROOT}/ndk-build -n -C ${ANDROID_NDK_ROOT}/samples/hello-jni NDK_LOG=1 APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI}`; do
    if test "x${NDK_CXX}" != "x" -a "$i" = "-o"; then break; fi

    # Parse NDK CXXFLAGS
    if test "x${NDK_CXX}" != "x" -a "x`echo $i|grep 'hello-jni'`" = "x"; then
      if test "x`echo $i|grep '\-\-sysroot='`" != "x"; then
        ANDROID_SYSROOT=`echo $i|sed 's/--sysroot=//'`;
      fi
      NDK_CXXFLAGS="${NDK_CXXFLAGS} $i"
    fi

    # Parse NDK CFLAGS
    if test "x${NDK_CC}" != "x" -a "x`echo $i|grep 'hello-jni'`" = "x" -a "${ADD_CFLAGS}" = "1"; then
      if test "$i" = "-c"; then ADD_CFLAGS="0"; else
        if test "x`echo $i|grep ${IGNORE_CFLAGS}`" = "x"; then
          NDK_CFLAGS="${NDK_CFLAGS} $i"
        fi
      fi
    fi

    # Find gcc toolchain
    if test "x${NDK_CC}" = "x" -a "x`echo $i | grep 'gcc'`" != "x"; then
      NDK_CC=$i
    fi
    # Find g++ toolchain
    if test "x`echo $i | grep 'g++'`" != "x"; then
      NDK_CXX=$i
    fi
  done

  export CC="${NDK_CC}"
  export CXX="${NDK_CXX}"
  export AR=`echo ${NDK_CXX}|sed 's/-g++/-ar/'`;
  export RANLIB=`echo ${NDK_CXX}|sed 's/-g++/-ranlib/'`;

  export LDFLAGS="${LDFLAGS} -nostdlib -L${ANDROID_SYSROOT}/usr/lib/"
  export LIBS="${LIBS} -lc -lgcc"
  export CFLAGS="${NDK_CFLAGS} ${CFLAGS}"
  export CPPFLAGS="${CFLAGS} -fexceptions -frtti"
  export CXXFLAGS="${NDK_CXXFLAGS} -fexceptions -frtti"

else

  ANDROID_TC_VER=`ls -d ${ANDROID_NDK_ROOT}/toolchains/${TC_DIR}-* | sed 's/clang/0/' | sort -gr | head -1`
  ANDROID_TC=`ls -d ${ANDROID_TC_VER}/prebuilt/* | grep -v gdbserver | head -1`
  if test ! -d ${ANDROID_TC}; then
    echo "$F error: unable to find directory ${ANDROID_TC} in Android NDK"
    exit 1
  fi

  export ANDROID_SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-arm"
  if test ! -d ${ANDROID_SYSROOT}; then
    echo "$F error: unable to find sysroot dir ${ANDROID_SYSROOT} in Android NDK"
    exit 1
  fi

  export CC="${ANDROID_TC}/bin/${TARGET_HOST}-gcc"
  export CXX="${ANDROID_TC}/bin/${TARGET_HOST}-g++"
  export AR="${ANDROID_TC}/bin/${TARGET_HOST}-ar"
  export RANLIB="${ANDROID_TC}/bin/${TARGET_HOST}-ranlib"

  export LDFLAGS="${LDFLAGS} -nostdlib -L${ANDROID_SYSROOT}/usr/lib/"
  export LIBS="${LIBS} -lc -lgcc"
  export CFLAGS="${CFLAGS} -I${ANDROID_SYSROOT}/usr/include"
  export CPPFLAGS="${CFLAGS} -fexceptions -frtti"
  export CXXFLAGS="${CXXFLAGS} -shared --sysroot=${ANDROID_SYSROOT} -fexceptions -frtti"

fi

# C++ STL
# Note: STL for pjsua2 sample app is specified in pjsip-apps/src/swig/java/android/jni/Application.mk

# gnustl
STDCPP_TC_VER=`ls -d ${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/[0-9]* | sort -gr | head -1`
STDCPP_CFLAGS="-I${STDCPP_TC_VER}/include -I${STDCPP_TC_VER}/libs/armeabi/include"
STDCPP_LIBS="${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o -lgnustl_static"
STDCPP_LDFLAGS="-L${STDCPP_TC_VER}/libs/armeabi"

# stlport
#STDCPP_CFLAGS="-I${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/stlport"
#STDCPP_LIBS="${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o -lstlport_static -ldl"
#STDCPP_LDFLAGS="-L${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/libs/armeabi"

export CFLAGS="${CFLAGS} ${STDCPP_CFLAGS}"
export LIBS="${STDCPP_LIBS} ${LIBS}"
export LDFLAGS="${LDFLAGS} ${STDCPP_LDFLAGS}"

# Print settings
if test "1" = "1"; then
  echo "$F: calling ./configure with env vars:"
  echo " CC = ${CC}"
  echo " CXX = ${CXX}"
  echo " CFLAGS = ${CFLAGS}"
  echo " CXXFLAGS = ${CXXFLAGS}"
  echo " LDFLAGS = ${LDFLAGS}"
  echo " LIBS = ${LIBS}"
  echo " AR = ${AR}"
  echo " RANLIB = ${RANLIB}"
fi

./configure --host=${TARGET_HOST} --disable-video $*
