<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
  <head>

    <title>ReadMe for ICU 4.4RC1</title>
    <meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2010 IBM Corporation and others. All Rights Reserved." />
    <meta name="KEYWORDS" content=
    "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
    <meta name="DESCRIPTION" content=
    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
  </head>

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

    <p>Last updated: 2010 Mar 5th<br />
     Copyright &copy; 1997-2010 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 >
          <li><a href="#HowToBuildSupported">Supported Platforms</a></li>

          <li><a href="#RecBuild">Recommended Build Options</a></li>

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

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

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

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

          <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>

		  <li><a href="#HowToCrossCompileICU">How to Cross Compile ICU</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 >
          <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
          Environment</a></li>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p>ICU has a sister project ICU4J that extends the internationalization
    capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
    called ICU4C when a distinction is necessary.</p>

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

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

    <table class="docTable" summary="These are some useful links regarding ICU and internationalization in general.">
      <caption>
        Here are some useful links regarding ICU and internationalization in
        general.
      </caption>

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

        <td><a href=
        "http://www.icu-project.org/">http://www.icu-project.org/</a></td>
      </tr>

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

        <td><a href=
        "http://www.icu-project.org/userguide/icufaq.html">http://www.icu-project.org/userguide/icufaq.html</a></td>
      </tr>

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

        <td><a href=
        "http://www.icu-project.org/userguide/">http://www.icu-project.org/userguide/</a></td>
      </tr>

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

        <td><a href=
        "http://www.icu-project.org/download/">http://www.icu-project.org/download/</a></td>
      </tr>

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

        <td><a href=
        "http://www.icu-project.org/apiref/icu4c/">http://www.icu-project.org/apiref/icu4c/</a></td>
      </tr>

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

        <td><a href=
        "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
      </tr>

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

        <td><a href=
        "http://www.icu-project.org/contacts.html">http://www.icu-project.org/contacts.html</a></td>
      </tr>
    </table>

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

    <h2><a name="News" href="#News" id="News">What is new in this
    release?</a></h2>
    
    <p><strong>DLL Plug-ins</strong> are new in version 4.4. For more information, see the ICU Userguide chapter on <a href="http://userguide.icu-project.org/packaging/plug-ins">Plug-ins</a>. This is a technology preview, and may be changed or removed in future releases.</p>

    <p>To see which APIs are new or changed in this release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>


    <p><!-- The following list concentrates on <em>changes that affect existing
    applications migrating from previous ICU releases</em>. --> For more news about
    this release, see the <a href="http://www.icu-project.org/download/">ICU
    download page</a>.</p>

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

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

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

      <li><strong>Subversion 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 Subversion repository to
      ensure that you have the most recent version of all of the files. See our
      <a href="http://www.icu-project.org/repository/">source
      repository</a> for details.</li>
    </ul>

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

    <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
    path name of the ICU directory (the top level directory from the distribution
    archives) in your file system. You can also view the <a href=
    "http://www.icu-project.org/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 class="docTable" 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 class="docTable" 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>layout</b>/</td>

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

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

        <td>Contains the ICU I/O library.</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>

          <p>If some of the following directories are missing, it's probably
          because you got an official download. If you need the data source files
          for customization, then please download the ICU source code from <a
          href="http://www.icu-project.org/repository/">subversion</a>.</p>

          <ul>
            <li><b>in/</b> A directory that contains a pre-built data library for
            ICU. A standard source code package will contain this file without
            several of the following directories. This is to simplify the build
            process for the majority of users and to reduce platform porting
            issues.</li>

            <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://www.icu-project.org/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 build instructions specific to your platform
        later in this document.</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 build instructions specific to your
        platform later in this document.</td>
      </tr>

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

        <td>A test suite written in C and C++ to test the icuio library. For
        information about running the test suite, see the build instructions
        specific to your platform later in this document.</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 'uconv' tool
        to perform codepage conversion on files.</td>
      </tr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <table class="rtable" summary=
    "ICU can be built on many platforms.">
      <caption>
        Here is the status of building ICU on several different platforms.
      </caption>

        
            <tr>
                <td>AIX 6.1 (power, 64-bit)</td>
                <td>VisualAge 9</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>HP/UX 11iv3 (ia64, 64-bit)</td>
                <td>aCC A.06.15</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
                <td>gcc 4.1.2</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Red Hat Enterprise Linux 5 (x86, 64-bit)</td>
                <td>gcc 4.1.2</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Solaris 10 (sparc, 64-bit)</td>
                <td>Sun Studio 12</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows Vista SP1 (x86, 32-bit)</td>
                <td>MS Visual Studio 9</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>AIX 5.2 (power, 64-bit)</td>
                <td>VisualAge 6</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>AIX 5.3 (power, 64-bit)</td>
                <td>VisualAge 8</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>AIX 6.1 (power, 64-bit)</td>
                <td>gcc 4.2.4</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>HP/UX 11i (hppa, 64-bit)</td>
                <td>aCC A.03.85</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>MacOSX 10.5 Leopard (x86, 32-bit)</td>
                <td>gcc 4.0.1</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>MacOSX 10.5 Leopard (x86, 64-bit)</td>
                <td>gcc 4.0.1</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Red Hat Enterprise Linux 4.2 (x86, 32-bit)</td>
                <td>gcc 3.4.6</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Red Hat Enterprise Linux 4u7 (x86, 32-bit)</td>
                <td>gcc 4.2.4</td>
                <td class="works">Frequently Tested</td>

            </tr>

            <tr>
                <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
                <td>icc 11.0</td>
                <td class="works">Frequently Tested<br/><b>[<a href="#LinuxICCValueSafeOptimization">See Change</a>]</b></td>
            </tr>

            <tr>
                <td>Solaris 10 (sparc, 64-bit)</td>
                <td>gcc 4.2.1</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>SuSE 10 (x86, 64-bit)</td>
                <td>gcc 4.1.0</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows 2000 Professional (x86, 32-bit)</td>
                <td>MS Visual Studio 2003 via Cygwin</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows 2000 Professional (x86, 32-bit)</td>
                <td>gcc 3.4.4 via Cygwin</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows Server 2003 (x86, 64-bit)</td>
                <td>MS Visual Studio 8 via Cygwin</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows Server 2008 (x86, 64-bit)</td>
                <td>MS Visual Studio 9</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr>
                <td>Windows XP Professional (x86, 32-bit)</td>
                <td>MS Visual Studio 9</td>
                <td class="works">Frequently Tested</td>

            </tr>
            
            <tr>
                <td>Windows Server 2008 (x86, 64-bit)</td>
                <td>MS Visual Studio 9 via Cygwin</td>
                <td class="works">Frequently Tested</td>

            </tr>
        
            <tr class="broken">
                <td>SuSe Linux 7.2 (x86, 32-bit)</td>
                <td>icc 9.0</td>
                <td class="broken">Broken <b><a href="http://bugs.icu-project.org/trac/ticket/6888">#6888</a></b></td>

            </tr>
        

