7366efd81e
The previous two methods make it easy to transform between any and normal message. unPackeTo will throw error if the type url in any doesn't match the type of the message to be transformed to. is checks any's type url matches the give GPBMessage type.
95 lines
2.9 KiB
Bash
Executable File
95 lines
2.9 KiB
Bash
Executable File
#!/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
|
|
|
|
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 ..
|