diff options
Diffstat (limited to 'generate_descriptor_proto.sh')
-rwxr-xr-x | generate_descriptor_proto.sh | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/generate_descriptor_proto.sh b/generate_descriptor_proto.sh index 81b8a0d6..8a5ed48a 100755 --- a/generate_descriptor_proto.sh +++ b/generate_descriptor_proto.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # Run this script to regenerate descriptor.pb.{h,cc} after the protocol # compiler changes. Since these files are compiled into the protocol compiler @@ -10,8 +10,6 @@ # to make when building protoc. This is particularly useful for passing # -j4 to run 4 jobs simultaneously. -set -e - if test ! -e src/google/protobuf/stubs/common.h; then cat >&2 << __EOF__ Could not find source code. Make sure you are running this script from the @@ -43,8 +41,24 @@ declare -a RUNTIME_PROTO_FILES=(\ google/protobuf/type.proto \ google/protobuf/wrappers.proto) +declare -a COMPILER_PROTO_FILES=(\ + google/protobuf/compiler/plugin.proto) + CORE_PROTO_IS_CORRECT=0 PROCESS_ROUND=1 +BOOTSTRAP_PROTOC="" +while [ $# -gt 0 ]; do + case $1 in + --bootstrap_protoc) + BOOTSTRAP_PROTOC=$2 + shift + ;; + *) + break + ;; + esac + shift +done TMP=$(mktemp -d) echo "Updating descriptor protos..." while [ $CORE_PROTO_IS_CORRECT -ne 1 ] @@ -52,11 +66,22 @@ do echo "Round $PROCESS_ROUND" CORE_PROTO_IS_CORRECT=1 - make $@ protoc && - ./protoc --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:$TMP ${RUNTIME_PROTO_FILES[@]} && \ - ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:$TMP google/protobuf/compiler/plugin.proto + if [ "$BOOTSTRAP_PROTOC" != "" ]; then + PROTOC=$BOOTSTRAP_PROTOC + BOOTSTRAP_PROTOC="" + else + make $@ protoc + if test $? -ne 0; then + echo "Failed to build protoc." + exit 1 + fi + PROTOC="./protoc" + fi + + $PROTOC --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:$TMP ${RUNTIME_PROTO_FILES[@]} && \ + $PROTOC --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:$TMP ${COMPILER_PROTO_FILES[@]} - for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do BASE_NAME=${PROTO_FILE%.*} diff ${BASE_NAME}.pb.h $TMP/${BASE_NAME}.pb.h > /dev/null if test $? -ne 0; then @@ -68,36 +93,31 @@ do fi done - diff google/protobuf/compiler/plugin.pb.h $TMP/google/protobuf/compiler/plugin.pb.h > /dev/null - if test $? -ne 0; then - CORE_PROTO_IS_CORRECT=0 - fi - diff google/protobuf/compiler/plugin.pb.cc $TMP/google/protobuf/compiler/plugin.pb.cc > /dev/null - if test $? -ne 0; then - CORE_PROTO_IS_CORRECT=0 - fi - # Only override the output if the files are different to avoid re-compilation # of the protoc. if [ $CORE_PROTO_IS_CORRECT -ne 1 ]; then - for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do BASE_NAME=${PROTO_FILE%.*} mv $TMP/${BASE_NAME}.pb.h ${BASE_NAME}.pb.h mv $TMP/${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc done - mv $TMP/google/protobuf/compiler/plugin.pb.* google/protobuf/compiler/ fi PROCESS_ROUND=$((PROCESS_ROUND + 1)) done cd .. -if test -x objectivec/generate_descriptors_proto.sh; then +if test -x objectivec/generate_well_known_types.sh; then echo "Generating messages for objc." - objectivec/generate_descriptors_proto.sh $@ + objectivec/generate_well_known_types.sh $@ fi if test -x csharp/generate_protos.sh; then echo "Generating messages for C#." csharp/generate_protos.sh $@ fi + +if test -x php/generate_descriptor_protos.sh; then + echo "Generating messages for PHP." + php/generate_descriptor_protos.sh $@ +fi |