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