#!/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.
#
# To use, run the following command from either your repo root or
# development/tools/idegen:
#   intellij-gen.sh project_dir <module_dir>...
#
# if no module_dir is provided, we assume project_dir is also a module_dir.
#
# For example, to generate a project for framework/base, use:
#   intellij-gen.sh framework/base
#
# The project directory (.idea) will be put in the project_dir.  Sharable
# iml files will be put into each respective module directory.
#
# Only tested on linux.  Should work for macs but have not tried.
#
set -e

progname=`basename $0`
if [ $# -lt 1 ]; then
  echo "Usage: $progname project_dir <module_dir>..."
  exit 1
fi
project_dir=$1
shift
if [ -z $@ ]; then
  module_dirs=${project_dir}
else
  module_dirs=$@
fi
echo $module_dirs
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
root_dir=$PWD
if [ ! -e $root_dir/.repo ]; then
  root_dir=$PWD/../../..
  if [ ! -e $root_dir/.repo ]; then
    echo "Repo root not found. Run this script from your repo root or the idegen directory."
    exit 1
  fi
fi
index_file=$root_dir/module-index.txt
idegenjar=$script_dir/idegen.jar
if [ ! -e $idegenjar ]; then
  # See if the jar is in the build directory.
  platform="linux"
  if [ "Darwin" = "$(uname)" ]; then
    platform="darwin"
  fi
  idegenjar="$root_dir/out/host/$platform-x86/framework/idegen.jar"
fi

if [ ! -e "$index_file" ]; then
  echo "Module index file missing; generating this is only done the first time."
  echo "If any dependencies change, you should generate a new index file by running index-gen.sh."
  $script_dir/index-gen.sh
fi

echo "Checking for $idegenjar"
if [ -e "$idegenjar" ]; then
  echo "Generating project files for $module_dirs"
  cmd="java -cp $idegenjar com.android.idegen.IntellijProject $index_file $project_dir $module_dirs"
  echo $cmd
  $cmd
else
  echo "Couldn't find idegen.jar. Please run make first."
fi
