<!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 61.1</title>
    <meta name="COPYRIGHT" content=
    "Copyright (C) 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html"/>
    <!-- meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2016 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=utf-8" />
	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
  </head>

<!--
    classes to use with the "body" -
        draft - if the release note is itself a draft (May be combined with the other two)
        rc  - if the release note is a release candidate
        milestone - if the release note is a milestone release
-->

  <!-- <body> -->
  <body class="rc">
    <p class="only-draft"><b>Note:</b> This is a draft readme.</p>

    <h1>
      <span class="only-draft">DRAFT</span>
      International Components for Unicode<br/>
      <span class="only-rc">Release Candidate</span>
      <span class="only-milestone">(Milestone Release)</span>
      <abbr title="International Components for Unicode">ICU</abbr> 61.1 ReadMe
    </h1>

    <!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
    <p class="note only-milestone">This is a development milestone release of ICU
      This milestone is intended for those wishing to get an early look at new features and API changes.
      It is not recommended for production use.</p>

    <!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
    <p class="note only-rc">This is a release candidate version of ICU4C.
      It is not recommended for production use.</p>

    <p>Last updated: 2018-Feb-16<br/>
      Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
      <a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
      Copyright &copy; 1997-2016 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="#RecBuild">Recommended Build Options</a></li>

          <li><a href="#UserConfig">User-Configurable Settings</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 300 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>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://icu-project.org/">http://icu-project.org/</a></td>
      </tr>

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

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

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

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

      <tr>
        <td>How To Use ICU</td>

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

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

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

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

        <td><a href=
        "http://icu-project.org/apiref/icu4c/">http://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://site.icu-project.org/contacts">http://site.icu-project.org/contacts</a></td>
      </tr>
    </table>

    <p><strong>Important:</strong> Please make sure you understand the <a href=
    "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information</a>.</p>


    <h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>

    <p>See the <a href="http://site.icu-project.org/download/61">ICU 61 download page</a>
    for an overview of this release, important changes, new features, bug fixes, known issues,
    changes to supported platforms and build environments,
    and migration issues for existing applications migrating from previous ICU releases.</p>

    <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete list of
    APIs added, removed, or changed in this release.</p>

    <p><a name="RecentPreviousChanges" id="RecentPreviousChanges"></a>For
    changes in previous releases, see the
    main <a href="http://site.icu-project.org/download">ICU download page</a>
    with its version-specific subpages.</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://site.icu-project.org/download">http://site.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://site.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://userguide.icu-project.org/design">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</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>layoutex</b>/</td>

        <td>Contains the ICU paragraph layout engine.</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://site.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>coll/</b> Data for collation tailorings. The makefile
            <b>colfiles.mk</b> contains the list of resource bundle files.</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. Some of the locale data is split out into the type-specific
            directories curr, lang, region, unit, and zone, described below.</li>

            <li><b>curr/</b> Locale data for currency symbols and names (including
            plural forms), with its own makefile <b>resfiles.mk</b>.</li>

            <li><b>lang/</b> Locale data for names of languages, scripts, and locale
            key names and values, with its own makefile <b>resfiles.mk</b>.</li>

            <li><b>region/</b> Locale data for names of regions, with its own
            makefile <b>resfiles.mk</b>.</li>

            <li><b>unit/</b> Locale data for measurement unit patterns and names, 
            with its own makefile <b>resfiles.mk</b>.</li>

            <li><b>zone/</b> Locale data for time zone names, with its own
            makefile <b>resfiles.mk</b>.</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, including time zone
            information, region-specific data, and other data derived from CLDR
            supplemental data.</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://userguide.icu-project.org/icudata">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="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.
    Note that C99 compatibility is now required.</p>
    <ul>
      <li><b>Namespace (ICU 61 and later):</b>
        Since ICU 61, call sites need to qualify ICU types explicitly,
        for example <code>icu::UnicodeString</code>,
        or do <code>using icu::UnicodeString;</code> where appropriate.
        If your code relies on the "using namespace icu;" that used to be in unicode/uversion.h,
        then you need to update your code.<br />
        You could temporarily (until you have more time to update your code)
        revert to the default "using"
        via <code>-DU_USING_ICU_NAMESPACE=1</code>
        or by modifying unicode/uversion.h:
<pre>Index: icu4c/source/common/unicode/uversion.h
===================================================================
--- icu4c/source/common/unicode/uversion.h      (revision 40704)
+++ icu4c/source/common/unicode/uversion.h      (working copy)
@@ -127,7 +127,7 @@
                 defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_TOOLUTIL_IMPLEMENTATION)
 #           define U_USING_ICU_NAMESPACE 0
 #       else
