<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang="en-US">
  <head>
    <meta name="generator" content=
    "HTML Tidy for Windows (vers 1st March 2004), see www.w3.org">

    <title>ReadMe for ICU</title>
    <meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2004 IBM Corporation and others. All Rights Reserved.">
    <meta name="KEYWORDS" content=
    "ICU; International Components for Unicode; what's new; readme; read me; introduction; downloads; downloading; building; installation;">
    <meta name="DESCRIPTION" content=
    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU.">
    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css">
    h1 {border-width: 2px; border-style: solid; text-align: center; width: 100%; font-size: 200%; font-weight: bold}
    h2 {margin-top: 3em; text-decoration: underline; page-break-before: always}
    h2.TOC {page-break-before: auto}
    h3 {margin-top: 2em; text-decoration: underline}
    h4 {text-decoration: underline}
    h5 {text-decoration: underline}
    caption {font-weight: bold; text-align: left}
    div.indent {margin-left: 2em}
    ul.TOC {list-style-type: none}
    samp {margin-left: 1em; border-style: groove; padding: 1em; display: block; background-color: #EEEEEE}
</style>
  </head>

  <body>
    <h1>International Components for Unicode<br>
     <abbr title="International Components for Unicode">ICU</abbr> 3.0
    ReadMe</h1>

    <p>Version: 2004-Jun-14<br>
     Copyright &copy; 1997-2004 International Business Machines Corporation and
    others. All Rights Reserved.</p>
    <!-- Remember that there is a copyright at the end too -->
    <hr>

    <h2 class="TOC">Table of Contents</h2>

    <ul class="TOC">
      <li><a href="#Introduction">Introduction</a></li>

      <li><a href="#GettingStarted">Getting Started</a></li>

      <li><a href="#News">What Is New In This release?</a></li>

      <li><a href="#Download">How To Download the Source Code</a></li>

      <li><a href="#SourceCode">ICU Source Code Organization</a></li>

      <li>
        <a href="#HowToBuild">How To Build And Install ICU</a> 

        <ul class="TOC">
          <li><a href="#HowToBuildSupported">Supported Platforms</a></li>

          <li><a href="#HowToBuildWindows">Windows</a></li>

          <li><a href="#HowToBuildWindowsXP64">Windows XP on IA64</a></li>

          <li><a href="#HowToBuildCygwin">Cygwin</a></li>

          <li><a href="#HowToBuildUNIX">UNIX</a></li>

          <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>

          <li><a href="#HowToBuildOS400">OS/400 (iSeries)</a></li>
        </ul>
      </li>

      <li><a href="#HowToPackage">How To Package ICU</a></li>

      <li>
        <a href="#ImportantNotes">Important Notes About Using ICU</a> 

        <ul class="TOC">
          <li><a href="#ImportantNotesCPlusPlus">Using ICU in a Multithreaded
          Environment</a></li>

          <li><a href="#ImportantNotesWindows">Windows Platform</a></li>

          <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
        </ul>
      </li>

      <li>
        <a href="#PlatformDependencies">Platform Dependencies</a> 

        <ul class="TOC">
          <li><a href="#PlatformDependenciesNew">Porting To A New
          Platform</a></li>

          <li><a href="#PlatformDependenciesImpl">Platform Dependent
          Implementations</a></li>

          <li><a href="#PlatformDependenciesBuildOrder">Build Order Without
          Using ICU's Makefiles</a></li>
        </ul>
      </li>
    </ul>
    <hr>

    <h2><a name="Introduction" href="#Introduction" id=
    "Introduction">Introduction</a></h2>

    <p>Today's software market is a global one in which it is desirable to
    develop and maintain one application (single source/single binary) that
    supports a wide variety of languages. The International Components for
    Unicode (ICU) libraries provide robust and full-featured Unicode services
    on a wide variety of platforms to help this design goal. The ICU libraries
    provide support for:</p>

    <ul>
      <li>The latest version of the Unicode standard</li>

      <li>Character set conversions with support for over 200 codepages</li>

      <li>Locale data for more than 230 locales</li>

      <li>Language sensitive text collation (sorting) and searching based on
      the Unicode Collation Algorithm (=ISO 14651)</li>

      <li>Regular expression matching and Unicode sets</li>

      <li>Transformations for normalization, upper/lowercase, script
      transliterations (50+ pairs)</li>

      <li>Resource bundles for storing and accessing localized information</li>

      <li>Date/Number/Message formatting and parsing of culture specific
      input/output formats</li>

      <li>Calendar specific date and time manipulation</li>

      <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>

      <li>Text boundary analysis for finding characters, word and sentence
      boundaries</li>
    </ul>

    <p>ICU has a sister project <a href=
    "http://oss.software.ibm.com/icu4j/index.html">ICU4J</a> that extends the
    internationalization capabilities of Java to a level similar to ICU. The
    ICU C/C++ project is also called ICU4C when a distinction is necessary.</p>

    <h2><a name="GettingStarted" href="#GettingStarted" id=
    "GettingStarted">Getting started</a></h2>

    <p>This document describes how to build and install ICU on your machine.
    For other information about ICU please see the following table of
    links.<br>
     The ICU homepage also links to related information about writing
    internationalized software.</p>

    <table border="1" cellpadding="3" width="100%" summary=
    "These are some useful links regarding ICU and internationalization in general.">
      <caption>
        Here are some useful links regarding ICU and internationalization in
        general.
      </caption>

      <tr>
        <td>ICU Homepage</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/index.html">http://oss.software.ibm.com/icu/index.html</a></td>
      </tr>

      <tr>
        <td>ICU4J Homepage</td>

        <td><a href=
        "http://oss.software.ibm.com/icu4j/index.html">http://oss.software.ibm.com/icu4j/index.html</a></td>
      </tr>

      <tr>
        <td>FAQ - Frequently Asked Questions about ICU</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/userguide/icufaq.html">http://oss.software.ibm.com/icu/userguide/icufaq.html</a></td>
      </tr>

      <tr>
        <td>ICU User's Guide</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/userguide/index.html">http://oss.software.ibm.com/icu/userguide/index.html</a></td>
      </tr>

      <tr>
        <td>Download ICU Releases</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/download/index.html">http://oss.software.ibm.com/icu/download/index.html</a></td>
      </tr>

      <tr>
        <td>API Documentation Online</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/apiref/index.html">http://oss.software.ibm.com/icu/apiref/index.html</a></td>
      </tr>

      <tr>
        <td>Online ICU Demos</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/demo/index.html">http://oss.software.ibm.com/icu/demo/index.html</a></td>
      </tr>

      <tr>
        <td>Contacts and Bug Reports/Feature Requests</td>

        <td><a href=
        "http://oss.software.ibm.com/icu/archives/index.html">http://oss.software.ibm.com/icu/archives/index.html</a></td>
      </tr>
    </table>

    <p><strong>Important:</strong> Please make sure you understand the <a href=
    "license.html">Copyright and License Information</a>.</p>

    <h2><a name="News" href="#News" id="News">What is new in this
    release?</a></h2>

    <p>The following list concentrates on <em>changes that affect existing
    applications migrating from previous ICU releases</em>. For more news about
    this release, see the <a href=
    "http://oss.software.ibm.com/icu/download/3.0/index.html">ICU 3.0 download
    page</a>.</p>

    <h3><a name="News_Respath" id="News_Respath">Resource Path Issue</a></h3>

    <p>In 3.0, do not set the ICU data path to a short name consisting of only
    a directory or package name. For example, if your resource package is
      named 'mydata', and resides in a directory named 'mydata', the following 
      will fail:</p>
    <blockquote><pre>u_setDataDirectory("mydata");
ures_open("mydata", NULL, &amp;status);</pre></blockquote>

    <p>When the data directory and the path (first argument to ures_open) are
      exactly the same string, ICU will load the ICU data rather than your
      'mydata' package.  This is a known bug and is 
     <a href="http://www.jtcsv.com/cgibin/icu-bugs?findid=3841">#3841</a>.
        The solution is to make sure these strings are different.  For example,
       setting a path of "mydata:/otherdir" would work, because there are
     two path segments and the path is not identical to "mydata".  Another
     solution would be to use a full or relative path 
     such as "C:\\path\\to\\mydata",  "./mydata", "./mydata/" or "mydata/".</p>

    <h3><a name="News_Locale" id="News_Locale">Locale Identifier
    Changes</a></h3>

    <p>The ICU locale identifier format has recently changed. In order to
    improve support for RFC 3066 identifiers and to support keyword
    identifiers, some minor breaking changes have been introduced. When your
    application is working with POSIX locale identifiers or .NET locale
    identifiers, you should use <code><a href=
    "http://oss.software.ibm.com/icu/apiref/uloc_8h.html">uloc_canonicalize</a>()</code>
    to convert it to an ICU locale identifier. It was an undocumented feature
    that you could pass a POSIX locale to ICU, and ICU would convert it for you
    automatically. For example, if you used @EURO or @PREEURO to identify
    certain currencies, you should now be using the "@currency=" keyword for
    the locale identifiers. If you use the <code>uloc_canonicalize()</code>
    function, it will convert the @PREEURO variants to the proper ICU locale
    identifier. For example, it will convert "fr-fr@PREEURO" to
    "fr_FR@currency=FRF". More information about keywords can be found in the
    <a href="http://oss.software.ibm.com/icu/userguide/locale.html">Locale
    Section</a> of the User's Guide and <a href=
    "http://www.openi18n.org/specs/ldml/1.0/ldml-spec.htm">on the OpenI18N
    site</a>.</p>

    <p>Some ISO 15924 script codes are used in some RFC 3066 language tags.
    This is especially helpful when you need to differentiate cases where a
    language can be written with more than one script. Since ICU now supports
    ISO 15924 script codes in the locale identifier, you can now specify
    locales like "zh_Hant" to specify Traditional Chinese. Previously, people
    had to use "zh_TW" to specify Traditional Chinese, which isn't quite
    correct because the locale identifier is specifying the language of a
    region and not the type of language. The current locale identifiers, like
    en_US, still work, and do not require any changes in your code. Future
    versions of ICU will move the data into the proper locale resources, and
    the locale infrastructure will be improved.</p>

    <p>In order to differentiate between the two library names on all
    platforms, static libraries now use an "s" as a prefix to differentiate
    between the shared and static libraries. For example, "libicuuc.a" is now
    "lib<strong>s</strong>icuuc.a". This means that if you used "-licuuc" to
    link the common library into your application, you now need to use
    "-lsicuuc".</p>

    <h3><a name="News_ICUIO" id="News_ICUIO">ICUIO Library Changes</a></h3>

    <p>The ICUIO library is still unsupported (this was previously called the
    ustdio library), and some breaking fixes have been made to the library. %S
    should be used for UTF-16 strings, and %C should be used for UChar for the
    format strings. The %K and %U format specifiers are deprecated and will be
    removed in a future version of ICU. Also u_fgets now uses the same argument
    ordering as stdio fgets, which will make it easier for people to migrate
    their existing stdio implementations to use ICUIO. Fortunately, u_fgets now
    follows the Unicode algorithm for detecting hard line breaks, and some
    performance enhancements to this library have been implemented so that most
    of the formatting and parsing functions will run faster.</p>

    <h3><a name="News_Library_Init" id="News_Library_Init">Library
    Initialization</a></h3>

    <p>ICU4C 2.6 introduces a library initialization function. It is required
    to call it before using any ICU services in a multi-threaded environment.
    For details please see the <a href=
    "http://oss.software.ibm.com/icu/apiref/index.html">documentation</a> of
    <code>u_init()</code> in the <code>unicode/uclean.h</code> header file.</p>

    <h3><a name="News_TimeZone_IDs" id="News_TimeZone_IDs">TimeZone
    Identifiers</a></h3>

    <p>ICU supports over 500 TimeZone identifiers. Most of these are current
    Olson identifiers (see TimeZone documentation). However, some of these are
    obsolete names for current identifiers. There are two sources of obsolete
    identifiers: the Olson database itself, and JDK legacy identifiers. (For
    example, the Olson database defines "US/Pacific" as an old identifier for
    "America/Los_Angeles". JDK 1.5 defines "PST" as a legacy identifier
    equivalent to "America/Los_Angeles".) Currently, the ICU TimeZone API does
    not distinguish between current identifiers and obsolete identifiers. This
    section lists obsolete identifiers and their modern equivalents.</p>

    <p>As of ICU 3.0 there are 136 obsolete Olson names (modern names given in
    parentheses): <small>America/Atka (America/Adak), America/Ensenada
    (America/Tijuana), America/Fort_Wayne (America/Indianapolis),
    America/Indiana/Indianapolis (America/Indianapolis),
    America/Kentucky/Louisville (America/Louisville), America/Knox_IN
    (America/Indiana/Knox), America/Porto_Acre (America/Rio_Branco),
    America/Rosario (America/Cordoba), America/Shiprock (America/Denver),
    America/Virgin (America/St_Thomas), Antarctica/South_Pole
    (Antarctica/McMurdo), Arctic/Longyearbyen (Europe/Oslo), Asia/Ashkhabad
    (Asia/Ashgabat), Asia/Chungking (Asia/Chongqing), Asia/Dacca (Asia/Dhaka),
    Asia/Istanbul (Europe/Istanbul), Asia/Macao (Asia/Macau), Asia/Tel_Aviv
    (Asia/Jerusalem), Asia/Thimbu (Asia/Thimphu), Asia/Ujung_Pandang
    (Asia/Makassar), Asia/Ulan_Bator (Asia/Ulaanbaatar), Atlantic/Jan_Mayen
    (Europe/Oslo), Australia/ACT (Australia/Sydney), Australia/Canberra
    (Australia/Sydney), Australia/LHI (Australia/Lord_Howe), Australia/NSW
    (Australia/Sydney), Australia/North (Australia/Darwin),
    Australia/Queensland (Australia/Brisbane), Australia/South
    (Australia/Adelaide), Australia/Tasmania (Australia/Hobart),
    Australia/Victoria (Australia/Melbourne), Australia/West (Australia/Perth),
    Australia/Yancowinna (Australia/Broken_Hill), Brazil/Acre
    (America/Porto_Acre), Brazil/DeNoronha (America/Noronha), Brazil/East
    (America/Sao_Paulo), Brazil/West (America/Manaus), CST6CDT
    (America/Chicago), Canada/Atlantic (America/Halifax), Canada/Central
    (America/Winnipeg), Canada/East-Saskatchewan (America/Regina),
    Canada/Eastern (America/Toronto), Canada/Mountain (America/Edmonton),
    Canada/Newfoundland (America/St_Johns), Canada/Pacific (America/Vancouver),
    Canada/Saskatchewan (America/Regina), Canada/Yukon (America/Whitehorse),
    Chile/Continental (America/Santiago), Chile/EasterIsland (Pacific/Easter),
    Cuba (America/Havana), EST (America/Indianapolis), EST5EDT
    (America/New_York), Egypt (Africa/Cairo), Eire (Europe/Dublin), Etc/GMT+0
    (Etc/GMT), Etc/GMT-0 (Etc/GMT), Etc/GMT0 (Etc/GMT), Etc/Greenwich
    (Etc/GMT), Etc/Universal (Etc/UTC), Etc/Zulu (Etc/UTC), Europe/Bratislava
    (Europe/Prague), Europe/Ljubljana (Europe/Belgrade), Europe/Nicosia
    (Asia/Nicosia), Europe/San_Marino (Europe/Rome), Europe/Sarajevo
    (Europe/Belgrade), Europe/Skopje (Europe/Belgrade), Europe/Tiraspol
    (Europe/Chisinau), Europe/Vatican (Europe/Rome), Europe/Zagreb
    (Europe/Belgrade), GB (Europe/London), GB-Eire (Europe/London), GMT
    (Etc/GMT), GMT+0 (Etc/GMT+0), GMT-0 (Etc/GMT-0), GMT0 (Etc/GMT0), Greenwich
    (Etc/Greenwich), HST (Pacific/Honolulu), Hongkong (Asia/Hong_Kong), Iceland
    (Atlantic/Reykjavik), Iran (Asia/Tehran), Israel (Asia/Jerusalem), Jamaica
    (America/Jamaica), Japan (Asia/Tokyo), Kwajalein (Pacific/Kwajalein), Libya
    (Africa/Tripoli), MST (America/Phoenix), MST7MDT (America/Denver),
    Mexico/BajaNorte (America/Tijuana), Mexico/BajaSur (America/Mazatlan),
    Mexico/General (America/Mexico_City), Mideast/Riyadh87 (Asia/Riyadh87),
    Mideast/Riyadh88 (Asia/Riyadh88), Mideast/Riyadh89 (Asia/Riyadh89), NZ
    (Pacific/Auckland), NZ-CHAT (Pacific/Chatham), Navajo (America/Denver), PRC
    (Asia/Shanghai), PST8PDT (America/Los_Angeles), Pacific/Samoa
    (Pacific/Pago_Pago), Poland (Europe/Warsaw), Portugal (Europe/Lisbon), ROC
    (Asia/Taipei), ROK (Asia/Seoul), Singapore (Asia/Singapore), SystemV/AST4
    (America/Puerto_Rico), SystemV/AST4ADT (America/Halifax), SystemV/CST6
    (America/Regina), SystemV/CST6CDT (America/Chicago), SystemV/EST5
    (America/Indianapolis), SystemV/EST5EDT (America/New_York), SystemV/HST10
    (Pacific/Honolulu), SystemV/MST7 (America/Phoenix), SystemV/MST7MDT
    (America/Denver), SystemV/PST8 (Pacific/Pitcairn), SystemV/PST8PDT
    (America/Los_Angeles), SystemV/YST9 (Pacific/Gambier), SystemV/YST9YDT
    (America/Anchorage), Turkey (Europe/Istanbul), UCT (Etc/UCT), US/Alaska
    (America/Anchorage), US/Aleutian (America/Adak), US/Arizona
    (America/Phoenix), US/Central (America/Chicago), US/East-Indiana
    (America/Indianapolis), US/Eastern (America/New_York), US/Hawaii
    (Pacific/Honolulu), US/Indiana-Starke (America/Indiana/Knox), US/Michigan
    (America/Detroit), US/Mountain (America/Denver), US/Pacific
    (America/Los_Angeles), US/Pacific-New (America/Los_Angeles), US/Samoa
    (Pacific/Pago_Pago), UTC (Etc/UTC), Universal (Etc/Universal), W-SU
    (Europe/Moscow), Zulu (Etc/Zulu).</small></p>

    <p>As of ICU 3.0 there are 25 legacy JDK identifiers (modern names given in
    parentheses): <small>ACT (Australia/Darwin), AET (Australia/Sydney), AGT
    (America/Buenos_Aires), ART (Africa/Cairo), AST (America/Anchorage), BET
    (America/Sao_Paulo), BST (Asia/Dhaka), CAT (Africa/Harare), CNT
    (America/St_Johns), CST (America/Chicago), CTT (Asia/Shanghai), EAT
    (Africa/Addis_Ababa), ECT (Europe/Paris), IET (America/Indianapolis), IST
    (Asia/Calcutta), JST (Asia/Tokyo), MIT (Pacific/Apia), NET (Asia/Yerevan),
    NST (Pacific/Auckland), PLT (Asia/Karachi), PNT (America/Phoenix), PRT
    (America/Puerto_Rico), PST (America/Los_Angeles), SST
    (Pacific/Guadalcanal), VST (Asia/Saigon).</small></p>
    <hr>

    <h2><a name="Download" href="#Download" id="Download">How To Download the
    Source Code</a></h2>

    <p>There are two ways to download ICU releases:</p>

    <ul>
      <li><strong>Official Release Snapshot:</strong><br>
       If you want to use ICU (as opposed to developing it), you should
      download an official packaged version of the ICU source code. These
      versions are tested more thoroughly than day-to-day development builds of
      the system, and they are packaged in zip and tar files for convenient
      download. These packaged files can be found at <a href=
      "http://oss.software.ibm.com/icu/download/index.html">http://oss.software.ibm.com/icu/download/index.html</a>.<br>

       The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
      <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
      file is used for Windows platforms, while the .tgz file is preferred on
      most other platforms.<br>
       Please unzip this file. It will reconstruct the source directory, which
      includes anonymous CVS control directories (see below).</li>

      <li><strong>CVS Source Repository:</strong><br>
       If you are interested in developing features, patches, or bug fixes for
      ICU, you should probably be working with the latest version of the ICU
      source code. You will need to check the code out of our CVS repository to
      ensure that you have the most recent version of all of the files. See our
      <a href="http://oss.software.ibm.com/icu/develop/cvs.html">CVS page</a>
      for details.</li>
    </ul>

    <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
    Organization</a></h2>

    <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the
    full path name of the ICU directory (the top level directory from the
    distribution archives) in your file system. You can also view the <a href=
    "http://oss.software.ibm.com/icu/userguide/design.html">ICU Architectural
    Design</a> section of the User's Guide to see which libraries you need for
    your software product. You need at least the data (<code>[lib]icudt</code>)
    and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>

    <table border="1" cellpadding="0" width="100%" summary=
    "The following files describe the code drop.">
      <caption>
        The following files describe the code drop.
      </caption>

      <tr>
        <th scope="col">File</th>

        <th scope="col">Description</th>
      </tr>

      <tr>
        <td>readme.html</td>

        <td>Describes the International Components for Unicode (this file)</td>
      </tr>

      <tr>
        <td>license.html</td>

        <td>Contains the text of the ICU license</td>
      </tr>
    </table>

    <p><br>
    </p>

    <table border="1" cellpadding="0" width="100%" summary=
    "The following directories contain source code and data files.">
      <caption>
        The following directories contain source code and data files.
      </caption>

      <tr>
        <th scope="col">Directory</th>

        <th scope="col">Description</th>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>common</b>/</td>

        <td>The core Unicode and support functionality, such as resource
        bundles, character properties, locales, codepage conversion,
        normalization, Unicode properties, Locale, and UnicodeString.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>i18n</b>/</td>

        <td>Modules in i18n are generally the more data-driven, that is to say
        resource bundle driven, components. These deal with higher-level
        internationalization issues such as formatting, collation, text break
        analysis, and transliteration.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>data</b>/</td>

        <td>
          <p>This directory contains the source data in text format, which is
          compiled into binary form during the ICU build process. It contains
          several subdirectories, in which the data files are grouped by
          function. Note that the build process must be run again after any
          changes are made to this directory.</p>

          <ul>
            <li><b>brkitr/</b> Data files for character, word, sentence, title
            casing and line boundary analysis.</li>

            <li><b>locales/</b> These .txt files contain ICU language and
            culture-specific localization data. Two special bundles are
            <b>root</b>, which is the fallback data and parent of other
            bundles, and <b>index</b>, which contains a list of installed
            bundles. The makefile <b>resfiles.mk</b> contains the list of
            resource bundle files.</li>

            <li><b>mappings/</b> Here are the code page converter tables. These
            .ucm files contain mappings to and from Unicode. These are compiled
            into .cnv files. <b>convrtrs.txt</b> is the alias mapping table
            from various converter name formats to ICU internal format and vice
            versa. It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
            ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
            converters to be built.</li>

            <li><b>translit/</b> This directory contains transliterator rules
            as resource bundles, a makefile <b>trnsfiles.mk</b> containing the
            list of installed system translitaration files, and as well the
            special bundle <b>translit_index</b> which lists the system
            transliterator aliases.</li>

            <li><b>unidata/</b> This directory contains the Unicode data files.
            Please see <a href=
            "http://www.unicode.org/">http://www.unicode.org/</a> for more
            information.</li>

            <li><b>misc/</b> The misc directory contains other data files which
            did not fit into the above categories. Currently it only contains
            time zone information, and a name preperation file for <a href=
            "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>

            <li><b>out/</b> This directory contains the assembled memory mapped
            files.</li>

            <li><b>out/build/</b> This directory contains intermediate
            (compiled) files, such as .cnv, .res, etc.</li>
          </ul>

          <p>If you are creating a special ICU build, you can set the ICU_DATA
          environment variable to the out/ or the out/build/ directories, but
          this is generally discouraged because most people set it incorrectly.
          You can view the <a href=
          "http://oss.software.ibm.com/icu/userguide/icudata.html">ICU Data
          Management</a> section of the ICU User's Guide for details.</p>
        </td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/test/<b>intltest</b>/</td>

        <td>A test suite including all C++ APIs. For information about running
        the test suite, see the users' guide.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/test/<b>cintltst</b>/</td>

        <td>A test suite written in C, including all C APIs. For information
        about running the test suite, see the users' guide.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/test/<b>testdata</b>/</td>

        <td>Source text files for data, which are read by the tests. It
        contains the subdirectories <b>out/build/</b> which is used for
        intermediate files, and <b>out/</b> which contains
        <b>testdata.dat.</b></td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>tools</b>/</td>

        <td>Tools for generating the data files. Data files are generated by
        invoking <i>&lt;ICU&gt;</i>/source/data/build/makedata.bat on Win32 or
        <i>&lt;ICU&gt;</i>/source/make on UNIX.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>samples</b>/</td>

        <td>Various sample programs that use ICU</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>extra</b>/</td>

        <td>Non-supported API additions. Currently, it contains the 'ustdio'
        file i/o library</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>layout</b>/</td>

        <td>Contains the ICU layout engine (not a rasterizer).</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/<b>packaging</b>/<br>
         <i>&lt;ICU&gt;</i>/<b>debian</b>/</td>

        <td>These directories contain scripts and tools for packaging the final
        ICU build for various release platforms.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>config</b>/</td>

        <td>Contains helper makefiles for platform specific build commands.
        Used by 'configure'.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/source/<b>allinone</b>/</td>

        <td>Contains top-level ICU workspace and project files, for instance to
        build all of ICU under one MSVC project.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/<b>include</b>/</td>

        <td>Contains the headers needed for developing software that uses ICU
        on Windows.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/<b>lib</b>/</td>

        <td>Contains the import libraries for linking ICU into your Windows
        application.</td>
      </tr>

      <tr>
        <td><i>&lt;ICU&gt;</i>/<b>bin</b>/</td>

        <td>Contains the libraries and executables for using ICU on
        Windows.</td>
      </tr>
    </table>
    <!-- end of ICU structure ==================================== -->

    <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build
    And Install ICU</a></h2>

    <h3><a name="HowToBuildSupported" href="#HowToBuildSupported" id=
    "HowToBuildSupported">Supported Platforms</a></h3>

    <table border="1" cellpadding="3" summary=
    "ICU can be built on many platforms.">
      <caption>
        Here is a status of functionality of ICU on several different
        platforms.
      </caption>

      <tr>
        <th scope="col">Operating system</th>

        <th scope="col">Compiler</th>

        <th scope="col">Testing frequency</th>
      </tr>

      <tr>
        <td>Windows 2000 with Cygwin</td>

        <td>Microsoft Visual C++ 6.0</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>Windows XP</td>

        <td>Microsoft Visual C++ .NET 2003 (7.1)</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>Red Hat Linux 9</td>

        <td>gcc 3.2.2</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>AIX 5.2</td>

        <td>Visual Age C++ 6.0</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>Solaris 7 (SunOS 5.7)</td>

        <td>Workshop Pro (Forte) CC 6.0</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>HP-UX 11.11</td>

        <td>aCC A.03.50<br>
         cc B.11.11.08</td>

        <td>Reference platform</td>
      </tr>

      <tr>
        <td>Windows XP with Cygwin</td>

        <td>Microsoft Visual C++ .NET 2002 (7.0)</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Windows 98/2000/XP</td>

        <td>Microsoft Visual C++ 6.0</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Red Hat Linux 7.2</td>

        <td>gcc 2.96</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Red Hat Linux 8.0</td>

        <td>gcc 3.2</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Mac OS X (10.2)</td>

        <td>gcc 3.1<br>
         (Developer Tools, July 2002)</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Solaris 8 (SunOS 5.8)</td>

        <td>Workshop Pro CC 4.2<br>
         (use 'runConfigureICU SOLARISCC/W4.2')</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Solaris 2.6 (SunOS 5.6)</td>

        <td>gcc 2.95.2</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>FreeBSD 4.8</td>

        <td>gcc 2.95.4</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>HP-UX 11.01</td>

        <td>aCC A.03.13<br>
         cc A.11.01.00</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>AIX 5.1.0 L</td>

        <td>Visual Age C++ 5.0</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>AIX 4.3.3</td>

        <td>Visual Age C++ 6.0</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>z/OS 1.2</td>

        <td>cxx 1.2</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>OS/400 (iSeries) V5R1</td>

        <td>iCC</td>

        <td>Regularly tested</td>
      </tr>

      <tr>
        <td>Red Hat Linux Advanced Server 2.1</td>

        <td>Intel C++ Compiler 6.0.1</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>Red Hat Alpha Linux 7.2</td>

        <td>gcc 2.96</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>Red Hat Alpha Linux 7.2</td>

        <td>Compaq C++ Compiler 3.2<br>
         Compaq C Compiler 6.5.6</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>Cygwin</td>

        <td>gcc 2.95.3</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>Windows NT</td>

        <td>Microsoft Visual C++ 6.0</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>QNX</td>

        <td>gcc</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>NetBSD, OpenBSD</td>

        <td>gcc</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>BeOS</td>

        <td>gcc</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>SGI/IRIX</td>

        <td>&nbsp;</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>Tru64 (OSF)</td>

        <td>Compaq's cxx compiler</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>HP-UX 11.01</td>

        <td>CC A.03.10</td>

        <td>Rarely tested</td>
      </tr>

      <tr>
        <td>MP-RAS</td>

        <td>NCR MP-RAS C/C++ Compiler</td>

        <td>Rarely tested</td>
      </tr>
    </table>

    <p><br>
    </p>

    <h4>Key to testing frequency</h4>

    <dl>
      <dt><i>Reference platform</i></dt>

      <dd>ICU will work on these platforms with these compilers</dd>

      <dt><i>Regularly tested</i></dt>

      <dd>ICU should work on these platforms with these compilers</dd>

      <dt><i>Rarely tested</i></dt>

      <dd>ICU has been ported to these platforms but may not have been tested
      there recently</dd>
    </dl>

    <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
    "HowToBuildWindows">How To Build And Install On Windows</a></h3>

    <p>Building International Components for Unicode requires:</p>

    <ul>
      <li>Microsoft NT 4.0 and above, or Windows 98 and above</li>

      <li>Microsoft Visual C++ 6.0 (Service Pack 2 is required to work with the
      release build of max speed optimization).</li>
    </ul>

    <p>(If you want to build with Microsoft Visual C++ .NET, please refer to
    the <a href="#HowToBuildWindowsDotNet">note about building with Visual
    Studio .NET</a> below.)</p>

    <p>The steps are:</p>

    <ol>
      <li>Unzip the icu-XXXX.zip file into any convenient location. Using
      command line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or
      just use WinZip.</li>

      <li>Be sure that the ICU binary directory, <i>&lt;ICU&gt;</i>\bin\, is
      included in the <strong>PATH</strong> environment variable. The tests
      will not work without the location of the ICU DLL files in the path.</li>

      <li>Open the "<i>&lt;ICU&gt;</i>\source\allinone\allinone.dsw" workspace
      file in Microsoft Visual C++ 6.0. (This workspace includes all the
      International Components for Unicode libraries, necessary ICU building
      tools, and the intltest and cintltest test suite projects). Please see
      the note below if you want to build from the command line instead.</li>

      <li>Set the active Project to the "all" project. To do this: Choose
      "Project" menu, and select "Set active project". In the submenu, select
      the "all" workspace.</li>

      <li>Set the active configuration to "Win32 Debug" or "Win32 Release" (See
      <a href="#HowToBuildWindowsConfig">Windows configuration note</a>
      below).</li>

      <li>Choose the "Build" menu and select "Rebuild All". If you want to
      build the Debug and Release at the same time, see the <a href=
      "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>

      <li>Run the C++ test suite, "intltest". To do this: set the active
      project to "intltest", and press F5 to run it.</li>

      <li>Run the C test suite, "cintltst". To do this: set the active project
      to "cintltst", and press F5 to run it.</li>

      <li>Make sure that both "cintltst" and "intltest" passed without any
      errors. The return codes are non-zero when they do not pass. Visual C++
      will display the return codes in the debug tag of the output window. When
      "intltest" and "cintltest" return 0, it means that everything is
      installed correctly. You can press Ctrl+F5 on the test project to run the
      test and see what error messages were displayed (if any tests
      failed).</li>

      <li>You are now able to develop applications with ICU by using the
      libraries and tools in <i>&lt;ICU&gt;</i>\bin\. The headers are in
      <i>&lt;ICU&gt;</i>\include\ and the link libraries are in
      <i>&lt;ICU&gt;</i>\lib\. To install the ICU runtime on a machine, or ship
      it with your application, copy the needed components from
      <i>&lt;ICU&gt;</i>\bin\ to a location on the system PATH or to your
      application directory.</li>
    </ol>

    <p><a name="HowToBuildWindowsCommandLine" id=
    "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
    Note:</strong></a> You can build ICU from the command line. Assuming that
    you have properly installed Microsoft Visual C++ to support command line
    execution, you can run the following command, 'msdev
    <i>&lt;ICU&gt;</i>\source\allinone\allinone.dsw /MAKE "ALL"'.</p>

    <p><a name="HowToBuildWindowsConfig" id=
    "HowToBuildWindowsConfig"><strong>Setting Active Configuration
    Note:</strong></a> To set the active configuration, two different
    possibilities are:</p>

    <ul>
      <li>Choose "Build" menu, select "Set Active Configuration", and select
      "Win32 Release" or "Win32 Debug".</li>

      <li>Another way is to select "Customize" in the "Tools" menu, select the
      "Toolbars" tab, enable "Build" instead of "Build Minibar", and click on
      "Close". This will bring up a toolbar which you can move aside the other
      permanent toolbars at the top of the MSVC window. The advantage is that
      you now have an easy-to-reach pop-up menu that will always show the
      currently selected active configuration. Or, you can drag the project and
      configuration selections and drop them on the menu bar for later
      selection.</li>
    </ul>

    <p><a name="HowToBuildWindowsBatch" id=
    "HowToBuildWindowsBatch"><strong>Batch Configuration Note:</strong></a> If
    you want to build the Debug and Release configurations at the same time,
    choose "Build" menu and select "Batch Build..." instead (and mark all
    configurations as checked), then click the button named "Rebuild All". The
    "all" workspace will build all the libraries, test programs and various ICU
    tools (e.g. genrb for generating binary locale data files).</p>

    <p><a name="HowToBuildWindowsDotNet" id=
    "HowToBuildWindowsDotNet"><strong>Microsoft Visual Studio .NET
    Note:</strong></a> ICU will build with Microsoft Visual Studio .NET 2002.
    It is recommended that you use the
    "<i>&lt;ICU&gt;</i>\source\allinone\allinone.sln" solution workspace to
    build ICU. The instructions for building with Visual Studio .NET are
    similar to the instructions for Visual Studio .NET. If you have Microsoft
    Visual Studio .NET 2003 the Visual Studio .NET 2002 project files will
    automatically be converted to 2003 project files when you open the solution
    workspace for the first time.</p>

    <h3><a name="HowToBuildWindowsXP64" href="#HowToBuildWindowsXP64" id=
    "HowToBuildWindowsXP64">How To Build And Install On Windows XP on
    IA64</a></h3>

    <p>Building International Components for Unicode requires:</p>

    <ul>
      <li>Microsoft XP on an IA64 (Itanium&reg;) machine</li>

      <li>Microsoft Visual C++ 6.0 (Service Pack 2 is required to work with the
      release build of max speed optimization).</li>

      <li>Microsoft Platform SDK.</li>
    </ul>

    <p>The steps are:</p>

    <ol>
      <li>Follow steps 1-3 in the <a href="#HowToBuildWindows">in the previous
      section</a>.</li>

      <li>Open the "Set Windows XP 64-bit Build Environment (Retail)" command
      window from the Microsoft Platform SDK.</li>

      <li>If your computer is not set up to do command line builds, then run
      "set PATH=C:\Program Files (x86)\Microsoft Visual
      Studio\Common\MSDev98\Bin;%PATH%" or include the path where MSDEV.EXE is
      located.</li>

      <li>Use cd to get into the <i>&lt;ICU&gt;</i> directory.</li>

      <li>Run this command: 'msdev /USEENV
      <i>&lt;ICU&gt;</i>\source\allinone\allinone.dsw /MAKE "all - Win64
      Release"'</li>

      <li>Run "cd source\test\intltest\Release"</li>

      <li>Run the C++ test suite, "intltest". There should be no errors.</li>

      <li>Run "cd ..\..\cintltst\Release"</li>

      <li>Run the C test suite, "cintltst". There should be no errors.</li>

      <li>Follow the last step in the <a href="#HowToBuildWindows">in the
      previous section</a>.</li>
    </ol>

    <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
    "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>

    <p>Building International Components for Unicode with this configuration
    requires:</p>

    <ul>
      <li>Microsoft NT 4.0 or above, or Windows 98 or above</li>

      <li>Microsoft Visual C++ 6.0 or above (when gcc isn't used).</li>

      <li>
        Cygwin with the following installed: 

        <ul>
          <li>bash</li>

          <li>GNU make</li>

          <li>man (if you plan to look at the man pages)</li>
        </ul>
      </li>
    </ul>

    <p>There are two ways you can build ICU with Cygwin. You can build with gcc
    or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
    will depend on the Cygwin environment. If you use Microsoft Visual C++, the
    resulting libraries and tools do not depend on Cygwin and can be more
    easily distributed to other Windows computers (the generated man pages and
    shell scripts still need Cygwin). To build with gcc, please follow the "<a
    href="#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions,
    while you are inside a Cygwin bash shell. To build with Microsoft Visual
    C++, please use the following instructions:</p>

    <ol>
      <li>Start the Windows "Command Prompt" window. This is different from the
      gcc build, which requires the Cygwin Bash command prompt. The Microsoft
      Visual C++ compiler will not work with a bash command prompt.</li>

      <li>If the computer isn't set up to use Visual C++ from the command line,
      you need to run VCVARS32.BAT (for example: "<tt>C:\Program
      Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT</tt>").</li>

      <li>Unzip the icu-XXXX.zip file into any convenient location. Using
      command line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or
      just use WinZip.</li>

      <li>Change directory to "icu/source", which is where you unzipped
      ICU.</li>

      <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
      Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
      configuration note</a> and non-functional configure options below).</li>

      <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
      This make command should be GNU make.</li>

      <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
      checks for ICU's functionality integrity (See <a href=
      "#HowToTestWithoutGmake">testing note</a> below).</li>

      <li>Type <tt>"make install"</tt> to install ICU. If you used the
      --prefix= option on configure or runConfigureICU, ICU will be installed
      to the directory you specified. (See <a href=
      "#HowToInstallICU">installation note</a> below).</li>
    </ol>

    <p><a name="HowToWindowsConfigureICU" id=
    "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
    NOTE:</strong></a> In addition to the Unix <a href=
    "#HowToConfigureICU">configuration note</a> the following configure options
    currently do not work on Windows with Microsoft's compiler. Some options
    can work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>,
    but manually editing the files is not recommended.</p>

    <ul>
      <li><tt>--enable-static</tt> (partially works)</li>

      <li><tt>--disable-renaming</tt></li>

      <li><tt>--disable-threading</tt></li>

      <li><tt>--enable-64bit-libs</tt></li>

      <li><tt>--enable-rpath</tt></li>

      <li><tt>--with-iostream</tt></li>

      <li><tt>--with-data-packaging=files</tt></li>

      <li>out of source builds</li>
    </ul>

    <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
    To Build And Install On UNIX</a></h3>

    <p>Building International Components for Unicode on UNIX requires:</p>

    <ul>
      <li>A C++ compiler installed on the target machine (for example: gcc, CC,
      xlC_r, aCC, cxx, etc...).</li>

      <li>An ANSI C compiler installed on the target machine (for example:
      cc).</li>

      <li>A recent version of GNU make (3.77+).</li>

      <li>For a list of z/OS tools please view the <a href=
      "#HowToBuildZOS">z/OS build section</a> of this document for further
      details.</li>
    </ul>

    <p>Here are the steps to build ICU:</p>

    <ol>
      <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
      icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d &lt;
      icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li>

      <li>Change directory to the "icu/source".</li>

      <li>Run <tt>"chmod +x runConfigureICU configure install-sh"</tt> because
      these files may have the wrong permissions.</li>

      <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt>
      script for your platform. (See <a href="#HowToConfigureICU">configuration
      note</a> below).</li>

      <li>Type <tt>"gmake"</tt> (or "make" if GNU make is the default make on
      your platform) to compile the libraries and all the data files. The
      proper name of the GNU make command is printed at the end of the
      configuration run, as in "You must use gmake to compile ICU".</li>

      <li>Optionally, type <tt>"gmake check"</tt> to run the test suite, which
      checks for ICU's functionality integrity (See <a href=
      "#HowToTestWithoutGmake">testing note</a> below).</li>

      <li>Type <tt>"gmake install"</tt> to install ICU. If you used the
      --prefix= option on configure or runConfigureICU, ICU will be installed
      to the directory you specified. (See <a href=
      "#HowToInstallICU">installation note</a> below).</li>
    </ol>

    <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring
    ICU NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on
    how to run it and a list of supported platforms. You may also want to type
    <tt>"./configure --help"</tt> to print the available configure options that
    you may want to give runConfigureICU. If you are not using the
    runConfigureICU script, or your platform is not supported by the script,
    you may need to set your CC, CXX, CFLAGS and CXXFLAGS environment
    variables, and type <tt>"./configure"</tt>. Some of the more frequently
    used options to configure are --disable-64bit-libs to create 32-bit
    libraries, and --srcdir to do out of source builds (build the libraries in
    the current location). HP-UX user's, please see this <a href=
    "#ImportantNotesHPUX">note regarding multithreaded build issues</a> with
    newer compilers. Solaris user's, please see this <a href=
    "#ImportantNotesSolaris">note regarding multithreaded build issues</a>.</p>

    <p><a name="HowToTestWithoutGmake" id=
    "HowToTestWithoutGmake"><strong>Running The Tests From The Command Line
    NOTE:</strong></a> You may have to set certain variables if you with to run
    test programs individually, that is apart from "gmake check". The
    environment variable <strong>ICU_DATA</strong> can be set to the full
    pathname of the data directory to indicate where the locale data files and
    conversion mapping tables are when you are not using the shared library
    (e.g. by using the .dat archive or the individual data files). The trailing
    "/" is required after the directory name (e.g. "$Root/source/data/out/"
    will work, but the value "$Root/source/data/out" is not acceptable). You do
    not need to set <strong>ICU_DATA</strong> if the complete shared data
    library is in your library path.</p>

    <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
    NOTE:</strong></a> Some platforms use package management tools to control
    the installation and uninstallation of files on the system, as well as the
    integrity of the system configuration. You may want to check if ICU can be
    packaged for your package management tools by looking into the "packaging"
    directory. (Please note that if you are using a snapshot of ICU from CVS,
    it is probable that the packaging scripts or related files are not up to
    date with the contents of ICU at this time, so use them with caution).</p>

    <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
    Build And Install On z/OS (OS/390)</a></h3>

    <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but
    IBM tests only the z/OS installation. These platforms commonly are called
    "MVS". You install ICU in a z/OS UNIX system services file system such as
    HFS or zFS. On this platform, it is important that you understand a few
    details:</p>

    <ul>
      <li>APAR PQ58392 may be needed by z/OS 1.2 or 1.3 in order to get some
      ICU number formatting functions to work properly. The APAR affects C and
      C++ code.</li>

      <li>The makedep executable that is used with the z/OS ICU build process
      is not shipped with ICU. It is available at the <a href=
      "http://www.ibm.com/servers/eserver/zseries/zos/unix/redbook/">z/OS UNIX
      - Tools and Toys</a> site. The PATH environment variable should be
      updated to contain the location of this executable prior to build.
      Alternatively, makedep may be moved into an existing PATH directory.</li>

      <li>The gnu utilities gmake and gzip/gunzip are needed and can be
      obtained for z/OS from <a href=
      "http://www.ibm.com/servers/eserver/zseries/zos/unix/redbook/">z/OS UNIX
      - Tools and Toys</a>.</li>

      <li>Since the default make on z/OS is not gmake, the pkgdata tool
      requires that the "make" command is aliased to your installed version of
      gmake. You may also need to set $MAKE equal to the fully qualified path
      of GNU make. GNU make is available with the "z/OS UNIX - Tools and Toys"
      that was mentioned above. ICU requires the same GNU make as described in
      the UNIX build instructions.</li>

      <li>Since USS does not support using the mmap() function over NFS, it is
      recommended that you build ICU on a local filesystem. Once ICU has been
      built, you should not have this problem while using ICU when the data
      library has been built as a shared library, which is this is the default
      setting.</li>

      <li>Encoding considerations: The source code assumes that it is compiled
      with codepage ibm-1047 (to be exact, the UNIX System Services variant of
      it). The pax command converts all of the source code files from ASCII to
      codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
      must not be converted, or must be converted back to their original state.
      You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a>
      script to do this for you automatically. It will unpackage the tar file
      and convert all the necessary files for you automatically.</li>

      <li>
        <p>z/OS supports both native S/390 hexadecimal floating point and (with
        OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
        time option. Applications built with IEEE should use ICU DLLs that are
        built with IEEE (and vice versa). The environment variable IEEE390=0
        will cause the z/OS version of ICU to be built without IEEE floating
        point support and use the native hexadecimal floating point. By default
        ICU is built with IEEE 754 support.</p>

        <p><em>Important:</em> Currently (ICU 1.4.2), native floating point
        support is sufficient for codepage conversion, resource bundle and
        UnicodeString operations, but the Format APIs require IEEE binary
        floating point.</p>

        <p>Examples for configuring ICU:<br>
         Debug build: <code>./runConfigureICU --enable-debug zOS</code><br>
         Release build: <code>./runConfigureICU zOS</code></p>
      </li>

      <li>
        <p>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
        bring performance improvement opportunities to call-intensive C and C++
        applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so
        if you are considering using XPLINK in your application that uses ICU,
        you should consider building the XPLINK-enabled version of ICU. You
        need to set ICU's environment variable <code>OS390_XPLINK=1</code>
        prior to invoking the make process to produce binaries that are enabled
        for XPLINK.</p>

        <p>Note: XPLINK, which is enabled for z/OS 1.2 and later, requires the
        PTF PQ69418 to build XPLINK enabled binaries.</p>
      </li>

      <li>Currently in ICU 3.0, there is an issue with building on z/OS without
      XPLINK and with the C++ iostream. By default, the iostream library on
      z/OS is XPLINK enabled. If you are not building an XPLINK enabled version
      of ICU, you should use the <code>--with-iostream=old</code> configure
      option when using runConfigureICU. This will prevent applications that
      use the icuio library from crashing.</li>

      <li>
        <p>When you build ICU on a system such as z/OS 1.2, the binaries that
        result can run on that level of the operating system and later, such as
        z/OS 1.3 and z/OS 1.4. It's possible that you may have a z/OS 1.4
        system, but you may need to deliver binaries on z/OS 1.2 and above.
        z/OS gives you this ability by targeting the complier and linker to run
        at the older level, thereby producing the desired binaries.</p>

        <p>To set the compiler and LE environment to OS/390 2.10, specify the
        following, "<code>./runConfigureICU OS390V2R10</code>"</p>

        <p>To set the compiler and LE environment to z/OS 1.2 specify the
        following, "<code>./runConfigureICU zOSV1R2</code>"</p>
      </li>

      <li>The rest of the instructions for building and testing ICU on z/OS
      with UNIX System Services are the same as the <a href=
      "#HowToBuildUNIX">How To Build And Install On UNIX</a> section.</li>
    </ul>

    <h4>z/OS (Batch/PDS) support outside the UNIX system services
    environment</h4>

    <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
    addition, there is a z/OS specific environment variable (OS390BATCH) to
    build some libraries into the z/OS native file system. This is useful, for
    example, when your application is externalized via Job Control Language
    (JCL).</p>

    <p>The OS390BATCH environment variable enables non-UNIX support including
    the batch environment. When OS390BATCH is set, the libicuuc<i>XX</i>.dll,
    libicudt<i>XX</i>e.dll, and libicudt<i>XX</i>e_stub.dll binaries are built
    into data sets (the native file system). Turning on OS390BATCH does not
    turn off the normal z/OS UNIX build. This means that the z/OS UNIX (HFS)
    DLLs will always be created.</p>

    <p>Two additional environment variables indicate the names of the z/OS data
    sets to use. The LOADMOD environment variable identifies the name of the
    data set that contains the dynamic link libraries (DLLs) and the LOADEXP
    environment variable identifies the name of the data set that contains the
    side decks, which are normally the files with the .x suffix in the UNIX
    file system.</p>

    <p>A data set is roughly equivalent to a UNIX or Windows file. For most
    kinds of data sets the operating system maintains record boundaries. UNIX
    and Windows files are byte streams. Two kinds of data sets are PDS and
    PDSE. Each data set of these two types contains a directory. It is like a
    UNIX directory. Each "file" is called a "member". Each member name is
    limited to eight bytes, normally EBCDIC.</p>

    <p>Here is an example of some environment variables that you can set prior
    to building ICU:</p>
<pre>
<samp>OS390BATCH=1
LOADMOD=<i>USER</i>.ICU.LOAD
LOADEXP=<i>USER</i>.ICU.EXP</samp>
</pre>

    <p>The PDS member names for the DLL file names are as follows:</p>
<pre>
<samp>IXMI<i>XX</i>IN --&gt; libicui18n<i>XX</i>.dll
IXMI<i>XX</i>UC --&gt; libicuuc<i>XX</i>.dll
IXMI<i>XX</i>DA --&gt; libicudt<i>XX</i>e.dll
IXMI<i>XX</i>D1 --&gt; libicudt<i>XX</i>e_stub.dll <i>(Only when OS390_STUBDATA=1)</i></samp>
</pre>

    <p>You should point the LOADMOD environment variable at a partitioned data
    set extended (PDSE) and point the LOADEXP environment variable at a
    partitioned data set (PDS). The PDSE can be allocated with the following
    attributes:</p>
<pre>
<samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
Management class. . : <i>**None**</i>
Storage class . . . : <i>BASE</i>
Volume serial . . . : <i>TSO007</i>
Device type . . . . : <i>3390</i>
Data class. . . . . : LOAD
Organization  . . . : PO
Record format . . . : U
Record length . . . : 0
Block size  . . . . : 32760
1st extent cylinders: 1
Secondary cylinders : 5
Data set name type  : LIBRARY</samp>
</pre>

    <p>The PDS can be allocated with the following attributes:</p>
<pre>
<samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
Management class. . : <i>**None**</i>
Storage class . . . : <i>BASE</i>
Volume serial . . . : <i>TSO007</i>
Device type . . . . : <i>3390</i>
Data class. . . . . : <i>**None**</i>
Organization  . . . : PO
Record format . . . : FB
Record length . . . : 80
Block size  . . . . : <i>3200</i>
1st extent cylinders: 3
Secondary cylinders : 3
Data set name type  : PDS</samp>
</pre>

    <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
    "HowToBuildOS400">How To Build And Install On OS/400 (iSeries)</a></h3>

    <p>Before you start building ICU, ICU requires the following:</p>

    <ul>
      <li>QSHELL interpreter installed (install base option 30, operating
      system) 
      <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>

      <li>ILE C/C++ Compiler for iSeries, LPP 5722-WDS</li>

      <li>The latest GNU facilities (You can get the GNU facilities for OS/400
      from <a href=
      "http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html">http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>).
      Older versions may not work properly.</li>
    </ul>

    <p>The following describes how to setup and build ICU. For background
    information, you should look at the <a href="#HowToBuildUNIX">UNIX build
    instructions</a>.</p>

    <ol>
      <li>
        Create AS400 target library. This library will be the target for the
        resulting modules, programs and service programs. You will specify this
        library on the OUTPUTDIR environment variable in step 2.<br>
         
<pre>
<samp>CRTLIB LIB(<i>libraryname</i>)</samp>
</pre>
        <br>
      </li>

      <li>
        Set up the following environment variables in your build process (use
        the <i>libraryname</i> from the previous step) 
<pre>
<samp>ADDENVVAR ENVVAR(CC) VALUE('/usr/bin/icc')
ADDENVVAR ENVVAR(CXX) VALUE('/usr/bin/icc')
ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake')
ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>')</samp>
</pre>
        <i>libraryname</i> identifies target as400 library for *module, *pgm
        and *srvpgm objects.<br>
        <br>
         
        <!--li>Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the icc compiler</li-->
      </li>

      <li>Run <tt>'CHGJOB CCSID(37)'</tt></li>

      <li>Run <tt>'QSH'</tt></li>

      <li>Run gunzip on the ICU source code compressed tar archive
      (icu-<i>X</i>.<i>Y</i>.tgz or icu-<i>X</i>.<i>Y</i>.tar.gz).</li>

      <li>Run unpax-icu.sh on the tar file from the ICU download page.</li>

      <li>Change your current directory to icu/source.</li>

      <li>Run <tt>'export CFLAGS=-O4 CXXFLAGS=-O4'</tt> to optimize your build
      of ICU. If the build fails, rerun these build steps without this step
      before asking the icu4c-support mailing list for help.</li>

      <li>Run <tt>'cp ../as_is/os400/configure .'</tt></li>

      <li>Run <tt>'./configure --host=as400-os400'</tt></li>

      <li>Run <tt>'gmake'</tt> to build ICU.</li>

      <li>Run <tt>'gmake check'</tt> to build the tests.</li>

      <li>The "utility/MultithreadTest" test in intltest may have failed during
      <tt>'gmake check'</tt>. In order to make this test pass, please use
      <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> after you built the tests
      with <tt>'gmake check'</tt> from the previous step. You can look at the
      <a href=
      "http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/concept4.htm">
      iSeries Information Center</a> for more details.</li>
    </ol>
    <!-- end build environment -->

    <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
    Package ICU</a></h2>

    <p>There are many ways that a person can package ICU with their software
    products. Usually only the libraries need to be considered for
    packaging.</p>

    <p>On UNIX, you should have used "<tt>gmake install</tt>" to make it easier
    to develop and package ICU. The bin, lib and include directories are needed
    to develop applications that use ICU. These directories will be created
    relative to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a
    href="#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on
    Windows, a similar directory structure is built.</p>

    <p>When changes have been made to the standard ICU distribution, it is
    recommended that at least one of the following guidelines be followed for
    special packaging.</p>

    <ol>
      <li>Add a suffix name to the library names. This can be done with the
      --with-library-suffix configure option.</li>

      <li>The installation script should install the ICU libraries into the
      application's directory.</li>
    </ol>

    <p>Following these guidelines prevents other applications that use a
    standard ICU distribution from conflicting any libraries that you need. On
    operating systems that do not have a standard C++ ABI (name mangling) for
    compilers, it is recommended to do this special packaging anyway. More
    details on customizing ICU are available in the <a href=
    "http://oss.software.ibm.com/icu/userguide/index.html">User's Guide</a>.
    The <a href="#SourceCode">ICU Source Code Organization</a> section of this
    readme.html gives a more complete description of the libraries.</p>

    <table border="1" cellpadding="3" summary=
    "ICU has several libraries for you to use.">
      <caption>
        Here is an example of libraries that are frequently packaged.
      </caption>

      <tr>
        <th scope="col">Library Name</th>

        <th scope="col">Windows Filename</th>

        <th scope="col">Linux Filename</th>

        <th scope="col">Comment</th>
      </tr>

      <tr>
        <td>Data Library</td>

        <td>icudt<i>XY</i>l.dll</td>

        <td>libicudata.so.<i>XY</i>.<i>Z</i></td>

        <td>Data required by the Common and I18n libraries. There are many ways
        to package and <a href=
        "http://oss.software.ibm.com/icu/userguide/icudata.html">customize this
        data</a>, but by default this is all you need.</td>
      </tr>

      <tr>
        <td>Common Library</td>

        <td>icuuc<i>XY</i>.dll</td>

        <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>

        <td>Base library required by all other ICU libraries.</td>
      </tr>

      <tr>
        <td>Internationalization (i18n) Library</td>

        <td>icuin<i>XY</i>.dll</td>

        <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>

        <td>A library that contains many locale based internationalization
        (i18n) functions.</td>
      </tr>

      <tr>
        <td>Layout Engine</td>

        <td>icule<i>XY</i>.dll</td>

        <td>libicule.so.<i>XY</i>.<i>Z</i></td>

        <td>An optional engine for doing font layout.</td>
      </tr>

      <tr>
        <td>Layout Extensions Engine</td>

        <td>iculx<i>XY</i>.dll</td>

        <td>libiculx.so.<i>XY</i>.<i>Z</i></td>

        <td>An optional engine for doing font layout that uses parts of
        ICU.</td>
      </tr>

      <tr>
        <td>ICU I/O (Unicode stdio) Library</td>

        <td>icuio<i>XY</i>.dll</td>

        <td>libicuio.so.<i>XY</i>.<i>Z</i></td>

        <td>An optional library that provides a stdio like API with Unicode
        support.</td>
      </tr>

      <tr>
        <td>Tool Utility Library</td>

        <td>icutu<i>XY</i>.dll</td>

        <td>libicutu.so.<i>XY</i>.<i>Z</i></td>

        <td>An internal library that contains internal APIs that are only used
        by ICU's tools. If you do not use ICU's tools, you do not need this
        library.</td>
      </tr>
    </table>

    <p>Normally only the above ICU libraries need to be considered for
    packaging. The versionless symbolic links to these libraries are only
    needed for easier development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of
    the name are the version numbers of ICU. For example, ICU 2.0.2 would have
    the name libicuuc.so.20.2 for the common library. The exact format of the
    library names can vary between platforms due to how each platform can
    handles library versioning.</p>

    <h2><a name="ImportantNotes" href="#ImportantNotes" id=
    "ImportantNotes">Important Notes About Using ICU</a></h2>

    <h3><a name="ImportantNotesCPlusPlus" href="#ImportantNotesCPlusPlus" id=
    "ImportantNotesCPlusPlus">Using ICU in a Multithreaded Environment</a></h3>

    <p>Upon the first usage of most ICU APIs, the global mutex will get
    initialized properly, but you can use the <code>u_init()</code> function
    from uclean.h to ensure that it is initialized properly. Without calling
    this function from a single thread, the data caches inside ICU may get
    initialized more than once from multiple threads, which may cause memory
    leaks and other problems. There is no harm in calling <code>u_init()</code>
    in a single threaded application.</p>

    <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
    "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
    HP-UX</a></h4>

    <p>If you are building ICU with a newer aCC compiler and you are planning
    on using the older &lt;iostream.h&gt; instead of the newer
    &lt;iostream&gt;, you will need to use a special configure flag before
    building ICU. By default, the aCC <a href=
    "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA">
    -AA</a> flag is used on HP-UX when the compiler supports that option in
    order to make ICU thread safe with RogueWave and other libraries using the
    2.0 Standard C++ library. Your applications that use ICU will also need to
    use the <a href=
    "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA">
    -AA</a> compiler flag. To turn off this behavior in ICU, you will need to
    use the --with-iostream= old configure option when you first use
    runConfigureICU.</p>

    <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
    "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
    Solaris</a></h4>

    <h5>Solaris Deadlock Issues in Solaris 2.8, and Earlier</h5>

    <p>Solaris 2.8, and earlier, has outstanding thread deadlocking issues that
    MAY be problematic for applications using either native, or POSIX,
    threading on these platforms. Sun states that Solaris 2.9 DOES NOT have the
    deadlock problems. Deadlocks MAY occur either during initialization of the
    Solaris threading library, or at any other time.</p>

    <p>Sun Microsystems has provided a Sun Alert Notification regarding the
    issue. Users SHOULD consider applying the latest OS patches to their
    Solaris installations in order to help avoid deadlock. Further information
    regarding the issue, and links to applicable patches, may be found at:</p>

    <p>[1] "<i>Applications Linked to libthread May Hang</i>", Sun Alert
    Notification, Sun Microsystems, Inc., 04-Sep-2002<br>
     <a href=
    "http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F46867&amp;zone_32=4663077">
    http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F46867&amp;zone_32=4663077</a></p>

    <p>Sun is NOT providing patches for Solaris 2.6, or earlier.</p>

    <p>Sun states that by applying the patch users will avoid the deadlock
    issues. However, with all applicable patches applied, deadlock MAY still be
    seen, as demonstrated by the ICU Mutex unit tests. The unit test will hang
    indefinitely. No bug exists in ICU. However, a latent bug still exists in
    Solaris, which Sun Microsystems has yet to resolve. In order to avoid this,
    users are SUGGESTED to modify their LD_LIBRARY_PATH according to the
    guidelines specified by Sun Microsystems in the Sun Alert Notification.</p>

    <h5>Linking on Solaris</h5>

    <p>In order to avoid synchronization and threading issues, developers are
    SUGGESTED to strictly follow the compiling and linking guidelines for
    multithreaded applications, specified in the following document from Sun
    Microsystems. Most notably, pay strict attention to the following
    statements from Sun:</p>

    <blockquote>
      <p>To use libthread, specify -lthread before -lc on the ld command line,
      or last on the cc command line.</p>

      <p>To use libpthread, specify -lpthread before -lc on the ld command
      line, or last on the cc command line.</p>
    </blockquote>

    <p>Failure to do this may cause spurious lock conflicts, recursive mutex
    failure, and deadlock.</p>

    <p>[2] "<i>Solaris Multithreaded Programming Guide, Compiling and
    Debugging</i>", Sun Microsystems, Inc., Apr 2004<br>
     <a href=
    "http://docs.sun.com/db/doc/806-6867/6jfpgdcob?a=view">http://docs.sun.com/db/doc/806-6867/6jfpgdcob?a=view</a></p>

    <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
    "ImportantNotesWindows">Windows Platform</a></h3>

    <p>If you are building on the Win32 platform, it is important that you
    understand a few of the following build details.</p>

    <h4>DLL directories and the PATH setting</h4>

    <p>As delivered, the International Components for Unicode build as several
    DLLs, which are placed in the "<i>&lt;ICU&gt;</i>\bin" directory. You must
    add this directory to the PATH environment variable in your system, or any
    executables you build will not be able to access International Components
    for Unicode libraries. Alternatively, you can copy the DLL files into a
    directory already in your PATH, but we do not recommend this. You can wind
    up with multiple copies of the DLL and wind up using the wrong one.</p>

    <h4><a name="ImportantNotesWindowsPath" id=
    "ImportantNotesWindowsPath">Changing your PATH</a></h4>

    <ul>
      <li><strong>Windows 2000</strong>: Use the System Icon in the Control
      Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
      button. Select the variable PATH in the lower box, and select the lower
      "Edit..." button. In the "Variable Value" box, append the string
      ";<i>&lt;ICU&gt;</i>\bin" to the end of the path string. If there is
      nothing there, just type in "<i>&lt;ICU&gt;</i>\bin". Click the Set
      button, then the OK button.</li>

      <li><strong>Windows NT</strong>: Use the System Icon in the Control
      Panel. Pick the "Environment" tab, and select the variable PATH in the
      lower box. In the "value" box, append the string
      ";<i>&lt;ICU&gt;</i>\bin" at the end of the path string. If there is
      nothing there, just type in "<i>&lt;ICU&gt;</i>\bin". Click the Set
      button, then the OK button.</li>

      <li><strong>Windows 95/98/ME</strong>: Edit the autoexec.bat, and add the
      following line to the end of file, "SET
      PATH=%PATH%;<i>&lt;ICU&gt;</i>\bin"</li>
    </ul>

    <p>Note: When packaging a Windows application for distribution and
    installation on user systems, copies of the ICU DLLs should be included
    with the application, and installed for exclusive use by the application.
    This is the only way to insure that your application is running with the
    same version of ICU, built with exactly the same options, that you
    developed and tested with. Refer to Microsoft's guidelines on the usage of
    DLLs, or search for the phrase "DLL hell" on <a href=
    "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>

    <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
    "ImportantNotesUNIX">UNIX Type Platform</a></h3>

    <p>If you are building on a UNIX platform, and if you are installing ICU in
    a non-standard location, you may need to add the location of your ICU
    libraries to your <strong>LD_LIBRARY_PATH</strong> or
    <strong>LIBPATH</strong> environment variable (or the equivalent runtime
    library path environment variable for your system). The ICU libraries may
    not link or load properly without doing this.</p>

    <p>Note that if you do not want to have to set this variable, you may
    instead use the --enable-rpath option at configuration time. This option
    will instruct the linker to always look for the libraries where they are
    installed. You will need to use the appropriate linker options when linking
    your own applications and libraries against ICU, too. Please refer to your
    system's linker manual for information about runtime paths. The use of
    rpath also means that when building a new version of ICU you should not
    have an older version installed in the same place as the new version's
    installation directory, as the older libraries will used during the build,
    instead of the new ones, likely leading to an incorrectly build ICU. (This
    is the proper behavior of rpath.)</p>

    <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
    "PlatformDependencies">Platform Dependencies</a></h2>

    <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
    "PlatformDependenciesNew">Porting To A New Platform</a></h3>

    <p>If you are using ICU's Makefiles to build ICU on a new platform, there
    are a few places where you will need to add or modify some files. If you
    need more help, you can always ask the <a href=
    "http://oss.software.ibm.com/icu/archives/">icu4c-support mailing list</a>.
    Once you have finished porting ICU to a new platform, it is recommended
    that you contribute your changes back to ICU via the icu4c-support mailing
    list. This will make it easier for everyone to benefit from your work.</p>

    <h4>Data For a New Platform</h4>

    <p>For some people, it may not be necessary for completely build ICU. Most
    of the makefiles and build targets are for tools that are used for building
    ICU's data, and an application's data (when an application uses ICU
    resource bundles for its data).</p>

    <p>Data files can be built on a different platform when both platforms
    share the same endianness and the same charset family. This assertion does
    not include platform dependent DLLs/shared/static libraries. For details
    see the User Guide <a href=
    "http://oss.software.ibm.com/icu/userguide/icudata.html">ICU Data</a>
    chapter.</p>

    <p>ICU 2.8 removes the requirement that ICU be completely built in the
    native operating environment. It adds the icuswap tool which can be run on
    any platform to turn binary ICU data files from any one of the three
    formats into any one of the other data formats. This allows a application
    to use ICU data built anywhere to be used for any other target
    platform.</p>

    <p><strong>WARNING!</strong> Building ICU without running the tests is not
    recommended. The tests verify that ICU is safe to use. It is recommended
    that you try to completely port and test ICU before using the libraries for
    your own application.</p>

    <h4>Adapting Makefiles For a New Platform</h4>

    <p>Try to follow the build steps from the <a href=
    "#HowToBuildUNIX">UNIX</a> build instructions. If the configure script
    fails, then you will need to modify some files. Here are the usual steps
    for porting to a new platform:<br>
    </p>

    <ol>
      <li>Create an mh file in icu/source/config/. You can use mh-linux or a
      similar mh file as your base configuration.</li>

      <li>Modify icu/source/aclocal.m4 to recognize your platform's mh
      file.</li>

      <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
      Macro define.</li>

      <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
      icu/source/ without any options. The autoconf tool is standard on most
      Linux systems.</li>

      <li>If you have any optimization options that you want to normally use,
      you can modify icu/source/runConfigureICU to specify those options for
      your platform.</li>

      <li>Build and test ICU on your platform. It is very important that you
      run the tests. If you don't run the tests, there is no guarentee that you
      have properly ported ICU.</li>
    </ol>

    <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
    "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>

    <p>The platform dependencies have been mostly isolated into the following
    files in the common library. This information can be useful if you are
    porting ICU to a new platform.</p>

    <ul>
      <li>
        <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br>
         <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, pmacos.h,
        ..): Platform-dependent typedefs and defines:<br>
        <br>
         

        <ul>
          <li>XP_CPLUSPLUS for C++ only.</li>

          <li>TRUE and FALSE, UBool, int8_t, int16_t etc.</li>

          <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
          export</li>

          <li>int64_t and uint64_t. If the platform does not support 64 bit
          values, the macro <tt>U_INT64_T_UNAVAILABLE</tt> must be defined. For
          example, this will disable Rule-based number formatting.</li>
        </ul>
        <br>
      </li>

      <li>
        <strong>unicode/putil.h, putil.c</strong>: platform-dependent
        implementations of various functions that are platform dependent:<br>
        <br>
         

        <ul>
          <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
          handling special floating point values.</li>

          <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
          platform specific time and time zone information.</li>

          <li>u_getDataDirectory for getting the default data directory.</li>

          <li>uprv_getDefaultLocaleID for getting the default locale
          setting.</li>

          <li>uprv_getDefaultCodepage for getting the default codepage
          encoding.</li>
        </ul>
        <br>
      </li>

      <li>
        <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
        multithreaded applications. If you wish to use International Components
        for Unicode in a multithreaded application, you must provide a
        synchronization primitive that the classes can use to protect their
        global data against simultaneous modifications. See Users' guide for
        more information.<br>
        <br>
         

        <ul>
          <li>We supply sample implementations for WinNT, Win95, Win98,
          Sun/Solaris, RedHat/Linux, HP-UX and for AIX on an RS/6000.</li>
        </ul>
        <br>
      </li>

      <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
      otherwise reading or loading files into memory. All access by ICU to data
      from files makes use of these functions.<br>
      <br>
      </li>

      <li>Using platform specific #ifdef macros are highly discouraged outside
      of the scope of these files. When the source code gets updated in the
      future, these #ifdef's can cause testing problems for your platform.</li>
    </ul>

    <h3><a name="PlatformDependenciesBuildOrder" href=
    "#PlatformDependenciesBuildOrder" id="PlatformDependenciesBuildOrder">Build
    Order Without Using ICU's Makefiles</a></h3>

    <p>It is possible to build each library individually without our Makefiles.
    They must be built in the following order:<br>
    </p>

    <ol>
      <li>stubdata</li>

      <li>common</li>

      <li>i18n</li>

      <li>toolutil</li>

      <li>makeconv</li>

      <li>gencnval</li>

      <li>genprops</li>

      <li>gennames</li>

      <li>genpname</li>

      <li>gennorm</li>

      <li>gensprep</li>

      <li>genbrk</li>

      <li>genuca</li>

      <li>genrb</li>

      <li>genccode</li>

      <li>gencmn</li>

      <li>pkgdata</li>

      <li>makedata (a project on Windows, or source/data/Makefile on UNIX)</li>

      <li>layout (optional)</li>

      <li>layoutex (optional)</li>

      <li>ctestfw, intltest, iotest and cintltst, if you want to run the test
      suite.</li>

      <li>uconv, icuswap and icuio (ustdio) can also be optionally built.</li>
    </ol>
    <hr>

    <p>Copyright &copy; 1997-2004 International Business Machines Corporation
    and others. All Rights Reserved.<br>
     IBM Globalization Center of Competency - San Jos&eacute;<br>
     5600 Cottle Road<br>
     San Jos&eacute;, CA 95193<br>
     USA</p>
  </body>
</html>

