1#!/bin/bash
2#
3# Copyright (C) 2012 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17# Generates a module index file by searching through android source
18# tree for make files.  The intellij-gen.sh script automatically calls
19# this script the first time or if you delete the generated indexed
20# file.  The only time you need to run this manually is if modules are
21# added or deleted.
22#
23# To use, run the following command from either your repo root or
24# development/tools/idegen:
25#   index-gen.sh
26#
27# Only tested on linux.  Should work for macs but have not tried.
28#
29set -e
30
31script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
32#root_dir=`readlink -f -n $script_dir/../../..`
33root_dir=$PWD
34if [ ! -e $root_dir/.repo ]; then
35  root_dir=$PWD/../../..
36  if [ ! -e $root_dir/.repo ]; then
37    echo "Repo root not found. Run this script from your repo root or the idegen directory."
38    exit 1
39  fi
40fi
41tmp_file=${root_dir}/tmp.txt
42dest_file=${root_dir}/module-index.txt
43
44echo "Generating index file $dest_file..."
45
46[[ "$(uname -s)" == "Darwin" ]] && darwin=1 || darwin=0
47
48if [ $darwin == 1 ];
49then
50  start=$(($(date +%s) / 1000000))
51else
52  start=$(($(date +%s%N) / 1000000))
53fi
54
55find $root_dir -name '*.mk' \( ! -path "$root_dir/build*" -prune \) \
56  \( -exec grep -H '^LOCAL_PACKAGE_NAME ' {} \; \
57  -false -o -exec grep -H '^LOCAL_MODULE ' {} \; \) \
58  > $tmp_file
59sed -e 's/LOCAL_PACKAGE_NAME *:= *//g' -e 's/LOCAL_MODULE *:= *//g' -e 's/\^M*$//g' < $tmp_file > $dest_file
60
61mv $dest_file $tmp_file
62# Exclude specific directories from index here.
63# TODO: make excludes more generic and configurable
64grep -v "^$root_dir/vendor/google" $tmp_file > $dest_file
65
66rm $tmp_file
67
68if [ $darwin == 1 ];
69then
70  end=$(($(date +%s) / 1000000))
71else
72  end=$(($(date +%s%N) / 1000000))
73fi
74elapse=$(($end - $start))
75echo "Took ${elapse}ms"
76