#!/bin/bash
#
# Copyright 2015 Google Inc. 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.
#
# A wrapper for kati which generates build.ninja mainly for Android.
#

set -e

kati_dir=$(cd $(dirname $0) && pwd)
extra_flags=
goma_flag=

while [ x"$1" != x"" ]; do
  case "$1" in
    --help)
      cat - <<EOF
Usage:
  m2n               # for default full-build
  m2n --goma        # use goma. \$HOME/goma must exist
  m2n --go          # use go version. Slower but maybe more portable.
  m2n cts           # for target 'cts'
EOF
      exit 1
      ;;

    --go)
      kati=${kati_dir}/kati
      shift
      ${kati} --m2n "$@"
      echo
      echo ninja.sh and build.ninja were generated, please run ./ninja.sh
      exit
      ;;

    --goma)
      if [ ! -e $HOME/goma/goma_ctl.py ]; then
        echo "$HOME/goma/goma_ctl.py should exist to use goma"
        exit 1
      fi
      $HOME/goma/goma_ctl.py ensure_start
      goma_flag=--goma_dir=$HOME/goma
      shift
      ;;

    --mmm)
      echo 'Note: --mmm may not work'
      shift;
      mmm="$1"
      shift
      ;;

    -*)
      extra_flags+=" $1"
      shift
      ;;

    *)
      targets="${targets} $1"
      shift
      ;;
  esac
done

kati=${kati_dir}/ckati

ninja_suffix=
ninja_suffix_flag=

if [ x"${mmm}" != x"" ]; then
  mk="${mmm}/Android.mk"
  if [ ! -f ${mk} ]; then
    echo "${mk} does not exist"
    exit 1
  fi

  export ONE_SHOT_MAKEFILE=${mk}
  echo ONE_SHOT_MAKEFILE=${ONE_SHOT_MAKEFILE}

  ninja_suffix=-mmm-${mmm}
fi

if [ x"${targets}" != x"" ]; then
  ninja_suffix+=-$(echo ${targets} | sed 's/ /-/')
fi

if [ x"${ninja_suffix}" != x"" ]; then
  ninja_suffix=$(echo ${ninja_suffix} | sed 'y/\//_/')
  ninja_suffix_flag=--ninja_suffix=${ninja_suffix}
fi

${kati} --ninja ${ninja_suffix_flag} --ignore_optional_include=out/%.P --use_find_emulator ${goma_flag} ${extra_flags} ${targets}

echo
echo ninja${ninja_suffix}.sh and build${ninja_suffix}.ninja were generated, please run ./ninja${ninja_suffix}.sh
