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