xref: /aosp_15_r20/external/skia/third_party/harfbuzz/roll-harfbuzz.sh (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_REPO=https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git
4*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_REF=origin/upstream/main
5*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_DIR=third_party/externals/harfbuzz
6*c8dee2aaSAndroid Build Coastguard WorkerHB_BUILD_DIR=$(dirname -- "$0")
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerpreviousrev() {
9*c8dee2aaSAndroid Build Coastguard Worker  STEP="original revision" &&
10*c8dee2aaSAndroid Build Coastguard Worker  HB_PREVIOUS_REV=$(git grep "${HB_GIT_REPO}" HEAD~1 -- DEPS | sed 's!.*'${HB_GIT_REPO}'@\([[:xdigit:]]\{40\}\).*!\1!')
11*c8dee2aaSAndroid Build Coastguard Worker}
12*c8dee2aaSAndroid Build Coastguard Worker
13*c8dee2aaSAndroid Build Coastguard Workernextrev() {
14*c8dee2aaSAndroid Build Coastguard Worker  STEP="next revision" &&
15*c8dee2aaSAndroid Build Coastguard Worker  git -C ${HB_GIT_DIR} fetch &&
16*c8dee2aaSAndroid Build Coastguard Worker  HB_NEXT_REV=$(git -C ${HB_GIT_DIR} rev-parse ${HB_GIT_REF})
17*c8dee2aaSAndroid Build Coastguard Worker}
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Workerrolldeps() {
20*c8dee2aaSAndroid Build Coastguard Worker  STEP="roll-deps" &&
21*c8dee2aaSAndroid Build Coastguard Worker  sed -i'' -e "s!${HB_GIT_REPO}@${HB_PREVIOUS_REV}!${HB_GIT_REPO}@${HB_NEXT_REV}!" DEPS &&
22*c8dee2aaSAndroid Build Coastguard Worker  tools/git-sync-deps &&
23*c8dee2aaSAndroid Build Coastguard Worker  git add DEPS
24*c8dee2aaSAndroid Build Coastguard Worker}
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Workerrollbazel() {
27*c8dee2aaSAndroid Build Coastguard Worker  STEP="roll-bazel" &&
28*c8dee2aaSAndroid Build Coastguard Worker  sed -i'' -e "s!commit = \"${HB_PREVIOUS_REV}\",!commit = \"${HB_NEXT_REV}\",!" bazel/deps.bzl &&
29*c8dee2aaSAndroid Build Coastguard Worker  git add bazel/deps.bzl
30*c8dee2aaSAndroid Build Coastguard Worker}
31*c8dee2aaSAndroid Build Coastguard Worker
32*c8dee2aaSAndroid Build Coastguard Workercheck_all_files_are_categorized() {
33*c8dee2aaSAndroid Build Coastguard Worker  #for each file name in ${HB_GIT_DIR}/src/hb-*.{cc,h,hh}
34*c8dee2aaSAndroid Build Coastguard Worker  #  if the file name is not present in BUILD.gn
35*c8dee2aaSAndroid Build Coastguard Worker  #    should be added to BUILD.gn (in 'unused_sources' if unwanted)
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker  #for each file name \"src/.*\" in BUILD.gn
38*c8dee2aaSAndroid Build Coastguard Worker  #  if the file name does not exist
39*c8dee2aaSAndroid Build Coastguard Worker  #    should be removed from BUILD.gn
40*c8dee2aaSAndroid Build Coastguard Worker
41*c8dee2aaSAndroid Build Coastguard Worker  STEP="Updating BUILD.gn" &&
42*c8dee2aaSAndroid Build Coastguard Worker  HB_BUILD_DIR_REL=$(realpath --relative-to=${HB_GIT_DIR} ${HB_BUILD_DIR})
43*c8dee2aaSAndroid Build Coastguard Worker  ( # Create subshell for IFS, CDPATH, and cd.
44*c8dee2aaSAndroid Build Coastguard Worker    # This implementation doesn't handle '"' or '\n' in file names.
45*c8dee2aaSAndroid Build Coastguard Worker    IFS=$'\n' &&
46*c8dee2aaSAndroid Build Coastguard Worker    CDPATH= &&
47*c8dee2aaSAndroid Build Coastguard Worker    cd -- "${HB_GIT_DIR}" &&
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker    HB_SOURCE_MISSING=false &&
50*c8dee2aaSAndroid Build Coastguard Worker    find src -type f \( -name "*.cc" -o -name "*.h" -o -name "*.hh" \) | while read HB_SOURCE
51*c8dee2aaSAndroid Build Coastguard Worker    do
52*c8dee2aaSAndroid Build Coastguard Worker      if ! grep -qF "$HB_SOURCE" ${HB_BUILD_DIR_REL}/BUILD.gn; then
53*c8dee2aaSAndroid Build Coastguard Worker        if ! ${HB_SOURCE_MISSING}; then
54*c8dee2aaSAndroid Build Coastguard Worker          echo "Is in src/*.{cc,h,hh} but not in BUILD.gn:"
55*c8dee2aaSAndroid Build Coastguard Worker          HB_SOURCE_MISSING=true
56*c8dee2aaSAndroid Build Coastguard Worker        fi
57*c8dee2aaSAndroid Build Coastguard Worker        echo "      \"\$_${HB_SOURCE}\","
58*c8dee2aaSAndroid Build Coastguard Worker      fi
59*c8dee2aaSAndroid Build Coastguard Worker    done &&
60*c8dee2aaSAndroid Build Coastguard Worker
61*c8dee2aaSAndroid Build Coastguard Worker    GN_SOURCE_MISSING=false &&
62*c8dee2aaSAndroid Build Coastguard Worker    grep -oE "\"\\\$_src/[^\"]+\"" ${HB_BUILD_DIR_REL}/BUILD.gn | sed 's/^...\(.*\).$/\1/' | while read GN_SOURCE
63*c8dee2aaSAndroid Build Coastguard Worker    do
64*c8dee2aaSAndroid Build Coastguard Worker      if [ ! -f "${GN_SOURCE}" ]; then
65*c8dee2aaSAndroid Build Coastguard Worker        if ! ${GN_SOURCE_MISSING}; then
66*c8dee2aaSAndroid Build Coastguard Worker          echo "Is referenced in BUILD.gn but does not exist:" &&
67*c8dee2aaSAndroid Build Coastguard Worker          GN_SOURCE_MISSING=true
68*c8dee2aaSAndroid Build Coastguard Worker        fi
69*c8dee2aaSAndroid Build Coastguard Worker        echo "\"${GN_SOURCE}\""
70*c8dee2aaSAndroid Build Coastguard Worker      fi
71*c8dee2aaSAndroid Build Coastguard Worker    done &&
72*c8dee2aaSAndroid Build Coastguard Worker
73*c8dee2aaSAndroid Build Coastguard Worker    GN_SOURCE_DUPLICATES=$(sort ${HB_BUILD_DIR_REL}/BUILD.gn | uniq -d | grep -oE "\"\\\$_src/[^\"]+\"")
74*c8dee2aaSAndroid Build Coastguard Worker    if [ -n "${GN_SOURCE_DUPLICATES}" ]; then
75*c8dee2aaSAndroid Build Coastguard Worker      echo "Is listed more than once in BUILD.gn:" &&
76*c8dee2aaSAndroid Build Coastguard Worker      echo ${GN_SOURCE_DUPLICATES}
77*c8dee2aaSAndroid Build Coastguard Worker    fi
78*c8dee2aaSAndroid Build Coastguard Worker  )
79*c8dee2aaSAndroid Build Coastguard Worker}
80*c8dee2aaSAndroid Build Coastguard Worker
81*c8dee2aaSAndroid Build Coastguard Workercommit() {
82*c8dee2aaSAndroid Build Coastguard Worker  STEP="commit" &&
83*c8dee2aaSAndroid Build Coastguard Worker  HB_PREVIOUS_REV_SHORT=$(expr substr "${HB_PREVIOUS_REV}" 1 8) &&
84*c8dee2aaSAndroid Build Coastguard Worker  HB_NEXT_REV_SHORT=$(expr substr "${HB_NEXT_REV}" 1 8) &&
85*c8dee2aaSAndroid Build Coastguard Worker  HB_COMMIT_COUNT=$(git -C ${HB_GIT_DIR} rev-list --count ${HB_PREVIOUS_REV}..${HB_NEXT_REV}) &&
86*c8dee2aaSAndroid Build Coastguard Worker  git commit -m"Roll HarfBuzz from ${HB_PREVIOUS_REV_SHORT} to ${HB_NEXT_REV_SHORT} (${HB_COMMIT_COUNT} commits)
87*c8dee2aaSAndroid Build Coastguard Worker
88*c8dee2aaSAndroid Build Coastguard Worker${HB_GIT_REPO}/+log/${HB_PREVIOUS_REV}..${HB_NEXT_REV}
89*c8dee2aaSAndroid Build Coastguard Worker
90*c8dee2aaSAndroid Build Coastguard WorkerDisable: treat-URL-as-trailer"
91*c8dee2aaSAndroid Build Coastguard Worker}
92*c8dee2aaSAndroid Build Coastguard Worker
93*c8dee2aaSAndroid Build Coastguard Workerpreviousrev &&
94*c8dee2aaSAndroid Build Coastguard Workernextrev &&
95*c8dee2aaSAndroid Build Coastguard Workerrolldeps "$@" &&
96*c8dee2aaSAndroid Build Coastguard Workerrollbazel &&
97*c8dee2aaSAndroid Build Coastguard Workercheck_all_files_are_categorized &&
98*c8dee2aaSAndroid Build Coastguard Workercommit &&
99*c8dee2aaSAndroid Build Coastguard Workertrue || { echo "Failed step ${STEP}"; exit 1; }
100