blob: 2498ae80e0916e8f3112c1dcfe496febbe4cd963 [file] [log] [blame]
Neil Fuller04b22852015-10-26 16:21:44 +00001#!/bin/bash
2
Neil Fuller3a353ce2015-10-09 13:30:08 +01003# 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
Paul Duffin69ef1ba2016-02-26 16:21:51 +000017source $(dirname $BASH_SOURCE)/common.sh
Neil Fuller04b22852015-10-26 16:21:44 +000018
Neil Fuller3a353ce2015-10-09 13:30:08 +010019# A script for generating the source code of the subset of ICU used by Android in libcore.
20
Neil Fuller3a353ce2015-10-09 13:30:08 +010021# Clean out previous generated code / resources.
22DEST_SRC_DIR=${ANDROID_ICU4J_DIR}/src/main/java
23rm -rf ${DEST_SRC_DIR}
24mkdir -p ${DEST_SRC_DIR}
25
26DEST_RESOURCE_DIR=${ANDROID_ICU4J_DIR}/resources
27rm -rf ${DEST_RESOURCE_DIR}
28mkdir -p ${DEST_RESOURCE_DIR}
29
30# Generate the source code needed by Android.
Neil Fullerff178d42016-06-08 19:07:01 +020031${SRCGEN_JAVA_BINARY} ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jTransform ${INPUT_DIRS} ${DEST_SRC_DIR}
Neil Fuller3a353ce2015-10-09 13:30:08 +010032
Neil Fullercc49f812015-11-02 18:18:32 +000033# Copy / transform the resources needed by the android_icu4j code.
Neil Fuller3a353ce2015-10-09 13:30:08 +010034for INPUT_DIR in ${INPUT_DIRS}; do
Neil Fuller04b22852015-10-26 16:21:44 +000035 RESOURCES=$(find ${INPUT_DIR} -type f | egrep -v '(\.java|\/package\.html|\/ICUConfig\.properties)' || true )
Neil Fuller3a353ce2015-10-09 13:30:08 +010036 for RESOURCE in ${RESOURCES}; do
37 SOURCE_DIR=$(dirname ${RESOURCE})
38 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,")
Neil Fuller04b22852015-10-26 16:21:44 +000039 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,')
Neil Fuller3a353ce2015-10-09 13:30:08 +010040 DEST_DIR=${DEST_RESOURCE_DIR}/${RELATIVE_DEST_DIR}
41 mkdir -p ${DEST_DIR}
42 cp $RESOURCE ${DEST_DIR}
43 done
44done
45
46# Create the ICUConfig.properties for Android.
47mkdir -p ${ANDROID_ICU4J_DIR}/resources/android/icu
48sed '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
Neil Fullercc49f812015-11-02 18:18:32 +000049
50# Clean out previous generated sample code.
51SAMPLE_DEST_DIR=${ANDROID_ICU4J_DIR}/src/samples/java
52rm -rf ${SAMPLE_DEST_DIR}
53mkdir -p ${SAMPLE_DEST_DIR}
54
55echo Processing sample code
56# Create the android_icu4j sample code
Neil Fullerff178d42016-06-08 19:07:01 +020057${SRCGEN_JAVA_BINARY} ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jBasicTransform ${SAMPLE_INPUT_FILES} ${SAMPLE_DEST_DIR}
Paul Duffin69ef1ba2016-02-26 16:21:51 +000058
59# Clean out previous generated test code.
60TEST_DEST_DIR=${ANDROID_ICU4J_DIR}/src/main/tests
61rm -rf ${TEST_DEST_DIR}
62mkdir -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.
67echo Unpacking testdata.jar
68TESTDATA_DIR=$(mktemp -d)/src
69mkdir -p ${TESTDATA_DIR}
70unzip ${ICU4J_DIR}/main/shared/data/testdata.jar com/ibm/icu/* -d ${TESTDATA_DIR}
71
72echo Processing test code
73# Create the android_icu4j test code
74ALL_TEST_INPUT_DIRS="${TEST_INPUT_DIRS} ${TESTDATA_DIR}"
Neil Fullerff178d42016-06-08 19:07:01 +020075${SRCGEN_JAVA_BINARY} ${SRCGEN_JAVA_ARGS} -cp ${CLASSPATH} com.android.icu4j.srcgen.Icu4jTestsTransform \
Paul Duffin69ef1ba2016-02-26 16:21:51 +000076 ${ALL_TEST_INPUT_DIRS} ${TEST_DEST_DIR}
77
Victor Chang5d40af92017-07-24 17:46:55 +010078# Apply line-based javadoc patches
79${ANDROID_BUILD_TOP}/external/icu/tools/srcgen/javadoc_patches/apply_patches.sh
80
Paul Duffin69ef1ba2016-02-26 16:21:51 +000081# Copy the data files.
82echo Copying test data
83for INPUT_DIR in ${ALL_TEST_INPUT_DIRS}; do
Paul Duffin79864822016-03-14 12:08:13 +000084 RESOURCES=$(find ${INPUT_DIR} -type f | egrep -v '(\.java|com\.ibm\.icu.*\.dat|/package\.html)' || true )
Paul Duffin69ef1ba2016-02-26 16:21:51 +000085 for RESOURCE in ${RESOURCES}; do
86 SOURCE_DIR=$(dirname ${RESOURCE})
87 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,")
88 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,')
89 DEST_DIR=${TEST_DEST_DIR}/${RELATIVE_DEST_DIR}
90 mkdir -p ${DEST_DIR}
91 cp $RESOURCE ${DEST_DIR}
92 done
93done
Paul Duffin79864822016-03-14 12:08:13 +000094
95echo Repackaging serialized test data
96# Excludes JavaTimeZone.dat files as they depend on sun.util.calendar.ZoneInfo
97for INPUT_DIR in ${ALL_TEST_INPUT_DIRS}; do
98 RESOURCES=$(find ${INPUT_DIR} -type f | egrep '(/com\.ibm\.icu.*\.dat)' | egrep -v "JavaTimeZone.dat" || true )
99 for RESOURCE in ${RESOURCES}; do
100 SOURCE_DIR=$(dirname ${RESOURCE})
101 RELATIVE_SOURCE_DIR=$(echo ${SOURCE_DIR} | sed "s,${INPUT_DIR}/,,")
102 RELATIVE_DEST_DIR=$(echo ${RELATIVE_SOURCE_DIR} | sed 's,com/ibm/icu,android/icu,')
103 SOURCE_NAME=$(basename ${RESOURCE})
104 DEST_NAME=${SOURCE_NAME/com.ibm/android}
105 DEST_DIR=${TEST_DEST_DIR}/${RELATIVE_DEST_DIR}
106 mkdir -p ${DEST_DIR}
107 # A simple textual substitution works even though the file is binary as 'com.ibm' and 'android'
108 # are the same length.
109 sed 's|com[./]ibm|android|g' $RESOURCE > ${DEST_DIR}/${DEST_NAME}
110 done
111done