Home | History | Annotate | only in /external/icu4c
Up to higher level directory
NameDateSize
aclocal.m419-Dec-201017.4K
allinone/19-Dec-2010
Android.mk19-Dec-2010781
APIChangeReport.html19-Dec-2010167K
APIChangeReport441.html19-Dec-201011.5K
CleanSpec.mk19-Dec-20102.2K
common/19-Dec-2010
config/19-Dec-2010
config.guess19-Dec-201043.9K
config.log19-Dec-201030.7K
config.status19-Dec-201034.7K
config.sub19-Dec-201032.6K
configure19-Dec-2010351.7K
configure.in19-Dec-201039.3K
configure.mk19-Dec-2010670
data/19-Dec-2010
Doxyfile.in19-Dec-20109.7K
extra/19-Dec-2010
i18n/19-Dec-2010
icu4c.css19-Dec-20106.3K
icudefs.mk.in19-Dec-20108.8K
install-sh19-Dec-20105.5K
io/19-Dec-2010
layout/19-Dec-2010
layoutex/19-Dec-2010
license.html19-Dec-20101.9K
Makefile.in19-Dec-20109.8K
Makefile.org19-Dec-20106.7K
mkinstalldirs19-Dec-2010935
NOTICE19-Dec-20105.4K
readme.html19-Dec-201077K
runConfigureICU19-Dec-201010.1K
samples/19-Dec-2010
stubdata/19-Dec-2010
test/19-Dec-2010
ThirdPartyProject.prop19-Dec-2010242
tools/19-Dec-2010
unicode-license.txt19-Dec-20102.8K