<!-- end IBM lab data -->

      <tr class="rarely">
        <td>z/OS 1.7</td>

        <td>cxx 1.7</td>

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

      <tr class="rarely">
        <td>IBM i family (IBM i, i5/OS, OS/400)</td>

        <td>iCC</td>

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


      <tr class="rarely">
        <td>MinGW</td>

        <td>gcc</td>

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

      <tr class="rarely">
        <td>NetBSD, OpenBSD, FreeBSD</td>

        <td>gcc</td>

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

      <tr class="rarely">
        <td>SUSE Linux Enterprise Server 9 (PowerPC)</td>

        <td>IBM XL C/C++ 8.0</td>

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

      <tr class="rarely">
        <td>QNX</td>

        <td>gcc</td>

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

      <tr class="rarely">
        <td>BeOS/Haiku</td>

        <td>gcc</td>

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

      <tr class="rarely">
        <td>SGI/IRIX</td>

        <td>MIPSpro CC</td>

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

      <tr class="rarely">
        <td>Tru64 (OSF)</td>

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

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

      <tr class="rarely">
        <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>Frequently tested</i></dt>

      <dd>ICU will 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="RecBuild" href="#RecBuild" id=
    "RecBuild">Recommended Build Options</a></h3>

    <p>Depending on the platform and the type of installation,
    we recommend a small number of modifications and build options.</p>
    <ul>
      <li><b>Namespace:</b> By default, unicode/uversion.h has
        "using namespace icu;" which defeats much of the purpose of the namespace.
        (This is for historical reasons: Originally, ICU4C did not use namespaces,
        and some compilers did not support them. The default "using" statement
        preserves source code compatibility.)<br>
        We recommend you turn this off via <code>-DU_USING_ICU_NAMESPACE=0</code>
        or by modifying unicode/uversion.h:
<pre>Index: source/common/unicode/uversion.h
===================================================================
--- source/common/unicode/uversion.h    (revision 26606)
+++ source/common/unicode/uversion.h    (working copy)
@@ -180,7 +180,8 @@
 #   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::

 #   ifndef U_USING_ICU_NAMESPACE
-#       define U_USING_ICU_NAMESPACE 1
+        // Set to 0 to force namespace declarations in ICU usage.
+#       define U_USING_ICU_NAMESPACE 0
 #   endif
 #   if U_USING_ICU_NAMESPACE
         U_NAMESPACE_USE
</pre>
        ICU call sites then either qualify ICU types explicitly,
        for example <code>icu::UnicodeString</code>,
        or do <code>using icu::UnicodeString;</code> where appropriate.</li>
      <li><b>Hardcode the default charset to UTF-8:</b> On platforms where
        the default charset is always UTF-8,
        like MacOS X and some Linux distributions,
        we recommend hardcoding ICU's default charset to UTF-8.
        This means that some implementation code becomes simpler and faster,
        and statically linked ICU libraries become smaller.
        (See the <a href="http://icu-project.org/apiref/icu4c/utypes_8h.html#0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
        API documentation for more details.)<br>
        You can <code>-DU_CHARSET_IS_UTF8=1</code> or modify unicode/utypes.h:
<pre>Index: source/common/unicode/utypes.h
===================================================================
--- source/common/unicode/utypes.h      (revision 26606)
+++ source/common/unicode/utypes.h      (working copy)
@@ -160,7 +160,7 @@
  * @see UCONFIG_NO_CONVERSION
  */
 #ifndef U_CHARSET_IS_UTF8
-#   define U_CHARSET_IS_UTF8 0
+#   define U_CHARSET_IS_UTF8 1
 #endif

 /*===========================================================================*/
</pre></li>
      <li><b>.dat file:</b> By default, the ICU data is built into
        a shared library (DLL). This is convenient because it requires no
        install-time or runtime configuration,
        but the library is platform-specific and cannot be modified.
        A .dat package file makes the opposite trade-off:
        Platform-portable (except for endianness and charset family, which
        can be changed with the icupkg tool)
        and modifiable (also with the icupkg tool).
        If a path is set, then single data files (e.g., .res files)
        can be copied to that location to provide new locale data
        or conversion tables etc.<br>
        The only drawback with a .dat package file is that the application
        needs to provide ICU with the file system path to the package file
        (e.g., by calling <code>u_setDataDirectory()</code>)
        or with a pointer to the data (<code>udata_setCommonData()</code>)
        before other ICU API calls.
        This is usually easy if ICU is used from an application where
        <code>main()</code> takes care of such initialization.
        It may be hard if ICU is shipped with
        another shared library (such as the Xerces-C++ XML parser)
        which does not control <code>main()</code>.<br>
        See the <a href="http://userguide.icu-project.org/icudata">User Guide ICU Data</a>
        chapter for more details.<br>
        If possible, we recommend building the .dat package.
        Specify <code>--with-data-packaging=archive</code>
        on the configure command line, as in<br>
        <code>runConfigureICU Linux --with-data-packaging=archive</code><br>
        (Read the configure script's output for further instructions.
        On Windows, the Visual Studio build generates both the .dat package
        and the data DLL.)<br>
        Be sure to install and use the tiny stubdata library
        rather than the large data DLL.</li>
      <li><b>Static libraries:</b> It may make sense to build the ICU code
        into static libraries (.a) rather than shared libraries (.so/.dll).
        Static linking reduces the overall size of the binary by removing
        code that is never called.<br>
        Example configure command line:<br>
        <code>runConfigureICU Linux --enable-static --disable-shared</code></li>
      <li><b>Out-of-source build:</b> It is usually desirable to keep the ICU
        source file tree clean and have build output files written to
        a different location. This is called an "out-of-source build".
        Simply invoke the configure script from the target location:
