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

<html lang="en-US">
  <head>
    <meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2003 IBM Corporation and others. All Rights Reserved.">
    <meta name="KEYWORDS" content=
    "ICU; International Components for Unicode; what's new; readme; read me; introduction; downloads; downloading; building; installation;">
    <meta name="DESCRIPTION" content=
    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU.">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

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

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

    <p>Version: 2004-Feb-18<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%">
      <caption>
        Here are some useful links regarding ICU and internationalization in
        general.
      </caption>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p>This is an another maintenance release - mostly concentrated on collation bug fixes.
      The most important feature the fix for implicit CE generation. Also notable is the
      backport of collate digits as numbers (CODAN) feature from ICU 2.8. For more details,
      please see the <a href="http://oss.software.ibm.com/icu/download/2.6.2/index.html">ICU
	2.6.2 download page</a>. <br>
    </p>
    <p>For details on the changes in the previous maintenance release,
      please see the <a href="http://oss.software.ibm.com/icu/download/2.6.1/index.html">ICU
	2.6.1 download page</a>. <br>
    </p>
    <p>The following list concentrates on <em>changes in ICU 2.6 that
	affect existing applications migrating from previous ICU releases</em>.
      For more news about this release, see the <a
	href="http://oss.software.ibm.com/icu/download/2.6/index.html">ICU 2.6
	download page</a>.</p>

    <h3>Library Initialization</h3>

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

    <h3>Support for Unicode 4.0</h3>

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

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

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

    <h3>Currency formatting</h3>

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

    <h3>XML resource bundles</h3>

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

    <h3>ICU code library size</h3>

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

    <h3>Flexible data loading</h3>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p><br>
    </p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            <li><b>misc/</b> The misc directory contains other data files which
            did not fit into the above categories. Currently it only contains
            <b>timezone.txt,</b> a generated file, which is compiled into
            tz.dat. The <b>tz.dat</b> file contains time zone information.</li>

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

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

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

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

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

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

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

        <td>Source text files for data, which are read by the tests. It
        contains the subdirectories <b>out/build/</b> which is used for
        intermediate files, and <b>out/</b> which contains the files
        <b>test1.cnv</b> through <b>test4.cnv,</b> and <b>testdata.dat.</b>
        Note that the tests call
        u_setDataDirectory("&lt;ICU&gt;/source/test/testdata/lib"), so that ICU
        will load these files as if they were part of the ICU data package, for
        testing purposes. This was formerly accomplished by setting the
        ICU_DATA environment variable to point at these files. ICU_DATA should
        not be set under normal circumstances.</td>
      </tr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <td>Contains the libraries and executables for using ICU on
        Windows.</td>
      </tr>

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

        <td>Contains the headers needed for developing software that uses ICU
        on Windows.</td>
      </tr>
    </table>
    <!-- end of ICU structure ==================================== -->

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

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

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

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

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

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

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

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

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

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

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

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

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

        <td>gcc 2.96</td>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <td>gcc 2.95.2</td>

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

      <tr>
        <td>FreeBSD 4.4</td>

        <td>gcc 2.95.3</td>

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

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

        <td>gcc 2.96</td>

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

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

        <td>cxx 1.2</td>

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

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

        <td>iCC</td>

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

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

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

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

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

        <td>xlC_r 4.0.2.1</td>

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

      <tr>
        <td>CygWin</td>

        <td>gcc 2.95.3</td>

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

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

        <td>CC A.03.10</td>

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

      <tr>
        <td>QNX</td>

        <td>gcc</td>

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

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

        <td>gcc</td>

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

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

        <td>&nbsp;</td>

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

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

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

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

    <p><br>
    </p>

    <h4>Key to testing frequency</h4>

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

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

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

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

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

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

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

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

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

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

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

    <p>The steps are:</p>

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

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

      <li>Set the <strong>TZ</strong> environment variable to
      <strong>PST8PDT</strong>. The tests will not work in any other time
      zone.</li>

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

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

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

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

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

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

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

      <li>Reset the <strong>TZ</strong> environment variable to its original
      value, unless you plan on testing ICU any further.</li>

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

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

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

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

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

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

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

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

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

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

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

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

    <p>The steps are:</p>

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

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

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

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

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

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

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

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

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

    <h3><a name="HowToBuildUnix" href="#HowToBuildUnix">How To Build And
    Install On Unix</a></h3>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      <li>
        <p>z/OS supports both native S/390 hexadecimal floating point and,
        (with OS/390 2.6 and later) IEEE binary floating point. This is a
        compile time option. Applications built with IEEE should use ICU DLLs
        that are built with IEEE (and vice versa). The environment variable
        IEEE390=1 will cause the z/OS version of ICU to be built with IEEE
        floating point. The default is native hexadecimal floating point.<br>
         <em>Important:</em> Currently (ICU 1.4.2), native floating point
        support is sufficient for codepage conversion, resource bundle and
        UnicodeString operations, but the Format APIs, especially ChoiceFormat,
        require IEEE binary floating point.</p>

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

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

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

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

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

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

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

        <p>To set the compiler and LE environment to z/OS 1.2 specify the
        following:</p>
