| #!/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 |