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