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

<html lang="en-US">
  <head>
    <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.3
    ReadMe</h1>

    <p>Version: 2005-Apr-01<br>
     Copyright &copy; 1997-2005 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="#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">i5/OS (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 ICU4J 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, ICU4C, ICU4J &amp; ICU4JNI Official Homepage</td>

        <td><a href=
        "http://www.ibm.com/software/globalization/icu/index.jsp">http://www.ibm.com/software/globalization/icu/index.jsp</a></td>
      </tr>

      <tr>
        <td>ICU, ICU4C, ICU4J &amp; ICU4JNI Unofficial Homepage</td>

        <td><a href=
        "http://icu.sourceforge.net/">http://icu.sourceforge.net/</a></td>
      </tr>

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

        <td><a href=
        "http://icu.sourceforge.net/userguide/icufaq.html">http://icu.sourceforge.net/userguide/icufaq.html</a></td>
      </tr>

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

        <td><a href=
        "http://icu.sourceforge.net/userguide/">http://icu.sourceforge.net/userguide/</a></td>
      </tr>

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

        <td><a href=
        "http://www.ibm.com/software/globalization/icu/downloads.jsp">http://www.ibm.com/software/globalization/icu/downloads.jsp</a></td>
      </tr>

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

        <td><a href=
        "http://icu.sourceforge.net/apiref/index.html">http://icu.sourceforge.net/apiref/index.html</a></td>
      </tr>

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

        <td><a href=
        "http://www.ibm.com/software/globalization/icu/chartsdemostools.jsp">http://www.ibm.com/software/globalization/icu/chartsdemostools.jsp</a></td>
      </tr>

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

        <td><a href=
        "http://icu.sourceforge.net/contacts.html">http://icu.sourceforge.net/contacts.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://www.ibm.com/software/globalization/icu/downloads.jsp">ICU 3.2 download
    page</a>.</p>

    <h3><a name="News_putil_h" id="News_putil_h">Changes to putil.h and
    utypes.h</a></h3>

    <p>Starting in ICU 3.2, the unicode/utypes.h and unicode/putil.h headers
    are no longer circularly dependent on each other. This means that if you
    use any of the functions from unicode/putil.h and only included
    unicode/utypes.h, you will now have to include unicode/putil.h too. No
    stable API functions have been removed from these headers, but some
    internal function declarations (marked with @internal) have been moved to
    internal headers.</p>

    <p>This change was announced on the icu mailing list, and it was done to
    fix some header dependency issues that appeared while trying to make some
    changes to the utf.h header macros.</p>

    <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://www.ibm.com/software/globalization/icu/downloads.jsp">http://www.ibm.com/software/globalization/icu/downloads.jsp</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://www.ibm.com/software/globalization/icu/repository.jsp">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://icu.sourceforge.net/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://icu.sourceforge.net/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>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.3</td>

        <td>cxx 1.3</td>

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

      <tr>
        <td>i5/OS (OS/400 iSeries) V5R3</td>

        <td>iCC</td>

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

      <tr>
        <td>Cygwin</td>

        <td>gcc 2.95.3</td>

        <td>Rarely 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>SuSE Linux Enterprise Server 9 (PPC)</td>

        <td>Visual Age 7.0</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>HP-UX 11.01</td>

        <td>aCC A.03.13<br>
         cc A.11.01.00</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>MIPSpro CC</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++ 2003</li>

      <li><a href="#HowToBuildCygwin">Cygwin</a> is required when other
      versions of Microsoft Visual C++ and other compilers are used to build
      ICU.</li>
    </ul>

    <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.sln" workspace
      file in Microsoft Visual Studio .NET 2003. (This solution includes all
      the International Components for Unicode libraries, necessary ICU
      building tools, and the test suite projects). Please see the <a href=
      "#HowToBuildWindowsCommandLine">command line note below</a> if you want
      to build from the command line instead.</li>

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

      <li>Choose the "Build" menu and select "Rebuild Solution". 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
      startup project to "intltest", and press Ctrl+F5 to run it. Make sure
      that it passes without any errors.</li>

      <li>Run the C test suite, "cintltst". To do this: set the active startup
      project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
      passes without any errors.</li>

      <li>Run the I/O test suite, "iotest". To do this: set the active startup
      project to "iotest", and press Ctrl+F5 to run it. Make sure that it
      passes without any errors.</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, 'devenv.com
    <i>&lt;ICU&gt;</i>\source\allinone\allinone.sln /build Release'. You can
    also use Cygwin with this compiler to build ICU, and you can refer to the
    <a href="#HowToBuildCygwin">How To Build And Install On Windows with
    Cygwin</a> section for more details.</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 "Configuration Manager...", and select
      "Release" or "Debug" for the Active Configuration Solution.</li>

      <li>Another way is to select the desired build configuration from
      "Solution Configurations" dropdown menu from the standard toolbar. It
      will say "Release" or "Debug" in the dropdown list.</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...". Click the "Select All"
    button, and then click the "Rebuild" button.</p>

    <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>--disable-renaming</tt></li>

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

      <li><tt>--disable-tracing</tt></li>

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

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

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

      <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
      defined in user code that links against ICU's static libraries.)</li>

      <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
      not work in this mode. Manual packaging is required to use this
      mode.)</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 HP-UX multithreaded build issues</a>
    with newer compilers. Solaris user's, please see this <a href=
    "#ImportantNotesSolaris">note regarding Solaris 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>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. Native floating point support is sufficient
      for codepage conversion, resource bundle and UnicodeString operations,
      but the Format APIs require IEEE binary floating point.</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 i5/OS (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 i5/OS
      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 with 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://icu.sourceforge.net/userguide/">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://icu.sourceforge.net/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>ICU's tests may hang on Solaris 8 and Earlier</h5>

    <p>ICU's tests use <code>usleep()</code>, which is multithread unsafe on
    versions of Solaris before version 9. This does not mean that ICU is not
    thread safe because only ICU's test code uses <code>usleep()</code>. The
    <code>sleep()</code> and <code>nanosleep()</code> functions could be used
    in ICU's multithreaded tests, but <code>sleep()</code> and
    <code>nanosleep()</code> are not a stable API between versions of Solaris.
    Solaris 9 fixes usleep so that it is multithread safe.</p>

    <p>This hanging behavior tends to appear on multi-CPU machines. Single CPU
    Solaris 8 machines do not seem to show this behavior.</p>

    <p>In a future version of ICU, we hope to find a portable solution to this
    problem that will work between the modern versions of Solaris.</p>

    <h5>Solaris Deadlock Issues in Solaris 8 (2.8) and Earlier</h5>

    <p>Solaris 8, and earlier, has outstanding thread deadlocking issues that
    <strong>may</strong> be problematic for applications using either native,
    or POSIX, threading on these platforms. Sun states that Solaris 9
    <strong>does not</strong> have the deadlock problems. Deadlocks
    <strong>may</strong> 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 <strong>should</strong> 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 <strong>not</strong> providing patches for Solaris 6 (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
    <strong>may</strong> 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 <strong>suggested</strong> 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
    <strong>suggested</strong> 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://icu.sourceforge.net/contacts.html">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://icu.sourceforge.net/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>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
          uint64_t etc.</li>

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

          <li>&lt;iostream&gt; usability</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 Windows, Sun Solaris, Linux,
          AIX, HP-UX, BSD, Mac OS X, z/OS and many others.</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>gencase</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, derb and icuio can also be optionally built.</li>
    </ol>
    <hr>

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

