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

<html lang="en-US">
  <head>
    <meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2003 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=iso-8859-1">

    <title>ReadMe for ICU</title>
<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> 2.6.1
    ReadMe</h1>

    <p>Version: 2003-Sep-15<br>
     Copyright &copy; 1997-2003 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="#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="#CharStrings">char * strings in ICU</a></li>

          <li><a href="#ImportantNotesDefaultCP">Using the Default
          Codepage</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">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">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%">
      <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">What is new in this release?</a></h2>

    <p>This is a maintenance release - mostly concentrated on bug fixes.
      The most important feature is support for UCA 4.0. For more details,
      please see the <a href="http://oss.software.ibm.com/icu/download/2.6.1/index.html">ICU
	2.6.1 download page</a>. <br>
    </p>
    <p>The following list concentrates on <em>changes in ICU 2.6 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/2.6/index.html">ICU 2.6
	download page</a>.</p>

    <h3>Library Initialization</h3>

    <p>ICU4C 2.6 introduces a library initialization function. It is required
    to call&nbsp; 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>Support for Unicode 4.0</h3>

    <p>Unicode properties and algorithms have been upgraded to <a href=
    "http://www.unicode.org/versions/Unicode4.0.0/">Unicode 4.0</a>, which
    includes the addition of 1226 new encoded characters. The UCA (<a href=
    "http://www.unicode.org/reports/tr10/">Unicode Collation Algorithm</a>)
    table is still at version 3.1.1, with Unicode 4-based canonical closure,
    because UCA 4 is not available yet. All Unicode properties (except for
    those in Unihan.txt) are now <a href=
    "http://oss.software.ibm.com/icu/userguide/properties.html">available via
    direct APIs, and most via UnicodeSet</a>.</p>

    <p>Note that a Unicode update includes changes in algorithms. For example,
    the default iterator for finding titlecasing positions has changed from the
    titlecasing iterator to the word break iterator according to the Unicode
    Standard.</p>

    <p><a href="http://www.unicode.org/reports/tr15/#Corrigenda">Unicode 4
    fixes 5 normalization bugs</a>, which changes the decomposition and
    canonical equivalence of 5 characters. ICU 2.6 normalization uses Unicode 4
    data, therefore it contains these bug fixes.</p>

    <h3>Currency formatting</h3>

    <p>Formatting of currency values has been improved in ICU 2.6 by allowing
    the specification of any currency with any language-specific formatter. The
    currency itself can be chosen independently of the display language, but an
    appropriately localized string will be displayed for the currency symbol.
    The display symbol data is not fully fleshed out. See the API references
    for ucurr.h and NumberFormat. <code>icu/source/samples/numfmt/</code> is
    updated to illustrate this feature.</p>

    <h3>XML resource bundles</h3>

    <p>The ICU team had developed a custom XML format that matched the
    capabilities of the binary data structure of ICU .res files. This format
    was not known to be used and not optimal for translation/localization. ICU
    2.6 supports the standard XLIFF format for product localization by
    providing tools to convert between .xlf and ICU .txt files. See the User
    Guide <a href=
    "http://oss.software.ibm.com/icu/userguide/localizing.html">Localizing with
    ICU</a> chapter for details. The previous, ICU-specific XML format has been
    withdrawn.</p>

    <h3>ICU code library size</h3>

    <p>ICU code libraries can be made smaller by removing functionality. See
    the <a href=
    "http://oss.software.ibm.com/icu/userguide/packaging.html">Packaging
    ICU</a> section of the User's Guide.</p>

    <h3>Flexible data loading</h3>

    <p>ICU 2.2 has an extended search path functionality, more flexible data
    override capabilities, and removes lesser-known heuristics for determining
    the data path.</p>

    <ul>
      <li>Performance: ICU will only load data from packages, not from single
      files, when the search path is empty. This eliminates all file system
      accesses after the packages (ICU data + application data) are loaded.<br>
       If this is important, then an application should set the search path to
      the empty path during initialization.</li>

      <li>Customizability: If the search path is not empty, then ICU searches
      for single files before looking in packages, allowing to override/update
      packaged data.</li>

      <li>User data: The new function ucnv_openPackage allows an application to
      load an ICU character mapping table from its own data. This enables
      applications to support more codepages than the ICU installation that it
      uses.</li>

      <li>Separation between ICU data and user data: Single data files must now
      always have a package name as prefix, which results in different file
      names between ICU and all application packages even for the same locale
      IDs etc.</li>

      <li>Multi-path: The search path can now contain multiple folders and can
      list packages directly instead of just a single folder.</li>

      <li>Predictability: The search path can be set via the ICU_DATA
      environment variable or via the <code>u_setDataDirectory()</code>
      function.<br>
       ICU does not perform any other heuristics any more.</li>
    </ul>

    <p><strong>Note:</strong> while some of the old binary data may be still
    readable by ICU 2.2 (resource bundles, for example), they need to be
    repackaged in order to be used.</p>

    <ul>
      <li>If you have individual binary files, you have to rename them so that
      you prepend a <code>'packagename_'</code>. Then use
      <code>packagename</code> for opening.</li>

      <li>If you have a memory-mapped package file, you will need to unpack it
      (use decmn tool), rename individual files as above (prepending the
      package name), and repack the files.</li>

      <li>If you have a shared library file, you'll need to somehow get
      individual files and repackage them.</li>
    </ul>

    <h3>Experimental locales moved to new repository</h3>

    <p>Experimental locales are ones for which we have incomplete data. Data
    for such locales used to be included in the default ICU download, but have
    been moved to a new <a href=
    "http://oss.software.ibm.com/cvs/icu/locale/icu/experimental/">locale data
    repository</a>, stored as another <a href=
    "http://oss.software.ibm.com/icu/develop/cvs.html">ICU CVS module</a>. This
    data can be added back into a customized ICU build, see the <a href=
    "http://oss.software.ibm.com/icu/userguide/icudata.html">User Guide Data
    chapter</a>. It can also still be viewed with the <a href=
    "http://oss.software.ibm.com/icu/demo/index.html">LocaleExplorer
    demo</a>.</p>
    <hr>

    <h2><a name="Download" href="#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">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">User's Guide</a> 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%">
      <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%">
      <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>
          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. 

          <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
            <b>timezone.txt,</b> a generated file, which is compiled into
            tz.dat. The <b>tz.dat</b> file contains time zone information.</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>
        </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 the files
        <b>test1.cnv</b> through <b>test4.cnv,</b> and <b>testdata.dat.</b>
        Note that the tests call
        u_setDataDirectory("&lt;ICU&gt;/source/test/testdata/lib"), so that ICU
        will load these files as if they were part of the ICU data package, for
        testing purposes. This was formerly accomplished by setting the
        ICU_DATA environment variable to point at these files. ICU_DATA should
        not be set under normal circumstances.</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>bin</b>/</td>

        <td>Contains the libraries and executables for using ICU on
        Windows.</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>
    </table>
    <!-- end of ICU structure ==================================== -->

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

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

    <table border="1" cellpadding="3">
      <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/XP</td>

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

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

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

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

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

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

        <td>gcc 2.96</td>

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

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

        <td>Visual Age C++ 5.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.01</td>

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

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

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

        <td>Microsoft Visual C++ 6.0</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.4</td>

        <td>gcc 2.95.3</td>

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

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

        <td>gcc 2.96</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 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>AIX 4.3.3</td>

        <td>xlC_r 4.0.2.1</td>

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

      <tr>
        <td>CygWin</td>

        <td>gcc 2.95.3</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>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>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>
    </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">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>Set the <strong>TZ</strong> environment variable to
      <strong>PST8PDT</strong>. The tests will not work in any other time
      zone.</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">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">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>Reset the <strong>TZ</strong> environment variable to its original
      value, unless you plan on testing ICU any further.</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"><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"><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"><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"><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">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>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 two steps in the <a href="#HowToBuildWindows">in the
      previous section</a>.</li>
    </ol>

    <h3><a name="HowToBuildUnix" href="#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">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">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">note</a>
      below).</li>
    </ol>

    <p><a name="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</a>
    regarding multithreaded build issues with newer compilers.</p>

    <p><a name="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 <strong>TZ</strong> environment variable needs to be set to
    <strong>PST8PDT</strong>. Also, 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"><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">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 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/bpxa1ty1.html#opensrc">
      z/OS Unix - Tools and Toys</a>. Documentation on these tools can be found
      at the <a href=
      "http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg245944.html">
      Open Source Software for z/OS UNIX</a> Red Book.</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 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=1 will cause the z/OS version of ICU to be built with IEEE
        floating point. The default is native hexadecimal floating point.<br>
         <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, especially ChoiceFormat,
        require IEEE binary floating point.</p>

        <p>Examples for configuring ICU:<br>
         Debug build: <code>IEEE390=1 ./runConfigureICU --enable-debug
        zOS</code><br>
         Release build: <code>IEEE390=1 ./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, enabled for z/OS 1.2 and later, requires the PTF for
        PQ69418 to build XPLINK-enabled binaries.</p>
      </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. The required version is the same Unix build
      instructions.</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/bpxa1ty1.html#opensrc">
      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>
        <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 and, for example, 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:</p>
