|  | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
|  |  | 
|  | <html lang="en-US"> | 
|  | <head> | 
|  | <meta name="COPYRIGHT" content= | 
|  | "Copyright (c) 1997-2004 IBM Corporation and others. All Rights Reserved."> | 
|  | <meta name="KEYWORDS" content= | 
|  | "ICU; International Components for Unicode; what's new; readme; read me; introduction; downloads; downloading; building; installation;"> | 
|  | <meta name="DESCRIPTION" content= | 
|  | "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU."> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | 
|  |  | 
|  | <title>ReadMe for ICU</title> | 
|  | <style type="text/css"> | 
|  | h1 {border-width: 2px; border-style: solid; text-align: center; width: 100%; font-size: 200%; font-weight: bold} | 
|  | h2 {margin-top: 3em; text-decoration: underline; page-break-before: always} | 
|  | h2.TOC {page-break-before: auto} | 
|  | h3 {margin-top: 2em; text-decoration: underline} | 
|  | h4 {text-decoration: underline} | 
|  | h5 {text-decoration: underline} | 
|  | caption {font-weight: bold; text-align: left} | 
|  | div.indent {margin-left: 2em} | 
|  | ul.TOC {list-style-type: none} | 
|  | samp {margin-left: 1em; border-style: groove; padding: 1em; display: block; background-color: #EEEEEE} | 
|  | </style> | 
|  | </head> | 
|  |  | 
|  | <body> | 
|  | <h1>International Components for Unicode<br> | 
|  | <abbr title="International Components for Unicode">ICU</abbr> 2.8 | 
|  | ReadMe</h1> | 
|  |  | 
|  | <p>Version: 2004-Jan-08<br> | 
|  | Copyright © 1997-2004 International Business Machines Corporation and | 
|  | others. All Rights Reserved.</p> | 
|  | <!-- Remember that there is a copyright at the end too --> | 
|  | <hr> | 
|  |  | 
|  | <h2 class="TOC">Table of Contents</h2> | 
|  |  | 
|  | <ul class="TOC"> | 
|  | <li><a href="#Introduction">Introduction</a></li> | 
|  |  | 
|  | <li><a href="#GettingStarted">Getting Started</a></li> | 
|  |  | 
|  | <li><a href="#News">What Is New In This release?</a></li> | 
|  |  | 
|  | <li><a href="#Download">How To Download the Source Code</a></li> | 
|  |  | 
|  | <li><a href="#SourceCode">ICU Source Code Organization</a></li> | 
|  |  | 
|  | <li> | 
|  | <a href="#HowToBuild">How To Build And Install ICU</a> | 
|  |  | 
|  | <ul class="TOC"> | 
|  | <li><a href="#HowToBuildSupported">Supported Platforms</a></li> | 
|  |  | 
|  | <li><a href="#HowToBuildWindows">Windows</a></li> | 
|  |  | 
|  | <li><a href="#HowToBuildWindowsXP64">Windows XP on IA64</a></li> | 
|  |  | 
|  | <li><a href="#HowToBuildUNIX">UNIX</a></li> | 
|  |  | 
|  | <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li> | 
|  |  | 
|  | <li><a href="#HowToBuildOS400">OS/400 (iSeries)</a></li> | 
|  | </ul> | 
|  | </li> | 
|  |  | 
|  | <li><a href="#HowToPackage">How To Package ICU</a></li> | 
|  |  | 
|  | <li> | 
|  | <a href="#ImportantNotes">Important Notes About Using ICU</a> | 
|  |  | 
|  | <ul class="TOC"> | 
|  | <li><a href="#ImportantNotesCPlusPlus">Using ICU in a Multithreaded | 
|  | Environment</a></li> | 
|  |  | 
|  | <li><a href="#CharStrings">char * strings in ICU</a></li> | 
|  |  | 
|  | <li><a href="#ImportantNotesDefaultCP">Using the Default | 
|  | Codepage</a></li> | 
|  |  | 
|  | <li><a href="#ImportantNotesWindows">Windows Platform</a></li> | 
|  |  | 
|  | <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li> | 
|  | </ul> | 
|  | </li> | 
|  |  | 
|  | <li> | 
|  | <a href="#PlatformDependencies">Platform Dependencies</a> | 
|  |  | 
|  | <ul class="TOC"> | 
|  | <li><a href="#PlatformDependenciesNew">Porting To A New | 
|  | Platform</a></li> | 
|  |  | 
|  | <li><a href="#PlatformDependenciesImpl">Platform Dependent | 
|  | Implementations</a></li> | 
|  |  | 
|  | <li><a href="#PlatformDependenciesBuildOrder">Build Order Without | 
|  | Using ICU's Makefiles</a></li> | 
|  | </ul> | 
|  | </li> | 
|  | </ul> | 
|  | <hr> | 
|  |  | 
|  | <h2><a name="Introduction" href="#Introduction">Introduction</a></h2> | 
|  |  | 
|  | <p>Today's software market is a global one in which it is desirable to | 
|  | develop and maintain one application (single source/single binary) that | 
|  | supports a wide variety of languages. The International Components for | 
|  | Unicode (ICU) libraries provide robust and full-featured Unicode services | 
|  | on a wide variety of platforms to help this design goal. The ICU libraries | 
|  | provide support for:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>The latest version of the Unicode standard</li> | 
|  |  | 
|  | <li>Character set conversions with support for over 200 codepages</li> | 
|  |  | 
|  | <li>Locale data for more than 230 locales</li> | 
|  |  | 
|  | <li>Language sensitive text collation (sorting) and searching based on | 
|  | the Unicode Collation Algorithm (=ISO 14651)</li> | 
|  |  | 
|  | <li>Regular expression matching and Unicode sets</li> | 
|  |  | 
|  | <li>Transformations for normalization, upper/lowercase, script | 
|  | transliterations (50+ pairs)</li> | 
|  |  | 
|  | <li>Resource bundles for storing and accessing localized information</li> | 
|  |  | 
|  | <li>Date/Number/Message formatting and parsing of culture specific | 
|  | input/output formats</li> | 
|  |  | 
|  | <li>Calendar specific date and time manipulation</li> | 
|  |  | 
|  | <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li> | 
|  |  | 
|  | <li>Text boundary analysis for finding characters, word and sentence | 
|  | boundaries</li> | 
|  | </ul> | 
|  |  | 
|  | <p>ICU has a sister project <a href= | 
|  | "http://oss.software.ibm.com/icu4j/index.html">ICU4J</a> that extends the | 
|  | internationalization capabilities of Java to a level similar to ICU. The | 
|  | ICU C/C++ project is also called ICU4C when a distinction is necessary.</p> | 
|  |  | 
|  | <h2><a name="GettingStarted" href="#GettingStarted">Getting | 
|  | started</a></h2> | 
|  |  | 
|  | <p>This document describes how to build and install ICU on your machine. | 
|  | For other information about ICU please see the following table of | 
|  | links.<br> | 
|  | The ICU homepage also links to related information about writing | 
|  | internationalized software.</p> | 
|  |  | 
|  | <table border="1" cellpadding="3" width="100%" summary= | 
|  | "These are some useful links regarding ICU and internationalization in general."> | 
|  | <caption> | 
|  | Here are some useful links regarding ICU and internationalization in | 
|  | general. | 
|  | </caption> | 
|  |  | 
|  | <tr> | 
|  | <td>ICU Homepage</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/index.html">http://oss.software.ibm.com/icu/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>ICU4J Homepage</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu4j/index.html">http://oss.software.ibm.com/icu4j/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>FAQ - Frequently Asked Questions about ICU</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/icufaq.html">http://oss.software.ibm.com/icu/userguide/icufaq.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>ICU User's Guide</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/index.html">http://oss.software.ibm.com/icu/userguide/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Download ICU Releases</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/download/index.html">http://oss.software.ibm.com/icu/download/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>API Documentation Online</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/apiref/index.html">http://oss.software.ibm.com/icu/apiref/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Online ICU Demos</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/demo/index.html">http://oss.software.ibm.com/icu/demo/index.html</a></td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Contacts and Bug Reports/Feature Requests</td> | 
|  |  | 
|  | <td><a href= | 
|  | "http://oss.software.ibm.com/icu/archives/index.html">http://oss.software.ibm.com/icu/archives/index.html</a></td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | <p><strong>Important:</strong> Please make sure you understand the <a href= | 
|  | "license.html">Copyright and License Information</a>.</p> | 
|  |  | 
|  | <h2><a name="News" href="#News">What is new in this release?</a></h2> | 
|  |  | 
|  | <p>The following list concentrates on <em>changes that affect existing | 
|  | applications migrating from previous ICU releases</em>. For more news about | 
|  | this release, see the <a href= | 
|  | "http://oss.software.ibm.com/icu/download/2.8/index.html">ICU 2.8 download | 
|  | page</a>.</p> | 
|  |  | 
|  | <h3><a name="News_Locale">Locale Identifier Changes</a></h3> | 
|  |  | 
|  | <p>The ICU locale identifier format has recently changed. In order to | 
|  | improve support for RFC 3066 identifiers and to support keyword | 
|  | identifiers, some minor breaking changes have been introduced. When your | 
|  | application is working with POSIX locale identifiers or .NET locale | 
|  | identifiers, you should use <code><a href= | 
|  | "http://oss.software.ibm.com/icu/apiref/uloc_8h.html">uloc_canonicalize</a>()</code> | 
|  | to convert it to an ICU locale identifier. It was an undocumented feature | 
|  | that you could pass a POSIX locale to ICU, and ICU would convert it for you | 
|  | automatically. For example, if you used @EURO or @PREEURO to identify | 
|  | certain currencies, you should now be using the "@currency=" keyword for | 
|  | the locale identifiers. If you use the <code>uloc_canonicalize()</code> | 
|  | function, it will convert the @PREEURO variants to the proper ICU locale | 
|  | identifier. For example, it will convert "fr-fr@PREEURO" to | 
|  | "fr_FR@currency=FRF". More information about keywords can be found in the | 
|  | <a href="http://oss.software.ibm.com/icu/userguide/locale.html">Locale | 
|  | Section</a> of the User's Guide and <a href= | 
|  | "http://www.openi18n.org/specs/ldml/1.0/ldml-spec.htm">on the OpenI18N | 
|  | site</a>.</p> | 
|  |  | 
|  | <p>Some ISO 15924 script codes are used in some RFC 3066 language tags. | 
|  | This is especially helpful when you need to differentiate cases where a | 
|  | language can be written with more than one script. Since ICU now supports | 
|  | ISO 15924 script codes in the locale identifier, you can now specify | 
|  | locales like "zh_Hant" to specify Traditional Chinese. Previously, people | 
|  | had to use "zh_TW" to specify Traditional Chinese, which isn't quite | 
|  | correct because the locale identifier is specifying the language of a | 
|  | region and not the type of language. The current locale identifiers, like | 
|  | en_US, still work, and do not require any changes in your code. Future | 
|  | versions of ICU will move the data into the proper locale resources, and | 
|  | the locale infrastructure will be improved.</p> | 
|  |  | 
|  | <h3><a name="News_Library_Names">Static Library Names and AIX | 
|  | linking</a></h3> | 
|  |  | 
|  | <p>Previously static and shared library names had the same naming scheme, | 
|  | except the file extension was different between the filenames. For example, | 
|  | the shared common library was called libicuuc.so, and the static common | 
|  | library was called libicuuc.a on many Unix type machines. It has come to | 
|  | our attention, that Windows import library names and static library names | 
|  | can have the same name, and when the -brtl linker option is removed the | 
|  | static and shared libraries have the same filename extension, which is | 
|  | ".a". The -brtl linker option on AIX has been removed at several people's | 
|  | request.</p> | 
|  |  | 
|  | <p>In order to differentiate between the two library names on all | 
|  | platforms, static libraries now use an "s" as a prefix to differentiate | 
|  | between the shared and static libraries. For example, "libicuuc.a" is now | 
|  | "lib<strong>s</strong>icuuc.a". This means that if you used "-licuuc" to | 
|  | link the common library into your application, you now need to use | 
|  | "-lsicuuc".</p> | 
|  |  | 
|  | <h3><a name="News_ICUIO">ICUIO Library Changes</a></h3> | 
|  |  | 
|  | <p>The ICUIO library is still unsupported (this was previously called the | 
|  | ustdio library), and some breaking fixes have been made to the library. %S | 
|  | should be used for UTF-16 strings, and %C should be used for UChar for the | 
|  | format strings. The %K and %U format specifiers are deprecated and will be | 
|  | removed in a future version of ICU. Also u_fgets now uses the same argument | 
|  | ordering as stdio fgets, which will make it easier for people to migrate | 
|  | their existing stdio implementations to use ICUIO. Fortunately, u_fgets now | 
|  | follows the Unicode algorithm for detecting hard line breaks, and some | 
|  | performance enhancements to this library have been implemented so that most | 
|  | of the formatting and parsing functions will run faster.</p> | 
|  |  | 
|  | <h3><a name="News_Library_Init">Library Initialization</a></h3> | 
|  |  | 
|  | <p>ICU4C 2.6 introduces a library initialization function. It is required | 
|  | to call it before using any ICU services in a multi-threaded environment. | 
|  | For details please see the <a href= | 
|  | "http://oss.software.ibm.com/icu/apiref/index.html">documentation</a> of | 
|  | <code>u_init()</code> in the <code>unicode/uclean.h</code> header file.</p> | 
|  | <hr> | 
|  |  | 
|  | <h2><a name="Download" href="#Download">How To Download the Source | 
|  | Code</a></h2> | 
|  |  | 
|  | <p>There are two ways to download ICU releases:</p> | 
|  |  | 
|  | <ul> | 
|  | <li><strong>Official Release Snapshot:</strong><br> | 
|  | If you want to use ICU (as opposed to developing it), you should | 
|  | download an official packaged version of the ICU source code. These | 
|  | versions are tested more thoroughly than day-to-day development builds of | 
|  | the system, and they are packaged in zip and tar files for convenient | 
|  | download. These packaged files can be found at <a href= | 
|  | "http://oss.software.ibm.com/icu/download/index.html">http://oss.software.ibm.com/icu/download/index.html</a>.<br> | 
|  |  | 
|  | The packaged snapshots are named <strong>icu-nnnn.zip</strong> or | 
|  | <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip | 
|  | file is used for Windows platforms, while the .tgz file is preferred on | 
|  | most other platforms.<br> | 
|  | Please unzip this file. It will reconstruct the source directory, which | 
|  | includes anonymous CVS control directories (see below).</li> | 
|  |  | 
|  | <li><strong>CVS Source Repository:</strong><br> | 
|  | If you are interested in developing features, patches, or bug fixes for | 
|  | ICU, you should probably be working with the latest version of the ICU | 
|  | source code. You will need to check the code out of our CVS repository to | 
|  | ensure that you have the most recent version of all of the files. See our | 
|  | <a href="http://oss.software.ibm.com/icu/develop/cvs.html">CVS page</a> | 
|  | for details.</li> | 
|  | </ul> | 
|  |  | 
|  | <h2><a name="SourceCode" href="#SourceCode">ICU Source Code | 
|  | Organization</a></h2> | 
|  |  | 
|  | <p>In the descriptions below, <strong><i><ICU></i></strong> is the | 
|  | full path name of the ICU directory (the top level directory from the | 
|  | distribution archives) in your file system. You can also view the <a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/design.html">ICU Architectural | 
|  | Design</a> section of the User's Guide to see which libraries you need for | 
|  | your software product. You need at least the data (<code>[lib]icudt</code>) | 
|  | and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p> | 
|  |  | 
|  | <table border="1" cellpadding="0" width="100%" summary= | 
|  | "The following files describe the code drop."> | 
|  | <caption> | 
|  | The following files describe the code drop. | 
|  | </caption> | 
|  |  | 
|  | <tr> | 
|  | <th scope="col">File</th> | 
|  |  | 
|  | <th scope="col">Description</th> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>readme.html</td> | 
|  |  | 
|  | <td>Describes the International Components for Unicode (this file)</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>license.html</td> | 
|  |  | 
|  | <td>Contains the text of the ICU license</td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | <p><br> | 
|  | </p> | 
|  |  | 
|  | <table border="1" cellpadding="0" width="100%" summary= | 
|  | "The following directories contain source code and data files."> | 
|  | <caption> | 
|  | The following directories contain source code and data files. | 
|  | </caption> | 
|  |  | 
|  | <tr> | 
|  | <th scope="col">Directory</th> | 
|  |  | 
|  | <th scope="col">Description</th> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></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><ICU></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><ICU></i>/source/<b>data</b>/</td> | 
|  |  | 
|  | <td> | 
|  | <p>This directory contains the source data in text format, which is | 
|  | compiled into binary form during the ICU build process. It contains | 
|  | several subdirectories, in which the data files are grouped by | 
|  | function. Note that the build process must be run again after any | 
|  | changes are made to this directory.</p> | 
|  |  | 
|  | <ul> | 
|  | <li><b>brkitr/</b> Data files for character, word, sentence, title | 
|  | casing and line boundary analysis.</li> | 
|  |  | 
|  | <li><b>locales/</b> These .txt files contain ICU language and | 
|  | culture-specific localization data. Two special bundles are | 
|  | <b>root</b>, which is the fallback data and parent of other | 
|  | bundles, and <b>index</b>, which contains a list of installed | 
|  | bundles. The makefile <b>resfiles.mk</b> contains the list of | 
|  | resource bundle files.</li> | 
|  |  | 
|  | <li><b>mappings/</b> Here are the code page converter tables. These | 
|  | .ucm files contain mappings to and from Unicode. These are compiled | 
|  | into .cnv files. <b>convrtrs.txt</b> is the alias mapping table | 
|  | from various converter name formats to ICU internal format and vice | 
|  | versa. It produces cnvalias.icu. The makefiles <b>ucmfiles.mk, | 
|  | ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of | 
|  | converters to be built.</li> | 
|  |  | 
|  | <li><b>translit/</b> This directory contains transliterator rules | 
|  | as resource bundles, a makefile <b>trnsfiles.mk</b> containing the | 
|  | list of installed system translitaration files, and as well the | 
|  | special bundle <b>translit_index</b> which lists the system | 
|  | transliterator aliases.</li> | 
|  |  | 
|  | <li><b>unidata/</b> This directory contains the Unicode data files. | 
|  | Please see <a href= | 
|  | "http://www.unicode.org/">http://www.unicode.org/</a> for more | 
|  | information.</li> | 
|  |  | 
|  | <li><b>misc/</b> The misc directory contains other data files which | 
|  | did not fit into the above categories. Currently it only contains | 
|  | time zone information, and a name preperation file for <a href= | 
|  | "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li> | 
|  |  | 
|  | <li><b>out/</b> This directory contains the assembled memory mapped | 
|  | files.</li> | 
|  |  | 
|  | <li><b>out/build/</b> This directory contains intermediate | 
|  | (compiled) files, such as .cnv, .res, etc.</li> | 
|  | </ul> | 
|  |  | 
|  | <p>If you are creating a special ICU build, you can set the ICU_DATA | 
|  | environment variable to the out/ or the out/build/ directories, but | 
|  | this is generally discouraged because most people set it incorrectly. | 
|  | You can view the <a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/icudata.html">ICU Data | 
|  | Management</a> section of the ICU User's Guide for details.</p> | 
|  | </td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/test/<b>intltest</b>/</td> | 
|  |  | 
|  | <td>A test suite including all C++ APIs. For information about running | 
|  | the test suite, see the users' guide.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/test/<b>cintltst</b>/</td> | 
|  |  | 
|  | <td>A test suite written in C, including all C APIs. For information | 
|  | about running the test suite, see the users' guide.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></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><ICU></i>/source/<b>tools</b>/</td> | 
|  |  | 
|  | <td>Tools for generating the data files. Data files are generated by | 
|  | invoking <i><ICU></i>/source/data/build/makedata.bat on Win32 or | 
|  | <i><ICU></i>/source/make on UNIX.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/<b>samples</b>/</td> | 
|  |  | 
|  | <td>Various sample programs that use ICU</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/<b>extra</b>/</td> | 
|  |  | 
|  | <td>Non-supported API additions. Currently, it contains the 'ustdio' | 
|  | file i/o library</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/<b>layout</b>/</td> | 
|  |  | 
|  | <td>Contains the ICU layout engine (not a rasterizer).</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/<b>packaging</b>/<br> | 
|  | <i><ICU></i>/<b>debian</b>/</td> | 
|  |  | 
|  | <td>These directories contain scripts and tools for packaging the final | 
|  | ICU build for various release platforms.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/source/<b>config</b>/</td> | 
|  |  | 
|  | <td>Contains helper makefiles for platform specific build commands. | 
|  | Used by 'configure'.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></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><ICU></i>/<b>include</b>/</td> | 
|  |  | 
|  | <td>Contains the headers needed for developing software that uses ICU | 
|  | on Windows.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/<b>lib</b>/</td> | 
|  |  | 
|  | <td>Contains the import libraries for linking ICU into your Windows | 
|  | application.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><i><ICU></i>/<b>bin</b>/</td> | 
|  |  | 
|  | <td>Contains the libraries and executables for using ICU on | 
|  | Windows.</td> | 
|  | </tr> | 
|  | </table> | 
|  | <!-- end of ICU structure ==================================== --> | 
|  |  | 
|  | <h2><a name="HowToBuild" href="#HowToBuild">How To Build And Install | 
|  | ICU</a></h2> | 
|  |  | 
|  | <h3><a name="HowToBuildSupported" href="#HowToBuildSupported">Supported | 
|  | Platforms</a></h3> | 
|  |  | 
|  | <table border="1" cellpadding="3" summary= | 
|  | "ICU can be built on many platforms."> | 
|  | <caption> | 
|  | Here is a status of functionality of ICU on several different | 
|  | platforms. | 
|  | </caption> | 
|  |  | 
|  | <tr> | 
|  | <th scope="col">Operating system</th> | 
|  |  | 
|  | <th scope="col">Compiler</th> | 
|  |  | 
|  | <th scope="col">Testing frequency</th> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Windows 2000/XP</td> | 
|  |  | 
|  | <td>Microsoft Visual C++ 6.0</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Windows XP</td> | 
|  |  | 
|  | <td>Microsoft Visual C++ .NET 2002 (7.0)</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Red Hat Linux 7.2</td> | 
|  |  | 
|  | <td>gcc 2.96</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>AIX 5.1.0 L</td> | 
|  |  | 
|  | <td>Visual Age C++ 5.0</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Solaris 7 (SunOS 5.7)</td> | 
|  |  | 
|  | <td>Workshop Pro (Forte) CC 6.0</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>HP-UX 11.01</td> | 
|  |  | 
|  | <td>aCC A.03.13<br> | 
|  | cc A.11.01.00</td> | 
|  |  | 
|  | <td>Reference platform</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Windows NT/98</td> | 
|  |  | 
|  | <td>Microsoft Visual C++ 6.0</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Mac OS X (10.2)</td> | 
|  |  | 
|  | <td>gcc 3.1<br> | 
|  | (Developer Tools, July 2002)</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Solaris 8 (SunOS 5.8)</td> | 
|  |  | 
|  | <td>Workshop Pro CC 4.2<br> | 
|  | (use 'runConfigureICU SOLARISCC/W4.2')</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Solaris 2.6 (SunOS 5.6)</td> | 
|  |  | 
|  | <td>gcc 2.95.2</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>FreeBSD 4.8</td> | 
|  |  | 
|  | <td>gcc 2.95.4</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Red Hat Alpha Linux 7.2</td> | 
|  |  | 
|  | <td>gcc 2.96</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>z/OS 1.2</td> | 
|  |  | 
|  | <td>cxx 1.2</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>OS/400 (iSeries) V5R1</td> | 
|  |  | 
|  | <td>iCC</td> | 
|  |  | 
|  | <td>Regularly tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Red Hat Alpha Linux 7.2</td> | 
|  |  | 
|  | <td>Compaq C++ Compiler 3.2<br> | 
|  | Compaq C Compiler 6.5.6</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>AIX 4.3.3</td> | 
|  |  | 
|  | <td>xlC_r 4.0.2.1</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>QNX</td> | 
|  |  | 
|  | <td>gcc</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>NetBSD, OpenBSD</td> | 
|  |  | 
|  | <td>gcc</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>BeOS</td> | 
|  |  | 
|  | <td>gcc</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>CygWin</td> | 
|  |  | 
|  | <td>gcc 2.95.3</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>CygWin</td> | 
|  |  | 
|  | <td>Microsoft Visual C++ 6.0</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>SGI/IRIX</td> | 
|  |  | 
|  | <td> </td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Tru64 (OSF)</td> | 
|  |  | 
|  | <td>Compaq's cxx compiler</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>HP-UX 11.01</td> | 
|  |  | 
|  | <td>CC A.03.10</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>MP-RAS</td> | 
|  |  | 
|  | <td>NCR MP-RAS C/C++ Compiler</td> | 
|  |  | 
|  | <td>Rarely tested</td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | <p><br> | 
|  | </p> | 
|  |  | 
|  | <h4>Key to testing frequency</h4> | 
|  |  | 
|  | <dl> | 
|  | <dt><i>Reference platform</i></dt> | 
|  |  | 
|  | <dd>ICU will work on these platforms with these compilers</dd> | 
|  |  | 
|  | <dt><i>Regularly tested</i></dt> | 
|  |  | 
|  | <dd>ICU should work on these platforms with these compilers</dd> | 
|  |  | 
|  | <dt><i>Rarely tested</i></dt> | 
|  |  | 
|  | <dd>ICU has been ported to these platforms but may not have been tested | 
|  | there recently</dd> | 
|  | </dl> | 
|  |  | 
|  | <h3><a name="HowToBuildWindows" href="#HowToBuildWindows">How To Build And | 
|  | Install On Windows</a></h3> | 
|  |  | 
|  | <p>Building International Components for Unicode requires:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>Microsoft NT 4.0 and above, or Windows 98 and above</li> | 
|  |  | 
|  | <li>Microsoft Visual C++ 6.0 (Service Pack 2 is required to work with the | 
|  | release build of max speed optimization).</li> | 
|  | </ul> | 
|  |  | 
|  | <p>(If you want to build with Microsoft Visual C++ .NET, please refer to | 
|  | the <a href="#HowToBuildWindowsDotNet">note about building with Visual | 
|  | Studio .NET</a> below.)</p> | 
|  |  | 
|  | <p>The steps are:</p> | 
|  |  | 
|  | <ol> | 
|  | <li>Unzip the icu-XXXX.zip file into any convenient location. Using | 
|  | command line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or | 
|  | just use WinZip.</li> | 
|  |  | 
|  | <li>Be sure that the ICU binary directory, <i><ICU></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><ICU></i>\source\allinone\allinone.dsw" workspace | 
|  | file in Microsoft Visual C++ 6.0. (This workspace includes all the | 
|  | International Components for Unicode libraries, necessary ICU building | 
|  | tools, and the intltest and cintltest test suite projects). Please see | 
|  | the note below if you want to build from the command line instead.</li> | 
|  |  | 
|  | <li>Set the active Project to the "all" project. To do this: Choose | 
|  | "Project" menu, and select "Set active project". In the submenu, select | 
|  | the "all" workspace.</li> | 
|  |  | 
|  | <li>Set the active configuration to "Win32 Debug" or "Win32 Release" (See | 
|  | <a href="#HowToBuildWindowsConfig">Windows configuration note</a> | 
|  | below).</li> | 
|  |  | 
|  | <li>Choose the "Build" menu and select "Rebuild All". If you want to | 
|  | build the Debug and Release at the same time, see the <a href= | 
|  | "#HowToBuildWindowsBatch">batch configuration note</a> below.</li> | 
|  |  | 
|  | <li>Run the C++ test suite, "intltest". To do this: set the active | 
|  | project to "intltest", and press F5 to run it.</li> | 
|  |  | 
|  | <li>Run the C test suite, "cintltst". To do this: set the active project | 
|  | to "cintltst", and press F5 to run it.</li> | 
|  |  | 
|  | <li>Make sure that both "cintltst" and "intltest" passed without any | 
|  | errors. The return codes are non-zero when they do not pass. Visual C++ | 
|  | will display the return codes in the debug tag of the output window. When | 
|  | "intltest" and "cintltest" return 0, it means that everything is | 
|  | installed correctly. You can press Ctrl+F5 on the test project to run the | 
|  | test and see what error messages were displayed (if any tests | 
|  | failed).</li> | 
|  |  | 
|  | <li>You are now able to develop applications with ICU by using the | 
|  | libraries and tools in <i><ICU></i>\bin\. The headers are in | 
|  | <i><ICU></i>\include\ and the link libraries are in | 
|  | <i><ICU></i>\lib\. To install the ICU runtime on a machine, or ship | 
|  | it with your application, copy the needed components from | 
|  | <i><ICU></i>\bin\ to a location on the system PATH or to your | 
|  | application directory.</li> | 
|  | </ol> | 
|  |  | 
|  | <p><a name="HowToBuildWindowsCommandLine"><strong>Using MSDEV At The | 
|  | Command Line Note:</strong></a> You can build ICU from the command line. | 
|  | Assuming that you have properly installed Microsoft Visual C++ to support | 
|  | command line execution, you can run the following command, 'msdev | 
|  | <i><ICU></i>\source\allinone\allinone.dsw /MAKE "ALL"'.</p> | 
|  |  | 
|  | <p><a name="HowToBuildWindowsConfig"><strong>Setting Active Configuration | 
|  | Note:</strong></a> To set the active configuration, two different | 
|  | possibilities are:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>Choose "Build" menu, select "Set Active Configuration", and select | 
|  | "Win32 Release" or "Win32 Debug".</li> | 
|  |  | 
|  | <li>Another way is to select "Customize" in the "Tools" menu, select the | 
|  | "Toolbars" tab, enable "Build" instead of "Build Minibar", and click on | 
|  | "Close". This will bring up a toolbar which you can move aside the other | 
|  | permanent toolbars at the top of the MSVC window. The advantage is that | 
|  | you now have an easy-to-reach pop-up menu that will always show the | 
|  | currently selected active configuration. Or, you can drag the project and | 
|  | configuration selections and drop them on the menu bar for later | 
|  | selection.</li> | 
|  | </ul> | 
|  |  | 
|  | <p><a name="HowToBuildWindowsBatch"><strong>Batch Configuration | 
|  | Note:</strong></a> If you want to build the Debug and Release | 
|  | configurations at the same time, choose "Build" menu and select "Batch | 
|  | Build..." instead (and mark all configurations as checked), then click the | 
|  | button named "Rebuild All". The "all" workspace will build all the | 
|  | libraries, test programs and various ICU tools (e.g. genrb for generating | 
|  | binary locale data files).</p> | 
|  |  | 
|  | <p><a name="HowToBuildWindowsDotNet"><strong>Microsoft Visual Studio .NET | 
|  | Note:</strong></a> ICU will build with Microsoft Visual Studio .NET 2002. | 
|  | It is recommended that you use the | 
|  | "<i><ICU></i>\source\allinone\allinone.sln" solution workspace to | 
|  | build ICU. The instructions for building with Visual Studio .NET are | 
|  | similar to the instructions for Visual Studio .NET. If you have Microsoft | 
|  | Visual Studio .NET 2003 the Visual Studio .NET 2002 project files will | 
|  | automatically be converted to 2003 project files when you open the solution | 
|  | workspace for the first time.</p> | 
|  |  | 
|  | <h3><a name="HowToBuildWindowsXP64" href="#HowToBuildWindowsXP64">How To | 
|  | Build And Install On Windows XP on IA64</a></h3> | 
|  |  | 
|  | <p>Building International Components for Unicode requires:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>Microsoft XP on an IA64 (Itanium®) machine</li> | 
|  |  | 
|  | <li>Microsoft Visual C++ 6.0 (Service Pack 2 is required to work with the | 
|  | release build of max speed optimization).</li> | 
|  |  | 
|  | <li>Microsoft Platform SDK.</li> | 
|  | </ul> | 
|  |  | 
|  | <p>The steps are:</p> | 
|  |  | 
|  | <ol> | 
|  | <li>Follow steps 1-3 in the <a href="#HowToBuildWindows">in the previous | 
|  | section</a>.</li> | 
|  |  | 
|  | <li>Open the "Set Windows XP 64-bit Build Environment (Retail)" command | 
|  | window from the Microsoft Platform SDK.</li> | 
|  |  | 
|  | <li>If your computer is not set up to do command line builds, then run | 
|  | "set PATH=C:\Program Files (x86)\Microsoft Visual | 
|  | Studio\Common\MSDev98\Bin;%PATH%" or include the path where MSDEV.EXE is | 
|  | located.</li> | 
|  |  | 
|  | <li>Use cd to get into the <i><ICU></i> directory.</li> | 
|  |  | 
|  | <li>Run this command: 'msdev /USEENV | 
|  | <i><ICU></i>\source\allinone\allinone.dsw /MAKE "all - Win64 | 
|  | Release"'</li> | 
|  |  | 
|  | <li>Run "cd source\test\intltest\Release"</li> | 
|  |  | 
|  | <li>Run the C++ test suite, "intltest". There should be no errors.</li> | 
|  |  | 
|  | <li>Run "cd ..\..\cintltst\Release"</li> | 
|  |  | 
|  | <li>Run the C test suite, "cintltst". There should be no errors.</li> | 
|  |  | 
|  | <li>Follow the last step in the <a href="#HowToBuildWindows">in the | 
|  | previous section</a>.</li> | 
|  | </ol> | 
|  |  | 
|  | <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX">How To Build And | 
|  | Install On UNIX</a></h3> | 
|  |  | 
|  | <p>Building International Components for Unicode on UNIX requires:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>A C++ compiler installed on the target machine (for example: gcc, CC, | 
|  | xlC_r, aCC, cxx, etc...).</li> | 
|  |  | 
|  | <li>An ANSI C compiler installed on the target machine (for example: | 
|  | cc).</li> | 
|  |  | 
|  | <li>A recent version of GNU make (3.77+).</li> | 
|  |  | 
|  | <li>For a list of z/OS tools please view the <a href= | 
|  | "#HowToBuildZOS">z/OS build section</a> of this document for further | 
|  | details.</li> | 
|  | </ul> | 
|  |  | 
|  | <p>Here are the steps to build ICU:</p> | 
|  |  | 
|  | <ol> | 
|  | <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or | 
|  | icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d < | 
|  | icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li> | 
|  |  | 
|  | <li>Change directory to the "icu/source".</li> | 
|  |  | 
|  | <li>Run <tt>"chmod +x runConfigureICU configure install-sh"</tt> because | 
|  | these files may have the wrong permissions.</li> | 
|  |  | 
|  | <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt> | 
|  | script for your platform. (See <a href="#HowToConfigureICU">configuration | 
|  | note</a> below).</li> | 
|  |  | 
|  | <li>Type <tt>"gmake"</tt> (or "make" if GNU make is the default make on | 
|  | your platform) to compile the libraries and all the data files. The | 
|  | proper name of the GNU make command is printed at the end of the | 
|  | configuration run, as in "You must use gmake to compile ICU".</li> | 
|  |  | 
|  | <li>Optionally, type <tt>"gmake check"</tt> to run the test suite, which | 
|  | checks for ICU's functionality integrity (See <a href= | 
|  | "#HowToTestWithoutGmake">testing note</a> below).</li> | 
|  |  | 
|  | <li>Type <tt>"gmake install"</tt> to install ICU. If you used the | 
|  | --prefix= option on configure or runConfigureICU, ICU will be installed | 
|  | to the directory you specified. (See <a href= | 
|  | "#HowToInstallICU">installation note</a> below).</li> | 
|  | </ol> | 
|  |  | 
|  | <p><a name="HowToConfigureICU"><strong>Configuring ICU NOTE:</strong></a> | 
|  | Type <tt>"./runConfigureICU --help"</tt> for help on how to run it and a | 
|  | list of supported platforms. You may also want to type <tt>"./configure | 
|  | --help"</tt> to print the available configure options that you may want to | 
|  | give runConfigureICU. If you are not using the runConfigureICU script, or | 
|  | your platform is not supported by the script, you may need to set your CC, | 
|  | CXX, CFLAGS and CXXFLAGS environment variables, and type | 
|  | <tt>"./configure"</tt>. Some of the more frequently used options to | 
|  | configure are --disable-64bit-libs to create 32-bit libraries, and --srcdir | 
|  | to do out of source builds (build the libraries in the current location). | 
|  | HP-UX user's, please see this <a href="#ImportantNotesHPUX">note regarding | 
|  | multithreaded build issues</a> with newer compilers.</p> | 
|  |  | 
|  | <p><a name="HowToTestWithoutGmake"><strong>Running The Tests From The | 
|  | Command Line NOTE:</strong></a> You may have to set certain variables if | 
|  | you with to run test programs individually, that is apart from "gmake | 
|  | check". The environment variable <strong>ICU_DATA</strong> can be set to | 
|  | the full pathname of the data directory to indicate where the locale data | 
|  | files and conversion mapping tables are when you are not using the shared | 
|  | library (e.g. by using the .dat archive or the individual data files). The | 
|  | trailing "/" is required after the directory name (e.g. | 
|  | "$Root/source/data/out/" will work, but the value "$Root/source/data/out" | 
|  | is not acceptable). You do not need to set <strong>ICU_DATA</strong> if the | 
|  | complete shared data library is in your library path.</p> | 
|  |  | 
|  | <p><a name="HowToInstallICU"><strong>Installing ICU NOTE:</strong></a> Some | 
|  | platforms use package management tools to control the installation and | 
|  | uninstallation of files on the system, as well as the integrity of the | 
|  | system configuration. You may want to check if ICU can be packaged for your | 
|  | package management tools by looking into the "packaging" directory. (Please | 
|  | note that if you are using a snapshot of ICU from CVS, it is probable that | 
|  | the packaging scripts or related files are not up to date with the contents | 
|  | of ICU at this time, so use them with caution).</p> | 
|  |  | 
|  | <h3><a name="HowToBuildZOS" href="#HowToBuildZOS">How To Build And Install | 
|  | On z/OS (OS/390)</a></h3> | 
|  |  | 
|  | <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but | 
|  | IBM tests only the z/OS installation. These platforms commonly are called | 
|  | "MVS". You install ICU in a z/OS UNIX system services file system such as | 
|  | HFS or zFS. On this platform, it is important that you understand a few | 
|  | details:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>APAR PQ58392 may be needed by z/OS 1.2 or 1.3 in order to get some | 
|  | ICU number formatting functions to work properly. The APAR affects C and | 
|  | C++ code.</li> | 
|  |  | 
|  | <li>The gnu utilities gmake and gzip/gunzip are needed and can be | 
|  | obtained for z/OS from <a href= | 
|  | "http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#opensrc"> | 
|  | z/OS UNIX - Tools and Toys</a>. Documentation on these tools can be found | 
|  | at the <a href= | 
|  | "http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg245944.html"> | 
|  | Open Source Software for z/OS UNIX</a> Red Book.</li> | 
|  |  | 
|  | <li>Encoding considerations: The source code assumes that it is compiled | 
|  | with codepage ibm-1047 (to be exact, the UNIX System Services variant of | 
|  | it). The pax command converts all of the source code files from ASCII to | 
|  | codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and | 
|  | must not be converted, or must be converted back to their original state. | 
|  | You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> | 
|  | script to do this for you automatically. It will unpackage the tar file | 
|  | and convert all the necessary files for you automatically.</li> | 
|  |  | 
|  | <li> | 
|  | <p>z/OS supports both native S/390 hexadecimal floating point and (with | 
|  | OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile | 
|  | time option. Applications built with IEEE should use ICU DLLs that are | 
|  | built with IEEE (and vice versa). The environment variable IEEE390=0 | 
|  | will cause the z/OS version of ICU to be built without IEEE floating | 
|  | point support and use the native hexadecimal floating point. By default | 
|  | ICU is built with IEEE 754 support.</p> | 
|  |  | 
|  | <p><em>Important:</em> Currently (ICU 1.4.2), native floating point | 
|  | support is sufficient for codepage conversion, resource bundle and | 
|  | UnicodeString operations, but the Format APIs require IEEE binary | 
|  | floating point.</p> | 
|  |  | 
|  | <p>Examples for configuring ICU:<br> | 
|  | Debug build: <code>./runConfigureICU --enable-debug zOS</code><br> | 
|  | Release build: <code>./runConfigureICU zOS</code></p> | 
|  | </li> | 
|  |  | 
|  | <li> | 
|  | <p>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to | 
|  | bring performance improvement opportunities to call-intensive C and C++ | 
|  | applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so | 
|  | if you are considering using XPLINK in your application that uses ICU, | 
|  | you should consider building the XPLINK-enabled version of ICU. You | 
|  | need to set ICU's environment variable <code>OS390_XPLINK=1</code> | 
|  | prior to invoking the make process to produce binaries that are enabled | 
|  | for XPLINK.</p> | 
|  |  | 
|  | <p>Note: XPLINK, which is enabled for z/OS 1.2 and later, requires the | 
|  | PTF PQ69418 to build XPLINK-enabled binaries.</p> | 
|  | </li> | 
|  |  | 
|  | <li>Since the default make on z/OS is not gmake, the pkgdata tool | 
|  | requires that the "make" command is aliased to your installed version of | 
|  | gmake. You may also need to set $MAKE equal to the fully qualified path | 
|  | of GNU make. GNU make is available with the "z/OS UNIX - Tools and Toys" | 
|  | that was mentioned above. The required version is the same UNIX build | 
|  | instructions.</li> | 
|  |  | 
|  | <li>The makedep executable that is used with the z/OS ICU build process | 
|  | is not shipped with ICU. It is available at the <a href= | 
|  | "http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#opensrc"> | 
|  | z/OS UNIX - Tools and Toys</a> site. The PATH environment variable should | 
|  | be updated to contain the location of this executable prior to build. | 
|  | Alternatively, makedep may be moved into an existing PATH directory.</li> | 
|  |  | 
|  | <li> | 
|  | <p>When you build ICU on a system such as z/OS 1.2, the binaries that | 
|  | result can run on that level of the operating system and later, such as | 
|  | z/OS 1.3 and z/OS 1.4. It's possible that you may have a z/OS 1.4 | 
|  | system, but you may need to deliver binaries on z/OS 1.2 and above. | 
|  | z/OS gives you this ability by targeting the complier and linker to run | 
|  | at the older level, thereby producing the desired binaries.</p> | 
|  |  | 
|  | <p>To set the compiler and LE environment to OS/390 2.10, specify the | 
|  | following, "<code>./runConfigureICU OS390V2R10</code>"</p> | 
|  |  | 
|  | <p>To set the compiler and LE environment to z/OS 1.2 specify the | 
|  | following, "<code>./runConfigureICU zOSV1R2</code>"</p> | 
|  | </li> | 
|  |  | 
|  | <li>The rest of the instructions for building and testing ICU on z/OS | 
|  | with UNIX System Services are the same as the <a href= | 
|  | "#HowToBuildUNIX">How To Build And Install On UNIX</a> section.</li> | 
|  | </ul> | 
|  |  | 
|  | <h4>z/OS (Batch/PDS) support outside the UNIX system services | 
|  | environment</h4> | 
|  |  | 
|  | <p>By default, ICU builds its libraries into the UNIX file system (HFS). In | 
|  | addition, there is a z/OS specific environment variable (OS390BATCH) to | 
|  | build some libraries into the z/OS native file system. This is useful, for | 
|  | example, when your application is externalized via Job Control Language | 
|  | (JCL).</p> | 
|  |  | 
|  | <p>The OS390BATCH environment variable enables non-UNIX support including | 
|  | the batch environment. When OS390BATCH is set, the libicuuc<i>XX</i>.dll, | 
|  | libicudt<i>XX</i>e.dll, and libicudt<i>XX</i>e_stub.dll binaries are built | 
|  | into data sets (the native file system). Turning on OS390BATCH does not | 
|  | turn off the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) | 
|  | DLLs will always be created.</p> | 
|  |  | 
|  | <p>Two additional environment variables indicate the names of the z/OS data | 
|  | sets to use. The LOADMOD environment variable identifies the name of the | 
|  | data set that contains the dynamic link libraries (DLLs) and the LOADEXP | 
|  | environment variable identifies the name of the data set that contains the | 
|  | side decks, which are normally the files with the .x suffix in the UNIX | 
|  | file system.</p> | 
|  |  | 
|  | <p>A data set is roughly equivalent to a UNIX or Windows file. For most | 
|  | kinds of data sets the operating system maintains record boundaries. UNIX | 
|  | and Windows files are byte streams. Two kinds of data sets are PDS and | 
|  | PDSE. Each data set of these two types contains a directory. It is like a | 
|  | UNIX directory. Each "file" is called a "member". Each member name is | 
|  | limited to eight bytes, normally EBCDIC.</p> | 
|  |  | 
|  | <p>Here is an example of some environment variables that you can set prior | 
|  | to building ICU:</p> | 
|  | <pre> | 
|  | <samp>OS390BATCH=1 | 
|  | LOADMOD=<i>USER</i>.ICU.LOAD | 
|  | LOADEXP=<i>USER</i>.ICU.EXP</samp> | 
|  | </pre> | 
|  |  | 
|  | <p>The PDS member names for the DLL file names are as follows:</p> | 
|  | <pre> | 
|  | <samp>IXMI<i>XX</i>IN --> libicui18n<i>XX</i>.dll | 
|  | IXMI<i>XX</i>UC --> libicuuc<i>XX</i>.dll | 
|  | IXMI<i>XX</i>DA --> libicudt<i>XX</i>e.dll | 
|  | IXMI<i>XX</i>D1 --> libicudt<i>XX</i>e_stub.dll <i>(Only when OS390_STUBDATA=1)</i></samp> | 
|  | </pre> | 
|  |  | 
|  | <p>You should point the LOADMOD environment variable at a partitioned data | 
|  | set extended (PDSE) and point the LOADEXP environment variable at a | 
|  | partitioned data set (PDS). The PDSE can be allocated with the following | 
|  | attributes:</p> | 
|  | <pre> | 
|  | <samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD | 
|  | Management class. . : <i>**None**</i> | 
|  | Storage class . . . : <i>BASE</i> | 
|  | Volume serial . . . : <i>TSO007</i> | 
|  | Device type . . . . : <i>3390</i> | 
|  | Data class. . . . . : LOAD | 
|  | Organization  . . . : PO | 
|  | Record format . . . : U | 
|  | Record length . . . : 0 | 
|  | Block size  . . . . : 32760 | 
|  | 1st extent cylinders: 1 | 
|  | Secondary cylinders : 5 | 
|  | Data set name type  : LIBRARY</samp> | 
|  | </pre> | 
|  |  | 
|  | <p>The PDS can be allocated with the following attributes:</p> | 
|  | <pre> | 
|  | <samp>Data Set Name . . . : <i>USER</i>.ICU.EXP | 
|  | Management class. . : <i>**None**</i> | 
|  | Storage class . . . : <i>BASE</i> | 
|  | Volume serial . . . : <i>TSO007</i> | 
|  | Device type . . . . : <i>3390</i> | 
|  | Data class. . . . . : <i>**None**</i> | 
|  | Organization  . . . : PO | 
|  | Record format . . . : FB | 
|  | Record length . . . : 80 | 
|  | Block size  . . . . : <i>3200</i> | 
|  | 1st extent cylinders: 3 | 
|  | Secondary cylinders : 3 | 
|  | Data set name type  : PDS</samp> | 
|  | </pre> | 
|  |  | 
|  | <h3><a name="HowToBuildOS400" href="#HowToBuildOS400">How To Build And | 
|  | Install On OS/400 (iSeries)</a></h3> | 
|  |  | 
|  | <p>Before you start building ICU, ICU requires the following:</p> | 
|  |  | 
|  | <ul> | 
|  | <li>QSHELL interpreter installed (install base option 30, operating | 
|  | system)</li> | 
|  | <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--> | 
|  |  | 
|  | <li>ILE C/C++ Compiler for iSeries, LPP 5722-WDS</li> | 
|  |  | 
|  | <li>The latest GNU facilities (You can get the GNU facilities for OS/400 | 
|  | from <a href= | 
|  | "http://www.as400.ibm.com/developer/factory/porting/gnu_utilities.html">http://www.as400.ibm.com/developer/factory/porting/gnu_utilities.html</a>). | 
|  | Older versions may not work properly.</li> | 
|  | </ul> | 
|  |  | 
|  | <p>The following describes how to setup and build ICU. For background | 
|  | information, you should look at the <a href="#HowToBuildUNIX">UNIX build | 
|  | instructions</a>.</p> | 
|  |  | 
|  | <ol> | 
|  | <li> | 
|  | Create AS400 target library. This library will be the target for the | 
|  | resulting modules, programs and service programs. You will specify this | 
|  | library on the OUTPUTDIR environment variable in step 2.<br> | 
|  |  | 
|  | <pre> | 
|  | <samp>CRTLIB LIB(<i>libraryname</i>)</samp> | 
|  | </pre> | 
|  | <br> | 
|  | </li> | 
|  |  | 
|  | <li> | 
|  | Set up the following environment variables in your build process (use | 
|  | the <i>libraryname</i> from the previous step) | 
|  | <pre> | 
|  | <samp>ADDENVVAR ENVVAR(CC) VALUE('/usr/bin/icc') | 
|  | ADDENVVAR ENVVAR(CXX) VALUE('/usr/bin/icc') | 
|  | ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake') | 
|  | ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>')</samp> | 
|  | </pre> | 
|  | <i>libraryname</i> identifies target as400 library for *module, *pgm | 
|  | and *srvpgm objects.<br> | 
|  | <br> | 
|  | </li> | 
|  | <!--li>Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the icc compiler</li--> | 
|  |  | 
|  | <li>Run <tt>'CHGJOB CCSID(37)'</tt></li> | 
|  |  | 
|  | <li>Run <tt>'QSH'</tt></li> | 
|  |  | 
|  | <li>Run gunzip on the ICU source code compressed tar archive | 
|  | (icu-<i>X</i>.<i>Y</i>.tgz or icu-<i>X</i>.<i>Y</i>.tar.gz).</li> | 
|  |  | 
|  | <li>Run unpax-icu.sh on the tar file from the ICU download page.</li> | 
|  |  | 
|  | <li>Change your current directory to icu/source.</li> | 
|  |  | 
|  | <li>Run <tt>'export CFLAGS=-O4 CXXFLAGS=-O4'</tt> to optimize your build | 
|  | of ICU. If the build fails, rerun these build steps without this step | 
|  | before asking the icu4c-support mailing list for help.</li> | 
|  |  | 
|  | <li>Run <tt>'cp ../as_is/os400/configure .'</tt></li> | 
|  |  | 
|  | <li>Run <tt>'./configure --host=as400-os400'</tt></li> | 
|  |  | 
|  | <li> | 
|  | If you specified <tt>--with-data-packaging=archive</tt> to configure, | 
|  | you can skip this step. In a future release of ICU, we hope to | 
|  | eliminate this complicated step. Any suggestions to improve the ICU | 
|  | installation are greatly appreciated, and you can send those | 
|  | suggestions to the <a href= | 
|  | "http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu4c-support/"> | 
|  | icu4c-support</a> mailing list. | 
|  |  | 
|  | <ol type="a"> | 
|  | <li>Run <tt>'mv data/Makefile data/Makefile.hide'</tt></li> | 
|  |  | 
|  | <li>Run <tt>'gmake'</tt> to build some of the ICU libraries.</li> | 
|  |  | 
|  | <li> | 
|  | When the gmake command fails in icu/source/data, run the following | 
|  | commands to setup and build the data library: | 
|  | <pre> | 
|  | <samp>cd data | 
|  | mv Makefile.hide Makefile | 
|  | system CRTLIB "LIB(<i>datalibraryname</i>)" | 
|  | gmake OUTPUTDIR=<i>datalibraryname</i> | 
|  | system CRTSRVPGM "SRVPGM(<i>libraryname</i>/LIBICUDATA)" "MODULE(<i>datalibraryname</i>/*ALL)" | 
|  | "EXPORT(*ALL)" "TEXT('ICU 2.8 DATA')" "OPTION(*DUPPROC *DUPVAR)" | 
|  | ln -fs /qsys.lib/<i>libraryname</i>.lib/libicudata.srvpgm out/libicudata.so | 
|  | cd .. | 
|  | del common/libicuuc.so | 
|  | </samp> | 
|  | </pre> | 
|  | </li> | 
|  |  | 
|  | <li>Your data library should now be usable. Go to the next step, | 
|  | which is needed to rebind to the actual data library and finish the | 
|  | build.</li> | 
|  | </ol> | 
|  | </li> | 
|  |  | 
|  | <li>Run <tt>'gmake'</tt> to build ICU.</li> | 
|  |  | 
|  | <li>Run <tt>'gmake check'</tt> to build the tests.</li> | 
|  |  | 
|  | <li>The "utility/MultithreadTest" test in intltest may have failed during | 
|  | <tt>'gmake check'</tt>. In order to make this test pass, please use | 
|  | <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> after you built the tests | 
|  | with <tt>'gmake check'</tt> from the previous step. You can look at the | 
|  | <a href= | 
|  | "http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/concept4.htm"> | 
|  | iSeries Information Center</a> for more details.</li> | 
|  | </ol> | 
|  | <!-- end build environment --> | 
|  |  | 
|  | <h2><a name="HowToPackage" href="#HowToPackage">How To Package ICU</a></h2> | 
|  |  | 
|  | <p>There are many ways that a person can package ICU with their software | 
|  | products. Usually only the libraries need to be considered for | 
|  | packaging.</p> | 
|  |  | 
|  | <p>On UNIX, you should have used "<tt>gmake install</tt>" to make it easier | 
|  | to develop and package ICU. The bin, lib and include directories are needed | 
|  | to develop applications that use ICU. These directories will be created | 
|  | relative to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a | 
|  | href="#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on | 
|  | Windows, a similar directory structure is built.</p> | 
|  |  | 
|  | <p>When changes have been made to the standard ICU distribution, it is | 
|  | recommended that at least one of the following guidelines be followed for | 
|  | special packaging.</p> | 
|  |  | 
|  | <ol> | 
|  | <li>Add a suffix name to the library names. This can be done with the | 
|  | --with-library-suffix configure option.</li> | 
|  |  | 
|  | <li>The installation script should install the ICU libraries into the | 
|  | application's directory.</li> | 
|  | </ol> | 
|  |  | 
|  | <p>Following these guidelines prevents other applications that use a | 
|  | standard ICU distribution from conflicting any libraries that you need. On | 
|  | operating systems that do not have a standard C++ ABI (name mangling) for | 
|  | compilers, it is recommended to do this special packaging anyway. More | 
|  | details on customizing ICU are available in the <a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/index.html">User's Guide</a>. | 
|  | The <a href="#SourceCode">ICU Source Code Organization</a> section of this | 
|  | readme.html gives a more complete description of the libraries.</p> | 
|  |  | 
|  | <table border="1" cellpadding="3" summary= | 
|  | "ICU has several libraries for you to use."> | 
|  | <caption> | 
|  | Here is an example of libraries that are frequently packaged. | 
|  | </caption> | 
|  |  | 
|  | <tr> | 
|  | <th scope="col">Library Name</th> | 
|  |  | 
|  | <th scope="col">Windows Filename</th> | 
|  |  | 
|  | <th scope="col">Linux Filename</th> | 
|  |  | 
|  | <th scope="col">Comment</th> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Data Library</td> | 
|  |  | 
|  | <td>icudt<i>XY</i>l.dll</td> | 
|  |  | 
|  | <td>libicudata.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>Data required by the Common and I18n libraries. There are many ways | 
|  | to package and <a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/icudata.html">customize this | 
|  | data</a>, but by default this is all you need.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Common Library</td> | 
|  |  | 
|  | <td>icuuc<i>XY</i>.dll</td> | 
|  |  | 
|  | <td>libicuuc.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>Base library required by all other ICU libraries.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Internationalization (i18n) Library</td> | 
|  |  | 
|  | <td>icuin<i>XY</i>.dll</td> | 
|  |  | 
|  | <td>libicui18n.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>Contains many locale based i18n functions.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Layout Engine</td> | 
|  |  | 
|  | <td>icule<i>XY</i>.dll</td> | 
|  |  | 
|  | <td>libicule.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>Contains an optional engine for doing font layout.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>Layout Extensions Engine</td> | 
|  |  | 
|  | <td>iculx<i>XY</i>.dll</td> | 
|  |  | 
|  | <td>libiculx.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>Contains an optional engine for doing font layout that uses parts | 
|  | of ICU.</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>ICU I/O (Unicode stdio) Library</td> | 
|  |  | 
|  | <td>icuio<i>XY</i>.dll</td> | 
|  |  | 
|  | <td>libustdio.so.<i>XY</i>.<i>Z</i></td> | 
|  |  | 
|  | <td>An unsupported optional library that provides a stdio like API with | 
|  | Unicode support.</td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | <p>Normally only the above ICU libraries need to be considered for | 
|  | packaging. The versionless symbolic links to these libraries are only | 
|  | needed for easier development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of | 
|  | the name are the version numbers of ICU. For example, ICU 2.0.2 would have | 
|  | the name libicuuc.so.20.2 for the common library. The exact format of the | 
|  | library names can vary between platforms due to how each platform can | 
|  | handles library versioning.</p> | 
|  |  | 
|  | <h2><a name="ImportantNotes" href="#ImportantNotes">Important Notes About | 
|  | Using ICU</a></h2> | 
|  |  | 
|  | <h3><a name="ImportantNotesCPlusPlus" href="#ImportantNotesCPlusPlus">Using | 
|  | ICU in a Multithreaded Environment</a></h3> | 
|  |  | 
|  | <p>Upon the first usage of most ICU APIs, the global mutex will get | 
|  | initialized properly, but you can use the <code>u_init()</code> function | 
|  | from uclean.h to ensure that it is initialized properly. Without calling | 
|  | this function from a single thread, the data caches inside ICU may get | 
|  | initialized more than once from multiple threads, which may cause memory | 
|  | leaks and other problems. There is no harm in calling <code>u_init()</code> | 
|  | in a single threaded application.</p> | 
|  |  | 
|  | <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX">Using ICU in a | 
|  | Multithreaded Environment on HP-UX</a></h4> | 
|  |  | 
|  | <p>If you are building ICU with a newer aCC compiler and you are planning | 
|  | on using any RogueWave libraries, you will need to set a special flag | 
|  | before building ICU. The <a href= | 
|  | "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA"> | 
|  | -AA</a> flag is needed in order to make ICU thread safe with RogueWave.</p> | 
|  | <pre> | 
|  | <samp>CXXFLAGS="-AA" ./runConfigureICU HP-UX11ACC</samp> | 
|  | </pre> | 
|  |  | 
|  | <h3><a name="CharStrings" href="#CharStrings">char * strings in | 
|  | ICU</a></h3> | 
|  |  | 
|  | <p>The C/C++ languages do not provide a portable way to specify Unicode | 
|  | code point or string literals other than with arrays of numeric constants. | 
|  | For convenience, ICU4C tends to use char * strings in places where only | 
|  | "invariant characters" (a portable subset of the 7-bit ASCII repertoire) | 
|  | are used. This allows locale IDs, charset names, resource bundle item keys | 
|  | and similar items to be easily specified as string literals in the source | 
|  | code. The same types of strings are also stored as "invariant character" | 
|  | char * strings in the ICU data files.</p> | 
|  |  | 
|  | <p>ICU has hard coded mapping tables in <code>source/common/putil.c</code> | 
|  | to convert invariant characters to and from Unicode without using a full | 
|  | ICU converter. These tables must match the encoding of string literals in | 
|  | the ICU code as well as in the ICU data files.</p> | 
|  |  | 
|  | <p><strong>Important:</strong> ICU assumes that at least the invariant | 
|  | characters always have the same codes as is common on platforms with the | 
|  | same charset family (ASCII vs. EBCDIC). <em>ICU has not been tested on | 
|  | platforms where this is not the case.</em></p> | 
|  |  | 
|  | <p>Some usage of char * strings in ICU assumes the system charset instead | 
|  | of invariant characters. Such strings are only handled with the default | 
|  | converter (See the following section). The system charset is usually a | 
|  | superset of the invariant characters.</p> | 
|  |  | 
|  | <p>The following are the ASCII and EBCDIC byte values for all of the | 
|  | invariant characters (see also unicode/utypes.h):</p> | 
|  |  | 
|  | <table border="1" summary= | 
|  | "There are a few invariant characters that can be used for char * strings"> | 
|  | <tr> | 
|  | <th>Character(s)</th> | 
|  |  | 
|  | <th>ASCII</th> | 
|  |  | 
|  | <th>EBCDIC</th> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>a..i</td> | 
|  |  | 
|  | <td>61..69</td> | 
|  |  | 
|  | <td>81..89</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>j..r</td> | 
|  |  | 
|  | <td>6A..72</td> | 
|  |  | 
|  | <td>91..99</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>s..z</td> | 
|  |  | 
|  | <td>73..7A</td> | 
|  |  | 
|  | <td>A2..A9</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>A..I</td> | 
|  |  | 
|  | <td>41..49</td> | 
|  |  | 
|  | <td>C1..C9</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>J..R</td> | 
|  |  | 
|  | <td>4A..52</td> | 
|  |  | 
|  | <td>D1..D9</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>S..Z</td> | 
|  |  | 
|  | <td>53..5A</td> | 
|  |  | 
|  | <td>E2..E9</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>0..9</td> | 
|  |  | 
|  | <td>30..39</td> | 
|  |  | 
|  | <td>F0..F9</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>(space)</td> | 
|  |  | 
|  | <td>20</td> | 
|  |  | 
|  | <td>40</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>"</td> | 
|  |  | 
|  | <td>22</td> | 
|  |  | 
|  | <td>7F</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>%</td> | 
|  |  | 
|  | <td>25</td> | 
|  |  | 
|  | <td>6C</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>&</td> | 
|  |  | 
|  | <td>26</td> | 
|  |  | 
|  | <td>50</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>'</td> | 
|  |  | 
|  | <td>27</td> | 
|  |  | 
|  | <td>7D</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>(</td> | 
|  |  | 
|  | <td>28</td> | 
|  |  | 
|  | <td>4D</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>)</td> | 
|  |  | 
|  | <td>29</td> | 
|  |  | 
|  | <td>5D</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>*</td> | 
|  |  | 
|  | <td>2A</td> | 
|  |  | 
|  | <td>5C</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>+</td> | 
|  |  | 
|  | <td>2B</td> | 
|  |  | 
|  | <td>4E</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>,</td> | 
|  |  | 
|  | <td>2C</td> | 
|  |  | 
|  | <td>6B</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>-</td> | 
|  |  | 
|  | <td>2D</td> | 
|  |  | 
|  | <td>60</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>.</td> | 
|  |  | 
|  | <td>2E</td> | 
|  |  | 
|  | <td>4B</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>/</td> | 
|  |  | 
|  | <td>2F</td> | 
|  |  | 
|  | <td>61</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>:</td> | 
|  |  | 
|  | <td>3A</td> | 
|  |  | 
|  | <td>7A</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>;</td> | 
|  |  | 
|  | <td>3B</td> | 
|  |  | 
|  | <td>5E</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td><</td> | 
|  |  | 
|  | <td>3C</td> | 
|  |  | 
|  | <td>4C</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>=</td> | 
|  |  | 
|  | <td>3D</td> | 
|  |  | 
|  | <td>7E</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>></td> | 
|  |  | 
|  | <td>3E</td> | 
|  |  | 
|  | <td>6E</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>?</td> | 
|  |  | 
|  | <td>3F</td> | 
|  |  | 
|  | <td>6F</td> | 
|  | </tr> | 
|  |  | 
|  | <tr> | 
|  | <td>_</td> | 
|  |  | 
|  | <td>5F</td> | 
|  |  | 
|  | <td>6D</td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | <h3><a name="ImportantNotesDefaultCP" href="#ImportantNotesDefaultCP">Using | 
|  | the default codepage</a></h3> | 
|  |  | 
|  | <p>ICU has code to determine the default codepage of the system or process. | 
|  | This default codepage can be used to convert <code>char *</code> strings to | 
|  | and from Unicode.</p> | 
|  |  | 
|  | <p>Depending on system design, setup and APIs, it may not always be | 
|  | possible to find a default codepage that fully works as expected. For | 
|  | example,</p> | 
|  |  | 
|  | <ul> | 
|  | <li>On Windows there are three encodings in use at the same time. Unicode | 
|  | (UTF-16) is always used inside of Windows, while for <code>char *</code> | 
|  | encodings there are two classes, called "ANSI" and "OEM" codepages. ICU | 
|  | will use the ANSI codepage. Note that the OEM codepage is used by default | 
|  | for console window output.</li> | 
|  |  | 
|  | <li>On some UNIX-type systems, non-standard names are used for encodings, | 
|  | or non-standard encodings are used altogether. Although ICU supports over | 
|  | 200 encodings in its standard build and many more aliases for them, it | 
|  | will not be able to recognize such non-standard names.</li> | 
|  |  | 
|  | <li>Some systems do not have a notion of a system or process codepage, | 
|  | and may not have APIs for that.</li> | 
|  | </ul> | 
|  |  | 
|  | <p>If you have means of detecting a default codepage name that are more | 
|  | appropriate for your application, then you should set that name with | 
|  | <code>ucnv_setDefaultName()</code> as the first ICU function call. This | 
|  | makes sure that the internally cached default converter will be | 
|  | instantiated from your preferred name.</p> | 
|  |  | 
|  | <p>Starting in ICU 2.0, when a converter for the default codepage cannot be | 
|  | opened, a fallback default codepage name and converter will be used. On | 
|  | most platforms, this will be US-ASCII. For z/OS (OS/390), ibm-1047-s390 is | 
|  | the default fallback codepage. For AS/400 (iSeries), ibm-37 is the default | 
|  | fallback codepage. This default fallback codepage is used when the | 
|  | operating system is using a non-standard name for a default codepage, or | 
|  | the converter was not packaged with ICU. The feature allows ICU to run in | 
|  | unusual computing environments without completely failing.</p> | 
|  |  | 
|  | <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows">Windows | 
|  | Platform</a></h3> | 
|  |  | 
|  | <p>If you are building on the Win32 platform, it is important that you | 
|  | understand a few of the following build details.</p> | 
|  |  | 
|  | <h4>DLL directories and the PATH setting</h4> | 
|  |  | 
|  | <p>As delivered, the International Components for Unicode build as several | 
|  | DLLs, which are placed in the "<i><ICU></i>\bin" directory. You must | 
|  | add this directory to the PATH environment variable in your system, or any | 
|  | executables you build will not be able to access International Components | 
|  | for Unicode libraries. Alternatively, you can copy the DLL files into a | 
|  | directory already in your PATH, but we do not recommend this. You can wind | 
|  | up with multiple copies of the DLL and wind up using the wrong one.</p> | 
|  |  | 
|  | <h4><a name="ImportantNotesWindowsPath">Changing your PATH</a></h4> | 
|  |  | 
|  | <ul> | 
|  | <li><strong>Windows 2000</strong>: Use the System Icon in the Control | 
|  | Panel. Pick the "Advanced" tab. Select the "Environment Variables..." | 
|  | button. Select the variable PATH in the lower box, and select the lower | 
|  | "Edit..." button. In the "Variable Value" box, append the string | 
|  | ";<i><ICU></i>\bin" to the end of the path string. If there is | 
|  | nothing there, just type in "<i><ICU></i>\bin". Click the Set | 
|  | button, then the OK button.</li> | 
|  |  | 
|  | <li><strong>Windows NT</strong>: Use the System Icon in the Control | 
|  | Panel. Pick the "Environment" tab, and select the variable PATH in the | 
|  | lower box. In the "value" box, append the string | 
|  | ";<i><ICU></i>\bin" at the end of the path string. If there is | 
|  | nothing there, just type in "<i><ICU></i>\bin". Click the Set | 
|  | button, then the OK button.</li> | 
|  |  | 
|  | <li><strong>Windows 95/98/ME</strong>: Edit the autoexec.bat, and add the | 
|  | following line to the end of file, "SET | 
|  | PATH=%PATH%;<i><ICU></i>\bin"</li> | 
|  | </ul> | 
|  |  | 
|  | <p>Note: When packaging a Windows application for distribution and | 
|  | installation on user systems, copies of the ICU DLLs should be included | 
|  | with the application, and installed for exclusive use by the application. | 
|  | This is the only way to insure that your application is running with the | 
|  | same version of ICU, built with exactly the same options, that you | 
|  | developed and tested with. Refer to Microsoft's guidelines on the usage of | 
|  | DLLs, or search for the phrase "DLL hell" on <a href= | 
|  | "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p> | 
|  |  | 
|  | <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX">UNIX Type | 
|  | Platform</a></h3> | 
|  |  | 
|  | <p>If you are building on a UNIX platform, and if you are installing ICU in | 
|  | a non-standard location, you may need to add the location of your ICU | 
|  | libraries to your <strong>LD_LIBRARY_PATH</strong> or | 
|  | <strong>LIBPATH</strong> environment variable (or the equivalent runtime | 
|  | library path environment variable for your system). The ICU libraries may | 
|  | not link or load properly without doing this.</p> | 
|  |  | 
|  | <p>Note that if you do not want to have to set this variable, you may | 
|  | instead use the --enable-rpath option at configuration time. This option | 
|  | will instruct the linker to always look for the libraries where they are | 
|  | installed. You will need to use the appropriate linker options when linking | 
|  | your own applications and libraries against ICU, too. Please refer to your | 
|  | system's linker manual for information about runtime paths. The use of | 
|  | rpath also means that when building a new version of ICU you should not | 
|  | have an older version installed in the same place as the new version's | 
|  | installation directory, as the older libraries will used during the build, | 
|  | instead of the new ones, likely leading to an incorrectly build ICU. (This | 
|  | is the proper behavior of rpath.)</p> | 
|  |  | 
|  | <h2><a name="PlatformDependencies" href="#PlatformDependencies">Platform | 
|  | Dependencies</a></h2> | 
|  |  | 
|  | <h3><a name="PlatformDependenciesNew" href= | 
|  | "#PlatformDependenciesNew">Porting To A New Platform</a></h3> | 
|  |  | 
|  | <p>If you are using ICU's Makefiles to build ICU on a new platform, there | 
|  | are a few places where you will need to add or modify some files. If you | 
|  | need more help, you can always ask the <a href= | 
|  | "http://oss.software.ibm.com/icu/archives/">icu4c-support mailing list</a>. | 
|  | Once you have finished porting ICU to a new platform, it is recommended | 
|  | that you contribute your changes back to ICU via the icu4c-support mailing | 
|  | list. This will make it easier for everyone to benefit from your work.</p> | 
|  |  | 
|  | <h4>Data For a New Platform</h4> | 
|  |  | 
|  | <p>It may not be necessary for your use of ICU to make a full ICU build | 
|  | work. Most of the makefiles and build targets are for tools that are used | 
|  | for building ICU's data — and an application's data if the | 
|  | application uses ICU resource bundles and similar for its data.</p> | 
|  |  | 
|  | <p>Data files can be built on a different platform if both platforms share | 
|  | the same endianness and the same charset family, and if memory-mappable, | 
|  | binary data files are used instead of DLLs/shared libraries. For details | 
|  | see the User Guide <a href= | 
|  | "http://oss.software.ibm.com/icu/userguide/icudata.html">ICU Data</a> | 
|  | chapter.</p> | 
|  |  | 
|  | <p>ICU 2.8 eliminates the first condition: It adds the icuswap tool which | 
|  | can be run on any platform to turn binary ICU data files from any one of | 
|  | the three formats into any one of the other. This allows to use ICU data | 
|  | built anywhere to be used for any target platform.</p> | 
|  |  | 
|  | <h4>Adapting Makefiles For a New Platform</h4> | 
|  |  | 
|  | <p>Try to follow the build steps from the <a href= | 
|  | "#HowToBuildUNIX">UNIX</a> build instructions. If the configure script | 
|  | fails, then you will need to modify some files. Here are the usual steps | 
|  | for porting to a new platform:<br> | 
|  | </p> | 
|  |  | 
|  | <ol> | 
|  | <li>Create an mh file in icu/source/config/. You can use mh-linux or a | 
|  | similar mh file as your base configuration.</li> | 
|  |  | 
|  | <li>Modify icu/source/aclocal.m4 to recognize your platform's mh | 
|  | file.</li> | 
|  |  | 
|  | <li>Modify icu/source/configure.in to properly set your <b>platform</b> C | 
|  | Macro define.</li> | 
|  |  | 
|  | <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in | 
|  | icu/source/ without any options. The autoconf tool is standard on most | 
|  | Linux systems.</li> | 
|  |  | 
|  | <li>If you have any optimization options that you want to normally use, | 
|  | you can modify icu/source/runConfigureICU to specify those options for | 
|  | your platform.</li> | 
|  |  | 
|  | <li>Build and test ICU on your platform. It is very important that you | 
|  | run the tests. If you don't run the tests, there is no guarentee that you | 
|  | have properly ported ICU.</li> | 
|  | </ol> | 
|  |  | 
|  | <h3><a name="PlatformDependenciesImpl" href= | 
|  | "#PlatformDependenciesImpl">Platform Dependent Implementations</a></h3> | 
|  |  | 
|  | <p>The platform dependencies have been mostly isolated into the following | 
|  | files in the common library. This information can be useful if you are | 
|  | porting ICU to a new platform.</p> | 
|  |  | 
|  | <ul> | 
|  | <li> | 
|  | <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br> | 
|  | <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, pmacos.h, | 
|  | ..): Platform-dependent typedefs and defines:<br> | 
|  | <br> | 
|  |  | 
|  |  | 
|  | <ul> | 
|  | <li>XP_CPLUSPLUS for C++ only.</li> | 
|  |  | 
|  | <li>TRUE and FALSE, UBool, int8_t, int16_t etc.</li> | 
|  |  | 
|  | <li>U_EXPORT and U_IMPORT for specifying dynamic library import and | 
|  | export</li> | 
|  |  | 
|  | <li>int64_t and uint64_t. If the platform does not support 64 bit | 
|  | values, the macro <tt>U_INT64_T_UNAVAILABLE</tt> must be defined. For | 
|  | example, this will disable Rule-based number formatting.</li> | 
|  | </ul> | 
|  | <br> | 
|  | </li> | 
|  |  | 
|  | <li> | 
|  | <strong>unicode/putil.h, putil.c</strong>: platform-dependent | 
|  | implementations of various functions that are platform dependent:<br> | 
|  | <br> | 
|  |  | 
|  |  | 
|  | <ul> | 
|  | <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for | 
|  | handling special floating point values.</li> | 
|  |  | 
|  | <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting | 
|  | platform specific time and time zone information.</li> | 
|  |  | 
|  | <li>u_getDataDirectory for getting the default data directory.</li> | 
|  |  | 
|  | <li>uprv_getDefaultLocaleID for getting the default locale | 
|  | setting.</li> | 
|  |  | 
|  | <li>uprv_getDefaultCodepage for getting the default codepage | 
|  | encoding.</li> | 
|  | </ul> | 
|  | <br> | 
|  | </li> | 
|  |  | 
|  | <li> | 
|  | <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in | 
|  | multithreaded applications. If you wish to use International Components | 
|  | for Unicode in a multithreaded application, you must provide a | 
|  | synchronization primitive that the classes can use to protect their | 
|  | global data against simultaneous modifications. See Users' guide for | 
|  | more information.<br> | 
|  | <br> | 
|  |  | 
|  |  | 
|  | <ul> | 
|  | <li>We supply sample implementations for WinNT, Win95, Win98, | 
|  | Sun/Solaris, RedHat/Linux, HP-UX and for AIX on an RS/6000.</li> | 
|  | </ul> | 
|  | <br> | 
|  | </li> | 
|  |  | 
|  | <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or | 
|  | otherwise reading or loading files into memory. All access by ICU to data | 
|  | from files makes use of these functions.<br> | 
|  | <br> | 
|  | </li> | 
|  |  | 
|  | <li>Using platform specific #ifdef macros are highly discouraged outside | 
|  | of the scope of these files. When the source code gets updated in the | 
|  | future, these #ifdef's can cause testing problems for your platform.</li> | 
|  | </ul> | 
|  |  | 
|  | <h3><a name="PlatformDependenciesBuildOrder" href= | 
|  | "#PlatformDependenciesBuildOrder">Build Order Without Using ICU's | 
|  | Makefiles</a></h3> | 
|  |  | 
|  | <p>It is possible to build each library individually without our Makefiles. | 
|  | They must be built in the following order:<br> | 
|  | </p> | 
|  |  | 
|  | <ol> | 
|  | <li>stubdata</li> | 
|  |  | 
|  | <li>common</li> | 
|  |  | 
|  | <li>i18n</li> | 
|  |  | 
|  | <li>toolutil</li> | 
|  |  | 
|  | <li>makeconv</li> | 
|  |  | 
|  | <li>gencnval</li> | 
|  |  | 
|  | <li>genprops</li> | 
|  |  | 
|  | <li>gennames</li> | 
|  |  | 
|  | <li>genpname</li> | 
|  |  | 
|  | <li>gennorm</li> | 
|  |  | 
|  | <li>gensprep</li> | 
|  |  | 
|  | <li>genbrk</li> | 
|  |  | 
|  | <li>genuca</li> | 
|  |  | 
|  | <li>genrb</li> | 
|  |  | 
|  | <li>genccode</li> | 
|  |  | 
|  | <li>gencmn</li> | 
|  |  | 
|  | <li>pkgdata</li> | 
|  |  | 
|  | <li>makedata (a project on Windows, or source/data/Makefile on UNIX)</li> | 
|  |  | 
|  | <li>layout (optional)</li> | 
|  |  | 
|  | <li>layoutex (optional)</li> | 
|  |  | 
|  | <li>ctestfw, intltest and cintltst, if you want to run the test | 
|  | suite.</li> | 
|  |  | 
|  | <li>uconv, icuswap and ustdio can also be optionally built.</li> | 
|  | </ol> | 
|  | <hr> | 
|  |  | 
|  | <p>Copyright © 1997-2004 International Business Machines Corporation | 
|  | and others. All Rights Reserved.<br> | 
|  | IBM Globalization Center of Competency - San José<br> | 
|  | 5600 Cottle Road<br> | 
|  | San José, CA 95193<br> | 
|  | USA</p> | 
|  | </body> | 
|  | </html> | 
|  |  |