xref: /aosp_15_r20/external/protobuf/objectivec/DevTools/check_version_stamps.sh (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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