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 © 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 & 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> —
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> —
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> —
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> —
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> —
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> —
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> —
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> —
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> —
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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></i>/source/<b>io</b>/</td>
409
410 <td>Contains the ICU I/O library.</td>
411 </tr>
412
413 <tr>
414 <td><i><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></i>/source/<b>tools</b>/</td>
519
520 <td>Tools for generating the data files. Data files are generated by
521 invoking <i><ICU></i>/source/data/build/makedata.bat on Win32 or
522 <i><ICU></i>/source/make on UNIX.</td>
523 </tr>
524
525 <tr>
526 <td><i><ICU></i>/source/<b>samples</b>/</td>
527
528 <td>Various sample programs that use ICU</td>
529 </tr>
530
531 <tr>
532 <td><i><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></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><ICU></i>\bin\. The headers are in
928 <i><ICU></i>\include\ and the link libraries are in
929 <i><ICU></i>\lib\. To install the ICU runtime on a machine, or ship
930 it with your application, copy the needed components from
931 <i><ICU></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><ICU></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 <
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
1258 LOADMOD=<i>USER</i>.ICU.LOAD
1259 LOADEXP=<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 --> libicui18n<i>XX</i>.dll
1265 IXMI<i>XX</i>UC --> libicuuc<i>XX</i>.dll
1266 IXMI<i>XX</i>DA --> 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
1275 Management class. . : <i>**None**</i>
1276 Storage class . . . : <i>BASE</i>
1277 Volume serial . . . : <i>TSO007</i>
1278 Device type . . . . : <i>3390</i>
1279 Data class. . . . . : <i>LOAD</i>
1280 Organization . . . : PO
1281 Record format . . . : U
1282 Record length . . . : 0
1283 Block size . . . . : <i>32760</i>
1284 1st extent cylinders: 1
1285 Secondary cylinders : 5
1286 Data 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
1292 Management class. . : <i>**None**</i>
1293 Storage class . . . : <i>BASE</i>
1294 Volume serial . . . : <i>TSO007</i>
1295 Device type . . . . : <i>3390</i>
1296 Data class. . . . . : <i>**None**</i>
1297 Organization . . . : PO
1298 Record format . . . : FB
1299 Record length . . . : 80
1300 Block size . . . . : <i>3200</i>
1301 1st extent cylinders: 3
1302 Secondary cylinders : 3
1303 Data 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>)
1337 ADDENVVAR 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')
1345 CHGJOB 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
1392 sh /icu/source/runConfigureICU <strong>MacOSX</strong>
1393 gnumake
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
1400 sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
1401 gnumake</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 <iostream.h> instead of the newer <iostream>, 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><ICU></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><ICU></i>\bin" to the end of the path string. If there is
1671 nothing there, just type in "<i><ICU></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><iostream> 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 © 1997-2009 International Business Machines Corporation and
1849 others. All Rights Reserved.<br />
1850 IBM Globalization Center of Competency - San José<br />
1851 4400 North First Street<br />
1852 San José, CA 95134<br />
1853 USA</p>
1854 </body>
1855 </html>
1856
1857