readme.html

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      3 
      4 <html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
      5   <head>
      6 
      7     <title>ReadMe for ICU 4.4.1</title>
      8     <meta name="COPYRIGHT" content=
      9     "Copyright (c) 1997-2010 IBM Corporation and others. All Rights Reserved." />
     10     <meta name="KEYWORDS" content=
     11     "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
     12     <meta name="DESCRIPTION" content=
     13     "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
     14     <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
     15 	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
     16   </head>
     17 
     18   <body>
     19     <h1>International Components for Unicode<br />
     20      <abbr title="International Components for Unicode">ICU</abbr> 4.4.1 ReadMe</h1>
     21 
     22     <p>Last updated: 2010 Apr 22nd<br />
     23      Copyright &copy; 1997-2010 International Business Machines Corporation and
     24     others. All Rights Reserved.</p>
     25     <!-- Remember that there is a copyright at the end too -->
     26     <hr />
     27 
     28     <h2 class="TOC">Table of Contents</h2>
     29 
     30     <ul class="TOC">
     31       <li><a href="#Introduction">Introduction</a></li>
     32 
     33       <li><a href="#GettingStarted">Getting Started</a></li>
     34 
     35       <li><a href="#News">What Is New In This release?</a></li>
     36 
     37       <li><a href="#Download">How To Download the Source Code</a></li>
     38 
     39       <li><a href="#SourceCode">ICU Source Code Organization</a></li>
     40 
     41       <li>
     42         <a href="#HowToBuild">How To Build And Install ICU</a> 
     43 
     44         <ul >
     45           <li><a href="#HowToBuildSupported">Supported Platforms</a></li>
     46 
     47           <li><a href="#RecBuild">Recommended Build Options</a></li>
     48 
     49           <li><a href="#HowToBuildWindows">Windows</a></li>
     50 
     51           <li><a href="#HowToBuildCygwin">Cygwin</a></li>
     52 
     53           <li><a href="#HowToBuildUNIX">UNIX</a></li>
     54 
     55           <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>
     56 
     57           <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>
     58 
     59 		  <li><a href="#HowToCrossCompileICU">How to Cross Compile ICU</a></li>
     60         </ul>
     61       </li>
     62 
     63 
     64       <li><a href="#HowToPackage">How To Package ICU</a></li>
     65 
     66       <li>
     67         <a href="#ImportantNotes">Important Notes About Using ICU</a> 
     68 
     69         <ul >
     70           <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
     71           Environment</a></li>
     72 
     73           <li><a href="#ImportantNotesWindows">Windows Platform</a></li>
     74 
     75           <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
     76         </ul>
     77       </li>
     78 
     79       <li>
     80         <a href="#PlatformDependencies">Platform Dependencies</a> 
     81 
     82         <ul >
     83           <li><a href="#PlatformDependenciesNew">Porting To A New
     84           Platform</a></li>
     85 
     86           <li><a href="#PlatformDependenciesImpl">Platform Dependent
     87           Implementations</a></li>
     88         </ul>
     89       </li>
     90     </ul>
     91     <hr />
     92 
     93     <h2><a name="Introduction" href="#Introduction" id=
     94     "Introduction">Introduction</a></h2>
     95 
     96     <p>Today's software market is a global one in which it is desirable to
     97     develop and maintain one application (single source/single binary) that
     98     supports a wide variety of languages. The International Components for
     99     Unicode (ICU) libraries provide robust and full-featured Unicode services on
    100     a wide variety of platforms to help this design goal. The ICU libraries
    101     provide support for:</p>
    102 
    103     <ul>
    104       <li>The latest version of the Unicode standard</li>
    105 
    106       <li>Character set conversions with support for over 220 codepages</li>
    107 
    108       <li>Locale data for more than 250 locales</li>
    109 
    110       <li>Language sensitive text collation (sorting) and searching based on the
    111       Unicode Collation Algorithm (=ISO 14651)</li>
    112 
    113       <li>Regular expression matching and Unicode sets</li>
    114 
    115       <li>Transformations for normalization, upper/lowercase, script
    116       transliterations (50+ pairs)</li>
    117 
    118       <li>Resource bundles for storing and accessing localized information</li>
    119 
    120       <li>Date/Number/Message formatting and parsing of culture specific
    121       input/output formats</li>
    122 
    123       <li>Calendar specific date and time manipulation</li>
    124 
    125       <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>
    126 
    127       <li>Text boundary analysis for finding characters, word and sentence
    128       boundaries</li>
    129     </ul>
    130 
    131     <p>ICU has a sister project ICU4J that extends the internationalization
    132     capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
    133     called ICU4C when a distinction is necessary.</p>
    134 
    135     <h2><a name="GettingStarted" href="#GettingStarted" id=
    136     "GettingStarted">Getting started</a></h2>
    137 
    138     <p>This document describes how to build and install ICU on your machine. For
    139     other information about ICU please see the following table of links.<br />
    140      The ICU homepage also links to related information about writing
    141     internationalized software.</p>
    142 
    143     <table class="docTable" summary="These are some useful links regarding ICU and internationalization in general.">
    144       <caption>
    145         Here are some useful links regarding ICU and internationalization in
    146         general.
    147       </caption>
    148 
    149       <tr>
    150         <td>ICU, ICU4C &amp; ICU4J Homepage</td>
    151 
    152         <td><a href=
    153         "http://icu-project.org/">http://icu-project.org/</a></td>
    154       </tr>
    155 
    156       <tr>
    157         <td>FAQ - Frequently Asked Questions about ICU</td>
    158 
    159         <td><a href=
    160         "http://userguide.icu-project.org/icufaq">http://userguide.icu-project.org/icufaq</a></td>
    161       </tr>
    162 
    163       <tr>
    164         <td>ICU User's Guide</td>
    165 
    166         <td><a href=
    167         "http://userguide.icu-project.org/">http://userguide.icu-project.org/</a></td>
    168       </tr>
    169 
    170       <tr>
    171         <td>Download ICU Releases</td>
    172 
    173         <td><a href=
    174         "http://site.icu-project.org/download">http://site.icu-project.org/download</a></td>
    175       </tr>
    176 
    177       <tr>
    178         <td>ICU4C API Documentation Online</td>
    179 
    180         <td><a href=
    181         "http://icu-project.org/apiref/icu4c/">http://icu-project.org/apiref/icu4c/</a></td>
    182       </tr>
    183 
    184       <tr>
    185         <td>Online ICU Demos</td>
    186 
    187         <td><a href=
    188         "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
    189       </tr>
    190 
    191       <tr>
    192         <td>Contacts and Bug Reports/Feature Requests</td>
    193 
    194         <td><a href=
    195         "http://site.icu-project.org/contacts">http://site.icu-project.org/contacts</a></td>
    196       </tr>
    197     </table>
    198 
    199     <p><strong>Important:</strong> Please make sure you understand the <a href=
    200     "license.html">Copyright and License Information</a>.</p>
    201 
    202     <h2><a name="News" href="#News" id="News">What is new in this
    203     release?</a></h2>
    204 
    205     <p>To see which APIs are new or changed in this release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
    206 
    207     <p><!-- The following list concentrates on <em>changes that affect existing
    208     applications migrating from previous ICU releases</em>. --> For more news about
    209     this release, see the <a href="http://site.icu-project.org/download">ICU
    210     download page</a>.</p>
    211 
    212     <h2><a name="Download" href="#Download" id="Download">How To Download the
    213     Source Code</a></h2>
    214 
    215     <p>There are two ways to download ICU releases:</p>
    216 
    217     <ul>
    218       <li><strong>Official Release Snapshot:</strong><br />
    219        If you want to use ICU (as opposed to developing it), you should download
    220       an official packaged version of the ICU source code. These versions are
    221       tested more thoroughly than day-to-day development builds of the system,
    222       and they are packaged in zip and tar files for convenient download. These
    223       packaged files can be found at <a href=
    224       "http://site.icu-project.org/download">http://site.icu-project.org/download</a>.<br />
    225        The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
    226       <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
    227       file is used for Windows platforms, while the .tgz file is preferred on
    228       most other platforms.<br />
    229        Please unzip this file. </li>
    230 
    231       <li><strong>Subversion Source Repository:</strong><br />
    232        If you are interested in developing features, patches, or bug fixes for
    233       ICU, you should probably be working with the latest version of the ICU
    234       source code. You will need to check the code out of our Subversion repository to
    235       ensure that you have the most recent version of all of the files. See our
    236       <a href="http://site.icu-project.org/repository">source
    237       repository</a> for details.</li>
    238     </ul>
    239 
    240     <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
    241     Organization</a></h2>
    242 
    243     <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
    244     path name of the ICU directory (the top level directory from the distribution
    245     archives) in your file system. You can also view the <a href=
    246     "http://userguide.icu-project.org/design">ICU Architectural
    247     Design</a> section of the User's Guide to see which libraries you need for
    248     your software product. You need at least the data (<code>[lib]icudt</code>)
    249     and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
    250 
    251     <table class="docTable" summary="The following files describe the code drop.">
    252       <caption>
    253         The following files describe the code drop.
    254       </caption>
    255 
    256       <tr>
    257         <th scope="col">File</th>
    258 
    259         <th scope="col">Description</th>
    260       </tr>
    261 
    262       <tr>
    263         <td>readme.html</td>
    264 
    265         <td>Describes the International Components for Unicode (this file)</td>
    266       </tr>
    267 
    268       <tr>
    269         <td>license.html</td>
    270 
    271         <td>Contains the text of the ICU license</td>
    272       </tr>
    273     </table>
    274 
    275     <p><br />
    276     </p>
    277 
    278     <table class="docTable" summary=
    279     "The following directories contain source code and data files.">
    280       <caption>
    281         The following directories contain source code and data files.
    282       </caption>
    283 
    284       <tr>
    285         <th scope="col">Directory</th>
    286 
    287         <th scope="col">Description</th>
    288       </tr>
    289 
    290       <tr>
    291         <td><i>&lt;ICU&gt;</i>/source/<b>common</b>/</td>
    292 
    293         <td>The core Unicode and support functionality, such as resource bundles,
    294         character properties, locales, codepage conversion, normalization,
    295         Unicode properties, Locale, and UnicodeString.</td>
    296       </tr>
    297 
    298       <tr>
    299         <td><i>&lt;ICU&gt;</i>/source/<b>i18n</b>/</td>
    300 
    301         <td>Modules in i18n are generally the more data-driven, that is to say
    302         resource bundle driven, components. These deal with higher-level
    303         internationalization issues such as formatting, collation, text break
    304         analysis, and transliteration.</td>
    305       </tr>
    306 
    307       <tr>
    308         <td><i>&lt;ICU&gt;</i>/source/<b>layout</b>/</td>
    309 
    310         <td>Contains the ICU layout engine (not a rasterizer).</td>
    311       </tr>
    312 
    313       <tr>
    314         <td><i>&lt;ICU&gt;</i>/source/<b>io</b>/</td>
    315 
    316         <td>Contains the ICU I/O library.</td>
    317       </tr>
    318 
    319       <tr>
    320         <td><i>&lt;ICU&gt;</i>/source/<b>data</b>/</td>
    321 
    322         <td>
    323           <p>This directory contains the source data in text format, which is
    324           compiled into binary form during the ICU build process. It contains
    325           several subdirectories, in which the data files are grouped by
    326           function. Note that the build process must be run again after any
    327           changes are made to this directory.</p>
    328 
    329           <p>If some of the following directories are missing, it's probably
    330           because you got an official download. If you need the data source files
    331           for customization, then please download the ICU source code from <a
    332           href="http://site.icu-project.org/repository">subversion</a>.</p>
    333 
    334           <ul>
    335             <li><b>in/</b> A directory that contains a pre-built data library for
    336             ICU. A standard source code package will contain this file without
    337             several of the following directories. This is to simplify the build
    338             process for the majority of users and to reduce platform porting
    339             issues.</li>
    340 
    341             <li><b>brkitr/</b> Data files for character, word, sentence, title
    342             casing and line boundary analysis.</li>
    343 
    344             <li><b>locales/</b> These .txt files contain ICU language and
    345             culture-specific localization data. Two special bundles are
    346             <b>root</b>, which is the fallback data and parent of other bundles,
    347             and <b>index</b>, which contains a list of installed bundles. The
    348             makefile <b>resfiles.mk</b> contains the list of resource bundle
    349             files.</li>
    350 
    351             <li><b>mappings/</b> Here are the code page converter tables. These
    352             .ucm files contain mappings to and from Unicode. These are compiled
    353             into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
    354             various converter name formats to ICU internal format and vice versa.
    355             It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
    356             ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
    357             converters to be built.</li>
    358 
    359             <li><b>translit/</b> This directory contains transliterator rules as
    360             resource bundles, a makefile <b>trnsfiles.mk</b> containing the list
    361             of installed system translitaration files, and as well the special
    362             bundle <b>translit_index</b> which lists the system transliterator
    363             aliases.</li>
    364 
    365             <li><b>unidata/</b> This directory contains the Unicode data files.
    366             Please see <a href=
    367             "http://www.unicode.org/">http://www.unicode.org/</a> for more
    368             information.</li>
    369 
    370             <li><b>misc/</b> The misc directory contains other data files which
    371             did not fit into the above categories. Currently it only contains
    372             time zone information, and a name preperation file for <a href=
    373             "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
    374 
    375             <li><b>out/</b> This directory contains the assembled memory mapped
    376             files.</li>
    377 
    378             <li><b>out/build/</b> This directory contains intermediate (compiled)
    379             files, such as .cnv, .res, etc.</li>
    380           </ul>
    381 
    382           <p>If you are creating a special ICU build, you can set the ICU_DATA
    383           environment variable to the out/ or the out/build/ directories, but
    384           this is generally discouraged because most people set it incorrectly.
    385           You can view the <a href=
    386           "http://userguide.icu-project.org/icudata">ICU Data
    387           Management</a> section of the ICU User's Guide for details.</p>
    388         </td>
    389       </tr>
    390 
    391       <tr>
    392         <td><i>&lt;ICU&gt;</i>/source/test/<b>intltest</b>/</td>
    393 
    394         <td>A test suite including all C++ APIs. For information about running
    395         the test suite, see the build instructions specific to your platform
    396         later in this document.</td>
    397       </tr>
    398 
    399       <tr>
    400         <td><i>&lt;ICU&gt;</i>/source/test/<b>cintltst</b>/</td>
    401 
    402         <td>A test suite written in C, including all C APIs. For information
    403         about running the test suite, see the build instructions specific to your
    404         platform later in this document.</td>
    405       </tr>
    406 
    407       <tr>
    408         <td><i>&lt;ICU&gt;</i>/source/test/<b>iotest</b>/</td>
    409 
    410         <td>A test suite written in C and C++ to test the icuio library. For
    411         information about running the test suite, see the build instructions
    412         specific to your platform later in this document.</td>
    413       </tr>
    414 
    415       <tr>
    416         <td><i>&lt;ICU&gt;</i>/source/test/<b>testdata</b>/</td>
    417 
    418         <td>Source text files for data, which are read by the tests. It contains
    419         the subdirectories <b>out/build/</b> which is used for intermediate
    420         files, and <b>out/</b> which contains <b>testdata.dat.</b></td>
    421       </tr>
    422 
    423       <tr>
    424         <td><i>&lt;ICU&gt;</i>/source/<b>tools</b>/</td>
    425 
    426         <td>Tools for generating the data files. Data files are generated by
    427         invoking <i>&lt;ICU&gt;</i>/source/data/build/makedata.bat on Win32 or
    428         <i>&lt;ICU&gt;</i>/source/make on UNIX.</td>
    429       </tr>
    430 
    431       <tr>
    432         <td><i>&lt;ICU&gt;</i>/source/<b>samples</b>/</td>
    433 
    434         <td>Various sample programs that use ICU</td>
    435       </tr>
    436 
    437       <tr>
    438         <td><i>&lt;ICU&gt;</i>/source/<b>extra</b>/</td>
    439 
    440         <td>Non-supported API additions. Currently, it contains the 'uconv' tool
    441         to perform codepage conversion on files.</td>
    442       </tr>
    443 
    444       <tr>
    445         <td><i>&lt;ICU&gt;</i>/<b>packaging</b>/</td>
    446 
    447         <td>This directory contain scripts and tools for packaging the final
    448         ICU build for various release platforms.</td>
    449       </tr>
    450 
    451       <tr>
    452         <td><i>&lt;ICU&gt;</i>/source/<b>config</b>/</td>
    453 
    454         <td>Contains helper makefiles for platform specific build commands. Used
    455         by 'configure'.</td>
    456       </tr>
    457 
    458       <tr>
    459         <td><i>&lt;ICU&gt;</i>/source/<b>allinone</b>/</td>
    460 
    461         <td>Contains top-level ICU workspace and project files, for instance to
    462         build all of ICU under one MSVC project.</td>
    463       </tr>
    464 
    465       <tr>
    466         <td><i>&lt;ICU&gt;</i>/<b>include</b>/</td>
    467 
    468         <td>Contains the headers needed for developing software that uses ICU on
    469         Windows.</td>
    470       </tr>
    471 
    472       <tr>
    473         <td><i>&lt;ICU&gt;</i>/<b>lib</b>/</td>
    474 
    475         <td>Contains the import libraries for linking ICU into your Windows
    476         application.</td>
    477       </tr>
    478 
    479       <tr>
    480         <td><i>&lt;ICU&gt;</i>/<b>bin</b>/</td>
    481 
    482         <td>Contains the libraries and executables for using ICU on Windows.</td>
    483       </tr>
    484     </table>
    485     <!-- end of ICU structure ==================================== -->
    486 
    487     <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build And
    488     Install ICU</a></h2>
    489 
    490     <h3><a name="HowToBuildSupported" href="#HowToBuildSupported" id=
    491     "HowToBuildSupported">Supported Platforms</a></h3>
    492 
    493     <table class="rtable" summary=
    494     "ICU can be built on many platforms.">
    495       <caption>
    496         Here is the status of building ICU on several different platforms.
    497       </caption>
    498 
    499         
    500             <tr>
    501                 <td>AIX 6.1 (power, 64-bit)</td>
    502                 <td>VisualAge 9</td>
    503                 <td class="works">Frequently Tested</td>
    504 
    505             </tr>
    506         
    507             <tr>
    508                 <td>HP/UX 11iv3 (ia64, 64-bit)</td>
    509                 <td>aCC A.06.15</td>
    510                 <td class="works">Frequently Tested</td>
    511 
    512             </tr>
    513         
    514             <tr>
    515                 <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
    516                 <td>gcc 4.1.2</td>
    517                 <td class="works">Frequently Tested</td>
    518 
    519             </tr>
    520         
    521             <tr>
    522                 <td>Red Hat Enterprise Linux 5 (x86, 64-bit)</td>
    523                 <td>gcc 4.1.2</td>
    524                 <td class="works">Frequently Tested</td>
    525 
    526             </tr>
    527         
    528             <tr>
    529                 <td>Solaris 10 (sparc, 64-bit)</td>
    530                 <td>Sun Studio 12</td>
    531                 <td class="works">Frequently Tested</td>
    532 
    533             </tr>
    534         
    535             <tr>
    536                 <td>Windows Vista SP1 (x86, 32-bit)</td>
    537                 <td>MS Visual Studio 9</td>
    538                 <td class="works">Frequently Tested</td>
    539 
    540             </tr>
    541         
    542             <tr>
    543                 <td>AIX 5.2 (power, 64-bit)</td>
    544                 <td>VisualAge 6</td>
    545                 <td class="works">Frequently Tested</td>
    546 
    547             </tr>
    548         
    549             <tr>
    550                 <td>AIX 5.3 (power, 64-bit)</td>
    551                 <td>VisualAge 8</td>
    552                 <td class="works">Frequently Tested</td>
    553 
    554             </tr>
    555         
    556             <tr>
    557                 <td>AIX 6.1 (power, 64-bit)</td>
    558                 <td>gcc 4.2.4</td>
    559                 <td class="works">Frequently Tested</td>
    560 
    561             </tr>
    562         
    563             <tr>
    564                 <td>HP/UX 11i (hppa, 64-bit)</td>
    565                 <td>aCC A.03.85</td>
    566                 <td class="works">Frequently Tested</td>
    567 
    568             </tr>
    569         
    570             <tr>
    571                 <td>MacOSX 10.5 Leopard (x86, 32-bit)</td>
    572                 <td>gcc 4.0.1</td>
    573                 <td class="works">Frequently Tested</td>
    574 
    575             </tr>
    576         
    577             <tr>
    578                 <td>MacOSX 10.5 Leopard (x86, 64-bit)</td>
    579                 <td>gcc 4.0.1</td>
    580                 <td class="works">Frequently Tested</td>
    581 
    582             </tr>
    583         
    584             <tr>
    585                 <td>Red Hat Enterprise Linux 4.2 (x86, 32-bit)</td>
    586                 <td>gcc 3.4.6</td>
    587                 <td class="works">Frequently Tested</td>
    588 
    589             </tr>
    590         
    591             <tr>
    592                 <td>Red Hat Enterprise Linux 4u7 (x86, 32-bit)</td>
    593                 <td>gcc 4.2.4</td>
    594                 <td class="works">Frequently Tested</td>
    595 
    596             </tr>
    597 
    598             <tr>
    599                 <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
    600                 <td>icc 11.0</td>
    601                 <td class="works">Frequently Tested<br/><b>[<a href="#LinuxICCValueSafeOptimization">See Change</a>]</b></td>
    602             </tr>
    603 
    604             <tr>
    605                 <td>Solaris 10 (sparc, 64-bit)</td>
    606                 <td>gcc 4.2.1</td>
    607                 <td class="works">Frequently Tested</td>
    608 
    609             </tr>
    610         
    611             <tr>
    612                 <td>SuSE 10 (x86, 64-bit)</td>
    613                 <td>gcc 4.1.0</td>
    614                 <td class="works">Frequently Tested</td>
    615 
    616             </tr>
    617         
    618             <tr>
    619                 <td>Windows 2000 Professional (x86, 32-bit)</td>
    620                 <td>MS Visual Studio 2003 via Cygwin</td>
    621                 <td class="works">Frequently Tested</td>
    622 
    623             </tr>
    624         
    625             <tr>
    626                 <td>Windows 2000 Professional (x86, 32-bit)</td>
    627                 <td>gcc 3.4.4 via Cygwin</td>
    628                 <td class="works">Frequently Tested</td>
    629 
    630             </tr>
    631         
    632             <tr>
    633                 <td>Windows Server 2003 (x86, 64-bit)</td>
    634                 <td>MS Visual Studio 8 via Cygwin</td>
    635                 <td class="works">Frequently Tested</td>
    636 
    637             </tr>
    638         
    639             <tr>
    640                 <td>Windows Server 2008 (x86, 64-bit)</td>
    641                 <td>MS Visual Studio 9</td>
    642                 <td class="works">Frequently Tested</td>
    643 
    644             </tr>
    645         
    646             <tr>
    647                 <td>Windows XP Professional (x86, 32-bit)</td>
    648                 <td>MS Visual Studio 9</td>
    649                 <td class="works">Frequently Tested</td>
    650 
    651             </tr>
    652             
    653             <tr>
    654                 <td>Windows Server 2008 (x86, 64-bit)</td>
    655                 <td>MS Visual Studio 9 via Cygwin</td>
    656                 <td class="works">Frequently Tested</td>
    657 
    658             </tr>
    659         
    660             <tr class="broken">
    661                 <td>SuSe Linux 7.2 (x86, 32-bit)</td>
    662                 <td>icc 9.0</td>
    663                 <td class="broken">Broken <b><a href="http://bugs.icu-project.org/trac/ticket/6888">#6888</a></b></td>
    664 
    665             </tr>
    666         
    667 
    668 <!-- end IBM lab data -->
    669 
    670       <tr class="rarely">
    671         <td>z/OS 1.7</td>
    672 
    673         <td>cxx 1.7</td>
    674 
    675         <td>Rarely tested</td>
    676       </tr>
    677 
    678       <tr class="rarely">
    679         <td>IBM i family (IBM i, i5/OS, OS/400)</td>
    680 
    681         <td>iCC</td>
    682 
    683         <td>Rarely tested</td>
    684       </tr>
    685 
    686 
    687       <tr class="rarely">
    688         <td>MinGW</td>
    689 
    690         <td>gcc</td>
    691 
    692         <td>Rarely tested</td>
    693       </tr>
    694 
    695       <tr class="rarely">
    696         <td>NetBSD, OpenBSD, FreeBSD</td>
    697 
    698         <td>gcc</td>
    699 
    700         <td>Rarely tested</td>
    701       </tr>
    702 
    703       <tr class="rarely">
    704         <td>SUSE Linux Enterprise Server 9 (PowerPC)</td>
    705 
    706         <td>IBM XL C/C++ 8.0</td>
    707 
    708         <td>Rarely tested</td>
    709       </tr>
    710 
    711       <tr class="rarely">
    712         <td>QNX</td>
    713 
    714         <td>gcc</td>
    715 
    716         <td>Rarely tested</td>
    717       </tr>
    718 
    719       <tr class="rarely">
    720         <td>BeOS/Haiku</td>
    721 
    722         <td>gcc</td>
    723 
    724         <td>Rarely tested</td>
    725       </tr>
    726 
    727       <tr class="rarely">
    728         <td>SGI/IRIX</td>
    729 
    730         <td>MIPSpro CC</td>
    731 
    732         <td>Rarely tested</td>
    733       </tr>
    734 
    735       <tr class="rarely">
    736         <td>Tru64 (OSF)</td>
    737 
    738         <td>Compaq's cxx compiler</td>
    739 
    740         <td>Rarely tested</td>
    741       </tr>
    742 
    743       <tr class="rarely">
    744         <td>MP-RAS</td>
    745 
    746         <td>NCR MP-RAS C/C++ Compiler</td>
    747 
    748         <td>Rarely tested</td>
    749       </tr>
    750     </table>
    751 
    752     <p><br />
    753     </p>
    754 
    755     <h4>Key to testing frequency</h4>
    756 
    757     <dl>
    758       <dt><i>Frequently tested</i></dt>
    759 
    760       <dd>ICU will work on these platforms with these compilers</dd>
    761 
    762       <dt><i>Rarely tested</i></dt>
    763 
    764       <dd>ICU has been ported to these platforms but may not have been tested
    765       there recently</dd>
    766     </dl>
    767 
    768     <h3><a name="RecBuild" href="#RecBuild" id=
    769     "RecBuild">Recommended Build Options</a></h3>
    770 
    771     <p>Depending on the platform and the type of installation,
    772     we recommend a small number of modifications and build options.</p>
    773     <ul>
    774       <li><b>Namespace:</b> By default, unicode/uversion.h has
    775         "using namespace icu;" which defeats much of the purpose of the namespace.
    776         (This is for historical reasons: Originally, ICU4C did not use namespaces,
    777         and some compilers did not support them. The default "using" statement
    778         preserves source code compatibility.)<br>
    779         We recommend you turn this off via <code>-DU_USING_ICU_NAMESPACE=0</code>
    780         or by modifying unicode/uversion.h:
    781 <pre>Index: source/common/unicode/uversion.h
    782 ===================================================================
    783 --- source/common/unicode/uversion.h    (revision 26606)
    784 +++ source/common/unicode/uversion.h    (working copy)
    785 @@ -180,7 +180,8 @@
    786  #   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
    787 
    788  #   ifndef U_USING_ICU_NAMESPACE
    789 -#       define U_USING_ICU_NAMESPACE 1
    790 +        // Set to 0 to force namespace declarations in ICU usage.
    791 +#       define U_USING_ICU_NAMESPACE 0
    792  #   endif
    793  #   if U_USING_ICU_NAMESPACE
    794          U_NAMESPACE_USE
    795 </pre>
    796         ICU call sites then either qualify ICU types explicitly,
    797         for example <code>icu::UnicodeString</code>,
    798         or do <code>using icu::UnicodeString;</code> where appropriate.</li>
    799       <li><b>Hardcode the default charset to UTF-8:</b> On platforms where
    800         the default charset is always UTF-8,
    801         like MacOS X and some Linux distributions,
    802         we recommend hardcoding ICU's default charset to UTF-8.
    803         This means that some implementation code becomes simpler and faster,
    804         and statically linked ICU libraries become smaller.
    805         (See the <a href="http://icu-project.org/apiref/icu4c/utypes_8h.html#0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
    806         API documentation for more details.)<br>
    807         You can <code>-DU_CHARSET_IS_UTF8=1</code> or modify unicode/utypes.h:
    808 <pre>Index: source/common/unicode/utypes.h
    809 ===================================================================
    810 --- source/common/unicode/utypes.h      (revision 26606)
    811 +++ source/common/unicode/utypes.h      (working copy)
    812 @@ -160,7 +160,7 @@
    813   * @see UCONFIG_NO_CONVERSION
    814   */
    815  #ifndef U_CHARSET_IS_UTF8
    816 -#   define U_CHARSET_IS_UTF8 0
    817 +#   define U_CHARSET_IS_UTF8 1
    818  #endif
    819 
    820  /*===========================================================================*/
    821 </pre></li>
    822       <li><b>.dat file:</b> By default, the ICU data is built into
    823         a shared library (DLL). This is convenient because it requires no
    824         install-time or runtime configuration,
    825         but the library is platform-specific and cannot be modified.
    826         A .dat package file makes the opposite trade-off:
    827         Platform-portable (except for endianness and charset family, which
    828         can be changed with the icupkg tool)
    829         and modifiable (also with the icupkg tool).
    830         If a path is set, then single data files (e.g., .res files)
    831         can be copied to that location to provide new locale data
    832         or conversion tables etc.<br>
    833         The only drawback with a .dat package file is that the application
    834         needs to provide ICU with the file system path to the package file
    835         (e.g., by calling <code>u_setDataDirectory()</code>)
    836         or with a pointer to the data (<code>udata_setCommonData()</code>)
    837         before other ICU API calls.
    838         This is usually easy if ICU is used from an application where
    839         <code>main()</code> takes care of such initialization.
    840         It may be hard if ICU is shipped with
    841         another shared library (such as the Xerces-C++ XML parser)
    842         which does not control <code>main()</code>.<br>
    843         See the <a href="http://userguide.icu-project.org/icudata">User Guide ICU Data</a>
    844         chapter for more details.<br>
    845         If possible, we recommend building the .dat package.
    846         Specify <code>--with-data-packaging=archive</code>
    847         on the configure command line, as in<br>
    848         <code>runConfigureICU Linux --with-data-packaging=archive</code><br>
    849         (Read the configure script's output for further instructions.
    850         On Windows, the Visual Studio build generates both the .dat package
    851         and the data DLL.)<br>
    852         Be sure to install and use the tiny stubdata library
    853         rather than the large data DLL.</li>
    854       <li><b>Static libraries:</b> It may make sense to build the ICU code
    855         into static libraries (.a) rather than shared libraries (.so/.dll).
    856         Static linking reduces the overall size of the binary by removing
    857         code that is never called.<br>
    858         Example configure command line:<br>
    859         <code>runConfigureICU Linux --enable-static --disable-shared</code></li>
    860       <li><b>Out-of-source build:</b> It is usually desirable to keep the ICU
    861         source file tree clean and have build output files written to
    862         a different location. This is called an "out-of-source build".
    863         Simply invoke the configure script from the target location:
    864 <pre>~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
    865 ~/icu$ mkdir trunk-dev
    866 ~/icu$ cd trunk-dev
    867 ~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
    868 ~/icu/trunk-dev$ make check</pre></li>
    869     </ul>
    870     <h4>ICU as a System-Level Library</h4>
    871     <p>If ICU is installed as a system-level library, there are further
    872       opportunities and restrictions to consider.
    873       For details, see the <em>Using ICU as an Operating System Level Library</em>
    874       section of the <a href="http://userguide.icu-project.org/design">User Guide ICU Architectural Design</a> chapter.</p>
    875     <ul>
    876       <li><b>Data path:</b> For a system-level library, it is best to load
    877         ICU data from the .dat package file because the file system path
    878         to the .dat package file can be hardcoded.
    879         Set <code>-DICU_DATA_DIR=/path/to/icu/data</code> when building
    880         the ICU code. (Used by source/common/putil.c.)<br>
    881         Consider also setting <code>-DICU_NO_USER_DATA_OVERRIDE</code>
    882         if you do not want the "ICU_DATA" environment variable to be used.
    883         (An application can still override the data path via
    884         <code>u_setDataDirectory()</code> or
    885         <code>udata_setCommonData()</code>.</li>
    886       <li><b>Hide draft API:</b> API marked with <code>@draft</code>
    887         is new and not yet stable. Applications must not rely on unstable
    888         APIs from a system-level library.
    889         Define <code>U_HIDE_DRAFT_API</code>, <code>U_HIDE_INTERNAL_API</code>
    890         and <code>U_HIDE_SYSTEM_API</code>
    891         by modifying unicode/utypes.h before installing it.</li>
    892       <li><b>Only C APIs:</b> Applications must not rely on C++ APIs from a
    893         system-level library because binary C++ compatibility
    894         across library and compiler versions is very hard to achieve.
    895         Most ICU C++ APIs are in header files that contain a comment with
    896         <code>\brief C++ API</code>.
    897         Consider not installing these header files.</li>
    898       <li><b>Disable renaming:</b> By default, ICU library entry point names
    899         have an ICU version suffix. Turn this off for a system-level installation,
    900         to enable upgrading ICU without breaking applications. For example:<br>
    901         <code>runConfigureICU Linux --disable-renaming</code><br>
    902         The public header files from this configuration must be installed
    903         for applications to include and get the correct entry point names.</li>
    904     </ul>
    905 
    906     <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
    907     "HowToBuildWindows">How To Build And Install On Windows</a></h3>
    908 
    909     <p>Building International Components for Unicode requires:</p>
    910 
    911     <ul>
    912       <li>Microsoft Windows 2000 or above</li>
    913 
    914       <li>Microsoft Visual C++ 2008</li>
    915 
    916       <li><a href="#HowToBuildCygwin">Cygwin</a> is required when other versions
    917       of Microsoft Visual C++ and other compilers are used to build ICU.</li>
    918     </ul>
    919 
    920     <p>The steps are:</p>
    921 
    922     <ol>
    923       <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
    924       line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
    925       WinZip.</li>
    926 
    927       <li>Be sure that the ICU binary directory, <i>&lt;ICU&gt;</i>\bin\, is
    928       included in the <strong>PATH</strong> environment variable. The tests will
    929       not work without the location of the ICU DLL files in the path.</li>
    930 
    931       <li>Open the "<i>&lt;ICU&gt;</i>\source\allinone\allinone.sln" workspace
    932       file in Microsoft Visual Studio 2003. (This solution includes all the
    933       International Components for Unicode libraries, necessary ICU building
    934       tools, and the test suite projects). Please see the <a href=
    935       "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
    936       build from the command line instead.</li>
    937 
    938       <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below) 
    939       and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
    940 
    941       <li>Choose the "Build" menu and select "Rebuild Solution". If you want to
    942       build the Debug and Release at the same time, see the <a href=
    943       "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>
    944 
    945       <li>Run the C++ test suite, "intltest". To do this: set the active startup
    946       project to "intltest", and press Ctrl+F5 to run it. Make sure that it
    947       passes without any errors.</li>
    948 
    949       <li>Run the C test suite, "cintltst". To do this: set the active startup
    950       project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
    951       passes without any errors.</li>
    952 
    953       <li>Run the I/O test suite, "iotest". To do this: set the active startup
    954       project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
    955       without any errors.</li>
    956 
    957       <li>You are now able to develop applications with ICU by using the
    958       libraries and tools in <i>&lt;ICU&gt;</i>\bin\. The headers are in
    959       <i>&lt;ICU&gt;</i>\include\ and the link libraries are in
    960       <i>&lt;ICU&gt;</i>\lib\. To install the ICU runtime on a machine, or ship
    961       it with your application, copy the needed components from
    962       <i>&lt;ICU&gt;</i>\bin\ to a location on the system PATH or to your
    963       application directory.</li>
    964     </ol>
    965 
    966     <p><a name="HowToBuildWindowsCommandLine" id=
    967     "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
    968     Note:</strong></a> You can build ICU from the command line. Assuming that you
    969     have properly installed Microsoft Visual C++ to support command line
    970     execution, you can run the following command, 'devenv.com
    971     <i>&lt;ICU&gt;</i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
    972     use Cygwin with this compiler to build ICU, and you can refer to the <a href=
    973     "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
    974     section for more details.</p>
    975     
    976     <p><a name="HowToBuildWindowsPlatform" id=
    977     "HowToBuildWindowsPlatform"><strong>Setting Active Platform
    978     Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is 
    979     not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>
    980 
    981     <ul>
    982       <li>Choose "Build" menu, select "Configuration Manager...", and select
    983       "Win32" or "x64" for the Active Platform Solution.</li>
    984 
    985       <li>Another way is to select the desired build configuration from "Solution
    986       Platforms" dropdown menu from the standard toolbar. It will say
    987       "Win32" or "x64" in the dropdown list.</li>
    988     </ul>
    989 
    990     <p><a name="HowToBuildWindowsConfig" id=
    991     "HowToBuildWindowsConfig"><strong>Setting Active Configuration
    992     Note:</strong></a> To set the active configuration, two different
    993     possibilities are:</p>
    994 
    995     <ul>
    996       <li>Choose "Build" menu, select "Configuration Manager...", and select
    997       "Release" or "Debug" for the Active Configuration Solution.</li>
    998 
    999       <li>Another way is to select the desired build configuration from "Solution
   1000       Configurations" dropdown menu from the standard toolbar. It will say
   1001       "Release" or "Debug" in the dropdown list.</li>
   1002     </ul>
   1003 
   1004     <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
   1005     Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and 
   1006     Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
   1007     Build...". Click the "Select All" button, and then click the "Rebuild"
   1008     button.</p>
   1009 
   1010     <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
   1011     "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>
   1012 
   1013     <p>Building International Components for Unicode with this configuration
   1014     requires:</p>
   1015 
   1016     <ul>
   1017       <li>Microsoft 2000 or above</li>
   1018 
   1019       <li>Microsoft Visual C++ 2003 or above (when gcc isn't used).</li>
   1020 
   1021       <li>
   1022         Cygwin with the following installed: 
   1023 
   1024         <ul>
   1025           <li>bash</li>
   1026 
   1027           <li>GNU make</li>
   1028 
   1029           <li>ar</li>
   1030 
   1031           <li>ranlib</li>
   1032 
   1033           <li>man (if you plan to look at the man pages)</li>
   1034         </ul>
   1035       </li>
   1036     </ul>
   1037 
   1038     <p>There are two ways you can build ICU with Cygwin. You can build with gcc
   1039     or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
   1040     will depend on the Cygwin environment. If you use Microsoft Visual C++, the
   1041     resulting libraries and tools do not depend on Cygwin and can be more easily
   1042     distributed to other Windows computers (the generated man pages and shell
   1043     scripts still need Cygwin). To build with gcc, please follow the "<a href=
   1044     "#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions, while
   1045     you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
   1046     please use the following instructions:</p>
   1047 
   1048     <ol>
   1049       <li>Start the Windows "Command Prompt" window. This is different from the
   1050       gcc build, which requires the Cygwin Bash command prompt. The Microsoft
   1051       Visual C++ compiler will not work with a bash command prompt.</li>
   1052 
   1053       <li>If the computer isn't set up to use Visual C++ from the command line,
   1054       you need to run vcvars32.bat.<br>For example:<br>"<tt>C:\Program Files\Microsoft
   1055       Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
   1056       <strong>or</strong> <br>"<tt>C:\Program Files (x86)\Microsoft Visual Studio
   1057       8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
   1058       Windows x64.</li>
   1059 
   1060       <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
   1061       line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
   1062       WinZip.</li>
   1063 
   1064       <li>Change directory to "icu/source", which is where you unzipped ICU.</li>
   1065 
   1066       <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
   1067       Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
   1068       configuration note</a> and non-functional configure options below).</li>
   1069 
   1070       <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
   1071       This make command should be GNU make.</li>
   1072 
   1073       <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
   1074       checks for ICU's functionality integrity (See <a href=
   1075       "#HowToTestWithoutGmake">testing note</a> below).</li>
   1076 
   1077       <li>Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
   1078       option on configure or runConfigureICU, ICU will be installed to the
   1079       directory you specified. (See <a href="#HowToInstallICU">installation
   1080       note</a> below).</li>
   1081     </ol>
   1082 
   1083     <p><a name="HowToWindowsConfigureICU" id=
   1084     "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
   1085     NOTE:</strong></a> </p>
   1086     <p>
   1087     Ensure that the order of the PATH is MSVC, Cygwin, and then other PATHs. The configure 
   1088     script needs certain tools in Cygwin (e.g. grep).
   1089     </p>
   1090     <p>
   1091     Also, you may need to run <tt>"dos2unix.exe"</tt> on all of the scripts (e.g. configure)
   1092     in the top source directory of ICU. To avoid this issue, you can download
   1093     the ICU source for Unix platforms (icu-xxx.tgz).
   1094     </p>
   1095     <p>In addition to the Unix <a href=
   1096     "#HowToConfigureICU">configuration note</a> the following configure options
   1097     currently do not work on Windows with Microsoft's compiler. Some options can
   1098     work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
   1099     manually editing the files is not recommended.</p>
   1100 
   1101     <ul>
   1102       <li><tt>--disable-renaming</tt></li>
   1103 
   1104       <li><tt>--disable-threading</tt> (This flag does disable threading in ICU,
   1105       but the resulting ICU library will still be linked with MSVC's multithread DLL)</li>
   1106 
   1107       <li><tt>--enable-tracing</tt></li>
   1108 
   1109       <li><tt>--enable-rpath</tt></li>
   1110 
   1111       <li><tt>--with-iostream</tt></li>
   1112 
   1113       <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
   1114       defined in user code that links against ICU's static libraries.)</li>
   1115 
   1116       <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
   1117       not work in this mode. Manual packaging is required to use this mode.)</li>
   1118     </ul>
   1119 
   1120     <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
   1121     To Build And Install On UNIX</a></h3>
   1122 
   1123     <p>Building International Components for Unicode on UNIX requires:</p>
   1124 
   1125     <ul>
   1126       <li>A C++ compiler installed on the target machine (for example: gcc, CC,
   1127       xlC_r, aCC, cxx, etc...).</li>
   1128 
   1129       <li>An ANSI C compiler installed on the target machine (for example:
   1130       cc).</li>
   1131 
   1132       <li>A recent version of GNU make (3.80+).</li>
   1133 
   1134       <li>For a list of z/OS tools please view the <a href="#HowToBuildZOS">z/OS
   1135       build section</a> of this document for further details.</li>
   1136     </ul>
   1137 
   1138     <p>Here are the steps to build ICU:</p>
   1139 
   1140     <ol>
   1141       <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
   1142       icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d &lt;
   1143       icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li>
   1144 
   1145       <li>Change directory to the "icu/source".</li>
   1146 
   1147       <li>Run <tt>"chmod +x runConfigureICU configure install-sh"</tt> because
   1148       these files may have the wrong permissions.</li>
   1149 
   1150       <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt>
   1151       script for your platform. (See <a href="#HowToConfigureICU">configuration
   1152       note</a> below).</li>
   1153 
   1154       <li>Type <tt>"gmake"</tt> (or "make" if GNU make is the default make on
   1155       your platform) to compile the libraries and all the data files. The proper
   1156       name of the GNU make command is printed at the end of the configuration
   1157       run, as in "You must use gmake to compile ICU".</li>
   1158 
   1159       <li>Optionally, type <tt>"gmake check"</tt> to run the test suite, which
   1160       checks for ICU's functionality integrity (See <a href=
   1161       "#HowToTestWithoutGmake">testing note</a> below).</li>
   1162 
   1163       <li>Type <tt>"gmake install"</tt> to install ICU. If you used the --prefix=
   1164       option on configure or runConfigureICU, ICU will be installed to the
   1165       directory you specified. (See <a href="#HowToInstallICU">installation
   1166       note</a> below).</li>
   1167     </ol>
   1168 
   1169     <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
   1170     NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
   1171     to run it and a list of supported platforms. You may also want to type
   1172     <tt>"./configure --help"</tt> to print the available configure options that
   1173     you may want to give runConfigureICU. If you are not using the
   1174     runConfigureICU script, or your platform is not supported by the script, you
   1175     may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
   1176     type <tt>"./configure"</tt>. 
   1177     HP-UX users, please see this <a href="#ImportantNotesHPUX">note regarding
   1178     HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
   1179     please see this <a href="#ImportantNotesSolaris">note regarding Solaris
   1180     multithreaded build issues</a>.</p>
   1181 
   1182     <p>ICU is built with strict compiler warnings enabled by default.  If this
   1183     causes excessive numbers of warnings on your platform, use the --disable-strict
   1184     option to configure to reduce the warning level.</p>
   1185 
   1186     <p><a name="HowToTestWithoutGmake" id="HowToTestWithoutGmake"><strong>Running
   1187     The Tests From The Command Line NOTE:</strong></a> You may have to set
   1188     certain variables if you with to run test programs individually, that is
   1189     apart from "gmake check". The environment variable <strong>ICU_DATA</strong>
   1190     can be set to the full pathname of the data directory to indicate where the
   1191     locale data files and conversion mapping tables are when you are not using
   1192     the shared library (e.g. by using the .dat archive or the individual data
   1193     files). The trailing "/" is required after the directory name (e.g.
   1194     "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
   1195     not acceptable). You do not need to set <strong>ICU_DATA</strong> if the
   1196     complete shared data library is in your library path.</p>
   1197 
   1198     <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
   1199     NOTE:</strong></a> Some platforms use package management tools to control the
   1200     installation and uninstallation of files on the system, as well as the
   1201     integrity of the system configuration. You may want to check if ICU can be
   1202     packaged for your package management tools by looking into the "packaging"
   1203     directory. (Please note that if you are using a snapshot of ICU from Subversion, it
   1204     is probable that the packaging scripts or related files are not up to date
   1205     with the contents of ICU at this time, so use them with caution).</p>
   1206 
   1207     <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
   1208     Build And Install On z/OS (OS/390)</a></h3>
   1209 
   1210     <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
   1211     tests only the z/OS installation. You install ICU in a z/OS UNIX system
   1212     services file system such as HFS or zFS. On this platform, it is important
   1213     that you understand a few details:</p>
   1214 
   1215     <ul>
   1216       <li>The makedep and GNU make tools are required for building ICU. If it
   1217       is not already installed on your system, it is available at the <a href=
   1218       "http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html">z/OS UNIX -
   1219       Tools and Toys</a> site. The PATH environment variable should be updated to
   1220       contain the location of this executable prior to build. Failure to add these
   1221       tools to your PATH will cause ICU build failures or cause pkgdata to fail
   1222       to run.</li>
   1223 
   1224       <li>Since USS does not support using the mmap() function over NFS, it is
   1225       recommended that you build ICU on a local filesystem. Once ICU has been
   1226       built, you should not have this problem while using ICU when the data
   1227       library has been built as a shared library, which is this is the default
   1228       setting.</li>
   1229 
   1230       <li>Encoding considerations: The source code assumes that it is compiled
   1231       with codepage ibm-1047 (to be exact, the UNIX System Services variant of
   1232       it). The pax command converts all of the source code files from ASCII to
   1233       codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
   1234       must not be converted, or must be converted back to their original state.
   1235       You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> script
   1236       to do this for you automatically. It will unpackage the tar file and
   1237       convert all the necessary files for you automatically.</li>
   1238 
   1239       <li>z/OS supports both native S/390 hexadecimal floating point and (with
   1240       OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
   1241       time option. Applications built with IEEE should use ICU DLLs that are
   1242       built with IEEE (and vice versa). The environment variable IEEE390=0 will
   1243       cause the z/OS version of ICU to be built without IEEE floating point
   1244       support and use the native hexadecimal floating point. By default ICU is
   1245       built with IEEE 754 support. Native floating point support is sufficient
   1246       for codepage conversion, resource bundle and UnicodeString operations, but
   1247       the Format APIs require IEEE binary floating point.</li>
   1248 
   1249       <li>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
   1250       bring performance improvement opportunities to call-intensive C and C++
   1251       applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
   1252       you are considering using XPLINK in your application that uses ICU, you
   1253       should consider building the XPLINK-enabled version of ICU. You need to
   1254       set ICU's environment variable <code>OS390_XPLINK=1</code> prior to
   1255       invoking the make process to produce binaries that are enabled for
   1256       XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
   1257       requires the PTF PQ69418 to build XPLINK enabled binaries.</li>
   1258 
   1259       <li>Currently in ICU 3.0, there is an issue with building on z/OS without
   1260       XPLINK and with the C++ iostream. By default, the iostream library on z/OS
   1261       is XPLINK enabled. If you are not building an XPLINK enabled version of
   1262       ICU, you should use the <code>--with-iostream=old</code> configure option
   1263       when using runConfigureICU. This will prevent applications that use the
   1264       icuio library from crashing.</li>
   1265 
   1266       <li>The rest of the instructions for building and testing ICU on z/OS with
   1267       UNIX System Services are the same as the <a href="#HowToBuildUNIX">How To
   1268       Build And Install On UNIX</a> section.</li>
   1269     </ul>
   1270 
   1271     <h4>z/OS (Batch/PDS) support outside the UNIX system services
   1272     environment</h4>
   1273 
   1274     <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
   1275     addition, there is a z/OS specific environment variable (OS390BATCH) to build
   1276     some libraries into the z/OS native file system. This is useful, for example,
   1277     when your application is externalized via Job Control Language (JCL).</p>
   1278 
   1279     <p>The OS390BATCH environment variable enables non-UNIX support including the
   1280     batch environment. When OS390BATCH is set, the libicui18n<i>XX</i>.dll,
   1281     libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.dll binaries are built into
   1282     data sets (the native file system). Turning on OS390BATCH does not turn off
   1283     the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
   1284     always be created.</p>
   1285 
   1286     <p>Two additional environment variables indicate the names of the z/OS data
   1287     sets to use. The LOADMOD environment variable identifies the name of the data
   1288     set that contains the dynamic link libraries (DLLs) and the LOADEXP
   1289     environment variable identifies the name of the data set that contains the
   1290     side decks, which are normally the files with the .x suffix in the UNIX file
   1291     system.</p>
   1292 
   1293     <p>A data set is roughly equivalent to a UNIX or Windows file. For most kinds
   1294     of data sets the operating system maintains record boundaries. UNIX and
   1295     Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
   1296     data set of these two types contains a directory. It is like a UNIX
   1297     directory. Each "file" is called a "member". Each member name is limited to
   1298     eight bytes, normally EBCDIC.</p>
   1299 
   1300     <p>Here is an example of some environment variables that you can set prior to
   1301     building ICU:</p>
   1302 <pre>
   1303 <samp>OS390BATCH=1
   1304 LOADMOD=<i>USER</i>.ICU.LOAD
   1305 LOADEXP=<i>USER</i>.ICU.EXP</samp>
   1306 </pre>
   1307 
   1308     <p>The PDS member names for the DLL file names are as follows:</p>
   1309 <pre>
   1310 <samp>IXMI<i>XX</i>IN --&gt; libicui18n<i>XX</i>.dll
   1311 IXMI<i>XX</i>UC --&gt; libicuuc<i>XX</i>.dll
   1312 IXMI<i>XX</i>DA --&gt; libicudt<i>XX</i>e.dll</samp>
   1313 </pre>
   1314 
   1315     <p>You should point the LOADMOD environment variable at a partitioned data
   1316     set extended (PDSE) and point the LOADEXP environment variable at a
   1317     partitioned data set (PDS). The PDSE can be allocated with the following
   1318     attributes:</p>
   1319 <pre>
   1320 <samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
   1321 Management class. . : <i>**None**</i>
   1322 Storage class . . . : <i>BASE</i>
   1323 Volume serial . . . : <i>TSO007</i>
   1324 Device type . . . . : <i>3390</i>
   1325 Data class. . . . . : <i>LOAD</i>
   1326 Organization  . . . : PO
   1327 Record format . . . : U
   1328 Record length . . . : 0
   1329 Block size  . . . . : <i>32760</i>
   1330 1st extent cylinders: 1
   1331 Secondary cylinders : 5
   1332 Data set name type  : LIBRARY</samp>
   1333 </pre>
   1334 
   1335     <p>The PDS can be allocated with the following attributes:</p>
   1336 <pre>
   1337 <samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
   1338 Management class. . : <i>**None**</i>
   1339 Storage class . . . : <i>BASE</i>
   1340 Volume serial . . . : <i>TSO007</i>
   1341 Device type . . . . : <i>3390</i>
   1342 Data class. . . . . : <i>**None**</i>
   1343 Organization  . . . : PO
   1344 Record format . . . : FB
   1345 Record length . . . : 80
   1346 Block size  . . . . : <i>3200</i>
   1347 1st extent cylinders: 3
   1348 Secondary cylinders : 3
   1349 Data set name type  : PDS</samp>
   1350 </pre>
   1351 
   1352     <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
   1353     "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>
   1354 
   1355     <p>Before you start building ICU, ICU requires the following:</p>
   1356 
   1357     <ul>
   1358       <li>QSHELL interpreter installed (install base option 30, operating system)
   1359       <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>
   1360 
   1361       <li>ILE C/C++ Compiler installed on the system
   1362 
   1363       <li>The latest GNU facilities (You can get the GNU facilities 
   1364       from <a href=
   1365       "http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html">
   1366       http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>).
   1367       Older versions may not work properly.</li>
   1368     </ul>
   1369 
   1370     <p>The following describes how to setup and build ICU. For background
   1371     information, you should look at the <a href="#HowToBuildUNIX">UNIX build
   1372     instructions</a>.</p>
   1373 
   1374     <ol>
   1375       <li>
   1376         Create target library. This library will be the target for the
   1377         resulting modules, programs and service programs. You will specify this
   1378         library on the OUTPUTDIR environment variable.
   1379 <pre>
   1380 <samp>CRTLIB LIB(<i>libraryname</i>)
   1381 ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>') REPLACE(*YES)   </samp>
   1382 </pre>
   1383       </li>
   1384 
   1385       <li>
   1386       Set up the following environment variables and job characteristics in your build process
   1387 <pre>
   1388 <samp>ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake') REPLACE(*YES)
   1389 CHGJOB CCSID(37)</samp>
   1390 </pre>
   1391 
   1392       <li>Run <tt>'QSH'</tt></li>
   1393 
   1394       <li>Run gunzip on the ICU source code compressed tar archive
   1395       (icu-<i>X</i>.<i>Y</i>.tgz).</li>
   1396 
   1397       <li>Run <a href='as_is/os400/unpax-icu.sh'>unpax-icu.sh</a> on the tar file generated from the previous step.</li>
   1398 
   1399       <li>Change your current directory to icu/source.</li>
   1400 
   1401       <li>Run <tt>'./runConfigureICU IBMi'</tt>  (See <a href="#HowToConfigureICU">configuration
   1402       note</a> for details).</li></li>
   1403 
   1404       <li>Run <tt>'gmake'</tt> to build ICU.</li>
   1405 
   1406       <li>Run <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> to build and run the tests.
   1407       You can look at the <a href=
   1408       "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
   1409       iSeries Information Center</a> for more details regarding the running of multiple threads
   1410       on IBM i.</li>
   1411     </ol>
   1412 
   1413       <!-- cross -->
   1414     <h3><a name="HowToCrossCompileICU" href="#HowToCrossCompileICU" id="HowToCrossCompileICU">How To Cross Compile ICU</a></h3>
   1415 		<p>This section will explain how to build ICU on one platform, but to produce binaries intended to run on another. This is commonly known as a cross compile.</p>
   1416 		<p>Normally, in the course of a build, ICU needs to run the tools that it builds in order to generate and package data and test-data.In a cross compilation setting, ICU is built on a different system from that which it eventually runs on. An example might be, if you are building for a small/headless system (such as an embedded device), or a system where you can't easily run the ICU command line tools (any non-UNIX-like system).</p>
   1417 		<p>To reduce confusion, we will here refer to the "A" and the "B" system.System "A" is the actual system we will be running on- the only requirements on it is are it is able to build ICU from the command line targetting itself (with configure or runConfigureICU), and secondly, that it also contain the correct toolchain for compiling and linking for the resultant platform, referred to as the "B" system.</p>
   1418 		<p>The autoconf docs use the term "build" for A, and "host" for B. More details at: <a href="http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html#Specifying-Names">http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html</a></p>
   1419 		<p>Three initially-empty directories will be used in this example:</p>
   1420 		<table summary="Three directories used in this example" class="docTable">
   1421 			<tr>
   1422 				<th align=left>/icu</th><td>a copy of the ICU source</td>
   1423 			</tr>
   1424 			<tr>
   1425 				<th align=left>/buildA</th><td>an empty directory, it will contain ICU built for A<br>(MacOSX in this case)</td>
   1426 			</tr>
   1427 			<tr>
   1428 				<th align=left>/buildB</th><td>an empty directory, it will contain ICU built for B<br>(HaikuOS in this case)</td>
   1429 			</tr>
   1430 		</table>
   1431 		
   1432 		<ol>
   1433 		<li>Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.</li>
   1434 		<li>Build ICU in /buildA normally (using runConfigureICU or configure):
   1435 <pre class="samp">cd /buildA
   1436 sh /icu/source/runConfigureICU <strong>MacOSX</strong>
   1437 gnumake
   1438 </pre>
   1439 		</li>
   1440 		<li>Set PATH or other variables as needed, such as CPPFLAGS.</li>
   1441 		<li>Build ICU in /buildB<br>
   1442 			<div class="note"><b>Note:</b> "<code>--with-cross-build</code>" takes an absolute path.</div>
   1443 <pre class="samp">cd /buildB
   1444 sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
   1445 gnumake</pre>
   1446 		</li>
   1447 		<li>Tests and testdata can be built with "gnumake tests".</li>
   1448 	</ol>
   1449       <!-- end cross -->
   1450 
   1451     <!-- end build environment -->
   1452 
   1453     <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
   1454     Package ICU</a></h2>
   1455 
   1456     <p>There are many ways that a person can package ICU with their software
   1457     products. Usually only the libraries need to be considered for packaging.</p>
   1458 
   1459     <p>On UNIX, you should use "<tt>gmake install</tt>" to make it easier to
   1460     develop and package ICU. The bin, lib and include directories are needed to
   1461     develop applications that use ICU. These directories will be created relative
   1462     to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a href=
   1463     "#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on Windows,
   1464     a similar directory structure is built.</p>
   1465 
   1466     <p>When changes have been made to the standard ICU distribution, it is
   1467     recommended that at least one of the following guidelines be followed for
   1468     special packaging.</p>
   1469 
   1470     <ol>
   1471       <li>Add a suffix name to the library names. This can be done with the
   1472       --with-library-suffix configure option.</li>
   1473 
   1474       <li>The installation script should install the ICU libraries into the
   1475       application's directory.</li>
   1476     </ol>
   1477 
   1478     <p>Following these guidelines prevents other applications that use a standard
   1479     ICU distribution from conflicting with any libraries that you need. On
   1480     operating systems that do not have a standard C++ ABI (name mangling) for
   1481     compilers, it is recommended to do this special packaging anyway. More
   1482     details on customizing ICU are available in the <a href=
   1483     "http://userguide.icu-project.org/">User's Guide</a>. The <a href=
   1484     "#SourceCode">ICU Source Code Organization</a> section of this readme.html
   1485     gives a more complete description of the libraries.</p>
   1486 
   1487     <table class="docTable" summary=
   1488     "ICU has several libraries for you to use.">
   1489       <caption>
   1490         Here is an example of libraries that are frequently packaged.
   1491       </caption>
   1492 
   1493       <tr>
   1494         <th scope="col">Library Name</th>
   1495 
   1496         <th scope="col">Windows Filename</th>
   1497 
   1498         <th scope="col">Linux Filename</th>
   1499 
   1500         <th scope="col">Comment</th>
   1501       </tr>
   1502 
   1503       <tr>
   1504         <td>Data Library</td>
   1505 
   1506         <td>icudt<i>XY</i>l.dll</td>
   1507 
   1508         <td>libicudata.so.<i>XY</i>.<i>Z</i></td>
   1509 
   1510         <td>Data required by the Common and I18n libraries. There are many ways
   1511         to package and <a href=
   1512         "http://userguide.icu-project.org/icudata">customize this
   1513         data</a>, but by default this is all you need.</td>
   1514       </tr>
   1515 
   1516       <tr>
   1517         <td>Common Library</td>
   1518 
   1519         <td>icuuc<i>XY</i>.dll</td>
   1520 
   1521         <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>
   1522 
   1523         <td>Base library required by all other ICU libraries.</td>
   1524       </tr>
   1525 
   1526       <tr>
   1527         <td>Internationalization (i18n) Library</td>
   1528 
   1529         <td>icuin<i>XY</i>.dll</td>
   1530 
   1531         <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>
   1532 
   1533         <td>A library that contains many locale based internationalization (i18n)
   1534         functions.</td>
   1535       </tr>
   1536 
   1537       <tr>
   1538         <td>Layout Engine</td>
   1539 
   1540         <td>icule<i>XY</i>.dll</td>
   1541 
   1542         <td>libicule.so.<i>XY</i>.<i>Z</i></td>
   1543 
   1544         <td>An optional engine for doing font layout.</td>
   1545       </tr>
   1546 
   1547       <tr>
   1548         <td>Layout Extensions Engine</td>
   1549 
   1550         <td>iculx<i>XY</i>.dll</td>
   1551 
   1552         <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
   1553 
   1554         <td>An optional engine for doing font layout that uses parts of ICU.</td>
   1555       </tr>
   1556 
   1557       <tr>
   1558         <td>ICU I/O (Unicode stdio) Library</td>
   1559 
   1560         <td>icuio<i>XY</i>.dll</td>
   1561 
   1562         <td>libicuio.so.<i>XY</i>.<i>Z</i></td>
   1563 
   1564         <td>An optional library that provides a stdio like API with Unicode
   1565         support.</td>
   1566       </tr>
   1567 
   1568       <tr>
   1569         <td>Tool Utility Library</td>
   1570 
   1571         <td>icutu<i>XY</i>.dll</td>
   1572 
   1573         <td>libicutu.so.<i>XY</i>.<i>Z</i></td>
   1574 
   1575         <td>An internal library that contains internal APIs that are only used by
   1576         ICU's tools. If you do not use ICU's tools, you do not need this
   1577         library.</td>
   1578       </tr>
   1579     </table>
   1580 
   1581     <p>Normally only the above ICU libraries need to be considered for packaging.
   1582     The versionless symbolic links to these libraries are only needed for easier
   1583     development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of the name are the
   1584     version numbers of ICU. For example, ICU 2.0.2 would have the name
   1585     libicuuc.so.20.2 for the common library. The exact format of the library
   1586     names can vary between platforms due to how each platform can handles library
   1587     versioning.</p>
   1588 
   1589     <h2><a name="ImportantNotes" href="#ImportantNotes" id=
   1590     "ImportantNotes">Important Notes About Using ICU</a></h2>
   1591 
   1592     <h3><a name="ImportantNotesMultithreaded" href="#ImportantNotesMultithreaded"
   1593     id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
   1594     Environment</a></h3>
   1595 
   1596     <p>Some versions of ICU require calling the <code>u_init()</code> function
   1597     from <code>uclean.h</code> to ensure that ICU is initialized properly. In
   1598     those ICU versions, <code>u_init()</code> must be called before ICU is used
   1599     from multiple threads. There is no harm in calling <code>u_init()</code> in a
   1600     single-threaded application, on a single-CPU machine, or in other cases where
   1601     <code>u_init()</code> is not required.</p>
   1602 
   1603     <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
   1604     to load at least one ICU data file. Assuming that all data files are packaged
   1605     together (or are in the same folder in files mode), a failure code from
   1606     <code>u_init()</code> usually means that the data cannot be found. In this
   1607     case, the data may not be installed properly, or the application may have
   1608     failed to call <code>udata_setCommonData()</code> or
   1609     <code>u_setDataDirectory()</code> which specify to ICU where it can find its
   1610     data.</p>
   1611 
   1612     <p>Since <code>u_init()</code> will load only one or two data files, it
   1613     cannot guarantee that all of the data that an application needs is available.
   1614     It cannot check for all data files because the set of files is customizable,
   1615     and some ICU services work without loading any data at all. An application
   1616     should always check for error codes when opening ICU service objects (using
   1617     <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
   1618     etc.).</p>
   1619 
   1620     <h4>ICU 3.4 and later</h4>
   1621 
   1622     <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
   1623     without performance penalty by hardcoding the core Unicode properties data,
   1624     at the cost of some flexibility. (For details see Jitterbug 4497.)</p>
   1625 
   1626     <p><code>u_init()</code> can be used to check for data loading. It tries to
   1627     load the converter alias table (<code>cnvalias.icu</code>).</p>
   1628 
   1629     <h4>ICU 2.6..3.2</h4>
   1630 
   1631     <p>These ICU versions require a call to <code>u_init()</code> before
   1632     multi-threaded use. The services that are directly affected are those that
   1633     don't have a service object and need to be fast: normalization and character
   1634     properties.</p>
   1635 
   1636     <p><code>u_init()</code> loads and initializes the data files for
   1637     normalization and character properties (<code>unorm.icu</code> and
   1638     <code>uprops.icu</code>) and can therefore also be used to check for data
   1639     loading.</p>
   1640 
   1641     <h4>ICU 2.4 and earlier</h4>
   1642 
   1643     <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
   1644     multi-CPU platforms where the CPUs implement weak memory coherency. These
   1645     CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
   1646     defined yet.</p>
   1647 
   1648     <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
   1649     "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
   1650     HP-UX</a></h4>
   1651 
   1652     <p>If you are building ICU with a newer aCC compiler and you are planning on
   1653     using the older &lt;iostream.h&gt; instead of the newer &lt;iostream&gt;, you
   1654     will need to use a special configure flag before building ICU. By default,
   1655     the aCC <a href="http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a>
   1656     flag is used on HP-UX when the compiler supports that option in order to make
   1657     ICU thread safe with RogueWave and other libraries using the 2.0 Standard C++
   1658     library. Your applications that use ICU will also need to use the <a href=
   1659     "http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a> compiler flag.
   1660     To turn off this behavior in ICU, you will need to use the --with-iostream=old
   1661     configure option when you first use runConfigureICU.</p>
   1662 
   1663     <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
   1664     "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
   1665     Solaris</a></h4>
   1666 
   1667     <h5>Linking on Solaris</h5>
   1668 
   1669     <p>In order to avoid synchronization and threading issues, developers are
   1670     <strong>suggested</strong> to strictly follow the compiling and linking
   1671     guidelines for multithreaded applications, specified in the following
   1672     document from Sun Microsystems. Most notably, pay strict attention to the
   1673     following statements from Sun:</p>
   1674 
   1675     <blockquote>
   1676       <p>To use libthread, specify -lthread before -lc on the ld command line, or
   1677       last on the cc command line.</p>
   1678 
   1679       <p>To use libpthread, specify -lpthread before -lc on the ld command line,
   1680       or last on the cc command line.</p>
   1681     </blockquote>
   1682 
   1683     <p>Failure to do this may cause spurious lock conflicts, recursive mutex
   1684     failure, and deadlock.</p>
   1685 
   1686     <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
   1687     Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
   1688      <a href=
   1689     "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
   1690 
   1691     <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
   1692     "ImportantNotesWindows">Windows Platform</a></h3>
   1693 
   1694     <p>If you are building on the Win32 platform, it is important that you
   1695     understand a few of the following build details.</p>
   1696 
   1697     <h4>DLL directories and the PATH setting</h4>
   1698 
   1699     <p>As delivered, the International Components for Unicode build as several
   1700     DLLs, which are placed in the "<i>&lt;ICU&gt;</i>\bin" directory. You must
   1701     add this directory to the PATH environment variable in your system, or any
   1702     executables you build will not be able to access International Components for
   1703     Unicode libraries. Alternatively, you can copy the DLL files into a directory
   1704     already in your PATH, but we do not recommend this. You can wind up with
   1705     multiple copies of the DLL and wind up using the wrong one.</p>
   1706 
   1707     <h4><a name="ImportantNotesWindowsPath" id=
   1708     "ImportantNotesWindowsPath">Changing your PATH</a></h4>
   1709 
   1710     <p><strong>Windows 2000/XP</strong>: Use the System Icon in the Control
   1711     Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
   1712     button. Select the variable PATH in the lower box, and select the lower
   1713     "Edit..." button. In the "Variable Value" box, append the string
   1714     ";<i>&lt;ICU&gt;</i>\bin" to the end of the path string. If there is
   1715     nothing there, just type in "<i>&lt;ICU&gt;</i>\bin". Click the Set button,
   1716     then the OK button.</p>
   1717 
   1718     <p>Note: When packaging a Windows application for distribution and
   1719     installation on user systems, copies of the ICU DLLs should be included with
   1720     the application, and installed for exclusive use by the application. This is
   1721     the only way to insure that your application is running with the same version
   1722     of ICU, built with exactly the same options, that you developed and tested
   1723     with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
   1724     phrase "DLL hell" on <a href=
   1725     "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>
   1726 
   1727     <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
   1728     "ImportantNotesUNIX">UNIX Type Platform</a></h3>
   1729 
   1730     <p>If you are building on a UNIX platform, and if you are installing ICU in a
   1731     non-standard location, you may need to add the location of your ICU libraries
   1732     to your <strong>LD_LIBRARY_PATH</strong> or <strong>LIBPATH</strong>
   1733     environment variable (or the equivalent runtime library path environment
   1734     variable for your system). The ICU libraries may not link or load properly
   1735     without doing this.</p>
   1736 
   1737     <p>Note that if you do not want to have to set this variable, you may instead
   1738     use the --enable-rpath option at configuration time. This option will
   1739     instruct the linker to always look for the libraries where they are
   1740     installed. You will need to use the appropriate linker options when linking
   1741     your own applications and libraries against ICU, too. Please refer to your
   1742     system's linker manual for information about runtime paths. The use of rpath
   1743     also means that when building a new version of ICU you should not have an
   1744     older version installed in the same place as the new version's installation
   1745     directory, as the older libraries will used during the build, instead of the
   1746     new ones, likely leading to an incorrectly build ICU. This is the proper
   1747     behavior of rpath.</p>
   1748 
   1749     <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
   1750     "PlatformDependencies">Platform Dependencies</a></h2>
   1751 
   1752     <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
   1753     "PlatformDependenciesNew">Porting To A New Platform</a></h3>
   1754 
   1755     <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
   1756     a few places where you will need to add or modify some files. If you need
   1757     more help, you can always ask the <a href=
   1758     "http://site.icu-project.org/contacts">icu-support mailing list</a>. Once
   1759     you have finished porting ICU to a new platform, it is recommended that you
   1760     contribute your changes back to ICU via the icu-support mailing list. This
   1761     will make it easier for everyone to benefit from your work.</p>
   1762 
   1763     <h4>Data For a New Platform</h4>
   1764 
   1765     <p>For some people, it may not be necessary for completely build ICU. Most of
   1766     the makefiles and build targets are for tools that are used for building
   1767     ICU's data, and an application's data (when an application uses ICU resource
   1768     bundles for its data).</p>
   1769 
   1770     <p>Data files can be built on a different platform when both platforms share
   1771     the same endianness and the same charset family. This assertion does not
   1772     include platform dependent DLLs/shared/static libraries. For details see the
   1773     User Guide <a href="http://userguide.icu-project.org/icudata">ICU
   1774     Data</a> chapter.</p>
   1775 
   1776     <p>ICU 3.6 removes the requirement that ICU be completely built in the native
   1777     operating environment. It adds the icupkg tool which can be run on any
   1778     platform to turn binary ICU data files from any one of the three formats into
   1779     any one of the other data formats. This allows a application to use ICU data
   1780     built anywhere to be used for any other target platform.</p>
   1781 
   1782     <p><strong>WARNING!</strong> Building ICU without running the tests is not
   1783     recommended. The tests verify that ICU is safe to use. It is recommended that
   1784     you try to completely port and test ICU before using the libraries for your
   1785     own application.</p>
   1786 
   1787     <h4>Adapting Makefiles For a New Platform</h4>
   1788 
   1789     <p>Try to follow the build steps from the <a href="#HowToBuildUNIX">UNIX</a>
   1790     build instructions. If the configure script fails, then you will need to
   1791     modify some files. Here are the usual steps for porting to a new
   1792     platform:<br />
   1793     </p>
   1794 
   1795     <ol>
   1796       <li>Create an mh file in icu/source/config/. You can use mh-linux or a
   1797       similar mh file as your base configuration.</li>
   1798 
   1799       <li>Modify icu/source/aclocal.m4 to recognize your platform's mh file.</li>
   1800 
   1801       <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
   1802       Macro define.</li>
   1803 
   1804       <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
   1805       icu/source/ without any options. The autoconf tool is standard on most
   1806       Linux systems.</li>
   1807 
   1808       <li>If you have any optimization options that you want to normally use, you
   1809       can modify icu/source/runConfigureICU to specify those options for your
   1810       platform.</li>
   1811 
   1812       <li>Build and test ICU on your platform. It is very important that you run
   1813       the tests. If you don't run the tests, there is no guarentee that you have
   1814       properly ported ICU.</li>
   1815     </ol>
   1816 
   1817     <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
   1818     "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>
   1819 
   1820     <p>The platform dependencies have been mostly isolated into the following
   1821     files in the common library. This information can be useful if you are
   1822     porting ICU to a new platform.</p>
   1823 
   1824     <ul>
   1825       <li>
   1826         <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br />
   1827          <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, ppalmos.h,
   1828         ..): Platform-dependent typedefs and defines:<br />
   1829         <br />
   1830          
   1831 
   1832         <ul>
   1833           <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
   1834           uint64_t etc.</li>
   1835 
   1836           <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
   1837           export</li>
   1838 
   1839           <li>&lt;iostream&gt; usability</li>
   1840 
   1841           <li>Thread safety usability</li>
   1842         </ul>
   1843         <br />
   1844       </li>
   1845 
   1846       <li>
   1847         <strong>unicode/putil.h, putil.c</strong>: platform-dependent
   1848         implementations of various functions that are platform dependent:<br />
   1849         <br />
   1850          
   1851 
   1852         <ul>
   1853           <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
   1854           handling special floating point values.</li>
   1855 
   1856           <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
   1857           platform specific time and time zone information.</li>
   1858 
   1859           <li>u_getDataDirectory for getting the default data directory.</li>
   1860 
   1861           <li>uprv_getDefaultLocaleID for getting the default locale
   1862           setting.</li>
   1863 
   1864           <li>uprv_getDefaultCodepage for getting the default codepage
   1865           encoding.</li>
   1866         </ul>
   1867         <br />
   1868       </li>
   1869 
   1870       <li>
   1871         <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
   1872         multithreaded applications. If you wish to use International Components
   1873         for Unicode in a multithreaded application, you must provide a
   1874         synchronization primitive that the classes can use to protect their
   1875         global data against simultaneous modifications. We already supply working
   1876         implementations for many platforms that ICU builds on.<br />
   1877         <br />
   1878       </li>
   1879 
   1880       <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
   1881       otherwise reading or loading files into memory. All access by ICU to data
   1882       from files makes use of these functions.<br />
   1883       <br />
   1884       </li>
   1885 
   1886       <li>Using platform specific #ifdef macros are highly discouraged outside of
   1887       the scope of these files. When the source code gets updated in the future,
   1888       these #ifdef's can cause testing problems for your platform.</li>
   1889     </ul>
   1890     <hr />
   1891 
   1892     <p>Copyright &copy; 1997-2010 International Business Machines Corporation and
   1893     others. All Rights Reserved.<br />
   1894      IBM Globalization Center of Competency - San Jos&eacute;<br />
   1895      4400 North First Street<br />
   1896      San Jos&eacute;, CA 95134<br />
   1897      USA</p>
   1898   </body>
   1899 </html>
   1900 
   1901