#!/bin/sh

# The purpose of this script is the following:
#
# 1/ Build the libraries under prebuilts/jni/
#
# 2/ Build the project under jni/
#
# 3/ Check that the prebuilt shared library was copied to
#    $NDK_OUT/<abi>/objs.
#
# 4/ Check that the prebuilt static library was not copied to
#    the same directory.
#

PROGDIR=$(dirname "$0")

OUT=$PROGDIR/obj/local
PREBUILTS_DIR=$PROGDIR/prebuilts
PREBUILTS_DIR=$(cd "$PREBUILTS_DIR" && pwd)

if [ -n "$APP_ABI" ]; then
  ABIS="$APP_ABI"
else
  ABIS=
  for OPT; do
    case $OPT in
      APP_ABI=*)
        ABIS=${OPT##APP_ABI=}
        APP_ABI=$ABIS
        ;;
    esac
  done

  if [ -z "$ABIS" ]; then
    ABIS="armeabi-v7a x86"
  fi
fi

# Step 0: Remove obj/ and libs/ to ensure everything is clean
rm -rf obj/ libs/
rm -rf $PREBUILTS_DIR/obj/ $PREBUILTS_DIR/libs/

# Step 1: Build prebuilt libraries.
if [ -z "$APP_ABI" ]; then
  $NDK/ndk-build -C "$PREBUILTS_DIR"
  RET=$?
else
  $NDK/ndk-build -C "$PREBUILTS_DIR" APP_ABI="$APP_ABI"
  RET=$?
fi

if [ $RET != 0 ]; then
  echo "ERROR: Can't build prebuilt libraries!"
  exit 1
fi

# Step 2: Build the project
if [ -z "$APP_ABI" ]; then
  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C "$PROGDIR"
  RET=$?
else
  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C "$PROGDIR" APP_ABI="$APP_ABI"
  RET=$?
fi

if [ $RET != 0 ]; then
  echo "ERROR: Can't build project!"
  exit 1
fi

# Step 3: Check that the prebuilt shared library was copied to the
#         right location.
#

FAILURES=0
for ABI in $ABIS; do
  printf "Checking for $ABI shared library: "
  SHARED_LIB=$(ls $OUT/*$ABI/libfoo.so 2>/dev/null)
  if [ $? != 0 ]; then
    printf "KO! missing file: $SHARED_LIB\n"
    FAILURES=$(( $FAILURES + 1 ))
  else
    printf "ok\n"
  fi

  printf "Checking for $ABI static library: "
  STATIC_LIB=$(ls $OUT/*$ABI/libbar.a 2>/dev/null)
  if [ $? = 0 ]; then
    printf "KO! file should not exist: $STATIC_LIB\n"
    FAILURES=$(( $FAILURES + 1 ))
  else
    printf "ok\n"
  fi
done

if [ "$FAILURES" = 0 ]; then
  echo "Everything's ok. Congratulations!"
  exit 0
else
  echo "Found $FAILURES failures! Please fix ndk-build!"
  exit 1
fi
