1*1b3f573fSAndroid Build Coastguard Worker#!/bin/bash -eu 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Worker# This script checks that the runtime version number constant in the compiler 4*1b3f573fSAndroid Build Coastguard Worker# source and in the runtime source is the same. 5*1b3f573fSAndroid Build Coastguard Worker# 6*1b3f573fSAndroid Build Coastguard Worker# A distro can be made of the protobuf sources with only a subset of the 7*1b3f573fSAndroid Build Coastguard Worker# languages, so if the compiler depended on the Objective C runtime, those 8*1b3f573fSAndroid Build Coastguard Worker# builds would break. At the same time, we don't want the runtime source 9*1b3f573fSAndroid Build Coastguard Worker# depending on the compiler sources; so two copies of the constant are needed. 10*1b3f573fSAndroid Build Coastguard Worker 11*1b3f573fSAndroid Build Coastguard Workerreadonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") 12*1b3f573fSAndroid Build Coastguard Workerreadonly ProtoRootDir="${ScriptDir}/../.." 13*1b3f573fSAndroid Build Coastguard Worker 14*1b3f573fSAndroid Build Coastguard Workerdie() { 15*1b3f573fSAndroid Build Coastguard Worker echo "Error: $1" 16*1b3f573fSAndroid Build Coastguard Worker exit 1 17*1b3f573fSAndroid Build Coastguard Worker} 18*1b3f573fSAndroid Build Coastguard Worker 19*1b3f573fSAndroid Build Coastguard Workerreadonly GeneratorSrc="${ProtoRootDir}/src/google/protobuf/compiler/objectivec/objectivec_file.cc" 20*1b3f573fSAndroid Build Coastguard Workerreadonly RuntimeSrc="${ProtoRootDir}/objectivec/GPBBootstrap.h" 21*1b3f573fSAndroid Build Coastguard Worker 22*1b3f573fSAndroid Build Coastguard Workercheck_constant() { 23*1b3f573fSAndroid Build Coastguard Worker local ConstantName="$1" 24*1b3f573fSAndroid Build Coastguard Worker 25*1b3f573fSAndroid Build Coastguard Worker # Collect version from generator sources. 26*1b3f573fSAndroid Build Coastguard Worker local GeneratorVersion=$( \ 27*1b3f573fSAndroid Build Coastguard Worker cat "${GeneratorSrc}" \ 28*1b3f573fSAndroid Build Coastguard Worker | sed -n -e "s:const int32_t ${ConstantName} = \([0-9]*\);:\1:p" 29*1b3f573fSAndroid Build Coastguard Worker ) 30*1b3f573fSAndroid Build Coastguard Worker if [[ -z "${GeneratorVersion}" ]] ; then 31*1b3f573fSAndroid Build Coastguard Worker die "Failed to find ${ConstantName} in the generator source (${GeneratorSrc})." 32*1b3f573fSAndroid Build Coastguard Worker fi 33*1b3f573fSAndroid Build Coastguard Worker 34*1b3f573fSAndroid Build Coastguard Worker # Collect version from runtime sources. 35*1b3f573fSAndroid Build Coastguard Worker local RuntimeVersion=$( \ 36*1b3f573fSAndroid Build Coastguard Worker cat "${RuntimeSrc}" \ 37*1b3f573fSAndroid Build Coastguard Worker | sed -n -e "s:#define ${ConstantName} \([0-9]*\):\1:p" 38*1b3f573fSAndroid Build Coastguard Worker ) 39*1b3f573fSAndroid Build Coastguard Worker if [[ -z "${RuntimeVersion}" ]] ; then 40*1b3f573fSAndroid Build Coastguard Worker die "Failed to find ${ConstantName} in the runtime source (${RuntimeSrc})." 41*1b3f573fSAndroid Build Coastguard Worker fi 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker # Compare them. 44*1b3f573fSAndroid Build Coastguard Worker if [[ "${GeneratorVersion}" != "${RuntimeVersion}" ]] ; then 45*1b3f573fSAndroid Build Coastguard Worker die "${ConstantName} values don't match! 46*1b3f573fSAndroid Build Coastguard Worker Generator: ${GeneratorVersion} from ${GeneratorSrc} 47*1b3f573fSAndroid Build Coastguard Worker Runtime: ${RuntimeVersion} from ${RuntimeSrc} 48*1b3f573fSAndroid Build Coastguard Worker" 49*1b3f573fSAndroid Build Coastguard Worker fi 50*1b3f573fSAndroid Build Coastguard Worker} 51*1b3f573fSAndroid Build Coastguard Worker 52*1b3f573fSAndroid Build Coastguard Worker# Do the check. 53*1b3f573fSAndroid Build Coastguard Workercheck_constant GOOGLE_PROTOBUF_OBJC_VERSION 54*1b3f573fSAndroid Build Coastguard Worker 55*1b3f573fSAndroid Build Coastguard Worker# Success 56