<pre>
<samp>./runConfigureICU OS390V2R10</samp>
</pre>

        <p>To set the compiler and LE environment to z/OS 1.2 specify the
        following:</p>
<pre>
<samp>./runConfigureICU zOSV1R2</samp>
</pre>
      </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>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">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>
      <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</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.as400.ibm.com/developer/factory/porting/gnu_utilities.html">http://www.as400.ibm.com/developer/factory/porting/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</a>
    build instructions.</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>
      <!--li>Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the icc compiler</li-->

      <li>
        In order to get the tests to run correctly, the QUTCOFFSET needs to be
        set to the Pacific Time Zone offset.<br>
        <br>
         To check your QUTCOFFSET: 
<pre>
<samp>DSPSYSVAL SYSVAL(QUTCOFFSET)</samp>
</pre>
        <br>
         To change your QUTCOFFSET:<br>
<pre>
<samp>CHGSYSVAL SYSVAL(QUTCOFFSET) VALUE('-0800')</samp>
</pre>
        You should change -0800 to -0700 for daylight savings.<br>
        <br>
      </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>
        If you specified <tt>--with-data-packaging=archive</tt> to configure,
        you can skip this step. In a future release of ICU, we hope to
        eliminate this complicated step. Any suggestions to improve the ICU
        installation are greatly appreciated, and you can send those
        suggestions to the <a href=
        "http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu4c-support/">
        icu4c-support</a> mailing list. 

        <ol type="a">
          <li>Run <tt>'mv data/Makefile data/Makefile.hide'</tt></li>

          <li>Run <tt>'gmake'</tt> to build some of the ICU libraries.</li>

          <li>
            When the gmake command fails in icu/source/data, run the following
            commands to setup and build the data library: 
