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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  <p><br></p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <tr>
      <td>Windows 2000/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.03.13<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>Windows 2000 with CygWin</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.8</td>

      <td>gcc 2.95.4</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>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>CygWin</td>

      <td>gcc 2.95.3</td>

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

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

      <td>&nbsp;</td>

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

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

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

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

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

      <td>CC A.03.10</td>

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

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

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

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

  <p><br></p>

  <h4>Key to testing frequency</h4>

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

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

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

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

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

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

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

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

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

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

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

  <p>The steps are:</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  <p>The steps are:</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <li>Cygwin with the following installed:

      <ul>
        <li>bash</li>

        <li>GNU make</li>

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

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

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

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

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

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

    <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
    Cygwin/MSVC</tt>" (See <a href="#HowToConfigureICU">configuration
    note</a> 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>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <li>The latest GNU facilities (You can get the GNU facilities for OS/400
    from <a href=
    "http://www.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 build
  instructions</a>.</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  <h5>Linking on Solaris</h5>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  <ol>
    <li>stubdata</li>

    <li>common</li>

    <li>i18n</li>

    <li>toolutil</li>

    <li>makeconv</li>

    <li>gencnval</li>

    <li>genprops</li>

    <li>gennames</li>

    <li>genpname</li>

    <li>gennorm</li>

    <li>gensprep</li>

    <li>genbrk</li>

    <li>genuca</li>

    <li>genrb</li>

    <li>genccode</li>

    <li>gencmn</li>

    <li>pkgdata</li>

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

    <li>layout (optional)</li>

    <li>layoutex (optional)</li>

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

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

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