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