• Home
Name Date Size #Lines LOC

..--

build/03-May-2024-2,1032,081

linux/03-May-2024-

mac/03-May-2024-

patches/03-May-2024-66,23765,973

public/03-May-2024-80,80817,660

source/03-May-2024-2,335,3662,126,168

APIChangeReport.htmlD03-May-2024146.1 KiB3,4723,454

README.googleD03-May-20245.5 KiB150110

SConstructD03-May-202468 32

icu.gypD03-May-202413.7 KiB413411

icu4c.cssD03-May-20246.3 KiB447365

icu_main.sconsD03-May-20249.7 KiB330274

icudata.sconsD03-May-20247.6 KiB283266

icui18n.sconsD03-May-202412 KiB424407

icuuc.sconsD03-May-202412.3 KiB431414

license.htmlD03-May-20241.9 KiB5246

readme.htmlD03-May-202474.3 KiB1,8571,408

unicode-license.txtD03-May-20242.8 KiB4841

README.google

1This directory contains the source code of ICU 4.2.1 for C/C++
2
31. It was obtained with the following:
4
5    $ svn export --native-eol LF http://source.icu-project.org/repos/icu/icu/tags/release-4-2-1 icu42
6
72. The following directories were removed because they're not used by Chromium
8   at the moment:
9   as_is
10   packaging
11   source/extra
12   source/sample
13   source/layout
14   source/layoutex
15
163. Platform header files for Linux and Mac OS X:
17   On Linux and Mac OS X, 'runConfigureICU Linux' and 'runConfigureICU MacOSX'
18   are run to generate source/common/unicode/platform.h.
19   Rename it to 'plinux.h' and 'pmac.h' on Linux and Mac and check them in.
20
21   The Mac 'pmac.h' file needs to have patches/pmac.h.patch applied.
22
23   Change source/common/unicode/umachine.h to refer to plinux.h and pmac.h
24   on Linux and Mac, respetively.
25
264. To avoid name collisions (two different versions of StringPiece
27   are in Chrome's base and ICU), make the use of 'icu::' namespace
28   qualifier required by setting U_USING_ICU_NAMESPACE to 0 in
29   source/common/unicode/uversion.h
30
31   In addition, the patches for ICU ticket 6935
32   (http://icu-project.org/trac/ticket/6935) are applied.
33
34   The combined patch is patches/namespace.patch.txt
35
365. The word breaking for Chinese and Japanese were modified to use a word
37   frequency list with the following patch and cjdict.txt.
38
39   In addition, the word breaking rule for ASCII and full-width full stop(period)
40   surrounded by letters has been modified to fit our need for segmenting
41   a host name into its components  (e.g. treating 'www.google.com' not as
42   a single word but as 5 words). It's what ICU 3.8 did before UTR 29
43   changed the rule (WB #6, #7).  This also let us pass
44   LayoutTests/css1/text_properties/text_transform.html without rebaselining.
45
46   These patches alone will not work without build-related changes mentioned
47   in #10 below.
48
49   - patches/segmentation.patch.txt :
50       Adds a dictionary (word-frequency)-based word breaking for CJK
51       (Korean is supported in the code, but it does not do anything
52        because we don't have a Korean word-list.)
53
54   - source/data/brkitr/cjdict.txt :
55       Chinese and Japanese word frequency list.
56       See the file for license/copyright notice
57
58   - source/data/brkitr/cc_edict.txt :
59       the list of words derived from CC-Edict.)
60
61   The following two files were removed (because Japanese breaking rules
62   are now the same as that of other langauges).
63
64   - source/data/brkitr/word_ja.txt
65   - source/data/brkitr/ja.txt
66
67   If you want to run ICU tests, you have to copy source/data/brkitr/cjdict.txt
68   to source/test/testdata/cjdict-truncated.txt to pass TestTrieWithValue test.
69
706. A minor break iterator change
71
72   - patches/brkitr.patch.txt
73
747. Converter changes : converters.patch.txt
75  - Include what we really need. See source/data/mappings/ucmlocal.txt
76  - Alias and mapping changes : source/data/mappings/convrtrs.txt
77  - Changes several tables and add six new tables, three of which
78    are 'fake' tables for ISO-2022-CN(-Ext).
79  - ucnv2022.c is modified to use 3 'fake' tables added above for
80    ISO-2022-CN(-Ext).
81
828. Locale changes
83  - patches/locale1.patch.txt :
84      Filipino locale, exemplar character set changes for CJK + 9 Indian
85      locales with minor fixes for Danish, Hungarian, Turkish, Korean
86      and Catalan.
87
88  - patches/locale2.patch.txt :
89      The minimum locale data Chrome needs for 35 languages Chrome is
90      not localized to. Each locale data file has ExemplarCharacters,
91      LocaleScript, layout, and the name of the language for a locale
92      in its native language.
93
94  - patches/locale3.patch.txt : Locale build configuration files
95
969. Removal of unihan collation tables from data/coll/{zh,ja,ko}.txt
97
98  - patches/unihan.patch.txt:
99    unihan collation tables are never used in Chrome/Webkit, but it takes
100    about 1MB in the uncompressed ICU data file in ICU 4.2.1.
101
10210. Build-related changes
103
104  - patches/wpo.patch
105  - patches/windows.patch
106  - patches/data.build.patch :
107      To remove some data files we don't use and cut down the data size.
108  - patches/data.build.win.patch :
109      Windows-only data build patch. Add a new target DATALIB to makedata.mak
110  - add an empty file (stubdatabuilt.txt) to source/stubdata
111
11211. Pre-built data libraries are checked in.
113
114    - source/data/in/icudt42l.dat : Built on Linux with all the patches
115      above applied,
116    - icudt42.dll : With icudt42l.dat in place, all the patches applied
117      and header files moved (#11 below), generated in bin/ by building
118      icudt_build project of build/icudt_build.sln on Windows.
119      It's made in bin/ and moved to the top and checked in.
120    - {mac,linux}/icudt42l_dat.s : Built on Mac and Linux with all the
121      patches above applied and checked in.
122      linux needs the '@' in the preamble changed to '%'. See
123      http://codereview.chromium.org/215026.
124      mac/icudt42l_dat.s needs one line added after it is generated.  A
125      .private_extern directive needs to be added so that the top of the
126      file looks like:
127
128.globl _icudt42_dat
129        .private_extern _icudt42_dat
130        .data
131
13212. The header files were moved as shown below:
133
134   source/common/unicode ==> public/common/unicode
135   source/i18n/unicode   ==> public/i18n/unicode
136
13713. The patch for a memory leak in i18n/timezone.cpp (Windows only):
138    see http://bugs.icu-project.org/trac/ticket/7135
139
140    - patches/tzmemory.patch
141
14214. The patch for a crash in common/putil.c (Linux only):
143    see http://bugs.icu-project.org/trac/ticket/7177
144
145    - patches/linuxtz.patch
146
14715. The patch for Linux locale detection
148
149    - patches/locdet.patch
150

readme.html

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
4<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
5  <head>
6
7    <title>ReadMe for ICU</title>
8    <meta name="COPYRIGHT" content=
9    "Copyright (c) 1997-2009 IBM Corporation and others. All Rights Reserved." />
10    <meta name="KEYWORDS" content=
11    "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
12    <meta name="DESCRIPTION" content=
13    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
14    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
15	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
16  </head>
17
18  <body class="readme">
19    <h1>International Components for Unicode<br />
20     <abbr title="International Components for Unicode">ICU</abbr> 4.2.1 ReadMe</h1>
21
22    <p>Version: 2009 July 1st<br />
23     Copyright &copy; 1997-2009 International Business Machines Corporation and
24    others. All Rights Reserved.</p>
25    <!-- Remember that there is a copyright at the end too -->
26    <hr />
27
28    <h2 class="TOC">Table of Contents</h2>
29
30    <ul class="TOC">
31      <li><a href="#Introduction">Introduction</a></li>
32
33      <li><a href="#GettingStarted">Getting Started</a></li>
34
35      <li><a href="#News">What Is New In This release?</a></li>
36
37      <li><a href="#Download">How To Download the Source Code</a></li>
38
39      <li><a href="#SourceCode">ICU Source Code Organization</a></li>
40
41      <li>
42        <a href="#HowToBuild">How To Build And Install ICU</a>
43
44        <ul >
45          <li><a href="#HowToBuildSupported">Supported Platforms</a></li>
46
47          <li><a href="#HowToBuildWindows">Windows</a></li>
48
49          <li><a href="#HowToBuildCygwin">Cygwin</a></li>
50
51          <li><a href="#HowToBuildUNIX">UNIX</a></li>
52
53          <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>
54
55          <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>
56
57		  <li><a href="#HowToCrossCompileICU">How to Cross Compile ICU</a></li>
58        </ul>
59      </li>
60
61
62      <li><a href="#HowToPackage">How To Package ICU</a></li>
63
64      <li>
65        <a href="#ImportantNotes">Important Notes About Using ICU</a>
66
67        <ul >
68          <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
69          Environment</a></li>
70
71          <li><a href="#ImportantNotesWindows">Windows Platform</a></li>
72
73          <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
74        </ul>
75      </li>
76
77      <li>
78        <a href="#PlatformDependencies">Platform Dependencies</a>
79
80        <ul >
81          <li><a href="#PlatformDependenciesNew">Porting To A New
82          Platform</a></li>
83
84          <li><a href="#PlatformDependenciesImpl">Platform Dependent
85          Implementations</a></li>
86        </ul>
87      </li>
88    </ul>
89    <hr />
90
91    <h2><a name="Introduction" href="#Introduction" id=
92    "Introduction">Introduction</a></h2>
93
94    <p>Today's software market is a global one in which it is desirable to
95    develop and maintain one application (single source/single binary) that
96    supports a wide variety of languages. The International Components for
97    Unicode (ICU) libraries provide robust and full-featured Unicode services on
98    a wide variety of platforms to help this design goal. The ICU libraries
99    provide support for:</p>
100
101    <ul>
102      <li>The latest version of the Unicode standard</li>
103
104      <li>Character set conversions with support for over 220 codepages</li>
105
106      <li>Locale data for more than 250 locales</li>
107
108      <li>Language sensitive text collation (sorting) and searching based on the
109      Unicode Collation Algorithm (=ISO 14651)</li>
110
111      <li>Regular expression matching and Unicode sets</li>
112
113      <li>Transformations for normalization, upper/lowercase, script
114      transliterations (50+ pairs)</li>
115
116      <li>Resource bundles for storing and accessing localized information</li>
117
118      <li>Date/Number/Message formatting and parsing of culture specific
119      input/output formats</li>
120
121      <li>Calendar specific date and time manipulation</li>
122
123      <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>
124
125      <li>Text boundary analysis for finding characters, word and sentence
126      boundaries</li>
127    </ul>
128
129    <p>ICU has a sister project ICU4J that extends the internationalization
130    capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
131    called ICU4C when a distinction is necessary.</p>
132
133    <h2><a name="GettingStarted" href="#GettingStarted" id=
134    "GettingStarted">Getting started</a></h2>
135
136    <p>This document describes how to build and install ICU on your machine. For
137    other information about ICU please see the following table of links.<br />
138     The ICU homepage also links to related information about writing
139    internationalized software.</p>
140
141    <table class="docTable" summary="These are some useful links regarding ICU and internationalization in general.">
142      <caption>
143        Here are some useful links regarding ICU and internationalization in
144        general.
145      </caption>
146
147      <tr>
148        <td>ICU, ICU4C &amp; ICU4J Homepage</td>
149
150        <td><a href=
151        "http://www.icu-project.org/">http://www.icu-project.org/</a></td>
152      </tr>
153
154      <tr>
155        <td>FAQ - Frequently Asked Questions about ICU</td>
156
157        <td><a href=
158        "http://www.icu-project.org/userguide/icufaq.html">http://www.icu-project.org/userguide/icufaq.html</a></td>
159      </tr>
160
161      <tr>
162        <td>ICU User's Guide</td>
163
164        <td><a href=
165        "http://www.icu-project.org/userguide/">http://www.icu-project.org/userguide/</a></td>
166      </tr>
167
168      <tr>
169        <td>Download ICU Releases</td>
170
171        <td><a href=
172        "http://www.icu-project.org/download/">http://www.icu-project.org/download/</a></td>
173      </tr>
174
175      <tr>
176        <td>ICU4C API Documentation Online</td>
177
178        <td><a href=
179        "http://www.icu-project.org/apiref/icu4c/">http://www.icu-project.org/apiref/icu4c/</a></td>
180      </tr>
181
182      <tr>
183        <td>Online ICU Demos</td>
184
185        <td><a href=
186        "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
187      </tr>
188
189      <tr>
190        <td>Contacts and Bug Reports/Feature Requests</td>
191
192        <td><a href=
193        "http://www.icu-project.org/contacts.html">http://www.icu-project.org/contacts.html</a></td>
194      </tr>
195    </table>
196
197    <p><strong>Important:</strong> Please make sure you understand the <a href=
198    "license.html">Copyright and License Information</a>.</p>
199
200    <h2><a name="News" href="#News" id="News">What is new in this release?</a></h2>
201
202
203    <p>ICU for C/C++ version 4.2.1 is a maintenance release of 4.2, containing fixes and updates in both code and data. It does
204     not introduce new API or functionality relative to 4.2. These changes will be rolled into the next release of ICU.
205     	The overall ticket used for the 4.2.1 release is <a href="http://bugs.icu-project.org/trac/ticket/7018">#7018</a>.
206     	 Here is a list of the bug fixes included in 4.2.1, and the revisions used  4.2.1:
207     </p>
208     <ul>
209     	<li>
210     		<a href="http://bugs.icu-project.org/trac/ticket/6905">#6905</a>
211     		<a href="http://bugs.icu-project.org/trac/changeset/26084">r26084</a> &mdash;
212     		Make sure cintltst and intltest pass w/o data
213     	</li>
214     	<li>
215     		<a href="http://bugs.icu-project.org/trac/ticket/6919">#6919</a>
216     		<a href="http://bugs.icu-project.org/trac/changeset/26063">r26063</a> &mdash;
217     		icu-config generation errors
218     	</li>
219     	<li>
220     		<a href="http://bugs.icu-project.org/trac/ticket/6979">#6979</a>
221     		<a href="http://bugs.icu-project.org/trac/changeset/26138">r26138</a> &mdash;
222     		Integrate CLDR 1.7.1
223     	</li>
224     	<li>
225     		<a href="http://bugs.icu-project.org/trac/ticket/6980">#6980</a>
226     		<a href="http://bugs.icu-project.org/trac/changeset/26005">r26005</a> &mdash;
227     		SimpleDateFormat serious compilation warnings
228     	</li>
229     	<li>
230     		<a href="http://bugs.icu-project.org/trac/ticket/6908">#6908</a>
231     		<a href="http://bugs.icu-project.org/trac/changeset/25978">r25978</a> &mdash;
232     		Numbering Systems - Malayalam msising digit 5
233     	</li>
234     	<li>
235     		<a href="http://bugs.icu-project.org/trac/ticket/6990">#6990</a>
236     		<a href="http://bugs.icu-project.org/trac/changeset/26002">r26164</a> &mdash;
237     		Update time zone data to version 2009j
238     	</li>
239     </ul>
240    <p>
241     	The overall ticket used for the 4.2.0.1 release was <a href="http://bugs.icu-project.org/trac/ticket/6953">#6953</a>.
242     	 Here is a list of the bug fixes included in 4.2.0.1, and the revisions used to patch 4.2.0.1:
243     </p>
244     <ul>
245     	<li>
246     		<a href="http://bugs.icu-project.org/trac/ticket/6929">#6929</a>
247     		<a href="http://bugs.icu-project.org/trac/changeset/26005">r26005</a> &mdash;
248     		Symbol Renaming disabled on Windows by default
249     	</li>
250     	<li>
251     		<a href="http://bugs.icu-project.org/trac/ticket/6936">#6936</a>
252     		<a href="http://bugs.icu-project.org/trac/changeset/26018">r26018</a> &mdash;
253     		Data Building Difficulty on IBM i
254     	</li>
255     	<li>
256     		<a href="http://bugs.icu-project.org/trac/ticket/6925">#6925</a>
257     		<a href="http://bugs.icu-project.org/trac/changeset/26002">r26002</a> &mdash;
258     		Data Building Difficulty on IBM zOS under ASCII Mode
259     	</li>
260     </ul>
261
262    <p>To see which APIs are new or changed in the 4.2 release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
263
264
265    <p><!-- The following list concentrates on <em>changes that affect existing
266    applications migrating from previous ICU releases</em>. --> For more news about
267    this release, see the <a href="http://www.icu-project.org/download/">ICU 4.2
268    download page</a>.</p>
269
270    <h3>Cross compilation and 64-bit support</h3>
271    <p>ICU may now be cross compiled, see <a href="#HowToCrossCompileICU">How To Cross Compile ICU</a>.</p>
272    <p>The --enable-64bit-libs and --disable-64bit-libs options are now deprecated. By default, ICU will build binaries using the compiler's default setting. To request 32 or 64 bit libraries, use --with-library-bits=32 or --with-library-bits=64.  For the old behavior, of attempting 64 bit libraries if possible, use --with-library-bits=64else32.   Intltest now reports the bit width that ICU is currently running under.</p>
273
274
275    <h3>u_strToUTF32() and u_strFromUTF32() validate input UTF strings</h3>
276    <p>
277      Before ICU 4.2, the ustring.h functions u_strToUTF32() and u_strFromUTF32()
278      were not fully validating their input strings.
279      In particular, u_strToUTF32() passed unpaired surrogates through as
280      surrogate code points, and u_strFromUTF32() accepted surrogate code points
281      and passed them through as unpaired surrogates
282      (which may by chance end up in a pair,
283      indistinguishable from a supplementary code point).
284      This is inconsistent with the function names,
285      with the use of "UTF-16" and "UTF-32" in the documentation,
286      and with their sibling UTF-8 functions which do validate fully.
287    </p>
288
289    <p>
290      ICU 4.2 changes the u_strToUTF32() and u_strFromUTF32() implementations
291      to treat malformed UTF input as an error.
292      The API documentation has been clarified.
293    </p>
294
295    <p>
296      Background: The implementation of these functions predates
297      Unicode's tightening of the UTF specifications.
298      We adapted the UTF-8 ustring.h functions and the ucnv_ converter functions
299      but not these UTF-32 ustring.h functions.
300      See the Unicode Standard chapter 3
301      <a href="http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#G7404">section 3.9 Unicode Encoding Forms</a>
302      for details, in particular definitions D79 Unicode encoding form
303      and D80 Unicode string.
304    </p>
305
306    <h2><a name="Download" href="#Download" id="Download">How To Download the
307    Source Code</a></h2>
308
309    <p>There are two ways to download ICU releases:</p>
310
311    <ul>
312      <li><strong>Official Release Snapshot:</strong><br />
313       If you want to use ICU (as opposed to developing it), you should download
314      an official packaged version of the ICU source code. These versions are
315      tested more thoroughly than day-to-day development builds of the system,
316      and they are packaged in zip and tar files for convenient download. These
317      packaged files can be found at <a href=
318      "http://www.icu-project.org/download/">http://www.icu-project.org/download/</a>.<br />
319       The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
320      <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
321      file is used for Windows platforms, while the .tgz file is preferred on
322      most other platforms.<br />
323       Please unzip this file. </li>
324
325      <li><strong>Subversion Source Repository:</strong><br />
326       If you are interested in developing features, patches, or bug fixes for
327      ICU, you should probably be working with the latest version of the ICU
328      source code. You will need to check the code out of our Subversion repository to
329      ensure that you have the most recent version of all of the files. See our
330      <a href="http://www.icu-project.org/repository/">source
331      repository</a> for details.</li>
332    </ul>
333
334    <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
335    Organization</a></h2>
336
337    <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
338    path name of the ICU directory (the top level directory from the distribution
339    archives) in your file system. You can also view the <a href=
340    "http://www.icu-project.org/userguide/design.html">ICU Architectural
341    Design</a> section of the User's Guide to see which libraries you need for
342    your software product. You need at least the data (<code>[lib]icudt</code>)
343    and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
344
345    <table class="docTable" summary="The following files describe the code drop.">
346      <caption>
347        The following files describe the code drop.
348      </caption>
349
350      <tr>
351        <th scope="col">File</th>
352
353        <th scope="col">Description</th>
354      </tr>
355
356      <tr>
357        <td>readme.html</td>
358
359        <td>Describes the International Components for Unicode (this file)</td>
360      </tr>
361
362      <tr>
363        <td>license.html</td>
364
365        <td>Contains the text of the ICU license</td>
366      </tr>
367    </table>
368
369    <p><br />
370    </p>
371
372    <table class="docTable" summary=
373    "The following directories contain source code and data files.">
374      <caption>
375        The following directories contain source code and data files.
376      </caption>
377
378      <tr>
379        <th scope="col">Directory</th>
380
381        <th scope="col">Description</th>
382      </tr>
383
384      <tr>
385        <td><i>&lt;ICU&gt;</i>/source/<b>common</b>/</td>
386
387        <td>The core Unicode and support functionality, such as resource bundles,
388        character properties, locales, codepage conversion, normalization,
389        Unicode properties, Locale, and UnicodeString.</td>
390      </tr>
391
392      <tr>
393        <td><i>&lt;ICU&gt;</i>/source/<b>i18n</b>/</td>
394
395        <td>Modules in i18n are generally the more data-driven, that is to say
396        resource bundle driven, components. These deal with higher-level
397        internationalization issues such as formatting, collation, text break
398        analysis, and transliteration.</td>
399      </tr>
400
401      <tr>
402        <td><i>&lt;ICU&gt;</i>/source/<b>layout</b>/</td>
403
404        <td>Contains the ICU layout engine (not a rasterizer).</td>
405      </tr>
406
407      <tr>
408        <td><i>&lt;ICU&gt;</i>/source/<b>io</b>/</td>
409
410        <td>Contains the ICU I/O library.</td>
411      </tr>
412
413      <tr>
414        <td><i>&lt;ICU&gt;</i>/source/<b>data</b>/</td>
415
416        <td>
417          <p>This directory contains the source data in text format, which is
418          compiled into binary form during the ICU build process. It contains
419          several subdirectories, in which the data files are grouped by
420          function. Note that the build process must be run again after any
421          changes are made to this directory.</p>
422
423          <p>If some of the following directories are missing, it's probably
424          because you got an official download. If you need the data source files
425          for customization, then please download the ICU source code from <a
426          href="http://www.icu-project.org/repository/">subversion</a>.</p>
427
428          <ul>
429            <li><b>in/</b> A directory that contains a pre-built data library for
430            ICU. A standard source code package will contain this file without
431            several of the following directories. This is to simplify the build
432            process for the majority of users and to reduce platform porting
433            issues.</li>
434
435            <li><b>brkitr/</b> Data files for character, word, sentence, title
436            casing and line boundary analysis.</li>
437
438            <li><b>locales/</b> These .txt files contain ICU language and
439            culture-specific localization data. Two special bundles are
440            <b>root</b>, which is the fallback data and parent of other bundles,
441            and <b>index</b>, which contains a list of installed bundles. The
442            makefile <b>resfiles.mk</b> contains the list of resource bundle
443            files.</li>
444
445            <li><b>mappings/</b> Here are the code page converter tables. These
446            .ucm files contain mappings to and from Unicode. These are compiled
447            into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
448            various converter name formats to ICU internal format and vice versa.
449            It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
450            ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
451            converters to be built.</li>
452
453            <li><b>translit/</b> This directory contains transliterator rules as
454            resource bundles, a makefile <b>trnsfiles.mk</b> containing the list
455            of installed system translitaration files, and as well the special
456            bundle <b>translit_index</b> which lists the system transliterator
457            aliases.</li>
458
459            <li><b>unidata/</b> This directory contains the Unicode data files.
460            Please see <a href=
461            "http://www.unicode.org/">http://www.unicode.org/</a> for more
462            information.</li>
463
464            <li><b>misc/</b> The misc directory contains other data files which
465            did not fit into the above categories. Currently it only contains
466            time zone information, and a name preperation file for <a href=
467            "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
468
469            <li><b>out/</b> This directory contains the assembled memory mapped
470            files.</li>
471
472            <li><b>out/build/</b> This directory contains intermediate (compiled)
473            files, such as .cnv, .res, etc.</li>
474          </ul>
475
476          <p>If you are creating a special ICU build, you can set the ICU_DATA
477          environment variable to the out/ or the out/build/ directories, but
478          this is generally discouraged because most people set it incorrectly.
479          You can view the <a href=
480          "http://www.icu-project.org/userguide/icudata.html">ICU Data
481          Management</a> section of the ICU User's Guide for details.</p>
482        </td>
483      </tr>
484
485      <tr>
486        <td><i>&lt;ICU&gt;</i>/source/test/<b>intltest</b>/</td>
487
488        <td>A test suite including all C++ APIs. For information about running
489        the test suite, see the build instructions specific to your platform
490        later in this document.</td>
491      </tr>
492
493      <tr>
494        <td><i>&lt;ICU&gt;</i>/source/test/<b>cintltst</b>/</td>
495
496        <td>A test suite written in C, including all C APIs. For information
497        about running the test suite, see the build instructions specific to your
498        platform later in this document.</td>
499      </tr>
500
501      <tr>
502        <td><i>&lt;ICU&gt;</i>/source/test/<b>iotest</b>/</td>
503
504        <td>A test suite written in C and C++ to test the icuio library. For
505        information about running the test suite, see the build instructions
506        specific to your platform later in this document.</td>
507      </tr>
508
509      <tr>
510        <td><i>&lt;ICU&gt;</i>/source/test/<b>testdata</b>/</td>
511
512        <td>Source text files for data, which are read by the tests. It contains
513        the subdirectories <b>out/build/</b> which is used for intermediate
514        files, and <b>out/</b> which contains <b>testdata.dat.</b></td>
515      </tr>
516
517      <tr>
518        <td><i>&lt;ICU&gt;</i>/source/<b>tools</b>/</td>
519
520        <td>Tools for generating the data files. Data files are generated by
521        invoking <i>&lt;ICU&gt;</i>/source/data/build/makedata.bat on Win32 or
522        <i>&lt;ICU&gt;</i>/source/make on UNIX.</td>
523      </tr>
524
525      <tr>
526        <td><i>&lt;ICU&gt;</i>/source/<b>samples</b>/</td>
527
528        <td>Various sample programs that use ICU</td>
529      </tr>
530
531      <tr>
532        <td><i>&lt;ICU&gt;</i>/source/<b>extra</b>/</td>
533
534        <td>Non-supported API additions. Currently, it contains the 'uconv' tool
535        to perform codepage conversion on files.</td>
536      </tr>
537
538      <tr>
539        <td><i>&lt;ICU&gt;</i>/<b>packaging</b>/</td>
540
541        <td>This directory contain scripts and tools for packaging the final
542        ICU build for various release platforms.</td>
543      </tr>
544
545      <tr>
546        <td><i>&lt;ICU&gt;</i>/source/<b>config</b>/</td>
547
548        <td>Contains helper makefiles for platform specific build commands. Used
549        by 'configure'.</td>
550      </tr>
551
552      <tr>
553        <td><i>&lt;ICU&gt;</i>/source/<b>allinone</b>/</td>
554
555        <td>Contains top-level ICU workspace and project files, for instance to
556        build all of ICU under one MSVC project.</td>
557      </tr>
558
559      <tr>
560        <td><i>&lt;ICU&gt;</i>/<b>include</b>/</td>
561
562        <td>Contains the headers needed for developing software that uses ICU on
563        Windows.</td>
564      </tr>
565
566      <tr>
567        <td><i>&lt;ICU&gt;</i>/<b>lib</b>/</td>
568
569        <td>Contains the import libraries for linking ICU into your Windows
570        application.</td>
571      </tr>
572
573      <tr>
574        <td><i>&lt;ICU&gt;</i>/<b>bin</b>/</td>
575
576        <td>Contains the libraries and executables for using ICU on Windows.</td>
577      </tr>
578    </table>
579    <!-- end of ICU structure ==================================== -->
580
581    <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build And
582    Install ICU</a></h2>
583
584    <h3><a name="HowToBuildSupported" href="#HowToBuildSupported" id=
585    "HowToBuildSupported">Supported Platforms</a></h3>
586
587    <table class="rtable" summary=
588    "ICU can be built on many platforms.">
589      <caption>
590        Here is the status of building ICU on several different platforms.
591      </caption>
592
593
594            <tr>
595                <td>AIX 6.1 (power, 64-bit)</td>
596                <td>VisualAge 9</td>
597                <td class="works">Frequently Tested</td>
598
599            </tr>
600
601            <tr>
602                <td>HP/UX 11iv3 (ia64, 64-bit)</td>
603                <td>aCC A.06.15</td>
604                <td class="works">Frequently Tested</td>
605
606            </tr>
607
608            <tr>
609                <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
610                <td>gcc 4.1.2</td>
611                <td class="works">Frequently Tested</td>
612
613            </tr>
614
615            <tr>
616                <td>Red Hat Enterprise Linux 5 (x86, 64-bit)</td>
617                <td>gcc 4.1.2</td>
618                <td class="works">Frequently Tested</td>
619
620            </tr>
621
622            <tr>
623                <td>Solaris 10 (sparc, 64-bit)</td>
624                <td>Sun Studio 12</td>
625                <td class="works">Frequently Tested</td>
626
627            </tr>
628
629            <tr>
630                <td>Windows Vista SP1 (x86, 32-bit)</td>
631                <td>MS Visual Studio 9</td>
632                <td class="works">Frequently Tested</td>
633
634            </tr>
635
636            <tr>
637                <td>AIX 5.2 (power, 64-bit)</td>
638                <td>VisualAge 6</td>
639                <td class="works">Frequently Tested</td>
640
641            </tr>
642
643            <tr>
644                <td>AIX 5.3 (power, 64-bit)</td>
645                <td>VisualAge 8</td>
646                <td class="works">Frequently Tested</td>
647
648            </tr>
649
650            <tr>
651                <td>AIX 6.1 (power, 64-bit)</td>
652                <td>gcc 4.2.4</td>
653                <td class="works">Frequently Tested</td>
654
655            </tr>
656
657            <tr>
658                <td>HP/UX 11i (hppa, 64-bit)</td>
659                <td>aCC A.03.85</td>
660                <td class="works">Frequently Tested</td>
661
662            </tr>
663
664            <tr>
665                <td>MacOSX 10.5 Leopard (x86, 32-bit)</td>
666                <td>gcc 4.0.1</td>
667                <td class="works">Frequently Tested</td>
668
669            </tr>
670
671            <tr>
672                <td>MacOSX 10.5 Leopard (x86, 64-bit)</td>
673                <td>gcc 4.0.1</td>
674                <td class="works">Frequently Tested</td>
675
676            </tr>
677
678            <tr>
679                <td>Red Hat Enterprise Linux 4.2 (x86, 32-bit)</td>
680                <td>gcc 3.4.6</td>
681                <td class="works">Frequently Tested</td>
682
683            </tr>
684
685            <tr>
686                <td>Red Hat Enterprise Linux 4u7 (x86, 32-bit)</td>
687                <td>gcc 4.2.4</td>
688                <td class="works">Frequently Tested</td>
689
690            </tr>
691
692            <tr>
693                <td>Solaris 10 (sparc, 64-bit)</td>
694                <td>gcc 4.2.1</td>
695                <td class="works">Frequently Tested</td>
696
697            </tr>
698
699            <tr>
700                <td>SuSE 10 (x86, 64-bit)</td>
701                <td>gcc</td>
702                <td class="works">Frequently Tested</td>
703
704            </tr>
705
706            <tr>
707                <td>Windows 2000 Professional (x86, 32-bit)</td>
708                <td>MS Visual Studio 2003 via Cygwin</td>
709                <td class="works">Frequently Tested</td>
710
711            </tr>
712
713            <tr>
714                <td>Windows 2000 Professional (x86, 32-bit)</td>
715                <td>gcc via Cygwin</td>
716                <td class="works">Frequently Tested</td>
717
718            </tr>
719
720            <tr>
721                <td>Windows Server 2003 (x86, 64-bit)</td>
722                <td>MS Visual Studio 8 via Cygwin</td>
723                <td class="works">Frequently Tested</td>
724
725            </tr>
726
727            <tr>
728                <td>Windows Server 2008 (x86, 64-bit)</td>
729                <td>MS Visual Studio 9</td>
730                <td class="works">Frequently Tested</td>
731
732            </tr>
733
734            <tr>
735                <td>Windows XP Professional (x86, 32-bit)</td>
736                <td>MS Visual Studio 9</td>
737                <td class="works">Frequently Tested</td>
738
739            </tr>
740
741            <tr class="broken">
742                <td>Red Hat Enterprise Linux 5 (x86, 32-bit)</td>
743                <td>icc 11.0</td>
744                <td class="broken">Broken <b><a href="http://bugs.icu-project.org/trac/ticket/6894">#6894</a></b></td>
745
746            </tr>
747
748            <tr class="broken">
749                <td>SuSe Linux 7.2 (x86, 32-bit)</td>
750                <td>icc 9.0</td>
751                <td class="broken">Broken <b><a href="http://bugs.icu-project.org/trac/ticket/6888">#6888</a></b></td>
752
753            </tr>
754
755            <tr class="broken">
756                <td>Windows Server 2008 (x86, 64-bit)</td>
757                <td>MS Visual Studio 9 via Cygwin</td>
758                <td class="broken">Broken <b><a href="http://bugs.icu-project.org/trac/ticket/6890">#6890</a></b></td>
759
760            </tr>
761
762
763<!-- end IBM lab data -->
764
765      <tr class="rarely">
766        <td>z/OS 1.7</td>
767
768        <td>cxx 1.7</td>
769
770        <td>Rarely tested</td>
771      </tr>
772
773      <tr class="rarely">
774        <td>Cygwin</td>
775
776        <td>gcc 3.4.4</td>
777
778        <td>Rarely tested</td>
779      </tr>
780
781      <tr class="rarely">
782        <td>IBM i family (IBM i, i5/OS, OS/400)</td>
783
784        <td>iCC</td>
785
786        <td>Rarely tested (<b>Please read important news on the ICU web site.</b>)</td>
787      </tr>
788
789
790      <tr class="rarely">
791        <td>MinGW</td>
792
793        <td>gcc</td>
794
795        <td>Rarely tested</td>
796      </tr>
797
798      <tr class="rarely">
799        <td>NetBSD, OpenBSD, FreeBSD</td>
800
801        <td>gcc</td>
802
803        <td>Rarely tested</td>
804      </tr>
805
806      <tr class="rarely">
807        <td>SUSE Linux Enterprise Server 9 (PowerPC)</td>
808
809        <td>IBM XL C/C++ 8.0</td>
810
811        <td>Rarely tested</td>
812      </tr>
813
814      <tr class="rarely">
815        <td>QNX</td>
816
817        <td>gcc</td>
818
819        <td>Rarely tested</td>
820      </tr>
821
822      <tr class="rarely">
823        <td>BeOS/Haiku</td>
824
825        <td>gcc</td>
826
827        <td>Rarely tested</td>
828      </tr>
829
830      <tr class="rarely">
831        <td>SGI/IRIX</td>
832
833        <td>MIPSpro CC</td>
834
835        <td>Rarely tested</td>
836      </tr>
837
838      <tr class="rarely">
839        <td>Tru64 (OSF)</td>
840
841        <td>Compaq's cxx compiler</td>
842
843        <td>Rarely tested</td>
844      </tr>
845
846      <tr class="rarely">
847        <td>MP-RAS</td>
848
849        <td>NCR MP-RAS C/C++ Compiler</td>
850
851        <td>Rarely tested</td>
852      </tr>
853    </table>
854
855    <p><br />
856    </p>
857
858    <h4>Key to testing frequency</h4>
859
860    <dl>
861      <dt><i>Reference platform</i></dt>
862
863      <dd>ICU will work on these platforms with these compilers</dd>
864
865      <dt><i>Regularly tested</i></dt>
866
867      <dd>ICU should work on these platforms with these compilers</dd>
868
869      <dt><i>Rarely tested</i></dt>
870
871      <dd>ICU has been ported to these platforms but may not have been tested
872      there recently</dd>
873    </dl>
874
875    <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
876    "HowToBuildWindows">How To Build And Install On Windows</a></h3>
877
878    <p>Building International Components for Unicode requires:</p>
879
880    <ul>
881      <li>Microsoft Windows 2000 or above</li>
882
883      <li>Microsoft Visual C++ 2005</li>
884
885      <li><a href="#HowToBuildCygwin">Cygwin</a> is required when other versions
886      of Microsoft Visual C++ and other compilers are used to build ICU.</li>
887    </ul>
888
889    <p>The steps are:</p>
890
891    <ol>
892      <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
893      line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
894      WinZip.</li>
895
896      <li>Be sure that the ICU binary directory, <i>&lt;ICU&gt;</i>\bin\, is
897      included in the <strong>PATH</strong> environment variable. The tests will
898      not work without the location of the ICU DLL files in the path.</li>
899
900      <li>Open the "<i>&lt;ICU&gt;</i>\source\allinone\allinone.sln" workspace
901      file in Microsoft Visual Studio 2003. (This solution includes all the
902      International Components for Unicode libraries, necessary ICU building
903      tools, and the test suite projects). Please see the <a href=
904      "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
905      build from the command line instead.</li>
906
907      <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below)
908      and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
909
910      <li>Choose the "Build" menu and select "Rebuild Solution". If you want to
911      build the Debug and Release at the same time, see the <a href=
912      "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>
913
914      <li>Run the C++ test suite, "intltest". To do this: set the active startup
915      project to "intltest", and press Ctrl+F5 to run it. Make sure that it
916      passes without any errors.</li>
917
918      <li>Run the C test suite, "cintltst". To do this: set the active startup
919      project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
920      passes without any errors.</li>
921
922      <li>Run the I/O test suite, "iotest". To do this: set the active startup
923      project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
924      without any errors.</li>
925
926      <li>You are now able to develop applications with ICU by using the
927      libraries and tools in <i>&lt;ICU&gt;</i>\bin\. The headers are in
928      <i>&lt;ICU&gt;</i>\include\ and the link libraries are in
929      <i>&lt;ICU&gt;</i>\lib\. To install the ICU runtime on a machine, or ship
930      it with your application, copy the needed components from
931      <i>&lt;ICU&gt;</i>\bin\ to a location on the system PATH or to your
932      application directory.</li>
933    </ol>
934
935    <p><a name="HowToBuildWindowsCommandLine" id=
936    "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
937    Note:</strong></a> You can build ICU from the command line. Assuming that you
938    have properly installed Microsoft Visual C++ to support command line
939    execution, you can run the following command, 'devenv.com
940    <i>&lt;ICU&gt;</i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
941    use Cygwin with this compiler to build ICU, and you can refer to the <a href=
942    "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
943    section for more details.</p>
944
945    <p><a name="HowToBuildWindowsPlatform" id=
946    "HowToBuildWindowsPlatform"><strong>Setting Active Platform
947    Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is
948    not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>
949
950    <ul>
951      <li>Choose "Build" menu, select "Configuration Manager...", and select
952      "Win32" or "x64" for the Active Platform Solution.</li>
953
954      <li>Another way is to select the desired build configuration from "Solution
955      Platforms" dropdown menu from the standard toolbar. It will say
956      "Win32" or "x64" in the dropdown list.</li>
957    </ul>
958
959    <p><a name="HowToBuildWindowsConfig" id=
960    "HowToBuildWindowsConfig"><strong>Setting Active Configuration
961    Note:</strong></a> To set the active configuration, two different
962    possibilities are:</p>
963
964    <ul>
965      <li>Choose "Build" menu, select "Configuration Manager...", and select
966      "Release" or "Debug" for the Active Configuration Solution.</li>
967
968      <li>Another way is to select the desired build configuration from "Solution
969      Configurations" dropdown menu from the standard toolbar. It will say
970      "Release" or "Debug" in the dropdown list.</li>
971    </ul>
972
973    <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
974    Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and
975    Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
976    Build...". Click the "Select All" button, and then click the "Rebuild"
977    button.</p>
978
979    <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
980    "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>
981
982    <p>Building International Components for Unicode with this configuration
983    requires:</p>
984
985    <ul>
986      <li>Microsoft 2000 or above</li>
987
988      <li>Microsoft Visual C++ 2003 or above (when gcc isn't used).</li>
989
990      <li>
991        Cygwin with the following installed:
992
993        <ul>
994          <li>bash</li>
995
996          <li>GNU make</li>
997
998          <li>man (if you plan to look at the man pages)</li>
999        </ul>
1000      </li>
1001    </ul>
1002
1003    <p>There are two ways you can build ICU with Cygwin. You can build with gcc
1004    or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
1005    will depend on the Cygwin environment. If you use Microsoft Visual C++, the
1006    resulting libraries and tools do not depend on Cygwin and can be more easily
1007    distributed to other Windows computers (the generated man pages and shell
1008    scripts still need Cygwin). To build with gcc, please follow the "<a href=
1009    "#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions, while
1010    you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
1011    please use the following instructions:</p>
1012
1013    <ol>
1014      <li>Start the Windows "Command Prompt" window. This is different from the
1015      gcc build, which requires the Cygwin Bash command prompt. The Microsoft
1016      Visual C++ compiler will not work with a bash command prompt.</li>
1017
1018      <li>If the computer isn't set up to use Visual C++ from the command line,
1019      you need to run vcvars32.bat. For example "<tt>C:\Program Files\Microsoft
1020      Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
1021      <strong>or</strong> "<tt>C:\Program Files (x86)\Microsoft Visual Studio
1022      8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
1023      Windows x64.</li>
1024
1025      <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
1026      line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
1027      WinZip.</li>
1028
1029      <li>Change directory to "icu/source", which is where you unzipped ICU.</li>
1030
1031      <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
1032      Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
1033      configuration note</a> and non-functional configure options below).</li>
1034
1035      <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
1036      This make command should be GNU make.</li>
1037
1038      <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
1039      checks for ICU's functionality integrity (See <a href=
1040      "#HowToTestWithoutGmake">testing note</a> below).</li>
1041
1042      <li>Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
1043      option on configure or runConfigureICU, ICU will be installed to the
1044      directory you specified. (See <a href="#HowToInstallICU">installation
1045      note</a> below).</li>
1046    </ol>
1047
1048    <p><a name="HowToWindowsConfigureICU" id=
1049    "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
1050    NOTE:</strong></a> In addition to the Unix <a href=
1051    "#HowToConfigureICU">configuration note</a> the following configure options
1052    currently do not work on Windows with Microsoft's compiler. Some options can
1053    work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
1054    manually editing the files is not recommended.</p>
1055
1056    <ul>
1057      <li><tt>--disable-renaming</tt></li>
1058
1059      <li><tt>--disable-threading</tt></li>
1060
1061      <li><tt>--enable-tracing</tt></li>
1062
1063      <li><tt>--enable-rpath</tt></li>
1064
1065      <li><tt>--with-iostream</tt></li>
1066
1067      <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
1068      defined in user code that links against ICU's static libraries.)</li>
1069
1070      <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
1071      not work in this mode. Manual packaging is required to use this mode.)</li>
1072    </ul>
1073
1074    <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
1075    To Build And Install On UNIX</a></h3>
1076
1077    <p>Building International Components for Unicode on UNIX requires:</p>
1078
1079    <ul>
1080      <li>A C++ compiler installed on the target machine (for example: gcc, CC,
1081      xlC_r, aCC, cxx, etc...).</li>
1082
1083      <li>An ANSI C compiler installed on the target machine (for example:
1084      cc).</li>
1085
1086      <li>A recent version of GNU make (3.80+).</li>
1087
1088      <li>For a list of z/OS tools please view the <a href="#HowToBuildZOS">z/OS
1089      build section</a> of this document for further details.</li>
1090    </ul>
1091
1092    <p>Here are the steps to build ICU:</p>
1093
1094    <ol>
1095      <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
1096      icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d &lt;
1097      icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li>
1098
1099      <li>Change directory to the "icu/source".</li>
1100
1101      <li>Run <tt>"chmod +x runConfigureICU configure install-sh"</tt> because
1102      these files may have the wrong permissions.</li>
1103
1104      <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt>
1105      script for your platform. (See <a href="#HowToConfigureICU">configuration
1106      note</a> below).</li>
1107
1108      <li>Type <tt>"gmake"</tt> (or "make" if GNU make is the default make on
1109      your platform) to compile the libraries and all the data files. The proper
1110      name of the GNU make command is printed at the end of the configuration
1111      run, as in "You must use gmake to compile ICU".</li>
1112
1113      <li>Optionally, type <tt>"gmake check"</tt> to run the test suite, which
1114      checks for ICU's functionality integrity (See <a href=
1115      "#HowToTestWithoutGmake">testing note</a> below).</li>
1116
1117      <li>Type <tt>"gmake install"</tt> to install ICU. If you used the --prefix=
1118      option on configure or runConfigureICU, ICU will be installed to the
1119      directory you specified. (See <a href="#HowToInstallICU">installation
1120      note</a> below).</li>
1121    </ol>
1122
1123    <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
1124    NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
1125    to run it and a list of supported platforms. You may also want to type
1126    <tt>"./configure --help"</tt> to print the available configure options that
1127    you may want to give runConfigureICU. If you are not using the
1128    runConfigureICU script, or your platform is not supported by the script, you
1129    may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
1130    type <tt>"./configure"</tt>.
1131    HP-UX users, please see this <a href="#ImportantNotesHPUX">note regarding
1132    HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
1133    please see this <a href="#ImportantNotesSolaris">note regarding Solaris
1134    multithreaded build issues</a>.</p>
1135
1136    <p>ICU is built with strict compiler warnings enabled by default.  If this
1137    causes excessive numbers of warnings on your platform, use the --disable-strict
1138    option to configure to reduce the warning level.</p>
1139
1140    <p><a name="HowToTestWithoutGmake" id="HowToTestWithoutGmake"><strong>Running
1141    The Tests From The Command Line NOTE:</strong></a> You may have to set
1142    certain variables if you with to run test programs individually, that is
1143    apart from "gmake check". The environment variable <strong>ICU_DATA</strong>
1144    can be set to the full pathname of the data directory to indicate where the
1145    locale data files and conversion mapping tables are when you are not using
1146    the shared library (e.g. by using the .dat archive or the individual data
1147    files). The trailing "/" is required after the directory name (e.g.
1148    "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
1149    not acceptable). You do not need to set <strong>ICU_DATA</strong> if the
1150    complete shared data library is in your library path.</p>
1151
1152    <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
1153    NOTE:</strong></a> Some platforms use package management tools to control the
1154    installation and uninstallation of files on the system, as well as the
1155    integrity of the system configuration. You may want to check if ICU can be
1156    packaged for your package management tools by looking into the "packaging"
1157    directory. (Please note that if you are using a snapshot of ICU from Subversion, it
1158    is probable that the packaging scripts or related files are not up to date
1159    with the contents of ICU at this time, so use them with caution).</p>
1160
1161    <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
1162    Build And Install On z/OS (OS/390)</a></h3>
1163
1164    <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
1165    tests only the z/OS installation. You install ICU in a z/OS UNIX system
1166    services file system such as HFS or zFS. On this platform, it is important
1167    that you understand a few details:</p>
1168
1169    <ul>
1170      <li>The makedep and GNU make tools are required for building ICU. If it
1171      is not already installed on your system, it is available at the <a href=
1172      "http://www.ibm.com/servers/eserver/zseries/zos/unix/redbook/">z/OS UNIX -
1173      Tools and Toys</a> site. The PATH environment variable should be updated to
1174      contain the location of this executable prior to build. Failure to add these
1175      tools to your PATH will cause ICU build failures or cause pkgdata to fail
1176      to run.</li>
1177
1178      <li>Since USS does not support using the mmap() function over NFS, it is
1179      recommended that you build ICU on a local filesystem. Once ICU has been
1180      built, you should not have this problem while using ICU when the data
1181      library has been built as a shared library, which is this is the default
1182      setting.</li>
1183
1184      <li>Encoding considerations: The source code assumes that it is compiled
1185      with codepage ibm-1047 (to be exact, the UNIX System Services variant of
1186      it). The pax command converts all of the source code files from ASCII to
1187      codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
1188      must not be converted, or must be converted back to their original state.
1189      You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> script
1190      to do this for you automatically. It will unpackage the tar file and
1191      convert all the necessary files for you automatically.</li>
1192
1193      <li>z/OS supports both native S/390 hexadecimal floating point and (with
1194      OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
1195      time option. Applications built with IEEE should use ICU DLLs that are
1196      built with IEEE (and vice versa). The environment variable IEEE390=0 will
1197      cause the z/OS version of ICU to be built without IEEE floating point
1198      support and use the native hexadecimal floating point. By default ICU is
1199      built with IEEE 754 support. Native floating point support is sufficient
1200      for codepage conversion, resource bundle and UnicodeString operations, but
1201      the Format APIs require IEEE binary floating point.</li>
1202
1203      <li>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
1204      bring performance improvement opportunities to call-intensive C and C++
1205      applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
1206      you are considering using XPLINK in your application that uses ICU, you
1207      should consider building the XPLINK-enabled version of ICU. You need to
1208      set ICU's environment variable <code>OS390_XPLINK=1</code> prior to
1209      invoking the make process to produce binaries that are enabled for
1210      XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
1211      requires the PTF PQ69418 to build XPLINK enabled binaries.</li>
1212
1213      <li>Currently in ICU 3.0, there is an issue with building on z/OS without
1214      XPLINK and with the C++ iostream. By default, the iostream library on z/OS
1215      is XPLINK enabled. If you are not building an XPLINK enabled version of
1216      ICU, you should use the <code>--with-iostream=old</code> configure option
1217      when using runConfigureICU. This will prevent applications that use the
1218      icuio library from crashing.</li>
1219
1220      <li>The rest of the instructions for building and testing ICU on z/OS with
1221      UNIX System Services are the same as the <a href="#HowToBuildUNIX">How To
1222      Build And Install On UNIX</a> section.</li>
1223    </ul>
1224
1225    <h4>z/OS (Batch/PDS) support outside the UNIX system services
1226    environment</h4>
1227
1228    <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
1229    addition, there is a z/OS specific environment variable (OS390BATCH) to build
1230    some libraries into the z/OS native file system. This is useful, for example,
1231    when your application is externalized via Job Control Language (JCL).</p>
1232
1233    <p>The OS390BATCH environment variable enables non-UNIX support including the
1234    batch environment. When OS390BATCH is set, the libicui18n<i>XX</i>.dll,
1235    libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.dll binaries are built into
1236    data sets (the native file system). Turning on OS390BATCH does not turn off
1237    the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
1238    always be created.</p>
1239
1240    <p>Two additional environment variables indicate the names of the z/OS data
1241    sets to use. The LOADMOD environment variable identifies the name of the data
1242    set that contains the dynamic link libraries (DLLs) and the LOADEXP
1243    environment variable identifies the name of the data set that contains the
1244    side decks, which are normally the files with the .x suffix in the UNIX file
1245    system.</p>
1246
1247    <p>A data set is roughly equivalent to a UNIX or Windows file. For most kinds
1248    of data sets the operating system maintains record boundaries. UNIX and
1249    Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
1250    data set of these two types contains a directory. It is like a UNIX
1251    directory. Each "file" is called a "member". Each member name is limited to
1252    eight bytes, normally EBCDIC.</p>
1253
1254    <p>Here is an example of some environment variables that you can set prior to
1255    building ICU:</p>
1256<pre>
1257<samp>OS390BATCH=1
1258LOADMOD=<i>USER</i>.ICU.LOAD
1259LOADEXP=<i>USER</i>.ICU.EXP</samp>
1260</pre>
1261
1262    <p>The PDS member names for the DLL file names are as follows:</p>
1263<pre>
1264<samp>IXMI<i>XX</i>IN --&gt; libicui18n<i>XX</i>.dll
1265IXMI<i>XX</i>UC --&gt; libicuuc<i>XX</i>.dll
1266IXMI<i>XX</i>DA --&gt; libicudt<i>XX</i>e.dll</samp>
1267</pre>
1268
1269    <p>You should point the LOADMOD environment variable at a partitioned data
1270    set extended (PDSE) and point the LOADEXP environment variable at a
1271    partitioned data set (PDS). The PDSE can be allocated with the following
1272    attributes:</p>
1273<pre>
1274<samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
1275Management class. . : <i>**None**</i>
1276Storage class . . . : <i>BASE</i>
1277Volume serial . . . : <i>TSO007</i>
1278Device type . . . . : <i>3390</i>
1279Data class. . . . . : <i>LOAD</i>
1280Organization  . . . : PO
1281Record format . . . : U
1282Record length . . . : 0
1283Block size  . . . . : <i>32760</i>
12841st extent cylinders: 1
1285Secondary cylinders : 5
1286Data set name type  : LIBRARY</samp>
1287</pre>
1288
1289    <p>The PDS can be allocated with the following attributes:</p>
1290<pre>
1291<samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
1292Management class. . : <i>**None**</i>
1293Storage class . . . : <i>BASE</i>
1294Volume serial . . . : <i>TSO007</i>
1295Device type . . . . : <i>3390</i>
1296Data class. . . . . : <i>**None**</i>
1297Organization  . . . : PO
1298Record format . . . : FB
1299Record length . . . : 80
1300Block size  . . . . : <i>3200</i>
13011st extent cylinders: 3
1302Secondary cylinders : 3
1303Data set name type  : PDS</samp>
1304</pre>
1305
1306    <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
1307    "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>
1308
1309	<div class="note" style="font-size: 2em;"><b style="color: red">Note:</b> At the time of ICU 4.2's release, there were known issues in building on the IBM i family. Please see the <a href="http://icu-project.org/download/4.2.html#i">ICU 4.2 download page</a> for the latest news.</div>
1310
1311    <p>Before you start building ICU, ICU requires the following:</p>
1312
1313    <ul>
1314      <li>QSHELL interpreter installed (install base option 30, operating system)
1315      <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>
1316
1317      <li>ILE C/C++ Compiler installed on the system
1318
1319      <li>The latest GNU facilities (You can get the GNU facilities
1320      from <a href=
1321      "http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html">
1322      http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>).
1323      Older versions may not work properly.</li>
1324    </ul>
1325
1326    <p>The following describes how to setup and build ICU. For background
1327    information, you should look at the <a href="#HowToBuildUNIX">UNIX build
1328    instructions</a>.</p>
1329
1330    <ol>
1331      <li>
1332        Create target library. This library will be the target for the
1333        resulting modules, programs and service programs. You will specify this
1334        library on the OUTPUTDIR environment variable.
1335<pre>
1336<samp>CRTLIB LIB(<i>libraryname</i>)
1337ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>')</samp>
1338</pre>
1339      </li>
1340
1341      <li>
1342      Set up the following environment variables and job characteristics in your build process
1343<pre>
1344<samp>ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake')
1345CHGJOB CCSID(37)</samp>
1346</pre>
1347
1348      <li>Run <tt>'QSH'</tt></li>
1349
1350      <li>Run gunzip on the ICU source code compressed tar archive
1351      (icu-<i>X</i>.<i>Y</i>.tgz).</li>
1352
1353      <li>Run unpax-icu.sh on the tar file generated from the previous step.</li>
1354
1355      <li>Change your current directory to icu/source.</li>
1356
1357      <li>Run <tt>'./runConfigureICU IBMi'</tt>  (See <a href="#HowToConfigureICU">configuration
1358      note</a> for details).</li></li>
1359
1360      <li>Run <tt>'gmake'</tt> to build ICU.</li>
1361
1362      <li>Run <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> to build and run the tests.
1363      You can look at the <a href=
1364      "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
1365      iSeries Information Center</a> for more details regarding the running of multiple threads
1366      on IBM i.</li>
1367    </ol>
1368
1369      <!-- cross -->
1370    <h3><a name="HowToCrossCompileICU" href="#HowToCrossCompileICU" id="HowToCrossCompileICU">How To Cross Compile ICU</a></h3>
1371		<p>This section will explain how to build ICU on one platform, but to produce binaries intended to run on another. This is commonly known as a cross compile.</p>
1372		<p>Normally, in the course of a build, ICU needs to run the tools that it builds in order to generate and package data and test-data.In a cross compilation setting, ICU is built on a different system from that which it eventually runs on. An example might be, if you are building for a small/headless system (such as an embedded device), or a system where you can't easily run the ICU command line tools (any non-UNIX-like system).</p>
1373		<p>To reduce confusion, we will here refer to the "A" and the "B" system.System "A" is the actual system we will be running on- the only requirements on it is are it is able to build ICU from the command line targetting itself (with configure or runConfigureICU), and secondly, that it also contain the correct toolchain for compiling and linking for the resultant platform, referred to as the "B" system.</p>
1374		<p>The autoconf docs use the term "build" for A, and "host" for B. More details at: <a href="http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html#Specifying-Names">http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html</a></p>
1375		<p>Three initially-empty directories will be used in this example:</p>
1376		<table summary="Three directories used in this example" class="docTable">
1377			<tr>
1378				<th align=left>/icu</th><td>a copy of the ICU source</td>
1379			</tr>
1380			<tr>
1381				<th align=left>/buildA</th><td>an empty directory, it will contain ICU built for A<br>(MacOSX in this case)</td>
1382			</tr>
1383			<tr>
1384				<th align=left>/buildB</th><td>an empty directory, it will contain ICU built for B<br>(HaikuOS in this case)</td>
1385			</tr>
1386		</table>
1387
1388		<ol>
1389		<li>Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.</li>
1390		<li>Build ICU in /buildA normally (using runConfigureICU or configure):
1391<pre class="samp">cd /buildA
1392sh /icu/source/runConfigureICU <strong>MacOSX</strong>
1393gnumake
1394</pre>
1395		</li>
1396		<li>Set PATH or other variables as needed, such as CPPFLAGS.</li>
1397		<li>Build ICU in /buildB<br>
1398			<div class="note"><b>Note:</b> "<code>--with-cross-build</code>" takes an absolute path.</div>
1399<pre class="samp">cd /buildB
1400sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
1401gnumake</pre>
1402		</li>
1403		<li>Tests and testdata can be built with "gnumake tests".</li>
1404	</ol>
1405      <!-- end cross -->
1406
1407    <!-- end build environment -->
1408
1409    <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
1410    Package ICU</a></h2>
1411
1412    <p>There are many ways that a person can package ICU with their software
1413    products. Usually only the libraries need to be considered for packaging.</p>
1414
1415    <p>On UNIX, you should use "<tt>gmake install</tt>" to make it easier to
1416    develop and package ICU. The bin, lib and include directories are needed to
1417    develop applications that use ICU. These directories will be created relative
1418    to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a href=
1419    "#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on Windows,
1420    a similar directory structure is built.</p>
1421
1422    <p>When changes have been made to the standard ICU distribution, it is
1423    recommended that at least one of the following guidelines be followed for
1424    special packaging.</p>
1425
1426    <ol>
1427      <li>Add a suffix name to the library names. This can be done with the
1428      --with-library-suffix configure option.</li>
1429
1430      <li>The installation script should install the ICU libraries into the
1431      application's directory.</li>
1432    </ol>
1433
1434    <p>Following these guidelines prevents other applications that use a standard
1435    ICU distribution from conflicting with any libraries that you need. On
1436    operating systems that do not have a standard C++ ABI (name mangling) for
1437    compilers, it is recommended to do this special packaging anyway. More
1438    details on customizing ICU are available in the <a href=
1439    "http://www.icu-project.org/userguide/">User's Guide</a>. The <a href=
1440    "#SourceCode">ICU Source Code Organization</a> section of this readme.html
1441    gives a more complete description of the libraries.</p>
1442
1443    <table class="docTable" summary=
1444    "ICU has several libraries for you to use.">
1445      <caption>
1446        Here is an example of libraries that are frequently packaged.
1447      </caption>
1448
1449      <tr>
1450        <th scope="col">Library Name</th>
1451
1452        <th scope="col">Windows Filename</th>
1453
1454        <th scope="col">Linux Filename</th>
1455
1456        <th scope="col">Comment</th>
1457      </tr>
1458
1459      <tr>
1460        <td>Data Library</td>
1461
1462        <td>icudt<i>XY</i>l.dll</td>
1463
1464        <td>libicudata.so.<i>XY</i>.<i>Z</i></td>
1465
1466        <td>Data required by the Common and I18n libraries. There are many ways
1467        to package and <a href=
1468        "http://www.icu-project.org/userguide/icudata.html">customize this
1469        data</a>, but by default this is all you need.</td>
1470      </tr>
1471
1472      <tr>
1473        <td>Common Library</td>
1474
1475        <td>icuuc<i>XY</i>.dll</td>
1476
1477        <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>
1478
1479        <td>Base library required by all other ICU libraries.</td>
1480      </tr>
1481
1482      <tr>
1483        <td>Internationalization (i18n) Library</td>
1484
1485        <td>icuin<i>XY</i>.dll</td>
1486
1487        <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>
1488
1489        <td>A library that contains many locale based internationalization (i18n)
1490        functions.</td>
1491      </tr>
1492
1493      <tr>
1494        <td>Layout Engine</td>
1495
1496        <td>icule<i>XY</i>.dll</td>
1497
1498        <td>libicule.so.<i>XY</i>.<i>Z</i></td>
1499
1500        <td>An optional engine for doing font layout.</td>
1501      </tr>
1502
1503      <tr>
1504        <td>Layout Extensions Engine</td>
1505
1506        <td>iculx<i>XY</i>.dll</td>
1507
1508        <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
1509
1510        <td>An optional engine for doing font layout that uses parts of ICU.</td>
1511      </tr>
1512
1513      <tr>
1514        <td>ICU I/O (Unicode stdio) Library</td>
1515
1516        <td>icuio<i>XY</i>.dll</td>
1517
1518        <td>libicuio.so.<i>XY</i>.<i>Z</i></td>
1519
1520        <td>An optional library that provides a stdio like API with Unicode
1521        support.</td>
1522      </tr>
1523
1524      <tr>
1525        <td>Tool Utility Library</td>
1526
1527        <td>icutu<i>XY</i>.dll</td>
1528
1529        <td>libicutu.so.<i>XY</i>.<i>Z</i></td>
1530
1531        <td>An internal library that contains internal APIs that are only used by
1532        ICU's tools. If you do not use ICU's tools, you do not need this
1533        library.</td>
1534      </tr>
1535    </table>
1536
1537    <p>Normally only the above ICU libraries need to be considered for packaging.
1538    The versionless symbolic links to these libraries are only needed for easier
1539    development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of the name are the
1540    version numbers of ICU. For example, ICU 2.0.2 would have the name
1541    libicuuc.so.20.2 for the common library. The exact format of the library
1542    names can vary between platforms due to how each platform can handles library
1543    versioning.</p>
1544
1545    <h2><a name="ImportantNotes" href="#ImportantNotes" id=
1546    "ImportantNotes">Important Notes About Using ICU</a></h2>
1547
1548    <h3><a name="ImportantNotesMultithreaded" href="#ImportantNotesMultithreaded"
1549    id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
1550    Environment</a></h3>
1551
1552    <p>Some versions of ICU require calling the <code>u_init()</code> function
1553    from <code>uclean.h</code> to ensure that ICU is initialized properly. In
1554    those ICU versions, <code>u_init()</code> must be called before ICU is used
1555    from multiple threads. There is no harm in calling <code>u_init()</code> in a
1556    single-threaded application, on a single-CPU machine, or in other cases where
1557    <code>u_init()</code> is not required.</p>
1558
1559    <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
1560    to load at least one ICU data file. Assuming that all data files are packaged
1561    together (or are in the same folder in files mode), a failure code from
1562    <code>u_init()</code> usually means that the data cannot be found. In this
1563    case, the data may not be installed properly, or the application may have
1564    failed to call <code>udata_setCommonData()</code> or
1565    <code>u_setDataDirectory()</code> which specify to ICU where it can find its
1566    data.</p>
1567
1568    <p>Since <code>u_init()</code> will load only one or two data files, it
1569    cannot guarantee that all of the data that an application needs is available.
1570    It cannot check for all data files because the set of files is customizable,
1571    and some ICU services work without loading any data at all. An application
1572    should always check for error codes when opening ICU service objects (using
1573    <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
1574    etc.).</p>
1575
1576    <h4>ICU 3.4 and later</h4>
1577
1578    <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
1579    without performance penalty by hardcoding the core Unicode properties data,
1580    at the cost of some flexibility. (For details see Jitterbug 4497.)</p>
1581
1582    <p><code>u_init()</code> can be used to check for data loading. It tries to
1583    load the converter alias table (<code>cnvalias.icu</code>).</p>
1584
1585    <h4>ICU 2.6..3.2</h4>
1586
1587    <p>These ICU versions require a call to <code>u_init()</code> before
1588    multi-threaded use. The services that are directly affected are those that
1589    don't have a service object and need to be fast: normalization and character
1590    properties.</p>
1591
1592    <p><code>u_init()</code> loads and initializes the data files for
1593    normalization and character properties (<code>unorm.icu</code> and
1594    <code>uprops.icu</code>) and can therefore also be used to check for data
1595    loading.</p>
1596
1597    <h4>ICU 2.4 and earlier</h4>
1598
1599    <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
1600    multi-CPU platforms where the CPUs implement weak memory coherency. These
1601    CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
1602    defined yet.</p>
1603
1604    <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
1605    "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
1606    HP-UX</a></h4>
1607
1608    <p>If you are building ICU with a newer aCC compiler and you are planning on
1609    using the older &lt;iostream.h&gt; instead of the newer &lt;iostream&gt;, you
1610    will need to use a special configure flag before building ICU. By default,
1611    the aCC <a href="http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a>
1612    flag is used on HP-UX when the compiler supports that option in order to make
1613    ICU thread safe with RogueWave and other libraries using the 2.0 Standard C++
1614    library. Your applications that use ICU will also need to use the <a href=
1615    "http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a> compiler flag.
1616    To turn off this behavior in ICU, you will need to use the --with-iostream=old
1617    configure option when you first use runConfigureICU.</p>
1618
1619    <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
1620    "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
1621    Solaris</a></h4>
1622
1623    <h5>Linking on Solaris</h5>
1624
1625    <p>In order to avoid synchronization and threading issues, developers are
1626    <strong>suggested</strong> to strictly follow the compiling and linking
1627    guidelines for multithreaded applications, specified in the following
1628    document from Sun Microsystems. Most notably, pay strict attention to the
1629    following statements from Sun:</p>
1630
1631    <blockquote>
1632      <p>To use libthread, specify -lthread before -lc on the ld command line, or
1633      last on the cc command line.</p>
1634
1635      <p>To use libpthread, specify -lpthread before -lc on the ld command line,
1636      or last on the cc command line.</p>
1637    </blockquote>
1638
1639    <p>Failure to do this may cause spurious lock conflicts, recursive mutex
1640    failure, and deadlock.</p>
1641
1642    <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
1643    Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
1644     <a href=
1645    "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
1646
1647    <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
1648    "ImportantNotesWindows">Windows Platform</a></h3>
1649
1650    <p>If you are building on the Win32 platform, it is important that you
1651    understand a few of the following build details.</p>
1652
1653    <h4>DLL directories and the PATH setting</h4>
1654
1655    <p>As delivered, the International Components for Unicode build as several
1656    DLLs, which are placed in the "<i>&lt;ICU&gt;</i>\bin" directory. You must
1657    add this directory to the PATH environment variable in your system, or any
1658    executables you build will not be able to access International Components for
1659    Unicode libraries. Alternatively, you can copy the DLL files into a directory
1660    already in your PATH, but we do not recommend this. You can wind up with
1661    multiple copies of the DLL and wind up using the wrong one.</p>
1662
1663    <h4><a name="ImportantNotesWindowsPath" id=
1664    "ImportantNotesWindowsPath">Changing your PATH</a></h4>
1665
1666    <p><strong>Windows 2000/XP</strong>: Use the System Icon in the Control
1667    Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
1668    button. Select the variable PATH in the lower box, and select the lower
1669    "Edit..." button. In the "Variable Value" box, append the string
1670    ";<i>&lt;ICU&gt;</i>\bin" to the end of the path string. If there is
1671    nothing there, just type in "<i>&lt;ICU&gt;</i>\bin". Click the Set button,
1672    then the OK button.</p>
1673
1674    <p>Note: When packaging a Windows application for distribution and
1675    installation on user systems, copies of the ICU DLLs should be included with
1676    the application, and installed for exclusive use by the application. This is
1677    the only way to insure that your application is running with the same version
1678    of ICU, built with exactly the same options, that you developed and tested
1679    with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
1680    phrase "DLL hell" on <a href=
1681    "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>
1682
1683    <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
1684    "ImportantNotesUNIX">UNIX Type Platform</a></h3>
1685
1686    <p>If you are building on a UNIX platform, and if you are installing ICU in a
1687    non-standard location, you may need to add the location of your ICU libraries
1688    to your <strong>LD_LIBRARY_PATH</strong> or <strong>LIBPATH</strong>
1689    environment variable (or the equivalent runtime library path environment
1690    variable for your system). The ICU libraries may not link or load properly
1691    without doing this.</p>
1692
1693    <p>Note that if you do not want to have to set this variable, you may instead
1694    use the --enable-rpath option at configuration time. This option will
1695    instruct the linker to always look for the libraries where they are
1696    installed. You will need to use the appropriate linker options when linking
1697    your own applications and libraries against ICU, too. Please refer to your
1698    system's linker manual for information about runtime paths. The use of rpath
1699    also means that when building a new version of ICU you should not have an
1700    older version installed in the same place as the new version's installation
1701    directory, as the older libraries will used during the build, instead of the
1702    new ones, likely leading to an incorrectly build ICU. This is the proper
1703    behavior of rpath.</p>
1704
1705    <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
1706    "PlatformDependencies">Platform Dependencies</a></h2>
1707
1708    <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
1709    "PlatformDependenciesNew">Porting To A New Platform</a></h3>
1710
1711    <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
1712    a few places where you will need to add or modify some files. If you need
1713    more help, you can always ask the <a href=
1714    "http://www.icu-project.org/contacts.html">icu-support mailing list</a>. Once
1715    you have finished porting ICU to a new platform, it is recommended that you
1716    contribute your changes back to ICU via the icu-support mailing list. This
1717    will make it easier for everyone to benefit from your work.</p>
1718
1719    <h4>Data For a New Platform</h4>
1720
1721    <p>For some people, it may not be necessary for completely build ICU. Most of
1722    the makefiles and build targets are for tools that are used for building
1723    ICU's data, and an application's data (when an application uses ICU resource
1724    bundles for its data).</p>
1725
1726    <p>Data files can be built on a different platform when both platforms share
1727    the same endianness and the same charset family. This assertion does not
1728    include platform dependent DLLs/shared/static libraries. For details see the
1729    User Guide <a href="http://www.icu-project.org/userguide/icudata.html">ICU
1730    Data</a> chapter.</p>
1731
1732    <p>ICU 3.6 removes the requirement that ICU be completely built in the native
1733    operating environment. It adds the icupkg tool which can be run on any
1734    platform to turn binary ICU data files from any one of the three formats into
1735    any one of the other data formats. This allows a application to use ICU data
1736    built anywhere to be used for any other target platform.</p>
1737
1738    <p><strong>WARNING!</strong> Building ICU without running the tests is not
1739    recommended. The tests verify that ICU is safe to use. It is recommended that
1740    you try to completely port and test ICU before using the libraries for your
1741    own application.</p>
1742
1743    <h4>Adapting Makefiles For a New Platform</h4>
1744
1745    <p>Try to follow the build steps from the <a href="#HowToBuildUNIX">UNIX</a>
1746    build instructions. If the configure script fails, then you will need to
1747    modify some files. Here are the usual steps for porting to a new
1748    platform:<br />
1749    </p>
1750
1751    <ol>
1752      <li>Create an mh file in icu/source/config/. You can use mh-linux or a
1753      similar mh file as your base configuration.</li>
1754
1755      <li>Modify icu/source/aclocal.m4 to recognize your platform's mh file.</li>
1756
1757      <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
1758      Macro define.</li>
1759
1760      <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
1761      icu/source/ without any options. The autoconf tool is standard on most
1762      Linux systems.</li>
1763
1764      <li>If you have any optimization options that you want to normally use, you
1765      can modify icu/source/runConfigureICU to specify those options for your
1766      platform.</li>
1767
1768      <li>Build and test ICU on your platform. It is very important that you run
1769      the tests. If you don't run the tests, there is no guarentee that you have
1770      properly ported ICU.</li>
1771    </ol>
1772
1773    <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
1774    "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>
1775
1776    <p>The platform dependencies have been mostly isolated into the following
1777    files in the common library. This information can be useful if you are
1778    porting ICU to a new platform.</p>
1779
1780    <ul>
1781      <li>
1782        <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br />
1783         <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, ppalmos.h,
1784        ..): Platform-dependent typedefs and defines:<br />
1785        <br />
1786
1787
1788        <ul>
1789          <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
1790          uint64_t etc.</li>
1791
1792          <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
1793          export</li>
1794
1795          <li>&lt;iostream&gt; usability</li>
1796
1797          <li>Thread safety usability</li>
1798        </ul>
1799        <br />
1800      </li>
1801
1802      <li>
1803        <strong>unicode/putil.h, putil.c</strong>: platform-dependent
1804        implementations of various functions that are platform dependent:<br />
1805        <br />
1806
1807
1808        <ul>
1809          <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
1810          handling special floating point values.</li>
1811
1812          <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
1813          platform specific time and time zone information.</li>
1814
1815          <li>u_getDataDirectory for getting the default data directory.</li>
1816
1817          <li>uprv_getDefaultLocaleID for getting the default locale
1818          setting.</li>
1819
1820          <li>uprv_getDefaultCodepage for getting the default codepage
1821          encoding.</li>
1822        </ul>
1823        <br />
1824      </li>
1825
1826      <li>
1827        <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
1828        multithreaded applications. If you wish to use International Components
1829        for Unicode in a multithreaded application, you must provide a
1830        synchronization primitive that the classes can use to protect their
1831        global data against simultaneous modifications. We already supply working
1832        implementations for many platforms that ICU builds on.<br />
1833        <br />
1834      </li>
1835
1836      <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
1837      otherwise reading or loading files into memory. All access by ICU to data
1838      from files makes use of these functions.<br />
1839      <br />
1840      </li>
1841
1842      <li>Using platform specific #ifdef macros are highly discouraged outside of
1843      the scope of these files. When the source code gets updated in the future,
1844      these #ifdef's can cause testing problems for your platform.</li>
1845    </ul>
1846    <hr />
1847
1848    <p>Copyright &copy; 1997-2009 International Business Machines Corporation and
1849    others. All Rights Reserved.<br />
1850     IBM Globalization Center of Competency - San Jos&eacute;<br />
1851     4400 North First Street<br />
1852     San Jos&eacute;, CA 95134<br />
1853     USA</p>
1854  </body>
1855</html>
1856
1857