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