#!/usr/bin/env bash
#
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# DEPRECATED
#

# This script shows the path of the active toolchain components within
# the ndk. This was necessary for GCC and binutils, where each ABI had
# its own tools, but is not needed for LLVM-based tools which should be
# used in preference.

usage() {
  echo "USAGE: ndk-which [--abi ABI] TOOL"
  echo "ABI is 'armeabi-v7a', 'arm64-v8a', 'x86', or 'x86_64'"
  echo "TOOL is 'gdb', 'objdump', 'readelf', etc."
  echo
  echo "Note that LLVM replacements for binutils tools work for all ABIs."
  exit 1
}

error() {
  echo "The tool: $1 doesn't exist"
  echo "Possible choices are: "
  count=0
  for file in $2*
  do
    if [[ $file == *$1 ]]
    then
        echo $file
        ((count = count + 1))
    fi
  done
  if [ $count -eq 0 ]
  then
      echo " None "
  fi
  exit 1
}

ABI=armeabi-v7a

while (( "$#" )); do
  case "$1" in
    --abi)
      ABI=$2
      shift 2
      abis='^(armeabi-v7a|arm64-v8a|x86|x86_64)$'
      if [[ ! "$ABI" =~ $abis ]]; then usage; fi
      ;;
    *)
      break
      ;;
  esac
done

TOOL=$1
shift

if [ "$#" != 0 -o "$TOOL" == "" ]; then
  usage
fi

# This tool is installed in prebuilt/linux-x86_64/bin/.
MYNDKDIR=`dirname $0`/../../..

# create a temporary skeleton project so that we can leverage build-local.mk
TMPDIR=/tmp/ndk-which-$$
mkdir -p $TMPDIR/jni
cat >$TMPDIR/jni/Android.mk << "END_OF_FILE"
include $(CLEAR_VARS)
END_OF_FILE

get_build_var_for_abi() {
  if [ -z "$GNUMAKE" ] ; then
    GNUMAKE=make
  fi
  NDK_PROJECT_PATH=$TMPDIR $GNUMAKE --no-print-dir -f $MYNDKDIR/build/core/build-local.mk DUMP_$1 APP_ABI=$2
}
LLVM_TOOLCHAIN_PREFIX=`get_build_var_for_abi LLVM_TOOLCHAIN_PREFIX $ABI`
TOOLCHAIN_PREFIX=`get_build_var_for_abi TOOLCHAIN_PREFIX $ABI`
rm -Rf $TMPDIR

# fully qualified file name
FQFN=${TOOLCHAIN_PREFIX}$TOOL

# use the host system's 'which' to decide/report if the file exists or not, and is executable
if [ ! -f $FQFN ]
then
    FQFN=${LLVM_TOOLCHAIN_PREFIX}llvm-$TOOL
    if [ ! -f $FQFN ]
    then
        error $TOOL $LLVM_TOOLCHAIN_PREFIX
    fi
fi
which "$FQFN"