<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
~/icu$ mkdir trunk-dev
~/icu$ cd trunk-dev
~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
~/icu/trunk-dev$ make check</pre></li>
    </ul>
    <h4>ICU as a System-Level Library</h4>
    <p>If ICU is installed as a system-level library, there are further
      opportunities and restrictions to consider.
      For details, see the <em>Using ICU as an Operating System Level Library</em>
      section of the <a href="http://userguide.icu-project.org/design">User Guide ICU Architectural Design</a> chapter.</p>
    <ul>
      <li><b>Data path:</b> For a system-level library, it is best to load
        ICU data from the .dat package file because the file system path
        to the .dat package file can be hardcoded.
        Set <code>-DICU_DATA_DIR=/path/to/icu/data</code> when building
        the ICU code. (Used by source/common/putil.c.)<br>
        Consider also setting <code>-DICU_NO_USER_DATA_OVERRIDE</code>
        if you do not want the "ICU_DATA" environment variable to be used.
        (An application can still override the data path via
        <code>u_setDataDirectory()</code> or
        <code>udata_setCommonData()</code>.</li>
      <li><b>Hide draft API:</b> API marked with <code>@draft</code>
        is new and not yet stable. Applications must not rely on unstable
        APIs from a system-level library.
        Define <code>U_HIDE_DRAFT_API</code>, <code>U_HIDE_INTERNAL_API</code>
        and <code>U_HIDE_SYSTEM_API</code>
        by modifying unicode/utypes.h before installing it.</li>
      <li><b>Only C APIs:</b> Applications must not rely on C++ APIs from a
        system-level library because binary C++ compatibility
        across library and compiler versions is very hard to achieve.
        Most ICU C++ APIs are in header files that contain a comment with
        <code>\brief C++ API</code>.
        Consider not installing these header files.</li>
      <li><b>Disable renaming:</b> By default, ICU library entry point names
        have an ICU version suffix. Turn this off for a system-level installation,
        to enable upgrading ICU without breaking applications. For example:<br>
        <code>runConfigureICU Linux --disable-renaming</code><br>
        The public header files from this configuration must be installed
        for applications to include and get the correct entry point names.</li>
    </ul>

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

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

    <ul>
      <li>Microsoft Windows 2000 or above</li>

      <li>Microsoft Visual C++ 2008</li>

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

    <p>The steps are:</p>

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

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

      <li>Open the "<i>&lt;ICU&gt;</i>\source\allinone\allinone.sln" workspace
      file in Microsoft Visual Studio 2003. (This solution includes all the
      International Components for Unicode libraries, necessary ICU building
      tools, and the test suite projects). Please see the <a href=
      "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
      build from the command line instead.</li>

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

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

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

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

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

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

    <p><a name="HowToBuildWindowsCommandLine" id=
    "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
    Note:</strong></a> You can build ICU from the command line. Assuming that you
    have properly installed Microsoft Visual C++ to support command line
    execution, you can run the following command, 'devenv.com
    <i>&lt;ICU&gt;</i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
    use Cygwin with this compiler to build ICU, and you can refer to the <a href=
    "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
    section for more details.</p>
    
    <p><a name="HowToBuildWindowsPlatform" id=
    "HowToBuildWindowsPlatform"><strong>Setting Active Platform
    Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is 
    not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>

    <ul>
      <li>Choose "Build" menu, select "Configuration Manager...", and select
      "Win32" or "x64" for the Active Platform Solution.</li>

      <li>Another way is to select the desired build configuration from "Solution
      Platforms" dropdown menu from the standard toolbar. It will say
      "Win32" or "x64" in the dropdown list.</li>
    </ul>

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

    <ul>
      <li>Choose "Build" menu, select "Configuration Manager...", and select
      "Release" or "Debug" for the Active Configuration Solution.</li>

      <li>Another way is to select the desired build configuration from "Solution
      Configurations" dropdown menu from the standard toolbar. It will say
      "Release" or "Debug" in the dropdown list.</li>
    </ul>

    <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
    Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and 
    Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
    Build...". Click the "Select All" button, and then click the "Rebuild"
    button.</p>

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

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

    <ul>
      <li>Microsoft 2000 or above</li>

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

      <li>
        Cygwin with the following installed: 

        <ul>
          <li>bash</li>

          <li>GNU make</li>

          <li>ar</li>

          <li>ranlib</li>

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

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

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

      <li>If the computer isn't set up to use Visual C++ from the command line,
      you need to run vcvars32.bat.<br>For example:<br>"<tt>C:\Program Files\Microsoft
      Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
      <strong>or</strong> <br>"<tt>C:\Program Files (x86)\Microsoft Visual Studio
      8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
      Windows x64.</li>

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

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

      <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
      Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
      configuration note</a> and non-functional configure options below).</li>

      <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
      This make command should be GNU make.</li>

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

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

    <p><a name="HowToWindowsConfigureICU" id=
    "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
    NOTE:</strong></a> </p>
    <p>
    Ensure that the order of the PATH is MSVC, Cygwin, and then other PATHs. The configure 
    script needs certain tools in Cygwin (e.g. grep).
    </p>
    <p>
    Also, you may need to run <tt>"dos2unix.exe"</tt> on all of the scripts (e.g. configure)
    in the top source directory of ICU. To avoid this issue, you can download
    the ICU source for Unix platforms (icu-xxx.tgz).
    </p>
    <p>In addition to the Unix <a href=
    "#HowToConfigureICU">configuration note</a> the following configure options
    currently do not work on Windows with Microsoft's compiler. Some options can
    work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
    manually editing the files is not recommended.</p>

    <ul>
      <li><tt>--disable-renaming</tt></li>

      <li><tt>--disable-threading</tt> (This flag does disable threading in ICU,
      but the resulting ICU library will still be linked with MSVC's multithread DLL)</li>

      <li><tt>--enable-tracing</tt></li>

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

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

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

      <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
      not work in this mode. Manual packaging is required to use this mode.)</li>
    </ul>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
    NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
    to run it and a list of supported platforms. You may also want to type
    <tt>"./configure --help"</tt> to print the available configure options that
    you may want to give runConfigureICU. If you are not using the
    runConfigureICU script, or your platform is not supported by the script, you
    may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
    type <tt>"./configure"</tt>. 
    HP-UX users, please see this <a href="#ImportantNotesHPUX">note regarding
    HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
    please see this <a href="#ImportantNotesSolaris">note regarding Solaris
    multithreaded build issues</a>.</p>

    <p>ICU is built with strict compiler warnings enabled by default.  If this
    causes excessive numbers of warnings on your platform, use the --disable-strict
    option to configure to reduce the warning level.</p>

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

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

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

    <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
    tests only the z/OS installation. 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>The makedep and GNU make tools are required for building ICU. If it
      is not already installed on your system, it is available at the <a href=
      "http://www.ibm.com/servers/eserver/zseries/zos/unix/redbook/">z/OS UNIX -
      Tools and Toys</a> site. The PATH environment variable should be updated to
      contain the location of this executable prior to build. Failure to add these
      tools to your PATH will cause ICU build failures or cause pkgdata to fail
      to run.</li>

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

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

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

      <li>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. The XPLINK option, which is available for z/OS 1.2 and later,
      requires the PTF PQ69418 to build XPLINK enabled binaries.</li>

      <li>Currently in ICU 3.0, there is an issue with building on z/OS without
      XPLINK and with the C++ iostream. By default, the iostream library on z/OS
      is XPLINK enabled. If you are not building an XPLINK enabled version of
      ICU, you should use the <code>--with-iostream=old</code> configure option
      when using runConfigureICU. This will prevent applications that use the
      icuio library from crashing.</li>

      <li>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 libicui18n<i>XX</i>.dll,
    libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.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</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. . . . . : <i>LOAD</i>
