#!/bin/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"
