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++. Local Modifiations: 1. Modified stringpiece.cpp to disable StringPiece::npos in Visual Studio 2010 and 2012, which is required in order to build in those environments. Chromium made the same change to their stringpiece.cpp. 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.