#! /bin/bash
# Copyright 2016 The Cobalt 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.

# This wrapper allows us to run ninja without any assumptions about the
# environment having been setup correctly to build Cobalt, since that won't
# happen when started from Android Studio. See:
# https://cobalt.googlesource.com/cobalt/+/master/#Building-and-Running-the-Code

# Allow for a developer-specific environment setup from .cobaltrc
local_rc=$(dirname $0)/.cobaltrc
global_rc=${HOME}/.cobaltrc
if [ -r ${local_rc} ]; then
  source ${local_rc}
elif [ -r ${global_rc} ]; then
  source ${global_rc}
fi

# Use Cobalt's clang if it's not anywhere earlier in the PATH.
SRC_DIR=$(cd $(dirname $0)/../../../..; pwd)
PATH=$PATH:${SRC_DIR}/third_party/llvm-build/Release+Asserts/bin

# Do nothing if -n is the first argument.
if [ "$1" == "-n" ]; then
  shift
  echo "Skipping: ninja $@"
  exit
fi

exec ninja "$@"
