aboutsummaryrefslogtreecommitdiff
path: root/generate_descriptor_proto.sh
diff options
context:
space:
mode:
Diffstat (limited to 'generate_descriptor_proto.sh')
-rwxr-xr-xgenerate_descriptor_proto.sh67
1 files changed, 64 insertions, 3 deletions
diff --git a/generate_descriptor_proto.sh b/generate_descriptor_proto.sh
index 07219dc1..b6e6e07b 100755
--- a/generate_descriptor_proto.sh
+++ b/generate_descriptor_proto.sh
@@ -27,7 +27,68 @@ __EOF__
fi
cd src
-make $@ protoc &&
- ./protoc --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:. google/protobuf/descriptor.proto && \
- ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:. google/protobuf/compiler/plugin.proto
+
+declare -a RUNTIME_PROTO_FILES=(\
+ google/protobuf/any.proto \
+ google/protobuf/api.proto \
+ google/protobuf/descriptor.proto \
+ google/protobuf/duration.proto \
+ google/protobuf/empty.proto \
+ google/protobuf/field_mask.proto \
+ google/protobuf/source_context.proto \
+ google/protobuf/struct.proto \
+ google/protobuf/timestamp.proto \
+ google/protobuf/type.proto \
+ google/protobuf/wrappers.proto)
+
+CORE_PROTO_IS_CORRECT=0
+PROCESS_ROUND=1
+echo "Updating descriptor protos..."
+while [ $CORE_PROTO_IS_CORRECT -ne 1 ]
+do
+ echo "Round $PROCESS_ROUND"
+ CORE_PROTO_IS_CORRECT=1
+ for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do
+ BASE_NAME=${PROTO_FILE%.*}
+ cp ${BASE_NAME}.pb.h ${BASE_NAME}.pb.h.tmp
+ cp ${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc.tmp
+ done
+ cp google/protobuf/compiler/plugin.pb.h google/protobuf/compiler/plugin.pb.h.tmp
+ cp google/protobuf/compiler/plugin.pb.cc google/protobuf/compiler/plugin.pb.cc.tmp
+
+ make $@ protoc &&
+ ./protoc --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:. ${RUNTIME_PROTO_FILES[@]} && \
+ ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:. google/protobuf/compiler/plugin.proto
+
+ for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do
+ BASE_NAME=${PROTO_FILE%.*}
+ diff ${BASE_NAME}.pb.h ${BASE_NAME}.pb.h.tmp > /dev/null
+ if test $? -ne 0; then
+ CORE_PROTO_IS_CORRECT=0
+ fi
+ diff ${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc.tmp > /dev/null
+ if test $? -ne 0; then
+ CORE_PROTO_IS_CORRECT=0
+ fi
+ done
+
+ diff google/protobuf/compiler/plugin.pb.h google/protobuf/compiler/plugin.pb.h.tmp > /dev/null
+ if test $? -ne 0; then
+ CORE_PROTO_IS_CORRECT=0
+ fi
+ diff google/protobuf/compiler/plugin.pb.cc google/protobuf/compiler/plugin.pb.cc.tmp > /dev/null
+ if test $? -ne 0; then
+ CORE_PROTO_IS_CORRECT=0
+ fi
+
+ for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do
+ BASE_NAME=${PROTO_FILE%.*}
+ rm ${BASE_NAME}.pb.h.tmp
+ rm ${BASE_NAME}.pb.cc.tmp
+ done
+ rm google/protobuf/compiler/plugin.pb.h.tmp
+ rm google/protobuf/compiler/plugin.pb.cc.tmp
+
+ PROCESS_ROUND=$((PROCESS_ROUND + 1))
+done
cd ..