-#           define U_USING_ICU_NAMESPACE 0
+#           define U_USING_ICU_NAMESPACE 1
 #       endif
 #   endif
 #   if U_USING_ICU_NAMESPACE
</pre>
      </li>
      <li><b>Namespace (ICU 60 and earlier):</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 />
        You should 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/platform_8h.html#a0a33e1edf3cd23d9e9c972b63c9f7943">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 (in ICU 4.8 and below)
        or modify unicode/platform.h (in ICU 49 and higher):
<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>UnicodeString constructors:</b> The UnicodeString class has
        several single-argument constructors that are not marked "explicit"
        for historical reasons.
        This can lead to inadvertent construction of a <code>UnicodeString</code>
        with a single character by using an integer,
        and it can lead to inadvertent dependency on the conversion framework
        by using a C string literal.<br />
        Beginning with ICU 49, you should do the following:
        <ul>
          <li>Consider marking the from-<code>UChar</code>
            and from-<code>UChar32</code> constructors explicit via
            <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code> or similar.</li>
          <li>Consider marking the from-<code>const char*</code> and
            from-<code>const UChar*</code> constructors explicit via
            <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code> or similar.</li>
        </ul>
        Note: The ICU test suites cannot be compiled with these settings.
      </li>
      <li><b>utf.h, utf8.h, utf16.h, utf_old.h:</b>
        By default, utypes.h (and thus almost every public ICU header)
        includes all of these header files.
        Often, none of them are needed, or only one or two of them.
        All of utf_old.h is deprecated or obsolete.<br />
        Beginning with ICU 49,
        you should define <code>U_NO_DEFAULT_INCLUDE_UTF_HEADERS</code> to 1
        (via -D or uconfig.h, as above)
        and include those header files explicitly that you actually need.<br />
        Note: The ICU test suites cannot be compiled with this setting.</li>
      <li><b>utf_old.h:</b>
        All of utf_old.h is deprecated or obsolete.<br />
        Beginning with ICU 60,
        you should define <code>U_HIDE_OBSOLETE_UTF_OLD_H</code> to 1
        (via -D or uconfig.h, as above).
        Use of any of these macros should be replaced as noted
        in the comments for the obsolete macro.<br />
        Note: The ICU test suites <i>can</i> be compiled with this setting.</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/trunk/icu4c
