Name: ICU
URL: http://site.icu-project.org/
License: X License (old version). For license pedigree see the
         ICU FAQ at http://icu-project.org/userguide/icufaq.html
License File: license.html

Description:
This directory contains the source code of ICU 4.6.1 for C/C++. Based
on ICU code from Chromium's repository. See Chromium's ICU
README.chromium file for details on Chromium modifications to the ICU
library.

Page Speed uses ICU to enable IDN
(http://en.wikipedia.org/wiki/Internationalized_domain_name) support
in googleurl. Thus we can remove all parts of the ICU data file
(http://userguide.icu-project.org/icudata), except for the IDN
stringprep profile "nameprep" (http://tools.ietf.org/html/rfc3491),
which is required for IDN. To do this we generate a custom ICU data
file. Our process for generating a custom ICU data file is:

On Linux:
Download an ICU source tarball for the version of ICU being used, from
http://site.icu-project.org/download. untar that file, cd into the
'icu' directory, and follow these steps:

cd source
./runConfigureICU Linux
make  # This builds the entire ICU package

cd data
make clean
make build-local
echo "rfc3491.spp" > out/tmp/icudata.lst
make packagedata

The resulting .s file is at out/tmp/icudt46l_dat.s and should be
copied to genfiles/arch/linux/common/icudata/icudt46l_dat.S

In order to prevent exporting the ICU data as a public symbol, we add
#ifndef PUBLIC_SYMBOL
	.hidden icudt46_dat
#endif

near the head of the .S file. See the existing Linux .S file for an example.



On Mac:
Same process as Linux, except for the runConfigureICU step, which
should instead be:
./runConfigureICU MacOSX

In order to prevent exporting the ICU data as a public symbol, we add
	.private_extern _icudt46_dat

near the head of the .s file. See the existing mac .s file for an example.



On Windows:
Download an ICU source zip for the version of ICU being used, from
http://site.icu-project.org/download. unzip that file, open the
'icu->source->allinone' directory, and open allinone.sln in Visual
Studio. Change to a release build and build the 'makedata'
project. Once that completes:

edit source\data\out\tmp\icudata.lst to contain one one line: "rfc3491.spp"

Open a Visual Studio Command Prompt (from the 'Tools' menu) and run:

> cd c:\src\icu\source\data\out\build\icudt46l

> c:\src\icu\bin\pkgdata.exe -f -e icudt46 -v -m static -c -p icudt46l -T c:\src\icu\source\data\out\tmp -L icudt46 -d c:\src\icu\source\data\out\build\icudt46l -s . c:\src\icu\source\data\out\tmp\icudata.lst

This will generate icudt46.lib in source\data\out\tmp, which you can copy to genfiles\arch\win\ia32\icudata and check in.

> c:\src\icu\bin\pkgdata.exe -f -e icudt46 -v -m dll -c -p icudt46l -T c:\src\icu\source\data\out\tmp -L icudt46 -d c:\src\icu\source\data\out\build\icudt46l -s . c:\src\icu\source\data\out\tmp\icudata.lst

This will generate icudt46.dll in the current directory, which you can copy to genfiles\arch\win\ia32\icudata and check in.

