| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| |
| <html lang="en-US"> |
| <head> |
| <meta name="generator" content= |
| "HTML Tidy for Windows (vers 1st March 2004), see www.w3.org"> |
| |
| <title>ReadMe for ICU</title> |
| <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=us-ascii"> |
| <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> 3.0 |
| ReadMe</h1> |
| |
| <p>Version: 2004-Jun-17<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="#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">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="#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" 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 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" 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 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" id="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/3.0/index.html">ICU 3.0 download |
| page</a>.</p> |
| |
| <h3><a name="News_Respath" id="News_Respath">Resource Path Issue</a></h3> |
| |
| <p>In 3.0, do not set the ICU data path to a short name consisting of only |
| a directory or package name. For example, if your resource package is named |
| 'mydata', and resides in a directory named 'mydata', the following will |
| fail:</p> |
| <pre> |
| <samp>u_setDataDirectory("mydata"); |
| ures_open("mydata", NULL, &status); |
| </samp> |
| </pre> |
| |
| <p>When the data directory and the path (first argument to ures_open) are |
| exactly the same string, ICU will load the ICU data rather than your |
| 'mydata' package. This is a known bug and is <a href= |
| "http://www.jtcsv.com/cgibin/icu-bugs?findid=3841">#3841</a>. The solution |
| is to make sure these strings are different. For example, setting a path of |
| "mydata:/otherdir" would work, because there are two path segments and the |
| path is not identical to "mydata". Another solution would be to use a full |
| or relative path such as "C:\\path\\to\\mydata", "./mydata", "./mydata/" or |
| "mydata/".</p> |
| |
| <h3><a name="News_Locale" id="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> |
| |
| <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" id="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" id="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> |
| |
| <h3><a name="News_TimeZone_IDs" id="News_TimeZone_IDs">TimeZone |
| Identifiers</a></h3> |
| |
| <p>ICU supports over 500 TimeZone identifiers. Most of these are current |
| Olson identifiers (see TimeZone documentation). However, some of these are |
| obsolete names for current identifiers. There are two sources of obsolete |
| identifiers: the Olson database itself, and JDK legacy identifiers. (For |
| example, the Olson database defines "US/Pacific" as an old identifier for |
| "America/Los_Angeles". JDK 1.5 defines "PST" as a legacy identifier |
| equivalent to "America/Los_Angeles".) Currently, the ICU TimeZone API does |
| not distinguish between current identifiers and obsolete identifiers. This |
| section lists obsolete identifiers and their modern equivalents.</p> |
| |
| <p>As of ICU 3.0 there are 136 obsolete Olson names (modern names given in |
| parentheses): <small>America/Atka (America/Adak), America/Ensenada |
| (America/Tijuana), America/Fort_Wayne (America/Indianapolis), |
| America/Indiana/Indianapolis (America/Indianapolis), |
| America/Kentucky/Louisville (America/Louisville), America/Knox_IN |
| (America/Indiana/Knox), America/Porto_Acre (America/Rio_Branco), |
| America/Rosario (America/Cordoba), America/Shiprock (America/Denver), |
| America/Virgin (America/St_Thomas), Antarctica/South_Pole |
| (Antarctica/McMurdo), Arctic/Longyearbyen (Europe/Oslo), Asia/Ashkhabad |
| (Asia/Ashgabat), Asia/Chungking (Asia/Chongqing), Asia/Dacca (Asia/Dhaka), |
| Asia/Istanbul (Europe/Istanbul), Asia/Macao (Asia/Macau), Asia/Tel_Aviv |
| (Asia/Jerusalem), Asia/Thimbu (Asia/Thimphu), Asia/Ujung_Pandang |
| (Asia/Makassar), Asia/Ulan_Bator (Asia/Ulaanbaatar), Atlantic/Jan_Mayen |
| (Europe/Oslo), Australia/ACT (Australia/Sydney), Australia/Canberra |
| (Australia/Sydney), Australia/LHI (Australia/Lord_Howe), Australia/NSW |
| (Australia/Sydney), Australia/North (Australia/Darwin), |
| Australia/Queensland (Australia/Brisbane), Australia/South |
| (Australia/Adelaide), Australia/Tasmania (Australia/Hobart), |
| Australia/Victoria (Australia/Melbourne), Australia/West (Australia/Perth), |
| Australia/Yancowinna (Australia/Broken_Hill), Brazil/Acre |
| (America/Porto_Acre), Brazil/DeNoronha (America/Noronha), Brazil/East |
| (America/Sao_Paulo), Brazil/West (America/Manaus), CST6CDT |
| (America/Chicago), Canada/Atlantic (America/Halifax), Canada/Central |
| (America/Winnipeg), Canada/East-Saskatchewan (America/Regina), |
| Canada/Eastern (America/Toronto), Canada/Mountain (America/Edmonton), |
| Canada/Newfoundland (America/St_Johns), Canada/Pacific (America/Vancouver), |
| Canada/Saskatchewan (America/Regina), Canada/Yukon (America/Whitehorse), |
| Chile/Continental (America/Santiago), Chile/EasterIsland (Pacific/Easter), |
| Cuba (America/Havana), EST (America/Indianapolis), EST5EDT |
| (America/New_York), Egypt (Africa/Cairo), Eire (Europe/Dublin), Etc/GMT+0 |
| (Etc/GMT), Etc/GMT-0 (Etc/GMT), Etc/GMT0 (Etc/GMT), Etc/Greenwich |
| (Etc/GMT), Etc/Universal (Etc/UTC), Etc/Zulu (Etc/UTC), Europe/Bratislava |
| (Europe/Prague), Europe/Ljubljana (Europe/Belgrade), Europe/Nicosia |
| (Asia/Nicosia), Europe/San_Marino (Europe/Rome), Europe/Sarajevo |
| (Europe/Belgrade), Europe/Skopje (Europe/Belgrade), Europe/Tiraspol |
| (Europe/Chisinau), Europe/Vatican (Europe/Rome), Europe/Zagreb |
| (Europe/Belgrade), GB (Europe/London), GB-Eire (Europe/London), GMT |
| (Etc/GMT), GMT+0 (Etc/GMT+0), GMT-0 (Etc/GMT-0), GMT0 (Etc/GMT0), Greenwich |
| (Etc/Greenwich), HST (Pacific/Honolulu), Hongkong (Asia/Hong_Kong), Iceland |
| (Atlantic/Reykjavik), Iran (Asia/Tehran), Israel (Asia/Jerusalem), Jamaica |
| (America/Jamaica), Japan (Asia/Tokyo), Kwajalein (Pacific/Kwajalein), Libya |
| (Africa/Tripoli), MST (America/Phoenix), MST7MDT (America/Denver), |
| Mexico/BajaNorte (America/Tijuana), Mexico/BajaSur (America/Mazatlan), |
| Mexico/General (America/Mexico_City), Mideast/Riyadh87 (Asia/Riyadh87), |
| Mideast/Riyadh88 (Asia/Riyadh88), Mideast/Riyadh89 (Asia/Riyadh89), NZ |
| (Pacific/Auckland), NZ-CHAT (Pacific/Chatham), Navajo (America/Denver), PRC |
| (Asia/Shanghai), PST8PDT (America/Los_Angeles), Pacific/Samoa |
| (Pacific/Pago_Pago), Poland (Europe/Warsaw), Portugal (Europe/Lisbon), ROC |
| (Asia/Taipei), ROK (Asia/Seoul), Singapore (Asia/Singapore), SystemV/AST4 |
| (America/Puerto_Rico), SystemV/AST4ADT (America/Halifax), SystemV/CST6 |
| (America/Regina), SystemV/CST6CDT (America/Chicago), SystemV/EST5 |
| (America/Indianapolis), SystemV/EST5EDT (America/New_York), SystemV/HST10 |
| (Pacific/Honolulu), SystemV/MST7 (America/Phoenix), SystemV/MST7MDT |
| (America/Denver), SystemV/PST8 (Pacific/Pitcairn), SystemV/PST8PDT |
| (America/Los_Angeles), SystemV/YST9 (Pacific/Gambier), SystemV/YST9YDT |
| (America/Anchorage), Turkey (Europe/Istanbul), UCT (Etc/UCT), US/Alaska |
| (America/Anchorage), US/Aleutian (America/Adak), US/Arizona |
| (America/Phoenix), US/Central (America/Chicago), US/East-Indiana |
| (America/Indianapolis), US/Eastern (America/New_York), US/Hawaii |
| (Pacific/Honolulu), US/Indiana-Starke (America/Indiana/Knox), US/Michigan |
| (America/Detroit), US/Mountain (America/Denver), US/Pacific |
| (America/Los_Angeles), US/Pacific-New (America/Los_Angeles), US/Samoa |
| (Pacific/Pago_Pago), UTC (Etc/UTC), Universal (Etc/Universal), W-SU |
| (Europe/Moscow), Zulu (Etc/Zulu).</small></p> |
| |
| <p>As of ICU 3.0 there are 25 legacy JDK identifiers (modern names given in |
| parentheses): <small>ACT (Australia/Darwin), AET (Australia/Sydney), AGT |
| (America/Buenos_Aires), ART (Africa/Cairo), AST (America/Anchorage), BET |
| (America/Sao_Paulo), BST (Asia/Dhaka), CAT (Africa/Harare), CNT |
| (America/St_Johns), CST (America/Chicago), CTT (Asia/Shanghai), EAT |
| (Africa/Addis_Ababa), ECT (Europe/Paris), IET (America/Indianapolis), IST |
| (Asia/Calcutta), JST (Asia/Tokyo), MIT (Pacific/Apia), NET (Asia/Yerevan), |
| NST (Pacific/Auckland), PLT (Asia/Karachi), PNT (America/Phoenix), PRT |
| (America/Puerto_Rico), PST (America/Los_Angeles), SST |
| (Pacific/Guadalcanal), VST (Asia/Saigon).</small></p> |
| <hr> |
| |
| <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://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" id="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" id="HowToBuild">How To Build |
| And Install ICU</a></h2> |
| |
| <h3><a name="HowToBuildSupported" href="#HowToBuildSupported" id= |
| "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 with Cygwin</td> |
| |
| <td>Microsoft Visual C++ 6.0</td> |
| |
| <td>Reference platform</td> |
| </tr> |
| |
| <tr> |
| <td>Windows XP</td> |
| |
| <td>Microsoft Visual C++ .NET 2003 (7.1)</td> |
| |
| <td>Reference platform</td> |
| </tr> |
| |
| <tr> |
| <td>Red Hat Linux 9</td> |
| |
| <td>gcc 3.2.2</td> |
| |
| <td>Reference platform</td> |
| </tr> |
| |
| <tr> |
| <td>AIX 5.2</td> |
| |
| <td>Visual Age C++ 6.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.11</td> |
| |
| <td>aCC A.03.50<br> |
| cc B.11.11.08</td> |
| |
| <td>Reference platform</td> |
| </tr> |
| |
| <tr> |
| <td>Windows XP with Cygwin</td> |
| |
| <td>Microsoft Visual C++ .NET 2002 (7.0)</td> |
| |
| <td>Regularly tested</td> |
| </tr> |
| |
| <tr> |
| <td>Windows 98/2000/XP</td> |
| |
| <td>Microsoft Visual C++ 6.0</td> |
| |
| <td>Regularly tested</td> |
| </tr> |
| |
| <tr> |
| <td>Red Hat Linux 7.2</td> |
| |
| <td>gcc 2.96</td> |
| |
| <td>Regularly tested</td> |
| </tr> |
| |
| <tr> |
| <td>Red Hat Linux 8.0</td> |
| |
| <td>gcc 3.2</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>HP-UX 11.01</td> |
| |
| <td>aCC A.03.13<br> |
| cc A.11.01.00</td> |
| |
| <td>Regularly tested</td> |
| </tr> |
| |
| <tr> |
| <td>AIX 5.1.0 L</td> |
| |
| <td>Visual Age C++ 5.0</td> |
| |
| <td>Regularly tested</td> |
| </tr> |
| |
| <tr> |
| <td>AIX 4.3.3</td> |
| |
| <td>Visual Age C++ 6.0</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 Linux Advanced Server 2.1</td> |
| |
| <td>Intel C++ Compiler 6.0.1</td> |
| |
| <td>Rarely tested</td> |
| </tr> |
| |
| <tr> |
| <td>Red Hat Alpha Linux 7.2</td> |
| |
| <td>gcc 2.96</td> |
| |
| <td>Rarely 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>Cygwin</td> |
| |
| <td>gcc 2.95.3</td> |
| |
| <td>Rarely tested</td> |
| </tr> |
| |
| <tr> |
| <td>Windows NT</td> |
| |
| <td>Microsoft Visual C++ 6.0</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>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" id= |
| "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++ 6, please refer to the |
| <a href="#HowToBuildWindowsMSVC6">note about building with Visual C++ 6</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.sln" workspace |
| file in Microsoft Visual Studio .NET 2003. (This solution includes all |
| the International Components for Unicode libraries, necessary ICU |
| building tools, and the test suite projects). Please see the <a href= |
| "HowToBuildWindowsCommandLine">command line note below</a> if you want to |
| build from the command line instead.</li> |
| |
| <li>Set the active configuration to "Debug" or "Release" (See <a href= |
| "#HowToBuildWindowsConfig">Windows configuration note</a> below).</li> |
| |
| <li>Choose the "Build" menu and select "Rebuild Solution". If you want to |
| build the Debug and Release at the same time, see the <a href= |
| "#HowToBuildWindowsBatch">batch configuration note</a> below.</li> |
| |
| <li>Run the C++ test suite, "intltest". To do this: set the active |
| startup project to "intltest", and press Ctrl+F5 to run it. Make sure |
| that it passes without any errors.</li> |
| |
| <li>Run the C test suite, "cintltst". To do this: set the active startup |
| project to "cintltst", and press Ctrl+F5 to run it. Make sure that it |
| passes without any errors.</li> |
| |
| <li>Run the I/O test suite, "iotest". To do this: set the active startup |
| project to "iotest", and press Ctrl+F5 to run it. Make sure that it |
| passes without any errors.</li> |
| |
| <li>You are now able to develop applications with ICU by using the |
| libraries and tools in <i><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" id= |
| "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line |
| Note:</strong></a> You can build ICU from the command line. Assuming that |
| you have properly installed Microsoft Visual C++ to support command line |
| execution, you can run the following command, 'devenv.com |
| <i><ICU></i>\source\allinone\allinone.sln /build Release'. You can |
| also use Cygwin with this compiler to build ICU, and you can refer to the |
| <a href="#HowToBuildCygwin">How To Build And Install On Windows with |
| Cygwin</a> section for more details.</p> |
| |
| <p><a name="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 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". The |
| "all" solution will build all the libraries, test programs and various ICU |
| tools (e.g. genrb for generating binary locale data files).</p> |
| |
| <p><a name="HowToBuildWindowsMSVC6" id= |
| "HowToBuildWindowsMSVC6"><strong>Microsoft Visual Studio 6.0 |
| Note:</strong></a> ICU will build with Microsoft Visual Studio 6. It is |
| recommended that you use the |
| "<i><ICU></i>\source\allinone\allinone.dsw" workspace to build ICU. |
| The instructions for building with Visual Studio 6 are similar to the |
| instructions for Visual Studio .NET. If you have Microsoft Visual Studio |
| .NET 2002, it is recommended that you use build on the command line with |
| Cygwin, and those instructions are described in the <a href= |
| "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a> |
| section of this document.</p> |
| |
| <h3><a name="HowToBuildWindowsXP64" href="#HowToBuildWindowsXP64" id= |
| "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="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 NT 4.0 or above, or Windows 98 or above</li> |
| |
| <li>Microsoft Visual C++ 6.0 or above (when gcc isn't used).</li> |
| |
| <li> |
| Cygwin with the following installed: |
| |
| <ul> |
| <li>bash</li> |
| |
| <li>GNU make</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 (for example: "<tt>C:\Program |
| Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT</tt>").</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> 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>--enable-static</tt> (Partially works)</li> |
| |
| <li><tt>--disable-debug</tt> (Partially works. Assertion statements are |
| enabled, but built without debugging information)</li> |
| |
| <li><tt>--disable-renaming</tt></li> |
| |
| <li><tt>--disable-threading</tt></li> |
| |
| <li><tt>--disable-tracing</tt></li> |
| |
| <li><tt>--enable-64bit-libs</tt></li> |
| |
| <li><tt>--enable-rpath</tt></li> |
| |
| <li><tt>--with-iostream</tt></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> |
| |
| <li>out of source builds</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.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" 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>. 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. Solaris user's, please see this <a href= |
| "#ImportantNotesSolaris">note regarding multithreaded build issues</a>.</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 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" 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. 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 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/redbook/">z/OS UNIX |
| - Tools and Toys</a> site. The PATH environment variable should be |
| updated to contain the location of this executable prior to build. |
| Alternatively, makedep may be moved into an existing PATH directory.</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/redbook/">z/OS UNIX |
| - Tools and Toys</a>.</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. ICU requires the same GNU make as described in |
| the UNIX build instructions.</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> |
| <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>Currently in ICU 3.0, there is an issue with building on z/OS without |
| XPLINK and with the C++ iostream. By default, the iostream library on |
| z/OS is XPLINK enabled. If you are not building an XPLINK enabled version |
| of ICU, you should use the <code>--with-iostream=old</code> configure |
| option when using runConfigureICU. This will prevent applications that |
| use the icuio library from crashing.</li> |
| |
| <li> |
| <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" id= |
| "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>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></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.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html"> |
| http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>). |
| Older versions may not work properly.</li> |
| </ul> |
| |
| <p>The following describes how to setup and build ICU. For background |
| information, you should look at the <a href="#HowToBuildUNIX">UNIX build |
| instructions</a>.</p> |
| |
| <ol> |
| <li> |
| Create 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>Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the icc compiler</li--> |
| </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>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" 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 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 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://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>A library that contains many locale based internationalization |
| (i18n) functions.</td> |
| </tr> |
| |
| <tr> |
| <td>Layout Engine</td> |
| |
| <td>icule<i>XY</i>.dll</td> |
| |
| <td>libicule.so.<i>XY</i>.<i>Z</i></td> |
| |
| <td>An optional engine for doing font layout.</td> |
| </tr> |
| |
| <tr> |
| <td>Layout Extensions Engine</td> |
| |
| <td>iculx<i>XY</i>.dll</td> |
| |
| <td>libiculx.so.<i>XY</i>.<i>Z</i></td> |
| |
| <td>An optional engine for doing font layout that uses parts of |
| ICU.</td> |
| </tr> |
| |
| <tr> |
| <td>ICU I/O (Unicode stdio) Library</td> |
| |
| <td>icuio<i>XY</i>.dll</td> |
| |
| <td>libicuio.so.<i>XY</i>.<i>Z</i></td> |
| |
| <td>An optional library that provides a stdio like API with Unicode |
| support.</td> |
| </tr> |
| |
| <tr> |
| <td>Tool Utility Library</td> |
| |
| <td>icutu<i>XY</i>.dll</td> |
| |
| <td>libicutu.so.<i>XY</i>.<i>Z</i></td> |
| |
| <td>An internal library that contains internal APIs that are only used |
| by ICU's tools. If you do not use ICU's tools, you do not need this |
| library.</td> |
| </tr> |
| </table> |
| |
| <p>Normally only the above ICU libraries need to be considered for |
| packaging. The versionless symbolic links to these libraries are only |
| needed for easier development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of |
| the name are the version numbers of ICU. For example, ICU 2.0.2 would have |
| the name libicuuc.so.20.2 for the common library. The exact format of the |
| library names can vary between platforms due to how each platform can |
| handles library versioning.</p> |
| |
| <h2><a name="ImportantNotes" href="#ImportantNotes" id= |
| "ImportantNotes">Important Notes About Using ICU</a></h2> |
| |
| <h3><a name="ImportantNotesCPlusPlus" href="#ImportantNotesCPlusPlus" id= |
| "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" id= |
| "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on |
| HP-UX</a></h4> |
| |
| <p>If you are building ICU with a newer aCC compiler and you are planning |
| on using the older <iostream.h> instead of the newer |
| <iostream>, you will need to use a special configure flag before |
| building ICU. By default, the aCC <a href= |
| "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA"> |
| -AA</a> flag is used on HP-UX when the compiler supports that option in |
| order to make ICU thread safe with RogueWave and other libraries using the |
| 2.0 Standard C++ library. Your applications that use ICU will also need to |
| use the <a href= |
| "http://docs.hp.com/hpux/onlinedocs/dev/aCC/a_03_30/options.htm#optioncap-AA"> |
| -AA</a> compiler flag. To turn off this behavior in ICU, you will need to |
| use the --with-iostream= old configure option when you first use |
| runConfigureICU.</p> |
| |
| <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id= |
| "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on |
| Solaris</a></h4> |
| |
| <h5>Solaris Deadlock Issues in Solaris 2.8, and Earlier</h5> |
| |
| <p>Solaris 2.8, and earlier, has outstanding thread deadlocking issues that |
| MAY be problematic for applications using either native, or POSIX, |
| threading on these platforms. Sun states that Solaris 2.9 DOES NOT have the |
| deadlock problems. Deadlocks MAY occur either during initialization of the |
| Solaris threading library, or at any other time.</p> |
| |
| <p>Sun Microsystems has provided a Sun Alert Notification regarding the |
| issue. Users SHOULD consider applying the latest OS patches to their |
| Solaris installations in order to help avoid deadlock. Further information |
| regarding the issue, and links to applicable patches, may be found at:</p> |
| |
| <p>[1] "<i>Applications Linked to libthread May Hang</i>", Sun Alert |
| Notification, Sun Microsystems, Inc., 04-Sep-2002<br> |
| <a href= |
| "http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F46867&zone_32=4663077"> |
| http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F46867&zone_32=4663077</a></p> |
| |
| <p>Sun is NOT providing patches for Solaris 2.6, or earlier.</p> |
| |
| <p>Sun states that by applying the patch users will avoid the deadlock |
| issues. However, with all applicable patches applied, deadlock MAY still be |
| seen, as demonstrated by the ICU Mutex unit tests. The unit test will hang |
| indefinitely. No bug exists in ICU. However, a latent bug still exists in |
| Solaris, which Sun Microsystems has yet to resolve. In order to avoid this, |
| users are SUGGESTED to modify their LD_LIBRARY_PATH according to the |
| guidelines specified by Sun Microsystems in the Sun Alert Notification.</p> |
| |
| <h5>Linking on Solaris</h5> |
| |
| <p>In order to avoid synchronization and threading issues, developers are |
| SUGGESTED to strictly follow the compiling and linking guidelines for |
| multithreaded applications, specified in the following document from Sun |
| Microsystems. Most notably, pay strict attention to the following |
| statements from Sun:</p> |
| |
| <blockquote> |
| <p>To use libthread, specify -lthread before -lc on the ld command line, |
| or last on the cc command line.</p> |
| |
| <p>To use libpthread, specify -lpthread before -lc on the ld command |
| line, or last on the cc command line.</p> |
| </blockquote> |
| |
| <p>Failure to do this may cause spurious lock conflicts, recursive mutex |
| failure, and deadlock.</p> |
| |
| <p>[2] "<i>Solaris Multithreaded Programming Guide, Compiling and |
| Debugging</i>", Sun Microsystems, Inc., Apr 2004<br> |
| <a href= |
| "http://docs.sun.com/db/doc/806-6867/6jfpgdcob?a=view">http://docs.sun.com/db/doc/806-6867/6jfpgdcob?a=view</a></p> |
| |
| <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id= |
| "ImportantNotesWindows">Windows Platform</a></h3> |
| |
| <p>If you are building on the Win32 platform, it is important that you |
| understand a few of the following build details.</p> |
| |
| <h4>DLL directories and the PATH setting</h4> |
| |
| <p>As delivered, the International Components for Unicode build as several |
| DLLs, which are placed in the "<i><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" id= |
| "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" 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://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>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://oss.software.ibm.com/icu/userguide/icudata.html">ICU Data</a> |
| chapter.</p> |
| |
| <p>ICU 2.8 removes the requirement that ICU be completely built in the |
| native operating environment. 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 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, 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" id="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, iotest and cintltst, if you want to run the test |
| suite.</li> |
| |
| <li>uconv, icuswap and icuio (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> |
| |