#!/bin/bash
# See usage() below for the description.

function usage() {
  cat <<EOF
# This script copies the .jar files that each plugin depends on into the plugins libs folder.
# By default, on Mac & Linux, this script creates symlinks from the libs folder to the jar file.
# Since Windows does not support symlinks, the jar files are copied.
#
# Options:
# -f : to copy files rather than creating symlinks on the Mac/Linux platforms.
# -d : print make dependencies instead of running make; doesn't copy files.
# -c : copy files expected after make dependencies (reported by -d) have been built.
#
# The purpose of -d/-c is to include the workflow in a make file:
# - the make rule should depend on \$(shell create_all_symlinks -d)
# - the rule body should perform   \$(shell create_all_symlinks -c [-f])
EOF
}

# CD to the top android directory
PROG_DIR=`dirname "$0"`
cd "${PROG_DIR}/../../../"

HOST=`uname`
USE_COPY=""        # force copy dependent jar files rather than creating symlinks
ONLY_SHOW_DEPS=""  # only report make dependencies but don't build them nor copy.
ONLY_COPY_DEPS=""  # only copy dependencies built by make; uses -f as needed.

function die() {
  echo "Error: $*" >/dev/stderr
  exit 1
}

function warn() {
  # Only print something if not in show-deps mode
  if [[ -z $ONLY_SHOW_DEPS ]]; then
    echo "$*"
  fi
}

function printGradleJarPath() {
  # Prints to stdout the absolute path of the JAR assembled for a given gradle project.
  # $1 = source dir, e.g. tools/base or tools/swt
  # $2 = the gradle project name e.g. common or lint-api
  echo "## Quering Gradle properties for '$2' in '$1'." > /dev/stderr
  ( cd $1 && \
    ./gradlew :$2:properties | awk '
        BEGIN { B=""; N=""; V="" }
        /^archivesBaseName:/ { N=$2 }
        /^buildDir:/         { D=$2 }
        /^version:/          { V=$2 }
        END { print D "/libs/" N "-" V ".jar" }' )
}

## parse arguments
while [ $# -gt 0 ]; do
  case "$1" in
    "-f" )
      USE_COPY="1"
      ;;
    "-d" )
      ONLY_SHOW_DEPS="1"
      ;;
    "-c" )
      ONLY_COPY_DEPS="1"
      ;;
    * )
      usage
      exit 2
  esac
  shift
done

warn "## Running $0"

if [[ "${HOST:0:6}" == "CYGWIN" || "$USE_MINGW" == "1" ]]; then
  # This is either Cygwin or Linux/Mingw cross-compiling to Windows.
  PLATFORM="windows-x86"
  if [[ "${HOST:0:6}" == "CYGWIN" ]]; then
    # We can't use symlinks under Cygwin
    USE_COPY="1"
  fi
elif [[ "$HOST" == "Linux" ]]; then
  PLATFORM="linux-x86"
elif [[ "$HOST" == "Darwin" ]]; then
  PLATFORM="darwin-x86"
else
  die "Unsupported platform ($HOST). Aborting."
fi

if [[ "$USE_COPY" == "1" ]]; then
  function cpfile { # $1=source $2=dest $3=optional dest filename
    cp -fv $1 $2/$3
  }
else
  # computes the "reverse" path, e.g. "a/b/c" => "../../.."
  function back() {
    echo $1 | sed 's@[^/]*@..@g'
  }

  function cpfile { # $1=source $2=dest $3=optional dest filename
    local src=$1
    if [[ "${src:0:1}" != "/" ]]; then
      # Not an absolute path. We assume a relative path to be
      # relative to the android root and we want to make it
      # relative to the destination dir.
      src=$(back $2)/$1
    fi
    ln -svf $src $2/$3
  }
fi

DEST="sdk/eclipse/scripts"

set -e # fail early
LIBS=""
CP_FILES=""


### Configure which libs to build.
#
# Each entry for LIBS needs to be prefixed with the way we want to build it:
# make: - a library built using its traditional Android.mk
# base: - a gradle library located in tools/base
# swt:  - a gradle library located in toosl/swt
#
# LIBS entries without or with an unknown ":" prefix will generate an error.

### BASE ###

BASE_PLUGIN_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.base/libs"
BASE_PLUGIN_LIBS="base:common swt:sdkstats base:sdklib base:dvlib base:layoutlib-api base:sdk-common"
BASE_PLUGIN_PREBUILTS="\
    prebuilts/tools/common/m2/repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar \
    prebuilts/tools/common/m2/repository/org/apache/commons/commons-compress/1.0/commons-compress-1.0.jar \
    prebuilts/tools/common/m2/repository/com/google/guava/guava/13.0.1/guava-13.0.1.jar \
    prebuilts/tools/common/m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar \
    prebuilts/tools/common/m2/repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar \
    prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar \
    prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar \
    prebuilts/tools/common/m2/repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar \
    prebuilts/tools/common/m2/repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar \
    prebuilts/tools/common/m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar"

