| #!/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 "$@" |