1 #!/bin/bash 2 3 # Copyright (C) 2015 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 source $(dirname $BASH_SOURCE)/common.sh 18 19 # A script for generating the source code of the subset of ICU used by Android in libcore. 20 21 # Clean out previous generated code / resources. 22 DEST_SRC_DIR=${ANDROID_ICU4J_DIR}/src/main/java 23 rm -rf ${DEST_SRC_DIR} 24 mkdir -p ${DEST_SRC_DIR} 25 26 DEST_RESOURCE_DIR=${ANDROID_ICU4J_DIR}/resources 27 rm -rf ${DEST_RESOURCE_DIR} 28 mkdir -p ${DEST_RESOURCE_DIR} 29 30 # Generate the source code needed by Android. 31 java ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jTransform ${INPUT_DIRS} ${DEST_SRC_DIR} 32 33 # Copy / transform the resources needed by the android_icu4j code. 34 for INPUT_DIR in ${INPUT_DIRS}; do 35 RESOURCES=$(find ${INPUT_DIR} -type f | egrep -v '(\.java|\/package\.html|\/ICUConfig\.properties)' || true ) 36 for RESOURCE in ${RESOURCES}; do 37 SOURCE_DIR=$(dirname ${RESOURCE}) 38 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,") 39 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,') 40 DEST_DIR=${DEST_RESOURCE_DIR}/${RELATIVE_DEST_DIR} 41 mkdir -p ${DEST_DIR} 42 cp $RESOURCE ${DEST_DIR} 43 done 44 done 45 46 # Create the ICUConfig.properties for Android. 47 mkdir -p ${ANDROID_ICU4J_DIR}/resources/android/icu 48 sed 's,com.ibm.icu,android.icu,' ${ANDROID_BUILD_TOP}/external/icu/icu4j/main/classes/core/src/com/ibm/icu/ICUConfig.properties > ${ANDROID_ICU4J_DIR}/resources/android/icu/ICUConfig.properties 49 50 # Clean out previous generated sample code. 51 SAMPLE_DEST_DIR=${ANDROID_ICU4J_DIR}/src/samples/java 52 rm -rf ${SAMPLE_DEST_DIR} 53 mkdir -p ${SAMPLE_DEST_DIR} 54 55 echo Processing sample code 56 # Create the android_icu4j sample code 57 java ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jBasicTransform ${SAMPLE_INPUT_FILES} ${SAMPLE_DEST_DIR} 58 59 # Clean out previous generated test code. 60 TEST_DEST_DIR=${ANDROID_ICU4J_DIR}/src/main/tests 61 rm -rf ${TEST_DEST_DIR} 62 mkdir -p ${TEST_DEST_DIR} 63 64 # Create a temporary directory into which the testdata.jar can be unzipped. It must be called src 65 # as that is what is used to determine the root of the directory containing all the files to 66 # copy and that is used to calculate the relative path to the file that is used for its output path. 67 echo Unpacking testdata.jar 68 TESTDATA_DIR=$(mktemp -d)/src 69 mkdir -p ${TESTDATA_DIR} 70 unzip ${ICU4J_DIR}/main/shared/data/testdata.jar com/ibm/icu/* -d ${TESTDATA_DIR} 71 72 echo Processing test code 73 # Create the android_icu4j test code 74 ALL_TEST_INPUT_DIRS="${TEST_INPUT_DIRS} ${TESTDATA_DIR}" 75 java ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jTestsTransform \ 76 ${ALL_TEST_INPUT_DIRS} ${TEST_DEST_DIR} 77 78 # Copy the data files. 79 echo Copying test data 80 for INPUT_DIR in ${ALL_TEST_INPUT_DIRS}; do 81 RESOURCES=$(find ${INPUT_DIR} -type f | egrep -v '(\.java|com\.ibm\.icu.*\.dat|/package\.html)' || true ) 82 for RESOURCE in ${RESOURCES}; do 83 SOURCE_DIR=$(dirname ${RESOURCE}) 84 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,") 85 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,') 86 DEST_DIR=${TEST_DEST_DIR}/${RELATIVE_DEST_DIR} 87 mkdir -p ${DEST_DIR} 88 cp $RESOURCE ${DEST_DIR} 89 done 90 done 91 92 echo Repackaging serialized test data 93 # Excludes JavaTimeZone.dat files as they depend on sun.util.calendar.ZoneInfo 94 for INPUT_DIR in ${ALL_TEST_INPUT_DIRS}; do 95 RESOURCES=$(find ${INPUT_DIR} -type f | egrep '(/com\.ibm\.icu.*\.dat)' | egrep -v "JavaTimeZone.dat" || true ) 96 for RESOURCE in ${RESOURCES}; do 97 SOURCE_DIR=$(dirname ${RESOURCE}) 98 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,") 99 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,') 100 SOURCE_NAME=$(basename ${RESOURCE}) 101 DEST_NAME=${SOURCE_NAME/com.ibm/android} 102 DEST_DIR=${TEST_DEST_DIR}/${RELATIVE_DEST_DIR} 103 mkdir -p ${DEST_DIR} 104 # A simple textual substitution works even though the file is binary as 'com.ibm' and 'android' 105 # are the same length. 106 sed 's|com[./]ibm|android|g' $RESOURCE > ${DEST_DIR}/${DEST_NAME} 107 done 108 done 109