<pre>
<samp>cd data
mv Makefile.hide Makefile
system CRTLIB "LIB(<i>datalibraryname</i>)"
gmake OUTPUTDIR=<i>datalibraryname</i>
system CRTSRVPGM "SRVPGM(<i>libraryname</i>/LIBICUDATA)" "MODULE(<i>datalibraryname</i>/*ALL)"
                 "EXPORT(*ALL)" "TEXT('ICU 2.6 DATA')" "OPTION(*DUPPROC *DUPVAR)"
ln -fs /qsys.lib/<i>libraryname</i>.lib/libicudata.srvpgm out/libicudata.so
cd ..
del common/libicuuc.so
</samp>
</pre>
          </li>

          <li>Your data library should now be usable. Go to the next step,
          which is needed to rebind to the actual data library and finish the
          build.</li>
        </ol>
      </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">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 <a
    href="#HowToBuildUnix">above</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">
      <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>Contains many locale based 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>Contains 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>Contains an optional engine for doing font layout that uses parts
        of ICU.</td>
      </tr>

      <tr>
        <td>Unicode stdio Library</td>

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

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

        <td>An unsupported optional library that provides a stdio like API with
        Unicode support.</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">Important Notes About
    Using ICU</a></h2>

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

    <p>If you are using ICU in a multithreaded application, there may be a
    chance that the ICU global mutex is not initialized properly. Normally the
    ICU global mutex is initialized during C++ static initialization, but there
    are some compilers and linkers that do not properly perform C++ static
    initialization in a library. Here are some of the cases when the global
    mutex is not initialized:</p>

    <ul>
      <li>Static ICU libraries are used.</li>

      <li>ICU is used on Mac OS X</li>

      <li>ICU is used on HP-UX and the program's <code>main()</code> function
      is not declared in a C++ file.</li>
    </ul>

    <p>Upon the first usage of most ICU APIs, the global mutex will get
    initialized, but you can use the <code>u_init()</code> function from
    uclean.h to ensure that it is initialized. Without one of these function
    calls from a single thread, the data caches inside ICU may get initialized
    more than once, which may cause memory leaks and other problems. This
    problem normally does not happen when C++ static initialization works
    properly.</p>

    <p>ICU does not use C++ static initialization for anything else, and
    disabling threads in ICU will disable all C++ static initialization in ICU.
    If you do not have a multithreaded application, you do not need to worry
    about the global mutex.</p>

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

    <p>If you are building ICU with a newer aCC compiler, or you are planning
    on using any RogueWave libraries, you will need to set special flags before
    building ICU. These flags are needed in order to make ICU thread safe and
    to allow iostream to work properly. More information on these flags can be
    found <a href=
    "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#option-mt">here</a>
    and <a href=
    "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA">
    here</a>.</p>
