1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #!/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 ..
|