Organization  . . . : PO
Record format . . . : U
Record length . . . : 0
Block size  . . . . : <i>32760</i>
1st extent cylinders: 1
Secondary cylinders : 5
Data set name type  : LIBRARY</samp>
</pre>

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

    <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
    "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>

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

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

      <li>ILE C/C++ Compiler installed on the system

      <li>The latest GNU facilities (You can get the GNU facilities 
      from <a href=
      "http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html">
      http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>).
      Older versions may not work properly.</li>
    </ul>

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

    <ol>
      <li>
        Create 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.
<pre>
<samp>CRTLIB LIB(<i>libraryname</i>)
ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>') REPLACE(*YES)   </samp>
</pre>
      </li>

      <li>
      Set up the following environment variables and job characteristics in your build process
<pre>
<samp>ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake') REPLACE(*YES)
CHGJOB CCSID(37)</samp>
</pre>

      <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).</li>

      <li>Run <a href='as_is/os400/unpax-icu.sh'>unpax-icu.sh</a> on the tar file generated from the previous step.</li>

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

      <li>Run <tt>'./runConfigureICU IBMi'</tt>  (See <a href="#HowToConfigureICU">configuration
      note</a> for details).</li></li>

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

      <li>Run <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> to build and run the tests.
      You can look at the <a href=
      "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
      iSeries Information Center</a> for more details regarding the running of multiple threads
      on IBM i.</li>
    </ol>

      <!-- cross -->
    <h3><a name="HowToCrossCompileICU" href="#HowToCrossCompileICU" id="HowToCrossCompileICU">How To Cross Compile ICU</a></h3>
		<p>This section will explain how to build ICU on one platform, but to produce binaries intended to run on another. This is commonly known as a cross compile.</p>
		<p>Normally, in the course of a build, ICU needs to run the tools that it builds in order to generate and package data and test-data.In a cross compilation setting, ICU is built on a different system from that which it eventually runs on. An example might be, if you are building for a small/headless system (such as an embedded device), or a system where you can't easily run the ICU command line tools (any non-UNIX-like system).</p>
		<p>To reduce confusion, we will here refer to the "A" and the "B" system.System "A" is the actual system we will be running on- the only requirements on it is are it is able to build ICU from the command line targetting itself (with configure or runConfigureICU), and secondly, that it also contain the correct toolchain for compiling and linking for the resultant platform, referred to as the "B" system.</p>
		<p>The autoconf docs use the term "build" for A, and "host" for B. More details at: <a href="http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html#Specifying-Names">http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html</a></p>
		<p>Three initially-empty directories will be used in this example:</p>
		<table summary="Three directories used in this example" class="docTable">
			<tr>
				<th align=left>/icu</th><td>a copy of the ICU source</td>
			</tr>
			<tr>
				<th align=left>/buildA</th><td>an empty directory, it will contain ICU built for A<br>(MacOSX in this case)</td>
			</tr>
			<tr>
				<th align=left>/buildB</th><td>an empty directory, it will contain ICU built for B<br>(HaikuOS in this case)</td>
			</tr>
		</table>
		
		<ol>
		<li>Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.</li>
		<li>Build ICU in /buildA normally (using runConfigureICU or configure):