LIBS="$LIBS $BASE_PLUGIN_LIBS"
CP_FILES="$CP_FILES @:$BASE_PLUGIN_DEST $BASE_PLUGIN_LIBS $BASE_PLUGIN_PREBUILTS"


### ADT ###

ADT_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.adt/libs"
ADT_LIBS="make:ant-glob base:asset-studio base:lint-api base:lint-checks base:ninepatch make:propertysheet \
          base:rule-api swt:sdkuilib swt:swtmenubar base:manifest-merger"
ADT_PREBUILTS="\
    prebuilts/tools/common/freemarker/freemarker-2.3.19.jar \
    prebuilts/tools/common/m2/repository/org/ow2/asm/asm/4.0/asm-4.0.jar \
    prebuilts/tools/common/m2/repository/org/ow2/asm/asm-tree/4.0/asm-tree-4.0.jar \
    prebuilts/tools/common/m2/repository/org/ow2/asm/asm-analysis/4.0/asm-analysis-4.0.jar \
    prebuilts/tools/common/lombok-ast/lombok-ast-0.2.jar"

LIBS="$LIBS $ADT_LIBS"
CP_FILES="$CP_FILES @:$ADT_DEST $ADT_LIBS $ADT_PREBUILTS"


### DDMS ###

DDMS_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.ddms/libs"
DDMS_LIBS="base:ddmlib swt:ddmuilib swt:swtmenubar swt:uiautomatorviewer"

DDMS_PREBUILTS="\
    prebuilts/tools/common/m2/repository/jfree/jcommon/1.0.12/jcommon-1.0.12.jar \
    prebuilts/tools/common/m2/repository/jfree/jfreechart/1.0.9/jfreechart-1.0.9.jar \
    prebuilts/tools/common/m2/repository/jfree/jfreechart-swt/1.0.9/jfreechart-swt-1.0.9.jar"

LIBS="$LIBS $DDMS_LIBS"
CP_FILES="$CP_FILES @:$DDMS_DEST $DDMS_LIBS $DDMS_PREBUILTS"


### TEST ###

TEST_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.tests"
TEST_LIBS="make:easymock base:testutils"
TEST_PREBUILTS="prebuilts/tools/common/m2/repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar"

LIBS="$LIBS $TEST_LIBS"
CP_FILES="$CP_FILES @:$TEST_DEST $TEST_LIBS $TEST_PREBUILTS"


### BRIDGE ###

if [[ $PLATFORM != "windows-x86" ]]; then
  # We can't build enough of the platform on Cygwin to create layoutlib
  BRIDGE_LIBS="make:layoutlib base:ninepatch"

  LIBS="$LIBS $BRIDGE_LIBS"
fi


### HIERARCHYVIEWER ###

HV_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/libs"
HV_LIBS="swt:hierarchyviewer2lib swt:swtmenubar"

LIBS="$LIBS $HV_LIBS"
CP_FILES="$CP_FILES @:$HV_DEST $HV_LIBS"


### TRACEVIEW ###

TV_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.traceview/libs"
TV_LIBS="swt:traceview"

LIBS="$LIBS $TV_LIBS"
CP_FILES="$CP_FILES @:$TV_DEST $TV_LIBS"


### MONITOR ###

MONITOR_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.monitor/libs"
MONITOR_LIBS="swt:sdkuilib"

LIBS="$LIBS $MONITOR_LIBS"
CP_FILES="$CP_FILES @:$MONITOR_DEST $MONITOR_LIBS"


### SDKMANAGER ###

SDKMAN_LIBS="swt:swtmenubar"

LIBS="$LIBS $SDKMAN_LIBS"


### GL DEBUGGER ###

if [[ $PLATFORM != "windows-x86" ]]; then
  # liblzf doesn't build under cygwin. If necessary, this should be fixed first.

  GLD_DEST="sdk/eclipse/plugins/com.android.ide.eclipse.gldebugger/libs"
  GLD_LIBS="make:host-libprotobuf-java-2.3.0-lite make:liblzf"

  LIBS="$LIBS $GLD_LIBS"
  CP_FILES="$CP_FILES @:$GLD_DEST $GLD_LIBS"
fi


#--- Determine what to build

UNPROCESSED=""
GRADLE_SWT=""
GRADLE_BASE=""
MAKE_TARGETS=""
for LIB in $LIBS; do
  if [[ "${LIB:0:5}" == "base:" ]]; then
    GRADLE_BASE="$GRADLE_BASE :${LIB:5}:assemble"
  elif [[ "${LIB:0:4}" == "swt:" ]]; then
    GRADLE_SWT="$GRADLE_SWT :${LIB:4}:assemble"
  elif [[ "${LIB:0:5}" == "make:" ]]; then
    MAKE_TARGETS="$MAKE_TARGETS ${LIB:5}"
  else
    UNPROCESSED="$UNPROCESSED $LIB"
  fi
