#!/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_TOOLCHAIN_VERSION=4.8 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"
  export CXXFLAGS="${NDK_CXXFLAGS} -fexceptions"

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

  if "${TARGET_ABI}" = "x86"; then
    export ANDROID_SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-x86"
  else
    export ANDROID_SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-arm"
  fi


  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/${TARGET_ABI}/include"
STDCPP_LIBS="${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o -lgnustl_shared"
STDCPP_LDFLAGS="-L${STDCPP_TC_VER}/libs/${TARGET_ABI}"

# 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 " ANDROID_SYSROOT = ${ANDROID_SYSROOT}"
  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 $*
