1aa6500056
- Capture the version used to generated. - Check at compile time and runtime that generated code isn't from a newer version, also check that the min version required is also supported. - Keep the old constants/macros/functions to special case the last version that was working so those generated sources still work until we decide otherwise.
56 lines
1.7 KiB
Bash
Executable File
56 lines
1.7 KiB
Bash
Executable File
#!/bin/bash -eu
|
|
|
|
# This script checks that the runtime version number constant in the compiler
|
|
# source and in the runtime source is the same.
|
|
#
|
|
# A distro can be made of the protobuf sources with only a subset of the
|
|
# languages, so if the compiler depended on the Objective C runtime, those
|
|
# builds would break. At the same time, we don't want the runtime source
|
|
# depending on the compiler sources; so two copies of the constant are needed.
|
|
|
|
readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")")
|
|
readonly ProtoRootDir="${ScriptDir}/../.."
|
|
|
|
die() {
|
|
echo "Error: $1"
|
|
exit 1
|
|
}
|
|
|
|
readonly GeneratorSrc="${ProtoRootDir}/src/google/protobuf/compiler/objectivec/objectivec_file.cc"
|
|
readonly RuntimeSrc="${ProtoRootDir}/objectivec/GPBBootstrap.h"
|
|
|
|
check_constant() {
|
|
local ConstantName="$1"
|
|
|
|
# Collect version from generator sources.
|
|
local GeneratorVersion=$( \
|
|
cat "${GeneratorSrc}" \
|
|
| sed -n -e "s:const int32 ${ConstantName} = \([0-9]*\);:\1:p"
|
|
)
|
|
if [[ -z "${GeneratorVersion}" ]] ; then
|
|
die "Failed to find ${ConstantName} in the generator source (${GeneratorSrc})."
|
|
fi
|
|
|
|
# Collect version from runtime sources.
|
|
local RuntimeVersion=$( \
|
|
cat "${RuntimeSrc}" \
|
|
| sed -n -e "s:#define ${ConstantName} \([0-9]*\):\1:p"
|
|
)
|
|
if [[ -z "${RuntimeVersion}" ]] ; then
|
|
die "Failed to find ${ConstantName} in the runtime source (${RuntimeSrc})."
|
|
fi
|
|
|
|
# Compare them.
|
|
if [[ "${GeneratorVersion}" != "${RuntimeVersion}" ]] ; then
|
|
die "${ConstantName} values don't match!
|
|
Generator: ${GeneratorVersion} from ${GeneratorSrc}
|
|
Runtime: ${RuntimeVersion} from ${RuntimeSrc}
|
|
"
|
|
fi
|
|
}
|
|
|
|
# Do the check.
|
|
check_constant GOOGLE_PROTOBUF_OBJC_VERSION
|
|
|
|
# Success
|