Bash程序  |  90行  |  2.4 KB

#!/bin/bash
#
# A script that generates an ICU data file containing just timezone rules data.
# The file can be used to provide time zone rules updates for compatible
# devices. Note: Only the rules are contained and new timezones will not have
# the translations.
#
# Usage:
# ./createIcuUpdateResources.sh <tzdata tar.gz file> <ICU version>
#
# e.g.
# ./createIcuUpdateResources.sh ~/Downloads/tzdata2015b.tar.gz 55
#
# After execution the file is generated.

if (( $# != 2 )); then
  echo "Missing arguments"
  echo "Usage:"
  echo "./createIcuUpdateResources.sh <tzdata tar.gz file> <ICU version>"
  exit 1
fi

if [[ -z "${ANDROID_BUILD_TOP}" ]]; then
  echo "Configure your environment with build/envsetup.sh and lunch"
  exit 1
fi

TZ_DATA_FILE=$1
ICU_VERSION=$2

if [[ ! -f ${TZ_DATA_FILE} ]]; then
  echo "${TZ_DATA_FILE} not found"
  exit 1
fi

# Keep track of the original working dir. Must be the "tools" dir.
START_DIR=`pwd`
ICU_DIR=${ANDROID_BUILD_TOP}/external/icu/icu4c/source
BUILD_DIR=${START_DIR}/icu_build

# Fail if anything below fails
set -e

rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}

# Configure the build
${ICU_DIR}/runConfigureICU Linux
mkdir -p ${BUILD_DIR}/bin
cd ${BUILD_DIR}/tools/tzcode
ln -s ${ICU_DIR}/tools/tzcode/icuregions ./icuregions
ln -s ${ICU_DIR}/tools/tzcode/icuzones ./icuzones
cp ${TZ_DATA_FILE} .

# Make the tools
make

# Then make the whole thing
cd ${BUILD_DIR}
make -j32

# Generate the tzdata.lst file used to configure which files are included.
ICU_LIB_DIR=${BUILD_DIR}/lib
BIN_DIR=${BUILD_DIR}/bin
TZ_FILES=tzdata.lst

echo metaZones.res > ${TZ_FILES}
echo timezoneTypes.res >> ${TZ_FILES}
echo windowsZones.res >> ${TZ_FILES}
echo zoneinfo64.res >> ${TZ_FILES}

# Copy all the .res files we need here a from, e.g. ./data/out/build/icudt55l
RES_DIR=data/out/build/icudt${ICU_VERSION}l
cp ${RES_DIR}/metaZones.res ${BUILD_DIR}
cp ${RES_DIR}/timezoneTypes.res ${BUILD_DIR}
cp ${RES_DIR}/windowsZones.res ${BUILD_DIR}
cp ${RES_DIR}/zoneinfo64.res ${BUILD_DIR}

# This is the package name required for the .dat file to be accepted by ICU.
# This also affects the generated file name.
ICU_PACKAGE=icudt${ICU_VERSION}l

# Create the file
LD_LIBRARY_PATH=${ICU_LIB_DIR} ${BIN_DIR}/pkgdata -F -m common -v -T . -d . -p ${ICU_PACKAGE} ${TZ_FILES}
cp ${ICU_PACKAGE}.dat ${START_DIR}/icu_tzdata.dat

# Copy the file to the original working dir.
echo File can be found here: ${START_DIR}/icu_tzdata.dat