<pre class="samp">cd /buildA
sh /icu/source/runConfigureICU <strong>MacOSX</strong>
gnumake
</pre>
		</li>
		<li>Set PATH or other variables as needed, such as CPPFLAGS.</li>
		<li>Build ICU in /buildB<br>
			<div class="note"><b>Note:</b> "<code>--with-cross-build</code>" takes an absolute path.</div>
<pre class="samp">cd /buildB
sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
gnumake</pre>
		</li>
		<li>Tests and testdata can be built with "gnumake tests".</li>
	</ol>
      <!-- end cross -->

    <!-- end build environment -->

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

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

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

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

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

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

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

    <table class="docTable" 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://www.icu-project.org/userguide/icudata.html">customize this
        data</a>, but by default this is all you need.</td>
      </tr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <p>Some versions of ICU require calling the <code>u_init()</code> function
    from <code>uclean.h</code> to ensure that ICU is initialized properly. In
    those ICU versions, <code>u_init()</code> must be called before ICU is used
    from multiple threads. There is no harm in calling <code>u_init()</code> in a
    single-threaded application, on a single-CPU machine, or in other cases where
    <code>u_init()</code> is not required.</p>

    <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
    to load at least one ICU data file. Assuming that all data files are packaged
    together (or are in the same folder in files mode), a failure code from
    <code>u_init()</code> usually means that the data cannot be found. In this
    case, the data may not be installed properly, or the application may have
    failed to call <code>udata_setCommonData()</code> or
    <code>u_setDataDirectory()</code> which specify to ICU where it can find its
    data.</p>

    <p>Since <code>u_init()</code> will load only one or two data files, it
    cannot guarantee that all of the data that an application needs is available.
    It cannot check for all data files because the set of files is customizable,
    and some ICU services work without loading any data at all. An application
    should always check for error codes when opening ICU service objects (using
    <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
    etc.).</p>

    <h4>ICU 3.4 and later</h4>

    <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
    without performance penalty by hardcoding the core Unicode properties data,
    at the cost of some flexibility. (For details see Jitterbug 4497.)</p>

    <p><code>u_init()</code> can be used to check for data loading. It tries to
    load the converter alias table (<code>cnvalias.icu</code>).</p>

    <h4>ICU 2.6..3.2</h4>

    <p>These ICU versions require a call to <code>u_init()</code> before
    multi-threaded use. The services that are directly affected are those that
    don't have a service object and need to be fast: normalization and character
    properties.</p>

    <p><code>u_init()</code> loads and initializes the data files for
    normalization and character properties (<code>unorm.icu</code> and
    <code>uprops.icu</code>) and can therefore also be used to check for data
    loading.</p>

    <h4>ICU 2.4 and earlier</h4>

    <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
    multi-CPU platforms where the CPUs implement weak memory coherency. These
    CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
    defined yet.</p>

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

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

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

    <h5>Linking on Solaris</h5>

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

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

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

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

    <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
    Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
     <a href=
    "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>

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

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

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

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

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

    <p><strong>Windows 2000/XP</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.</p>

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

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

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

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

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

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

    <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
    a few places where you will need to add or modify some files. If you need
    more help, you can always ask the <a href=
    "http://www.icu-project.org/contacts.html">icu-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 icu-support mailing list. This
    will make it easier for everyone to benefit from your work.</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <ul>
          <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
          uint64_t etc.</li>

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

          <li>&lt;iostream&gt; usability</li>

          <li>Thread safety usability</li>
        </ul>
        <br />
      </li>

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

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

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

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

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

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

      <li>
        <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
        multithreaded applications. If you wish to use International Components
        for Unicode in a multithreaded application, you must provide a
        synchronization primitive that the classes can use to protect their
        global data against simultaneous modifications. We already supply working
        implementations for many platforms that ICU builds on.<br />
        <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>
    <hr />

    <p>Copyright &copy; 1997-2010 International Business Machines Corporation and
    others. All Rights Reserved.<br />
     IBM Globalization Center of Competency - San Jos&eacute;<br />
     4400 North First Street<br />
     San Jos&eacute;, CA 95134<br />
     USA</p>
  </body>
</html>

