| #!/bin/sh |
| |
| # Run this script to regenerate descriptor.pb.{h,cc} after the protocol |
| # compiler changes. Since these files are compiled into the protocol compiler |
| # itself, they cannot be generated automatically by a make rule. "make check" |
| # will fail if these files do not match what the protocol compiler would |
| # generate. |
| # |
| # HINT: Flags passed to generate_descriptor_proto.sh will be passed directly |
| # to make when building protoc. This is particularly useful for passing |
| # -j4 to run 4 jobs simultaneously. |
| |
| 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 |
| root of the distribution tree. |
| __EOF__ |
| exit 1 |
| fi |
| |
| if test ! -e src/Makefile; then |
| cat >&2 << __EOF__ |
| Could not find src/Makefile. You must run ./configure (and perhaps |
| ./autogen.sh) first. |
| __EOF__ |
| exit 1 |
| fi |
| |
| cd src |
| make $@ google/protobuf/stubs/pbconfig.h |
| |
| 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 .. |