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