~/icu$ mkdir trunk-dev
~/icu$ cd trunk-dev
~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
~/icu/trunk-dev$ make check</pre><br/>
        (Note: this example shows a relative path to
         <code>runConfigureICU</code>. If you experience difficulty,
         try using an absolute path to <code>runConfigureICU</code>
         instead.)
      </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. ICU will automatically set
        the path to the final install location using U_ICU_DATA_DEFAULT_DIR.
        Alternatively, you can 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="UserConfig" href="#UserConfig" id="UserConfig">User-Configurable Settings</a></h3>
    <p>ICU4C can be customized via a number of user-configurable settings.
    Many of them are controlled by preprocessor macros which are
    defined in the <code>source/common/unicode/uconfig.h</code> header file.
    Some turn off parts of ICU, for example conversion or collation,
    trading off a smaller library for reduced functionality.
    Other settings are recommended (see previous section)
    but their default values are set for better source code compatibility.</p>

    <p>In order to change such user-configurable settings, you can
    either modify the <code>uconfig.h</code> header file by adding
    a specific <code>#define ...</code> for one or more of the macros
    before they are first tested,
    or set the compiler's preprocessor flags (<code>CPPFLAGS</code>) to include
    an equivalent <code>-D</code> macro definition.</p>

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

      <li>Microsoft Visual C++ (part of <a href="https://www.visualstudio.com/">Visual Studio</a>) (from either Visual Studio 2015 or Visual Studio 2017)</li>
      
      <li><i><b>Optional:</b></i> A version of the <a href="https://developer.microsoft.com/windows/downloads">Windows 10 SDK</a> (if you want to build the UWP projects)</li>
    </ul>
        <p class="note"><a href="#HowToBuildCygwin">Cygwin</a> is required if using a version of MSVC other than the one
        compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)</p>

    <p>The steps are:</p>

    <ol>
      <li>Unzip the <tt>icu-XXXX.zip</tt> file into any convenient location.<br/>
        <ul class="no-left-margin">
          <li>You can use the built-in zip functionality of Windows Explorer to do this.
          Right-click on the .zip file and choose the "Extract All" option from the context menu.
          This will open a new window where you can choose the output location to put the files.</li>
          <li>Alternatively, you can use a 3<sup>rd</sup> party GUI tool like 7-Zip or WinZip to do this as well.</li>
        </ul>
      </li>

      <li>Be sure that the ICU binary directory, (ex: <i>&lt;ICU&gt;</i><tt>\bin\</tt>), 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.
      Note that the binary directory name can depend on what architecture you select when you compile ICU.
      For x86 or 32-bit builds, the binary directory is "<tt>bin</tt>". Whereas for x64 or 64-bit builds
      the binary directory is "<tt>bin64</tt>".
      </li>

      <li>Open the "<i>&lt;ICU&gt;</i><tt>\source\allinone\allinone.sln</tt>" solution
      file in 'Visual Studio 2017'. (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>If you are building using 'Visual Studio 2015' instead, or if you are building the UWP projects and you have a different
      version of the Windows 10 SDK installed you will first need to modify the two "<tt>Build.Windows.*.props</tt>" files
      in the "<tt>allinone</tt>" directory before you can open the "allinone" solution file.
      Please see the notes below about <a href="#HowToUseOtherVSVersions">building with other versions of Visual Studio</a> or the 
      notes on <a href="#HowToRetargetTheWin10SDK">re-targeting the Windows 10 SDK for the UWP projects</a> for details.</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 tests. They can be run from the command line or from within Visual Studio.

        <h4>Running the Tests from the Windows Command Line (cmd)</h4>
        <ul>
          <li>The general syntax is:<br />
              <div class="indent">
                <tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <i>Platform</i> <i>Configuration</i></tt>
              </div>
          </li>
          <li>So, for example for x86 (32-bit) and Debug, use the following:<br />
              <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x86</b> <b>Debug</b></samp>
              For x86 (32-bit) and Release:
              <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x86</b> <b>Release</b></samp>
              For x64 (64-bit) and Debug:
              <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x64</b> <b>Debug</b></samp>
              For x64 (64-bit) and Release:
              <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat  <b>x64</b> <b>Release</b></samp>
          </li>
        </ul>

        <h4>Running the Tests from within Visual Studio</h4>

        <ol>
          <li>Run the C++ test suite, "<tt>intltest</tt>". 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, "<tt>cintltst</tt>". 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, "<tt>iotest</tt>". 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>
        </ol>
	</li>

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

    <p><a name="HowToUseOtherVSVersions" id="HowToUseOtherVSVersions">
    <strong>Building with other versions of Visual Studio Note:</strong></a>
    The particular version of the MSVC compiler tool-set (and thus the corresponding version of Visual Studio) that
    is used to compile ICU is determined by the "<tt>PlatformToolset</tt>" property. This property is stored in two
    different shared files that are used to set common configuration settings amongst the various ICU "<tt>*.vcxproj</tt>" project files.
    
    For the non-UWP projects, this setting is in the shared file called "<tt>Build.Windows.ProjectConfiguration.props</tt>" located
    in the "allinone" directory.
    
    For the UWP projects, this setting is in the shared file called "<tt>Build.Windows.UWP.ProjectConfiguration.props</tt>", also 
    located in the "allinone" directory.
    <br/>
    The value of <tt>v140</tt> corresponds to the Visual Studio 2015 compiler tool set, whereas the value of
    <tt>v141</tt> corresponds to the Visual Studio 2017 compiler tool set.
    
    <br/>In order to build the non-UWP projects with Visual Studio 2015 you will need to modify the file
    called "<tt>Build.Windows.ProjectConfiguration.props</tt>" to change the value of the <tt>PlatformToolset</tt> property.
    
    Note however that Visual Studio 2017 is required for building the UWP projects.
    </p>
    
    <p>Please consider: Using older versions of the MSVC compiler is generally not recommended due to the improved support for the C++11 standard
    in newer versions of the compiler.</p>
    
    <p><a name="HowToRetargetTheWin10SDK" id="HowToRetargetTheWin10SDK">
    <strong>Re-targeting the Windows 10 SDK for the UWP projects Note:</strong></a>
    
      If the version of the Windows 10 SDK that you have installed does not match the version used by the UWP projects, then you 
      will need to "retarget" them to use the version of the SDK that you have installed instead.
      
      There are two ways to do this:
      <ul>
        <li>In Visual Studio you can right-click on the UWP projects in the 'Solution Explorer' and select the
            option 'Retarget Projects' from the context menu. This will open up a window where you can select the
            SDK version to target from a drop-down list of the various SDKs that are installed on the machine.</li>

        <li>Alternatively, you can manually edit the shared file called "<tt>Build.Windows.UWP.ProjectConfiguration.props</tt>"
            which is located in the "allinone" directory. You will need to change the of the
            "<tt>WindowsTargetPlatformVersion</tt>" property to the version of the SDK that you would like to use instead.</li>
      </ul>
    </p>
    
    <p><a name="HowToBuildWindowsCommandLine" id=
    "HowToBuildWindowsCommandLine"><strong>Using MSBUILD At The Command Line Note:</strong></a>
    You can build ICU from the command line instead of using the Visual Studio GUI.
    
    Assuming that you have properly installed Visual Studio to support command line building, you 
    should have a shortcut for the "Developer Command Prompt" listed in the Start Menu.
    (For Visual Studio 2017 you will need to install the "Desktop development with C++" option).</p>
    
    <ul>
      <li>Open the "Developer Command Prompt" shortcut from the Start Menu. (This will open up a new command line window).</li>
      <li>From within the "Developer Command Prompt" change directory (<tt>cd</tt>) to the ICU source directory.</li>
      <li>You can then use either '<tt>msbuild</tt>' directly, or you can use the '<tt>devenv.com</tt>' command to build ICU.</li>
      <li>Using <tt>MSBUILD</tt>:</li>
      <ul class="no-left-margin">
        <li>To build the 32-bit Debug version, use the following command line:
          <code>'msbuild source\allinone\allinone.sln /p:Configuration=Debug /p:Platform=Win32'</code>.</li>
        <li>To build the 64-bit Release version, use the following command line: 
          <code>'msbuild source\allinone\allinone.sln /p:Configuration=Release /p:Platform=x64'</code>.</li>
      </ul>
      <li>Using <tt>devenv.com</tt>:</li>
      <ul class="no-left-margin">
        <li>To build the 32-bit Debug version, use the following command line:
          <code>'devenv.com source\allinone\allinone.sln /build "Debug|Win32"'</code>.</li>
        <li>To build the 64-bit Release version, use the following command line: 
          <code>'devenv.com source\allinone\allinone.sln /build "Release|x64"'</code>.</li>
      </ul>
    </ul>
    
    <p>You can also use Cygwin with the MSVC 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 Windows</li>

      <li>Microsoft Visual C++ (from Visual Studio 2015 or newer, 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 (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat</tt>"
      can be used for 32-bit builds <strong>or</strong> <br />
      "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.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>--enable-tracing</tt></li>

      <li><tt>--enable-rpath</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, <samp>gunzip -d &lt; icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -</samp></li>

      <li>Change directory to <code>icu/source</code>.
          <samp>cd icu/source</samp>
          </li>

      <li>Some files may have the wrong permissions.<samp>chmod +x runConfigureICU configure install-sh</samp></li>

      <li>Run the <span style='font-family: monospace;'><a href="source/runConfigureICU">runConfigureICU</a></span>
      script for your platform. (See <a href="#HowToConfigureICU">configuration
      note</a> below).</li>

      <li>Now build: <samp>gmake</samp> (or just <code>make</code> 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 <tt>"You must use gmake to compile ICU"</tt>.
      <br/>
      Note that the compilation command output may be simplified on your platform.  If this is the case, you will see just:
      <tt>gcc ... stubdata.c</tt>
      rather than
      <tt>gcc  -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -D_REENTRANT -I../common -DU_ATTRIBUTE_DEPRECATED= -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c -DPIC -fPIC -o stubdata.o stubdata.c</tt>
      <br/>
      If you need to see the whole compilation line,  use <span style='font-family: monospace;'>"gmake VERBOSE=1"</span>. The full compilation line will print if an error occurs.
      </li>

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

      <li>To install, <samp>gmake install</samp> 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-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html">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>ICU requires XPLINK for the icuio library. If you want to use the
      rest of ICU without XPLINK, then you must use the --disable-icuio
      configure option.</li>

      <li>The latest versions of z/OS use <a
      href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm">XPLINK
      version (C128) of the C++ standard library</a> by default. You may see <a
      href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm">an
      error</a> when running with XPLINK disabled. To avoid this error,
      set the following environment variable or similar:

<pre><samp>export _CXX_PSYSIX="CEE.SCEELIB(C128N)":"CBC.SCLBSID(IOSTREAM,COMPLEX)"</samp></pre>
      </li>

      <li>When building ICU data, the heap size may need to be increased with the following
      environment variable:

<pre><samp>export _CEE_RUNOPTS="HEAPPOOLS(ON),HEAP(4M,1M,ANY,FREE,0K,4080)"</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 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>

      <li>The latest IBM tools for Developers for IBM i &mdash;
        <a href='https://www-356.ibm.com/partnerworld/wps/servlet/ContentHandler/pw_com_porting_tools_index'>https://www-356.ibm.com/partnerworld/wps/servlet/ContentHandler/pw_com_porting_tools_index</a>
        <!-- formerly http://www.ibm.com/servers/enable/site/porting/tools/'>http://www.ibm.com/servers/enable/site/porting/tools/</a> -->
        <!-- formerly: http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html -->
      </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>
        Copy the ICU source .tgz to the IBM i environment, as binary.
        Also, copy the <a href='as_is/os400/unpax-icu.sh'>unpax-icu.sh</a> script into the same directory, as a text file.
      </li>

      <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('gmake') REPLACE(*YES)
CHGJOB CCSID(37)</samp></pre></li>

      <li>Fire up the QSH <i>(all subsequent commands are run inside the qsh session.)</i>
        <pre><samp>qsh</samp></pre>
      </li>

      <li>Set up the PATH: <pre><samp>export PATH=/QIBM/ProdData/DeveloperTools/qsh/bin:$PATH:/QOpenSys/usr/bin</samp></pre>
      </li>

      <li>Unpack the ICU source code archive:
        <pre><samp>gzip -d icu-<i>X</i>.<i>Y</i>.tgz</samp></pre>
          </li>

      <li>Run unpax-icu.sh on the tar file generated from the previous step.
        <pre><samp>unpax-icu.sh icu.tar</samp></pre></li>

      <li>Build the program ICULD which ICU will use for linkage.
        <pre><samp>cd icu/as_is/os400
qsh bldiculd.sh
cd ../../..</samp></pre>
        </li>

      <li>Change into the 'source' directory, and configure ICU.  (See <a href="#HowToConfigureICU">configuration
      note</a> for details). Note that --with-data-packaging=archive and setting the --prefix are recommended, building in default (dll) mode is currently not supported.
        <pre><samp>cd icu/source
./runConfigureICU IBMi --prefix=<i>/path/to/somewhere</i> --with-data-packaging=archive</samp></pre>
</li>

      <li>Build ICU. <i>(Note: Do not use the -j option)</i> <pre><samp>gmake</samp></pre></li>

      <li>Test ICU. <pre><samp>gmake check</samp></pre>
        (The <tt> QIBM_MULTI_THREADED=Y</tt> flag will be automatically applied to intltest -
          you can look at the <a href=
      "https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzahw/rzahwceeco.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 />
			<p class="note">"<code>--with-cross-build</code>" takes an absolute path.</p>
<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://userguide.icu-project.org/">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://userguide.icu-project.org/icudata">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 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 paragraph layout that uses
        parts of ICU.
        HarfBuzz is required.</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>When ICU is built with aCC on HP-UX, the <a
    href="http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=eb08b3f1eee02110b3f1eee02110275d6e10RCRD">-AA</a>
    compiler flag is used. It is required in order to use the latest
    &lt;iostream&gt; API in a thread safe manner. This compiler flag affects the
    version of the C++ library being used. Your applications will also need to
    be compiled with -AA in order to use ICU.</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
    SUn Solaris document available from Oracle. 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>Multithreaded Programming Guide, Compiling and
    Debugging</i>", Sun Microsystems, 2002 <br />
     <a href=
    "https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html">https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html</a></p>

    <p>Note, a version of that chapter from a 2008 document update covering both Solaris 9
    and Solaris 10 is available here:<br />
     <a href=
    "http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html">http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html</a></p>

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

    <p>If you are building on the Windows 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>\bin64" 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 and above</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>\bin64" to the end of the path string. If there is
    nothing there, just type in "<i>&lt;ICU&gt;</i>\bin64". 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://site.icu-project.org/contacts">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://userguide.icu-project.org/icudata">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>String handling support for the char16_t and wchar_t types.</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; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
    <a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
    Copyright &copy; 1997-2016 International Business Machines Corporation and  others.
    All Rights Reserved.</p>
  </body>
</html>
