xref: /aosp_15_r20/external/cronet/third_party/icu/scripts/update.sh (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker#!/bin/bash
2*6777b538SAndroid Build Coastguard Worker# Copyright (c) 2016 The Chromium Authors. All rights reserved.
3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
5*6777b538SAndroid Build Coastguard Worker
6*6777b538SAndroid Build Coastguard Worker# This is used to prepare for a major version update of ICU (e.g. from
7*6777b538SAndroid Build Coastguard Worker# 54.1 to 56.1). Running this script is step 1 in README.chromium.
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Workerif [ $# -lt 1 ];
10*6777b538SAndroid Build Coastguard Workerthen
11*6777b538SAndroid Build Coastguard Worker  echo "Usage: "$0" version (e.g. '56-1')" >&2
12*6777b538SAndroid Build Coastguard Worker  exit 1
13*6777b538SAndroid Build Coastguard Workerfi
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Workerversion="$1"
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Worker# Makes ("68" "1") from "68-1".
18*6777b538SAndroid Build Coastguard Workerreadonly major_minor_version=(${version//-/ })
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Worker# Just the major part of the ICU version number, e.g. "68".
21*6777b538SAndroid Build Coastguard Workerreadonly major_version="${major_minor_version[0]}"
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Workertmp_dir=~/tmp/icu-${version}
24*6777b538SAndroid Build Coastguard Workerrepo_url="https://github.com/unicode-org/icu/archive/refs/tags/release-${version}.tar.gz"
25*6777b538SAndroid Build Coastguard Workertarball="${tmp_dir}/source.tar.gz"
26*6777b538SAndroid Build Coastguard Workertreeroot="$(dirname "$0")/.."
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker# Check if the repo for $version is available.
29*6777b538SAndroid Build Coastguard Workerif ! wget --spider $repo_url 2>/dev/null; then
30*6777b538SAndroid Build Coastguard Worker  echo "$repo_url does not exists"
31*6777b538SAndroid Build Coastguard Worker  exit 1
32*6777b538SAndroid Build Coastguard Workerfi
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Workerecho "Download ${version} from the upstream repository to tmp directory"
35*6777b538SAndroid Build Coastguard Workerrm -rf $tmp_dir
36*6777b538SAndroid Build Coastguard Workermkdir -p $tmp_dir
37*6777b538SAndroid Build Coastguard Workercurl -L $repo_url --output $tarball
38*6777b538SAndroid Build Coastguard Worker
39*6777b538SAndroid Build Coastguard Workerecho "Cleaning up source/ ..."
40*6777b538SAndroid Build Coastguard Workerfor file in source LICENSE license.html readme.html APIChangeReport.html
41*6777b538SAndroid Build Coastguard Workerdo
42*6777b538SAndroid Build Coastguard Worker  rm -rf "${treeroot}/${file}"
43*6777b538SAndroid Build Coastguard Workerdone
44*6777b538SAndroid Build Coastguard Worker
45*6777b538SAndroid Build Coastguard Workerecho "Extracting ${version} to ICU tree root"
46*6777b538SAndroid Build Coastguard Workerfor file in source license.html readme.html APIChangeReport.html
47*6777b538SAndroid Build Coastguard Workerdo
48*6777b538SAndroid Build Coastguard Worker  tar -xf $tarball -C $treeroot "icu-release-${version}/icu4c/${file}" --strip-components=2
49*6777b538SAndroid Build Coastguard Workerdone
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Workerecho "Extracting License to ICU tree root"
52*6777b538SAndroid Build Coastguard Workertar -xf $tarball -C $treeroot "icu-release-${version}/LICENSE" --strip-components=1
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Workerecho "Cleaning up tmp directory"
55*6777b538SAndroid Build Coastguard Workerrm -rf $tmp_dir
56*6777b538SAndroid Build Coastguard Worker
57*6777b538SAndroid Build Coastguard Workerecho "deleting directories we don't care about ..."
58*6777b538SAndroid Build Coastguard Workerfor d in layoutex data/xml allinone
59*6777b538SAndroid Build Coastguard Workerdo
60*6777b538SAndroid Build Coastguard Worker  rm -rf "${treeroot}/source/${d}"
61*6777b538SAndroid Build Coastguard Workerdone
62*6777b538SAndroid Build Coastguard Worker
63*6777b538SAndroid Build Coastguard Workerecho "deleting Visual Studio build files ..."
64*6777b538SAndroid Build Coastguard Workerfind "${treeroot}/source" -name *vcxp* -o -name *sln | xargs rm
65*6777b538SAndroid Build Coastguard Worker
66*6777b538SAndroid Build Coastguard Workerecho "restoring local data and configuration files ..."
67*6777b538SAndroid Build Coastguard Workerwhile read line
68*6777b538SAndroid Build Coastguard Workerdo
69*6777b538SAndroid Build Coastguard Worker  # $line is not quoted to expand "*html.ucm".
70*6777b538SAndroid Build Coastguard Worker  git checkout -- "${treeroot}/source/data/"${line}
71*6777b538SAndroid Build Coastguard Workerdone < "${treeroot}/scripts/data_files_to_preserve.txt"
72*6777b538SAndroid Build Coastguard Worker
73*6777b538SAndroid Build Coastguard Workerecho "Patching configure to work without source/{layoutex}  ..."
74*6777b538SAndroid Build Coastguard Workersed -i.orig -e '/^ac_config_files=/ s:\ layoutex/Makefile::g' \
75*6777b538SAndroid Build Coastguard Worker  -e '/^ac_config_files=/ s: samples/M: samples/M:' \
76*6777b538SAndroid Build Coastguard Worker  "${treeroot}/source/configure"
77*6777b538SAndroid Build Coastguard Workerrm -f "${treeroot}/source/configure.orig"
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Workerecho "git-adding new files"
80*6777b538SAndroid Build Coastguard Workergit status source | sed -n '/^Untracked/,$ p' | grep source | xargs git add
81*6777b538SAndroid Build Coastguard Worker
82*6777b538SAndroid Build Coastguard Workercd "${treeroot}"
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Workerecho "Updating sources.gni"
85*6777b538SAndroid Build Coastguard Worker
86*6777b538SAndroid Build Coastguard Workerfind  source/i18n -maxdepth 1  ! -type d  | egrep  '\.(c|cpp|h)$' |sort | \
87*6777b538SAndroid Build Coastguard Worker  sed 's/^\(.*\)$/  "\1",/' > i18n_src.list
88*6777b538SAndroid Build Coastguard Workerls source/i18n/unicode/*h | sort | sed 's/^\(.*\)$/  "\1",/' > i18n_hdr.list
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Workerfind  source/common -maxdepth 1  ! -type d  | egrep  '\.(c|cpp|h)$' |sort | \
91*6777b538SAndroid Build Coastguard Worker  sed 's/^\(.*\)$/  "\1",/' > common_src.list
92*6777b538SAndroid Build Coastguard Workerls source/common/unicode/*h | sort | \
93*6777b538SAndroid Build Coastguard Worker  sed 's/^\(.*\)$/  "\1",/' > common_hdr.list
94*6777b538SAndroid Build Coastguard Worker
95*6777b538SAndroid Build Coastguard Workersed   -i \
96*6777b538SAndroid Build Coastguard Worker  '/I18N_SRC_START/,/I18N_SRC_END/ {
97*6777b538SAndroid Build Coastguard Worker      /I18N_SRC_START/ r i18n_src.list
98*6777b538SAndroid Build Coastguard Worker      /source.i18n/ d
99*6777b538SAndroid Build Coastguard Worker   }
100*6777b538SAndroid Build Coastguard Worker   /I18N_HDR_START/,/I18N_HDR_END/ {
101*6777b538SAndroid Build Coastguard Worker      /I18N_HDR_START/ r i18n_hdr.list
102*6777b538SAndroid Build Coastguard Worker      /source.i18n/ d
103*6777b538SAndroid Build Coastguard Worker   }
104*6777b538SAndroid Build Coastguard Worker   /COMMON_SRC_START/,/COMMON_SRC_END/ {
105*6777b538SAndroid Build Coastguard Worker      /COMMON_SRC_START/ r common_src.list
106*6777b538SAndroid Build Coastguard Worker      /source.common/ d
107*6777b538SAndroid Build Coastguard Worker   }
108*6777b538SAndroid Build Coastguard Worker   /COMMON_HDR_START/,/COMMON_HDR_END/ {
109*6777b538SAndroid Build Coastguard Worker      /COMMON_HDR_START/ r common_hdr.list
110*6777b538SAndroid Build Coastguard Worker      /source.common/ d
111*6777b538SAndroid Build Coastguard Worker   }' sources.gni
112*6777b538SAndroid Build Coastguard Worker
113*6777b538SAndroid Build Coastguard Workerecho "Updating icu.gyp* files"
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Workerls source/i18n/unicode/*h | sort | \
116*6777b538SAndroid Build Coastguard Worker  sed "s/^.*i18n\/\(.*\)$/              '\1',/" > i18n_hdr.list
117*6777b538SAndroid Build Coastguard Workerls source/common/unicode/*h | sort | \
118*6777b538SAndroid Build Coastguard Worker  sed "s/^.*common\/\(.*\)$/              '\1',/" > common_hdr.list
119*6777b538SAndroid Build Coastguard Worker
120*6777b538SAndroid Build Coastguard Worker
121*6777b538SAndroid Build Coastguard Workerfind  source/i18n -maxdepth 1  ! -type d  | egrep  '\.(c|cpp)$' | \
122*6777b538SAndroid Build Coastguard Worker  sort | sed "s/^\(.*\)$/      '\1',/" > i18n_src.list
123*6777b538SAndroid Build Coastguard Workerfind  source/common -maxdepth 1  ! -type d  | egrep  '\.(c|cpp)$' | \
124*6777b538SAndroid Build Coastguard Worker  sort | sed "s/^\(.*\)$/      '\1',/" > common_src.list
125*6777b538SAndroid Build Coastguard Worker
126*6777b538SAndroid Build Coastguard Workersed   -i \
127*6777b538SAndroid Build Coastguard Worker  '/I18N_HDR_START/,/I18N_HDR_END/ {
128*6777b538SAndroid Build Coastguard Worker      /I18N_HDR_START/ r i18n_hdr.list
129*6777b538SAndroid Build Coastguard Worker      /.unicode.*\.h.,$/ d
130*6777b538SAndroid Build Coastguard Worker   }
131*6777b538SAndroid Build Coastguard Worker   /COMMON_HDR_START/,/COMMON_HDR_END/ {
132*6777b538SAndroid Build Coastguard Worker      /COMMON_HDR_START/ r common_hdr.list
133*6777b538SAndroid Build Coastguard Worker      /.unicode.*\.h.,$/ d
134*6777b538SAndroid Build Coastguard Worker   }' icu.gyp
135*6777b538SAndroid Build Coastguard Worker
136*6777b538SAndroid Build Coastguard Workersed   -i \
137*6777b538SAndroid Build Coastguard Worker  '/I18N_SRC_START/,/I18N_SRC_END/ {
138*6777b538SAndroid Build Coastguard Worker      /I18N_SRC_START/ r i18n_src.list
139*6777b538SAndroid Build Coastguard Worker      /source\/i18n/ d
140*6777b538SAndroid Build Coastguard Worker   }
141*6777b538SAndroid Build Coastguard Worker   /COMMON_SRC_START/,/COMMON_SRC_END/ {
142*6777b538SAndroid Build Coastguard Worker      /COMMON_SRC_START/ r common_src.list
143*6777b538SAndroid Build Coastguard Worker      /source\/common/ d
144*6777b538SAndroid Build Coastguard Worker   }' icu.gypi
145*6777b538SAndroid Build Coastguard Worker
146*6777b538SAndroid Build Coastguard Worker# Update the major version number registered in version.json.
147*6777b538SAndroid Build Coastguard Worker# The version is written out into a text file to allow other tools to
148*6777b538SAndroid Build Coastguard Worker# read it without parsing .gni files.
149*6777b538SAndroid Build Coastguard Workercat << EOF > version.json
150*6777b538SAndroid Build Coastguard Worker{
151*6777b538SAndroid Build Coastguard Worker "major_version": "${major_version}"
152*6777b538SAndroid Build Coastguard Worker}
153*6777b538SAndroid Build Coastguard WorkerEOF
154*6777b538SAndroid Build Coastguard Worker
155*6777b538SAndroid Build Coastguard Workerecho "Done"
156