#!/bin/bash
# Copyright 2015 The Bazel Authors. All rights reserved.
#
# 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.

case "$0" in
/*) self="$0" ;;
*)  self="$PWD/$0";;
esac

if [[ -z "$JAVA_RUNFILES" ]]; then
  if [[ -e "${self}.runfiles" ]]; then
    JAVA_RUNFILES="${self}.runfiles"
  fi
fi

root_path=$(pwd)
tmp_dir=$(mktemp -d ${TMPDIR:-/tmp}/war.XXXXXXXX)
trap "{ cd ${root_path}; rm -rf ${tmp_dir}; }" EXIT
cd ${tmp_dir}

${JAVA_RUNFILES}/%{zipper} x ${JAVA_RUNFILES}/%{war}

jvm_bin=${JAVA_RUNFILES}/%{java}
if [[ ! -x ${jvm_bin} ]]; then
  jvm_bin=$(which java)
fi

APP_ENGINE_ROOT=${JAVA_RUNFILES}/%{appengine_sdk}
main_class="com.google.appengine.tools.development.DevAppServerMain"
classpath="%{classpath}"

${jvm_bin} -Dappengine.sdk.root=${APP_ENGINE_ROOT} -cp "${classpath}" \
    ${main_class} "$@" ${tmp_dir}
retCode=$?

# We remove the trap so the return code doesn't get intercepted by it on OS X.
cd ${root_path}
rm -rf ${tmp_dir}
trap - EXIT

exit $retCode
