#!/bin/bash
#BaseFolder表示此文件所在的目录 注意要使用绝对路径。
eval BaseFolder=`pwd`"/"
#grpcSrcFolderEnter用于定位proto文件的目录。
eval grpcSrcFolderEnter="../ProtosSrc/"
eval grpcPluginFile=$BaseFolder"./Pods/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin"
eval grpcTargetFolder="./Pods/FkAppProtos/"
eval linkTargetFolder1="./Pods/Headers/Private/FkAppProtos/"
eval linkTargetFolder2="./Pods/Headers/Public/FkAppProtos/"
function createIfNotExistDir () {
#eval给变量赋值。
eval targetDir=$1$2$3
if [ -d $targetDir ]
then
echo $targetDir": File exists."
else
mkdir $targetDir
echo $targetDir": created."
fi
}
function generateProtosFromDir () {
echo "======begin protos for "$1"======"
#eval给变量赋值。local是为了防止其值在递归之后被修改 因为变量默认是全局的。
local eval currFolder=$grpcSrcFolderEnter$1
#遍历目录里面的文件/子文件夹。
for file in `ls $currFolder`
do
#这里的-d表示是一个directory,即目录/子文件夹。
if [ -d $currFolder"/"$file ]
then
#basename是提取文件名的关键字。
createIfNotExistDir $grpcTargetFolder $1 `basename $file`
#如果子文件夹则递归。
generateProtosFromDir $1$file"/"
else
#读取该文件的地址。
#echo $file
if [[ $file == *.proto ]]
then
cd $BaseFolder$grpcSrcFolderEnter$1
eval currOutFolder=$BaseFolder$grpcTargetFolder$1
protoc --objc_out=$currOutFolder --grpc_out=$currOutFolder --plugin=protoc-gen-grpc=/usr/local/bin/protoc-gen-objcgrpc $file
echo "generate protos for "$1$file
cd $BaseFolder
else
echo "ignore "$currFolder$1$file
fi
fi
done
echo "======end protos for "$1"======"
}
function createLinkFile () {
#源文件要相对于目标文件所在的目录 否则 若以后此工程根目录发生改变 则生成的替身会失效。
local eval currSrcFile="./../../../../"
#注意这里的for循环要有两层括号。
for ((i=1;i<=$3;i++))
do
currSrcFile=$currSrcFile"../"
done
currSrcFile=$currSrcFile$grpcTargetFolder$1$2
ln -sf $currSrcFile $linkTargetFolder1$1$2
ln -sf $currSrcFile $linkTargetFolder2$1$2
echo "create link for "$1$2
}
function createLinkFromDir () {
echo "======begin link for "$1"======"
#eval给变量赋值。local是为了防止其值在递归之后被修改 因为变量默认是全局的。
local eval currFolder=$grpcTargetFolder$1
local eval currSubFolderLayderNum=$2
#遍历目录里面的文件/子文件夹。
#for file in `ls $currFolder/*.h` #此遍历会忽略文件夹的。
for file in `ls $currFolder`
do
#这里的-d表示是一个directory,即目录/子文件夹。
if [ -d $currFolder"/"$file ]
then
#basename是提取文件名的关键字。
createIfNotExistDir $linkTargetFolder1 $1 `basename $file`
createIfNotExistDir $linkTargetFolder2 $1 `basename $file`
#如果子文件夹则递归。
createLinkFromDir $1$file"/" $currSubFolderLayderNum+1
else
#读取该文件的地址。
#echo $file
if [[ $file == *.h ]]
then
createLinkFile $1 `basename $file` $currSubFolderLayderNum
else
echo "ignore "$1$file
fi
fi
done
echo "======end link for "$1"======"
}
#函数定义结束,接下来可以运行函数。
rm /usr/local/bin/protoc-gen-objcgrpc
ln -s $grpcPluginFile /usr/local/bin/protoc-gen-objcgrpc
subFolder="./"
generateProtosFromDir $subFolder
createLinkFromDir $subFolder 0
网友评论