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

<html lang="en-US">
  <head>
    <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=iso-8859-1">

    <title>ReadMe for ICU</title>
<style type="text/css">
      h1 {border-width: 2px; border-style: solid; text-align: center; width: 100%; font-size: 200%; font-weight: bold}
      h2 {margin-top: 3em; text-decoration: underline; page-break-before: always}
      h2.TOC {page-break-before: auto}
      h3 {margin-top: 2em; text-decoration: underline}
      h4 {text-decoration: underline}
      h5 {text-decoration: underline}
      caption {font-weight: bold; text-align: left}
      div.indent {margin-left: 2em}
      ul.TOC {list-style-type: none}
      samp {margin-left: 1em; border-style: groove; padding: 1em; display: block; background-color: #EEEEEE}
</style>
  </head>

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

    <p>Version: 2004-Jan-08<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="#HowToBuildUNIX">UNIX</a></li>

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

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

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

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

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

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

          <li><a href="#ImportantNotesDefaultCP">Using the Default
          Codepage</a></li>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <table border="1" cellpadding="3" width="100%" 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">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/2.8/index.html">ICU 2.8 download
    page</a>.</p>

    <h3><a name="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>

    <h3><a name="News_Library_Names">Static Library Names and AIX
    linking</a></h3>

    <p>Previously static and shared library names had the same naming scheme,
    except the file extension was different between the filenames. For example,
    the shared common library was called libicuuc.so, and the static common
    library was called libicuuc.a on many Unix type machines. It has come to
    our attention, that Windows import library names and static library names
    can have the same name, and when the -brtl linker option is removed the
    static and shared libraries have the same filename extension, which is
    ".a". The -brtl linker option on AIX has been removed at several people's
    request.</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">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">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">How To Download the Source
    Code</a></h2>

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

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

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

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

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

    <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the
    full path name of the ICU directory (the top level directory from the
    distribution archives) in your file system. You can also view the <a href=
    "http://oss.software.ibm.com/icu/userguide/design.html">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">How To Build And Install
    ICU</a></h2>

    <h3><a name="HowToBuildSupported" href="#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>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>CygWin</td>

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

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

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

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

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

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

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

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

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

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

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

    <p>The steps are:</p>

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

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

      <li>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="HowToBuildUNIX" href="#HowToBuildUNIX">How To Build And
    Install On UNIX</a></h3>

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

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

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

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

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

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

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

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

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

      <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt>
      script for your platform. (See <a href="#HowToConfigureICU">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"><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.</p>

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

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

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

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

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

      <li>The gnu utilities gmake and gzip/gunzip are needed and can be
      obtained for z/OS from <a href=
      "http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#opensrc">
      z/OS UNIX - Tools and Toys</a>. Documentation on these tools can be found
      at the <a href=
      "http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg245944.html">
      Open Source Software for z/OS UNIX</a> Red Book.</li>

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

      <li>
        <p>z/OS supports both native S/390 hexadecimal floating point and (with
        OS/390 2.6 and later) IEEE 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>Since the default make on z/OS is not gmake, the pkgdata tool
      requires that the "make" command is aliased to your installed version of
      gmake. You may also need to set $MAKE equal to the fully qualified path
      of GNU make. GNU make is available with the "z/OS UNIX - Tools and Toys"
      that was mentioned above. The required version is the same UNIX build
      instructions.</li>

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

      <li>
        <p>When you build ICU on a system such as z/OS 1.2, the binaries that
        result can run on that level of the operating system and later, such as
        z/OS 1.3 and z/OS 1.4. It's possible that you may have a z/OS 1.4
        system, 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">How To Build And
    Install On OS/400 (iSeries)</a></h3>

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

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

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

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

    <p>The following describes how to setup and build ICU. For background
    information, you should look at the <a href="#HowToBuildUNIX">UNIX 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>
      <!--li>Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the icc compiler</li-->

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

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

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

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

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

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

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

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

      <li>
        If you specified <tt>--with-data-packaging=archive</tt> to configure,
        you can skip this step. In a future release of ICU, we hope to
        eliminate this complicated step. Any suggestions to improve the ICU
        installation are greatly appreciated, and you can send those
        suggestions to the <a href=
        "http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu4c-support/">
        icu4c-support</a> mailing list. 

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

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

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

          <li>Your data library should now be usable. Go to the next step,
          which is needed to rebind to the actual data library and finish the
          build.</li>
        </ol>
      </li>

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

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

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

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

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

    <p>On UNIX, you should have used "<tt>gmake install</tt>" to make it easier
    to develop and package ICU. The bin, lib and include directories are needed
    to develop applications that use ICU. These directories will be created
    relative to the "<tt>--prefix=</tt><i>dir</i>" configure option (See 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>Contains many locale based i18n functions.</td>
      </tr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p>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">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 any RogueWave libraries, you will need to set a special flag
    before building ICU. The <a href=
    "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA">
    -AA</a> flag is needed in order to make ICU thread safe with RogueWave.</p>
<pre>
<samp>CXXFLAGS="-AA" ./runConfigureICU HP-UX11ACC</samp>
</pre>

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

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

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

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

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

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

    <table border="1" summary=
    "There are a few invariant characters that can be used for char * strings">
      <tr>
        <th>Character(s)</th>

        <th>ASCII</th>

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

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

        <td>61..69</td>

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

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

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

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

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

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

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

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

        <td>41..49</td>

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

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

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

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

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

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

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

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

        <td>30..39</td>

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

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

        <td>20</td>

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

      <tr>
        <td>"</td>

        <td>22</td>

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

      <tr>
        <td>%</td>

        <td>25</td>

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

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

        <td>26</td>

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

      <tr>
        <td>'</td>

        <td>27</td>

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

      <tr>
        <td>(</td>

        <td>28</td>

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

      <tr>
        <td>)</td>

        <td>29</td>

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

      <tr>
        <td>*</td>

        <td>2A</td>

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

      <tr>
        <td>+</td>

        <td>2B</td>

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

      <tr>
        <td>,</td>

        <td>2C</td>

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

      <tr>
        <td>-</td>

        <td>2D</td>

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

      <tr>
        <td>.</td>

        <td>2E</td>

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

      <tr>
        <td>/</td>

        <td>2F</td>

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

      <tr>
        <td>:</td>

        <td>3A</td>

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

      <tr>
        <td>;</td>

        <td>3B</td>

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

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

        <td>3C</td>

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

      <tr>
        <td>=</td>

        <td>3D</td>

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

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

        <td>3E</td>

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

      <tr>
        <td>?</td>

        <td>3F</td>

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

      <tr>
        <td>_</td>

        <td>5F</td>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p>If you are using ICU's Makefiles to build ICU on a new platform, there
    are a few places where you will need to add or modify some files. If you
    need more help, you can always ask the <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>It may not be necessary for your use of ICU to make a full ICU build
    work. Most of the makefiles and build targets are for tools that are used
    for building ICU's data &mdash; and an application's data if the
    application uses ICU resource bundles and similar for its data.</p>

    <p>Data files can be built on a different platform if both platforms share
    the same endianness and the same charset family, and if memory-mappable,
    binary data files are used instead of DLLs/shared 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 eliminates the first condition: 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. This allows to use ICU data
    built anywhere to be used for any target platform.</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">Platform Dependent Implementations</a></h3>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <ol>
      <li>stubdata</li>

      <li>common</li>

      <li>i18n</li>

      <li>toolutil</li>

      <li>makeconv</li>

      <li>gencnval</li>

      <li>genprops</li>

      <li>gennames</li>

      <li>genpname</li>

      <li>gennorm</li>

      <li>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 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>

