• Home
Name Date Size #Lines LOC

..--

allinone/03-May-2024-597596

common/03-May-2024-192,977111,420

config/03-May-2024-3,6322,884

data/03-May-2024-1,274,4111,240,760

extra/03-May-2024-5,8264,723

i18n/03-May-2024-196,227108,420

io/03-May-2024-7,9794,888

layout/03-May-2024-27,77818,480

layoutex/03-May-2024-5,8513,270

samples/03-May-2024-29,62522,794

stubdata/03-May-2024-4,2443,854

test/03-May-2024-919,933847,474

tools/03-May-2024-84,06162,967

APIChangeReport.htmlD03-May-2024167 KiB3,9883,986

APIChangeReport441.htmlD03-May-202411.5 KiB358355

Android.mkD03-May-2024781 258

CleanSpec.mkD03-May-20242.2 KiB500

Doxyfile.inD03-May-20249.7 KiB234229

Makefile.inD03-May-20249.8 KiB268190

Makefile.orgD03-May-20246.7 KiB210139

NOTICED03-May-20245.4 KiB9672

ThirdPartyProject.propD03-May-2024242 109

aclocal.m4D03-May-202417.4 KiB487454

config.guessD03-May-202443.9 KiB1,5301,318

config.logD03-May-202430.7 KiB1,030995

config.statusD03-May-202434.7 KiB1,048856

config.subD03-May-202432.6 KiB1,6591,514

configureD03-May-2024351.7 KiB12,80310,992

configure.inD03-May-202439.3 KiB1,3581,232

configure.mkD03-May-2024670 197

icu4c.cssD03-May-20246.3 KiB447365

icudefs.mk.inD03-May-20248.8 KiB272222

install-shD03-May-20245.5 KiB252153

license.htmlD03-May-20241.9 KiB5246

mkinstalldirsD03-May-2024935 4423

readme.htmlD03-May-202477 KiB1,9011,460

runConfigureICUD03-May-202410.1 KiB387349

unicode-license.txtD03-May-20242.8 KiB4841

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