* Copyright (C) 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html
********************************************************************************
* Copyright (C) 2008-2012, International Business Machines Corporation         *
* and others. All Rights Reserved.                                             *
*                                                                              *
* 6/26/08 - Created by Brian Rower - heavy copying from ICU4J readme & others  *
*                                                                              *
********************************************************************************

Procedures for building ICU4J data from ICU4C data:

*Setup*

In the following,
        $icu4c_root is the ICU4C root directory
        $icu4j_root is the ICU4J root directory
        $jdk_bin is the JDK bin directory (for the jar tool)

1. *Linux*
   Download, configure, and build ICU4C. When you configure ICU4C, you must
   set the environment variable ICU_DATA_BUILDTOOL_OPTS to
   "--include_uni_core_data" to build additional required ICU4J data:

        ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU Linux
   
   *Windows*
    - Add ICU_DATA_BUILDTOOL_OPTS as a system environment variable with value "--include_uni_core_data"
    - Build $icu4c_root\source\allinone\allinone.sln in Visual Studio

   For more instructions on downloading and building ICU4C,
   see the ICU4C readme at:
        https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/main/icu4c/readme.html#HowToBuild
        (Windows: build as 'x86, Release' otherwise you will have to set 'CFG' differently below.)

    *NOTE* You should do a full rebuild after any data changes.
    
1a.  If you didn't download from GitHub, you will also need the "icu4c-*-data.zip" file.  Unpack this file and replace the icu/source/data directory's contents with the contents of the data directory from the zip file.  


2. Step 2 depends on whether you are on a Windows or a Unix-type
platform.

*Windows* 

2a. On Developer Command Prompt for VS, cd to $icu4c_root\source\data.

2b. On Developer Command Prompt for VS,
        nmake -f makedata.mak ICUMAKE=$icu4c_root\source\data\ CFG=x86\Release JAR="$jdk_bin\jar" ICU4J_ROOT=$icu4j_root icu4j-data-install

       Continue with step 3 below, in Java:


*Linux*

        $icu4c_build is the ICU4C root build directory,
        which is $icu4c_root/source in an in-source build.
        (in other words, $icu4c_build is where you ran runConfigureICU or configure)

2c. On the command line, cd to $icu4c_build/data

2d. Do
        make JAR=$jdk_bin/jar ICU4J_ROOT=$icu4j_root icu4j-data-install

       (You can omit the JAR if it's just jar.)

	Continue with step 3, in Java:

Step 2 on either platform will produce two files: icudata.jar and
icutzdata.jar in $icu4j_root/main/shared/data.

*Java*

3. After the ICU4C-side steps above, build the main target of the
        ICU4J ant build to unpack the jar files with the following commands:

        cd $icu4j_root
        ant main

   Run the tests locally and make sure they pass:
   
        ant check
