1*cc02d7e2SAndroid Build Coastguard Worker#!/bin/bash 2*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2015 gRPC authors. 3*cc02d7e2SAndroid Build Coastguard Worker# 4*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*cc02d7e2SAndroid Build Coastguard Worker# 8*cc02d7e2SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*cc02d7e2SAndroid Build Coastguard Worker# 10*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License. 15*cc02d7e2SAndroid Build Coastguard Worker 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard Workerset -e 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Workercd `dirname $0`/../.. 20*cc02d7e2SAndroid Build Coastguard Worker 21*cc02d7e2SAndroid Build Coastguard Workerfunction process_dir { 22*cc02d7e2SAndroid Build Coastguard Worker base_dir=$1 23*cc02d7e2SAndroid Build Coastguard Worker prefix=$2 24*cc02d7e2SAndroid Build Coastguard Worker comment_language=$3 25*cc02d7e2SAndroid Build Coastguard Worker ( 26*cc02d7e2SAndroid Build Coastguard Worker cd $base_dir 27*cc02d7e2SAndroid Build Coastguard Worker find . -name "*.h" | while read f ; do 28*cc02d7e2SAndroid Build Coastguard Worker guard=${prefix}_`echo ${f#*/} | tr '[:lower:]/.-' '[:upper:]___'` 29*cc02d7e2SAndroid Build Coastguard Worker if [ "$comment_language" = "c++" ] ; then 30*cc02d7e2SAndroid Build Coastguard Worker comment="// $guard" 31*cc02d7e2SAndroid Build Coastguard Worker else 32*cc02d7e2SAndroid Build Coastguard Worker comment="/* $guard */" 33*cc02d7e2SAndroid Build Coastguard Worker fi 34*cc02d7e2SAndroid Build Coastguard Worker awk ' 35*cc02d7e2SAndroid Build Coastguard Worker BEGIN { 36*cc02d7e2SAndroid Build Coastguard Worker guard = "'${guard}'"; 37*cc02d7e2SAndroid Build Coastguard Worker comment_language = "'${comment_language}'"; 38*cc02d7e2SAndroid Build Coastguard Worker } 39*cc02d7e2SAndroid Build Coastguard Worker prev ~ /^#ifndef/ && !got_first_ifndef { 40*cc02d7e2SAndroid Build Coastguard Worker got_first_ifndef = 1; 41*cc02d7e2SAndroid Build Coastguard Worker prev = "#ifndef " guard; 42*cc02d7e2SAndroid Build Coastguard Worker } 43*cc02d7e2SAndroid Build Coastguard Worker prev ~ /^#define/ && !got_first_define { 44*cc02d7e2SAndroid Build Coastguard Worker got_first_define = 1; 45*cc02d7e2SAndroid Build Coastguard Worker prev = "#define " guard; 46*cc02d7e2SAndroid Build Coastguard Worker } 47*cc02d7e2SAndroid Build Coastguard Worker NR > 1 { print prev; } 48*cc02d7e2SAndroid Build Coastguard Worker { prev = $0; } 49*cc02d7e2SAndroid Build Coastguard Worker END { 50*cc02d7e2SAndroid Build Coastguard Worker if (prev ~ /^#endif/) { 51*cc02d7e2SAndroid Build Coastguard Worker if (comment_language ~ /^c$/) { 52*cc02d7e2SAndroid Build Coastguard Worker print "#endif /* " guard " */"; 53*cc02d7e2SAndroid Build Coastguard Worker } else if (comment_language ~ /^c\+\+$/) { 54*cc02d7e2SAndroid Build Coastguard Worker print "#endif // " guard; 55*cc02d7e2SAndroid Build Coastguard Worker } else { 56*cc02d7e2SAndroid Build Coastguard Worker print "ERROR: unknown comment language: " comment_language; 57*cc02d7e2SAndroid Build Coastguard Worker } 58*cc02d7e2SAndroid Build Coastguard Worker } else { 59*cc02d7e2SAndroid Build Coastguard Worker print "ERROR: file does not end with #endif"; 60*cc02d7e2SAndroid Build Coastguard Worker } 61*cc02d7e2SAndroid Build Coastguard Worker } 62*cc02d7e2SAndroid Build Coastguard Worker ' "${f}" > "${f}.rewritten" 63*cc02d7e2SAndroid Build Coastguard Worker mv "${f}.rewritten" "${f}" 64*cc02d7e2SAndroid Build Coastguard Worker done 65*cc02d7e2SAndroid Build Coastguard Worker ) 66*cc02d7e2SAndroid Build Coastguard Worker} 67*cc02d7e2SAndroid Build Coastguard Worker 68*cc02d7e2SAndroid Build Coastguard Workerprocess_dir include/grpc GRPC c 69*cc02d7e2SAndroid Build Coastguard Workerprocess_dir include/grpc++ GRPCXX c++ 70*cc02d7e2SAndroid Build Coastguard Workerprocess_dir src/core GRPC_INTERNAL_CORE c 71*cc02d7e2SAndroid Build Coastguard Workerprocess_dir src/cpp GRPC_INTERNAL_CPP c++ 72*cc02d7e2SAndroid Build Coastguard Workerprocess_dir src/compiler GRPC_INTERNAL_COMPILER c++ 73*cc02d7e2SAndroid Build Coastguard Workerprocess_dir test/core GRPC_TEST_CORE c 74*cc02d7e2SAndroid Build Coastguard Workerprocess_dir test/cpp GRPC_TEST_CPP c++ 75*cc02d7e2SAndroid Build Coastguard Workerprocess_dir examples GRPC_EXAMPLES c++ 76