<pre>
<samp>CFLAGS="-mt" CXXFLAGS="-mt -AA" LDFLAGS="-mt" ./runConfigureICU HP-UX11ACC</samp>
</pre>

    <h3><a name="CharStrings" href="#CharStrings">char * strings in
    ICU</a></h3>

    <p>The C/C++ languages do not provide a portable way to specify Unicode
    code point or string literals other than with arrays of numeric constants.
    For convenience, ICU4C tends to use char * strings in places where only
    "invariant characters" are used &mdash; a portable subset of the 7-bit
    ASCII repertoire &mdash; so that locale IDs, charset names, resource bundle
    item keys and similar can be easily specified as string literals in the
    source code. The same types of strings are also stored as "invariant
    character" char * strings in the ICU data files.</p>

    <p>ICU has hardcoded mapping tables in <code>source/common/putil.c</code>
    to convert invariant characters to and from Unicode without using a full
    ICU converter. These tables must match the encoding of string literals in
    the ICU code as well as in the ICU data files.</p>

    <p><strong>Important:</strong> ICU assumes that at least the invariant
    characters always have the same codes as is common on platforms with the
    same charset family (ASCII vs. EBCDIC). <em>ICU has not been tested on
    platforms where this is not the case.</em></p>

    <p>Some usage of char * strings in ICU assumes the system charset instead
    of invariant characters; such strings are only handled with the default
    converter. See the following section. (The system charset is usually a
    superset of the invariant characters.)</p>

    <p>The following are the ASCII and EBCDIC code values for all of the
    invariant characters (see also unicode/utypes.h):</p>

    <table border="1">
      <tr>
        <th>Character(s)</th>

        <th>ASCII</th>

        <th>EBCDIC</th>
      </tr>

      <tr>
        <td>a..i</td>

        <td>61..69</td>

        <td>81..89</td>
      </tr>

      <tr>
        <td>j..r</td>

        <td>6A..72</td>

        <td>91..99</td>
      </tr>

      <tr>
        <td>s..z</td>

        <td>73..7A</td>

        <td>A2..A9</td>
      </tr>

      <tr>
        <td>A..I</td>

        <td>41..49</td>

        <td>C1..C9</td>
      </tr>

      <tr>
        <td>J..R</td>

        <td>4A..52</td>

        <td>D1..D9</td>
      </tr>

      <tr>
        <td>S..Z</td>

        <td>53..5A</td>

        <td>E2..E9</td>
      </tr>

      <tr>
        <td>0..9</td>

        <td>30..39</td>

        <td>F0..F9</td>
      </tr>

      <tr>
        <td>(space)</td>

        <td>20</td>

        <td>40</td>
      </tr>

      <tr>
        <td>"</td>

        <td>22</td>

        <td>7F</td>
      </tr>

      <tr>
        <td>%</td>

        <td>25</td>

        <td>6C</td>
      </tr>

      <tr>
        <td>&amp;</td>

        <td>26</td>

        <td>50</td>
      </tr>

      <tr>
        <td>'</td>

        <td>27</td>

        <td>7D</td>
      </tr>

      <tr>
        <td>(</td>

        <td>28</td>

        <td>4D</td>
      </tr>

      <tr>
        <td>)</td>

        <td>29</td>

        <td>5D</td>
      </tr>

      <tr>
        <td>*</td>

        <td>2A</td>

        <td>5C</td>
      </tr>

      <tr>
        <td>+</td>

        <td>2B</td>

        <td>4E</td>
      </tr>

      <tr>
        <td>,</td>

        <td>2C</td>

        <td>6B</td>
      </tr>

      <tr>
        <td>-</td>

        <td>2D</td>

        <td>60</td>
      </tr>

      <tr>
        <td>.</td>

        <td>2E</td>

        <td>4B</td>
      </tr>

      <tr>
        <td>/</td>

        <td>2F</td>

        <td>61</td>
      </tr>

      <tr>
        <td>:</td>

        <td>3A</td>

        <td>7A</td>
      </tr>

      <tr>
        <td>;</td>

        <td>3B</td>

        <td>5E</td>
      </tr>

      <tr>
        <td>&lt;</td>

        <td>3C</td>

        <td>4C</td>
      </tr>

      <tr>
        <td>=</td>

        <td>3D</td>

        <td>7E</td>
      </tr>

      <tr>
        <td>&gt;</td>

        <td>3E</td>

        <td>6E</td>
      </tr>

      <tr>
        <td>?</td>

        <td>3F</td>

        <td>6F</td>
      </tr>

      <tr>
        <td>_</td>

        <td>5F</td>

        <td>6D</td>
      </tr>
    </table>

    <h3><a name="ImportantNotesDefaultCP" href="#ImportantNotesDefaultCP">Using
    the default codepage</a></h3>

    <p>ICU has code to determine the default codepage of the system or process.
    This default codepage can be used to convert <code>char *</code> strings to
    and from Unicode.</p>

    <p>Depending on system design, setup and APIs, it may not always be
    possible to find a default codepage that fully works as expected. For
    example,</p>

    <ul>
      <li>On Windows there are three encodings in use at the same time. Unicode
      (UTF-16) is always used inside of Windows, while for <code>char *</code>
      encodings there are two classes, called "ANSI" and "OEM" codepages. ICU
      will use the ANSI codepage. Note that the OEM codepage is used by default
      for console window output.</li>

      <li>On some Unix-type systems, non-standard names are used for encodings,
      or non-standard encodings are used altogether. Although ICU supports over
      200 encodings in its standard build and many more aliases for them, it
      will not be able to recognize such non-standard names.</li>

      <li>Some systems do not have a notion of a system or process codepage,
      and may not have APIs for that.</li>
    </ul>

    <p>If you have means of detecting a default codepage name that are more
    appropriate for your application, then you should set that name with
    <code>ucnv_setDefaultName()</code> as the first ICU function call. This
    makes sure that the internally cached default converter will be
    instantiated from your preferred name.</p>

    <p>Starting in ICU 2.0, when a converter for the default codepage cannot be
    opened, a fallback default codepage name and converter will be used. On
    most platforms, this will be US-ASCII. For z/OS (OS/390), ibm-1047-s390 is
    the default fallback codepage. For AS/400 (iSeries), ibm-37 is the default
    fallback codepage. This default fallback codepage is used when the
    operating system is using a non-standard name for a default codepage, or
    the converter was not packaged with ICU. The feature allows ICU to run in
    unusual computing environments without completely failing.</p>

    <h3><a name="ImportantNotesWindows" href="#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">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">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">Platform
    Dependencies</a></h2>

    <h3><a name="PlatformDependenciesNew" href=
    "#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 icu4c-support mailing list. 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>

    <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">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">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>genidna</li>

      <li>genbrk</li>

      <li>genuca</li>

      <li>genrb</li>

      <li>gentz</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 and cintltst, if you want to run the test
      suite.</li>

      <li>uconv and ustdio can also be optionally built.</li>
    </ol>
    <hr>

    <p>Copyright &copy; 1997-2003 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>