<pre>
<samp>./runConfigureICU zOSV1R2</samp>
</pre>
      </li>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      <li>
        In order to get the tests to run correctly, the QUTCOFFSET needs to be
        set to the Pacific Time Zone offset.<br>
        <br>
         To check your QUTCOFFSET: 
<pre>
<samp>DSPSYSVAL SYSVAL(QUTCOFFSET)</samp>
</pre>
        <br>
         To change your QUTCOFFSET:<br>
<pre>
<samp>CHGSYSVAL SYSVAL(QUTCOFFSET) VALUE('-0800')</samp>
</pre>
        You should change -0800 to -0700 for daylight savings.<br>
        <br>
      </li>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <table border="1" cellpadding="3">
      <caption>
        Here is an example of libraries that are frequently packaged.
      </caption>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <td>Contains many locale based i18n functions.</td>
      </tr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <th>ASCII</th>

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

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

        <td>61..69</td>

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

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

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

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

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

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

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

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

        <td>41..49</td>

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

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

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

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

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

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

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

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

        <td>30..39</td>

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

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

        <td>20</td>

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

      <tr>
        <td>"</td>

        <td>22</td>

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

      <tr>
        <td>%</td>

        <td>25</td>

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

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

        <td>26</td>

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

      <tr>
        <td>'</td>

        <td>27</td>

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

      <tr>
        <td>(</td>

        <td>28</td>

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

      <tr>
        <td>)</td>

        <td>29</td>

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

      <tr>
        <td>*</td>

        <td>2A</td>

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

      <tr>
        <td>+</td>

        <td>2B</td>

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

      <tr>
        <td>,</td>

        <td>2C</td>

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

      <tr>
        <td>-</td>

        <td>2D</td>

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

      <tr>
        <td>.</td>

        <td>2E</td>

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

      <tr>
        <td>/</td>

        <td>2F</td>

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

      <tr>
        <td>:</td>

        <td>3A</td>

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

      <tr>
        <td>;</td>

        <td>3B</td>

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

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

        <td>3C</td>

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

      <tr>
        <td>=</td>

        <td>3D</td>

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

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

        <td>3E</td>

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

      <tr>
        <td>?</td>

        <td>3F</td>

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

      <tr>
        <td>_</td>

        <td>5F</td>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <h3><a name="ImportantNotesUnix" href="#ImportantNotesUnix">Unix Type
    Platform</a></h3>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <ol>
      <li>stubdata</li>

      <li>common</li>

      <li>i18n</li>

      <li>toolutil</li>

      <li>makeconv</li>

      <li>gencnval</li>

      <li>genprops</li>

      <li>gennames</li>

      <li>genpname</li>

      <li>gennorm</li>

      <li>genidna</li>

      <li>genbrk</li>

      <li>genuca</li>

      <li>genrb</li>

      <li>gentz</li>

      <li>genccode</li>

      <li>gencmn</li>

      <li>pkgdata</li>

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

      <li>layout (optional)</li>

      <li>layoutex (optional)</li>

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

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

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

