blob: 41975d05b47ca641623f4557eb74fd3e6369840e [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script is tested ONLY on Linux. It may not work correctly on
# Mac OS X.
TOPSRC="$(dirname "$0")/.."
source "${TOPSRC}/scripts/data_common.sh"
function check_build {
if [[ ! -x bin/icupkg || ! -x bin/pkgdata || ! -r lib/libicuuc.so ]]; then
echo "ICU has not been built. Configure and build ICU first by running" >&2
echo "${TOPSRC}/source/runConfigureICU Linux --disable-layout && make" >&2
exit 3
fi
}
# Rewrite data/Makefile to regenerate string pool bundles (pool.res)
# optimized for our trimmed data (after running trim_data.sh or
# android/patch_locale.sh)
# See http://site.icu-project.org/processes/release/tasks/build
# http://bugs.icu-project.org/trac/ticket/8101
# http://bugs.icu-project.org/trac/ticket/12069
function rewrite_data_makefile {
echo "Creating Makefile to regenerate pool bundles..."
sed -i.orig -e \
' /usePoolBundle/ {
s/usePoolBundle/writePoolBundle/
s/\(\$(UNITSRCDIR.*\)\$(<F)$/\1$(UNIT_SRC)/
s/\(\$(REGIONSRCDIR.*\)\$(<F)$/\1$(REGION_SRC)/
s/\(\$(CURRSRCDIR.*\)\$(<F)$/\1$(CURR_SRC)/
s/\(\$(LANGSRCDIR.*\)\$(<F)$/\1$(LANG_SRC)/
s/\(\$(ZONESRCDIR.*\)\$(<F)$/\1$(ZONE_SRC)/
s/\(\$(LOCSRCDIR.*\)\$(<F)$/\1$(RES_SRC)/
}' Makefile
}
# Rebuild the ICU data. 'make' has to be run twice because of
# http://bugs.icu-project.org/trac/ticket/10570
function build_data {
make clean
make
sed -i 's/css3transform.res/root.res/' out/tmp/icudata.lst
make
}
# Copy a single pool.res to the source tree and emit the sizes
# before and after.
function copy_pool_bundle {
echo "copying pool.res for $3"
echo "original: $(ls -l $2/pool.res | awk '{print $5;}')"
echo "optimized: $(ls -l $1 | awk '{print $5;}')"
cp "$1" "$2"
}
function copy_pool_bundles {
echo "Copying optimized pool bundles to the ${TOPSRC}/source/data ..."
POOLROOT="out/build/icudt${VERSION}l"
SRCDATA="${TOPSRC}/source/data"
copy_pool_bundle "${POOLROOT}/pool.res" "${SRCDATA}/locales" locales
for c in lang region zone curr unit; do
copy_pool_bundle "${POOLROOT}/${c}/pool.res" "${SRCDATA}/${c}" "${c}"
done
}
function clean_up_src {
echo "Cleaning up the source tree. Removing optimize pool bundles ..."
cd "${TOPSRC}/source/data"
for c in locales lang region zone curr unit; do
git checkout -- "${c}/pool.res"
done
}
function main() {
check_build
cd data
rewrite_data_makefile
echo "PASS1: Building the ICU data to generate custom pool bundles ..."
build_data
copy_pool_bundles
echo "Restoring the original Makefile"
mv Makefile.orig Makefile
echo "PASS2: Building the final ICU data with custom pool bundles"
build_data
ls -l out/tmp/icudt*l.dat
clean_up_src
echo "Done."
}
main "$@"