done

unset LIBS   # we shouldn't use this anymore, it has been split up just above.


if [[ -n $UNPROCESSED ]]; then
  die "## The following libs lack a prefix (make:, base: or swt:): $UNPROCESSED"
fi

# In the mode to only echo dependencies, output them and we're done
if [[ -n $ONLY_SHOW_DEPS ]]; then
  echo $MAKE_TARGETS
  exit 0
fi

# --- Gradle Build ---

# tools/base: if we need it for SWT, we build them all and public local.
# Otherwise we do a specific tools/base build on just the requested targets.

if [[ -n "$GRADLE_SWT" ]]; then
  echo "### Starting tools/base: gradlew publishLocal"
  (cd tools/base && ./gradlew publishLocal)
elif [[ -n "$GRADLE_BASE" ]]; then
  echo "### Starting tools/base: gradlew $GRADLE_BASE"
  (cd tools/base && ./gradlew $GRADLE_BASE)
fi

# tools/swt: build requested targets

if [[ -n "$GRADLE_SWT" ]]; then
  echo "### Starting tools/swt: gradlew $GRADLE_SWT"
  (cd tools/swt && ./gradlew $GRADLE_SWT)
fi

# --- Android.mk Build ---

# If some of the libs are available in prebuilts/devtools, use link to them directly
# instead of trying to rebuild them so remove them from the libs to build. Note that
# they are already listed in CP_FILES so we'll adjust the source to copy later.

NEW_TARGETS=""
for LIB in $MAKE_TARGETS; do
  J="prebuilts/devtools/tools/lib/$LIB.jar"
  if [[ ! -f $J ]]; then
    J="prebuilts/devtools/adt/lib/$LIB.jar"
  fi
  if [[ -f $J ]]; then
    warn "## Using existing $J"
  else
    NEW_TARGETS="$NEW_TARGETS $LIB"
  fi
done
MAKE_TARGETS="$NEW_TARGETS"
unset NEW_TARGETS

if [[ -z $ONLY_COPY_DEPS ]]; then
  if [[ -n $MAKE_TARGETS ]]; then
    ( # Make sure we have lunch sdk-<something>
      if [[ ! "$TARGET_PRODUCT" ]]; then
        warn "## TARGET_PRODUCT is not set, running build/envsetup.sh"
        . build/envsetup.sh
        warn "## lunch sdk-eng"
        lunch sdk-eng
      fi

      J="4"
      [[ $(uname) == "Darwin" ]] && J=$(sysctl hw.ncpu | cut -d : -f 2 | tr -d ' ')
      [[ $(uname) == "Linux"  ]] && J=$(cat /proc/cpuinfo | grep processor | wc -l)

      warn "## Building libs: make -j$J $MAKE_TARGETS"
      make -j${J} $MAKE_TARGETS
    )
  fi
fi

# --- Copy resulting files ---

DEST=""
for SRC in $CP_FILES; do
  if [[ "${SRC:0:2}" == "@:" ]]; then
    DEST="${SRC:2}"
    mkdir -vp "$DEST"
    continue
  fi

  ORIG_SRC="$SRC"
  DEST_FILE=""

  if [[ "${SRC:0:5}" == "base:" ]]; then
    SRC="${SRC:5}"
    ORIG_SRC="$SRC"
    DEST_FILE="$SRC.jar"
    SRC=$(printGradleJarPath tools/base $SRC)
  elif [[ "${SRC:0:4}" == "swt:" ]]; then
    SRC="${SRC:4}"
    ORIG_SRC="$SRC"
    DEST_FILE="$SRC.jar"
    SRC=$(printGradleJarPath tools/swt $SRC)
  elif [[ "${SRC:0:5}" == "make:" ]]; then
    SRC="${SRC:5}"
    ORIG_SRC="$SRC"
  fi

  if [[ ! -f "$SRC" ]]; then
    # Take a prebuilts/devtools instead of a framework one if possible.
    SRC="prebuilts/devtools/tools/lib/$SRC.jar"
    if [[ ! -f "$SRC" ]]; then
      SRC="prebuilts/devtools/adt/lib/$ORIG_SRC.jar"
    fi
    if [[ ! -f "$SRC" ]]; then
      SRC="out/host/$PLATFORM/framework/$ORIG_SRC.jar"
    fi
  fi
  if [[ -f "$SRC" ]]; then
    if [[ ! -d "$DEST" ]]; then
      die "Invalid cp_file dest directory: $DEST"
    fi

    cpfile "$SRC" "$DEST" "$DEST_FILE"
  else
    die "## Unknown source '$ORIG_SRC' to copy in '$DEST'"
  fi
done

# OS-specific post operations

if [ "${HOST:0:6}" == "CYGWIN" ]; then
  chmod -v a+rx "$ADT_DEST"/*.jar
fi

echo "### $0 done"
