|  | #!/bin/bash -eu | 
|  |  | 
|  | # This script checks that the runtime version number constant in the compiler | 
|  | # source and in the runtime source is the same. | 
|  | # | 
|  | # We don't really want the generator sources directly referencing the runtime | 
|  | # or the reverse, so they both have the same constant defined, and this script | 
|  | # is used in a test to ensure the values stay in sync. | 
|  |  | 
|  | die() { | 
|  | echo "Error: $1" | 
|  | exit 1 | 
|  | } | 
|  |  | 
|  | readonly GeneratorSrc="src/google/protobuf/compiler/objectivec/file.cc" | 
|  | readonly RuntimeSrc="objectivec/GPBBootstrap.h" | 
|  |  | 
|  | if [[ ! -e "${GeneratorSrc}" ]] ; then | 
|  | die "Failed to find generator file: ${GeneratorSrc}" | 
|  | fi | 
|  | if [[ ! -e "${RuntimeSrc}" ]] ; then | 
|  | die "Failed to find runtime file: ${RuntimeSrc}" | 
|  | fi | 
|  |  | 
|  | check_constant() { | 
|  | local ConstantName="$1" | 
|  |  | 
|  | # Collect version from generator sources. | 
|  | local GeneratorVersion=$( \ | 
|  | cat "${GeneratorSrc}" \ | 
|  | | sed -n -e "s:const int32_t ${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 |