Blame readme.html

Packit 85c618
Packit 85c618
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Packit 85c618
Packit 85c618
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
Packit 85c618
  <head>
Packit 85c618
    <title>ReadMe for ICU 57.1</title>
Packit 85c618
    
Packit 85c618
    "Copyright (c) 1997-2016 IBM Corporation and others. All Rights Reserved." />
Packit 85c618
    
Packit 85c618
    "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
Packit 85c618
    
Packit 85c618
    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
Packit 85c618
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
Packit 85c618
	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
Packit 85c618
  </head>
Packit 85c618
Packit 85c618
Packit 85c618
    classes to use with the "body" -
Packit 85c618
        draft - if the release note is itself a draft (May be combined with the other two)
Packit 85c618
        rc  - if the release note is a release candidate
Packit 85c618
        milestone - if the release note is a milestone release
Packit 85c618
-->
Packit 85c618
Packit 85c618
  
Packit 85c618
  <body>
Packit 85c618
    

Note: This is a draft readme.

Packit 85c618
Packit 85c618
    

Packit 85c618
      DRAFT
Packit 85c618
      International Components for Unicode
Packit 85c618
      Release Candidate
Packit 85c618
      (Milestone Release)
Packit 85c618
      ICU 57.1 ReadMe
Packit 85c618
    
Packit 85c618
Packit 85c618
    
Packit 85c618
    

This is a development milestone release of ICU

Packit 85c618
      This milestone is intended for those wishing to get an early look at new features and API changes.
Packit 85c618
      It is not recommended for production use.

Packit 85c618
Packit 85c618
    
Packit 85c618
    

This is a release candidate version of ICU4C.

Packit 85c618
      It is not recommended for production use.

Packit 85c618
Packit 85c618
    

Last updated: 2016-Mar-21

Packit 85c618
      Copyright © 1997-2016 International Business Machines Corporation and
Packit 85c618
      others. All Rights Reserved.

Packit 85c618
    
Packit 85c618
    
Packit 85c618
Packit 85c618
    

Table of Contents

Packit 85c618
Packit 85c618
    
    Packit 85c618
          
  • Introduction
  • Packit 85c618
    Packit 85c618
          
  • Getting Started
  • Packit 85c618
    Packit 85c618
          
  • What Is New In This release?
  • Packit 85c618
    Packit 85c618
          
  • How To Download the Source Code
  • Packit 85c618
    Packit 85c618
          
  • ICU Source Code Organization
  • Packit 85c618
    Packit 85c618
          
  • Packit 85c618
            How To Build And Install ICU
    Packit 85c618
    Packit 85c618
            
      Packit 85c618
                
    • Recommended Build Options
    • Packit 85c618
      Packit 85c618
                
    • User-Configurable Settings
    • Packit 85c618
      Packit 85c618
                
    • Windows
    • Packit 85c618
      Packit 85c618
                
    • Cygwin
    • Packit 85c618
      Packit 85c618
                
    • UNIX
    • Packit 85c618
      Packit 85c618
                
    • z/OS (os/390)
    • Packit 85c618
      Packit 85c618
                
    • IBM i family (IBM i, i5/OS, OS/400)
    • Packit 85c618
      Packit 85c618
      		  
    • How to Cross Compile ICU
    • Packit 85c618
              
      Packit 85c618
            
      Packit 85c618
      Packit 85c618
      Packit 85c618
            
    • How To Package ICU
    • Packit 85c618
      Packit 85c618
            
    • Packit 85c618
              Important Notes About Using ICU
      Packit 85c618
      Packit 85c618
              
        Packit 85c618
                  
      • Using ICU in a Multithreaded
      • Packit 85c618
                  Environment
        Packit 85c618
        Packit 85c618
                  
      • Windows Platform
      • Packit 85c618
        Packit 85c618
                  
      • UNIX Type Platforms
      • Packit 85c618
                
        Packit 85c618
              
        Packit 85c618
        Packit 85c618
              
      • Packit 85c618
                Platform Dependencies
        Packit 85c618
        Packit 85c618
                
          Packit 85c618
                    
        • Porting To A New
        • Packit 85c618
                    Platform
          Packit 85c618
          Packit 85c618
                    
        • Platform Dependent
        • Packit 85c618
                    Implementations
          Packit 85c618
                  
          Packit 85c618
                
          Packit 85c618
              
          Packit 85c618
              
          Packit 85c618
          Packit 85c618
              

          Packit 85c618
              "Introduction">Introduction
          Packit 85c618
          Packit 85c618
              

          Today's software market is a global one in which it is desirable to

          Packit 85c618
              develop and maintain one application (single source/single binary) that
          Packit 85c618
              supports a wide variety of languages. The International Components for
          Packit 85c618
              Unicode (ICU) libraries provide robust and full-featured Unicode services on
          Packit 85c618
              a wide variety of platforms to help this design goal. The ICU libraries
          Packit 85c618
              provide support for:

          Packit 85c618
          Packit 85c618
              
            Packit 85c618
                  
          • The latest version of the Unicode standard
          • Packit 85c618
            Packit 85c618
                  
          • Character set conversions with support for over 220 codepages
          • Packit 85c618
            Packit 85c618
                  
          • Locale data for more than 300 locales
          • Packit 85c618
            Packit 85c618
                  
          • Language sensitive text collation (sorting) and searching based on the
          • Packit 85c618
                  Unicode Collation Algorithm (=ISO 14651)
            Packit 85c618
            Packit 85c618
                  
          • Regular expression matching and Unicode sets
          • Packit 85c618
            Packit 85c618
                  
          • Transformations for normalization, upper/lowercase, script
          • Packit 85c618
                  transliterations (50+ pairs)
            Packit 85c618
            Packit 85c618
                  
          • Resource bundles for storing and accessing localized information
          • Packit 85c618
            Packit 85c618
                  
          • Date/Number/Message formatting and parsing of culture specific
          • Packit 85c618
                  input/output formats
            Packit 85c618
            Packit 85c618
                  
          • Calendar specific date and time manipulation
          • Packit 85c618
            Packit 85c618
                  
          • Complex text layout for Arabic, Hebrew, Indic and Thai
          • Packit 85c618
            Packit 85c618
                  
          • Text boundary analysis for finding characters, word and sentence
          • Packit 85c618
                  boundaries
            Packit 85c618
                
            Packit 85c618
            Packit 85c618
                

            ICU has a sister project ICU4J that extends the internationalization

            Packit 85c618
                capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
            Packit 85c618
                called ICU4C when a distinction is necessary.

            Packit 85c618
            Packit 85c618
                

            Packit 85c618
                "GettingStarted">Getting started
            Packit 85c618
            Packit 85c618
                

            This document describes how to build and install ICU on your machine. For

            Packit 85c618
                other information about ICU please see the following table of links.
            Packit 85c618
                 The ICU homepage also links to related information about writing
            Packit 85c618
                internationalized software.

            Packit 85c618
            Packit 85c618
                
            Packit 85c618
                  <caption>
            Packit 85c618
                    Here are some useful links regarding ICU and internationalization in
            Packit 85c618
                    general.
            Packit 85c618
                  </caption>
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    ICU, ICU4C & ICU4J Homepage
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://icu-project.org/">http://icu-project.org/
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    FAQ - Frequently Asked Questions about ICU
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://userguide.icu-project.org/icufaq">http://userguide.icu-project.org/icufaq
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    ICU User's Guide
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://userguide.icu-project.org/">http://userguide.icu-project.org/
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    How To Use ICU
            Packit 85c618
            Packit 85c618
                    http://userguide.icu-project.org/howtouseicu
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    Download ICU Releases
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://site.icu-project.org/download">http://site.icu-project.org/download
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    ICU4C API Documentation Online
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://icu-project.org/apiref/icu4c/">http://icu-project.org/apiref/icu4c/
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    Online ICU Demos
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos
            Packit 85c618
                  
            Packit 85c618
            Packit 85c618
                  
            Packit 85c618
                    Contacts and Bug Reports/Feature Requests
            Packit 85c618
            Packit 85c618
                    
            Packit 85c618
                    "http://site.icu-project.org/contacts">http://site.icu-project.org/contacts
            Packit 85c618
                  
            Packit 85c618
                
            Packit 85c618
            Packit 85c618
                

            Important: Please make sure you understand the

            Packit 85c618
                "http://source.icu-project.org/repos/icu/icu/trunk/LICENSE">Copyright and License Information.

            Packit 85c618
            Packit 85c618
                

            What is new in this

            Packit 85c618
                release?
            Packit 85c618
            Packit 85c618
                

            API Changes

            Packit 85c618
                

            See the API Change Report for a complete

            Packit 85c618
                  list of APIs added, removed, or changed in this release.

            Packit 85c618
            Packit 85c618
                
            Packit 85c618
                

            ICU 57: Changes related to new CLDR data and specifications

            Packit 85c618
                
              Packit 85c618
                  	
            • Time formats may include the new day period characters b, B, and
            • Packit 85c618
                  	these may produced in response to the new skeleton character C used
              Packit 85c618
                  	with DateTimePatternGenerator.
              Packit 85c618
                  	
            • In day period rules, the use of "after" has been deprecated.
            • Packit 85c618
                  	
            • The measurement unit "proportion-karat" has been renamed to
            • Packit 85c618
                  	"concentr-karat".
              Packit 85c618
                  
              Packit 85c618
              Packit 85c618
                  
              Packit 85c618
                  

              ICU 56: COLON withdrawn as date/time pattern character

              Packit 85c618
                  

              In ICU 55, COLON was introduced as a date/time pattern character

              Packit 85c618
                    to be replaced by the value of the timeSeparator for the number
              Packit 85c618
                    system being used; a corresponding new UDateFormatField
              Packit 85c618
                    UDAT_TIME_SEPARATOR_FIELD was added. Use of COLON caused some
              Packit 85c618
                    backwards compatibility problems, so it is being withdrawn as a
              Packit 85c618
                    pattern character. However, UDAT_TIME_SEPARATOR_FIELD remains
              Packit 85c618
                    as does the mechanism for replacing a pattern character with the
              Packit 85c618
                    value of the timeSeparator; a new pattern character may be
              Packit 85c618
                    assigned in the future.

              Packit 85c618
              Packit 85c618
                  

              ICU 56: ICU Plugins are disabled by default

              Packit 85c618
                  

              ICU Plugins are now disabled by default. They may be enabled

              Packit 85c618
                    with the configure option
              Packit 85c618
                    <tt>--enable-plugins</tt> or by means of
              Packit 85c618
                    <tt>#define UCONFIG_ENABLE_PLUGINS</tt>.
              Packit 85c618
              	

              Packit 85c618
              Packit 85c618
                  
              Packit 85c618
                  

              ICU 55: Layout Engine breaking API change

              Packit 85c618
                  

              The LayoutEngine (already deprecated) has had the function

              Packit 85c618
                    <tt>LEFontInstance::getFontTable(LETag, size_t &length)</tt>
              Packit 85c618
                    since ICU 52. Its implementation was optional. In ICU 55, this
              Packit 85c618
                    version
              Packit 85c618
                    of <tt>getFontTable</tt> has been made pure virtual, and the
              Packit 85c618
                    version without a length (<tt>getFontTable(LETag)</tt>) has been
              Packit 85c618
                    completely removed. This is a breaking change for users who have
              Packit 85c618
                    not implemented the two-argument <tt>getFontTable()</tt>
              Packit 85c618
                    function in their <tt>LEFontInstance</tt> subclasses.
              Packit 85c618
                    The break is intentional, as the one-argument version cannot be
              Packit 85c618
                    made secure. See <tt>LEFontInstance</tt> api docs for more detail.
              Packit 85c618
                  

              Packit 85c618
              Packit 85c618
                  

              ICU 55: Deprecations in PluralRules (plurrule.h)

              Packit 85c618
                  

              The following PluralRules methods never had an implementation

              Packit 85c618
                    but were inadvertently marked @stable; they have now been
              Packit 85c618
                    deprecated. [#10759]

              Packit 85c618
                  
                Packit 85c618
                      
              • <tt>double icu::PluralRules::getUniqueKeywordValue(const UnicodeString&)</tt>
              • Packit 85c618
                      
              • <tt>int32_t icu::PluralRules::getAllKeywordValues(const UnicodeString&, double*, int32_t, UErrorCode&)</tt>
              • Packit 85c618
                    
                Packit 85c618
                Packit 85c618
                    

                ICU 55: Deprecate uidna.h functions for IDNA2003 support

                Packit 85c618
                    

                The IDNA2003 API has been deprecated; use the API for IDNA2008 / UTS #46 instead via

                Packit 85c618
                      uidna_openUTS46() or class IDNA [#8477].
                Packit 85c618
                      This applies to the following:

                Packit 85c618
                    
                  Packit 85c618
                        
                • <tt>enum value UIDNA_ALLOW_UNASSIGNED</tt>
                • Packit 85c618
                        
                • <tt>uidna_IDNToASCII</tt>
                • Packit 85c618
                        
                • <tt>uidna_IDNToUnicode</tt>
                • Packit 85c618
                        
                • <tt>uidna_compare</tt>
                • Packit 85c618
                        
                • <tt>uidna_toASCII</tt>
                • Packit 85c618
                        
                • <tt>uidna_toUnicode</tt>
                • Packit 85c618
                      
                  Packit 85c618
                  Packit 85c618
                      
                  Packit 85c618
                      

                  ICU 54: Deprecation of Layout Engine

                  Packit 85c618
                      

                  The LayoutEngine is now deprecated. Please

                  Packit 85c618
                      see the
                  Packit 85c618
                      User's Guide for more details and migration recommendations.
                  Packit 85c618
                        In the future, passing "<tt>--enable-layout</tt>" to configure
                  Packit 85c618
                        will be required to
                  Packit 85c618
                       enable the layout engine.

                  Packit 85c618
                      

                  Packit 85c618
                        Note that the ParagraphLayout (layoutex) library is not deprecated.
                  Packit 85c618
                        There is a new option, <tt>--enable-layoutex</tt> which will build
                  Packit 85c618
                        the ParagraphLayout library using HarfBuzz
                  Packit 85c618
                        instead of ICU as the layout engine. See 
                  Packit 85c618
                          the users' guide for more information about how to build.
                  Packit 85c618
                      

                  Packit 85c618
                      

                  ICU 54: Deprecation of Collation Short Strings

                  Packit 85c618
                      

                  The collation short naming scheme and its API functions are deprecated.

                  Packit 85c618
                      Use ucol_open() with language tag collation keywords instead (see Collation API Details). For example, ucol_open("de-u-co-phonebk-ka-shifted", &errorCode)
                  Packit 85c618
                       for German Phonebook order with "ignore punctuation" mode.

                  Packit 85c618
                  Packit 85c618
                      

                  ICU 54: Deprecation of UCOL_TAILORINGS_VERSION

                  Packit 85c618
                      

                  This was originally intended to be the version of collation tailorings,

                  Packit 85c618
                      but that information is actually in the tailorings data and this
                  Packit 85c618
                      constant has always been (and now will continue to be) 1.

                  Packit 85c618
                  Packit 85c618
                      
                  Packit 85c618
                      

                  ICU 53: Deprecation of TimeUnitFormat

                  Packit 85c618
                      

                  The TimeUnitFormat and its methods were actually deprecated in ICU 53 and the

                  Packit 85c618
                      class as a whole was tagged as deprecated in that release, but the status tags for
                  Packit 85c618
                      the individual methods did not correctly indicate the deprecated status; they
                  Packit 85c618
                      do as of ICU 54. Use the MeasureFormat class and its methods instead.

                  Packit 85c618
                  Packit 85c618
                      
                  Packit 85c618
                      

                  Full release notes and the latest updates

                  Packit 85c618
                      

                  The previous list concentrates on changes that affect existing

                  Packit 85c618
                      applications migrating from previous ICU releases.
                  Packit 85c618
                      For more news about this release, as well as late-breaking news, see the
                  Packit 85c618
                      ICU download page.

                  Packit 85c618
                  Packit 85c618
                      
                  Packit 85c618
                  Packit 85c618
                      

                  How To Download the

                  Packit 85c618
                      Source Code
                  Packit 85c618
                  Packit 85c618
                      

                  There are two ways to download ICU releases:

                  Packit 85c618
                  Packit 85c618
                      
                    Packit 85c618
                          
                  • Official Release Snapshot:
                  • Packit 85c618
                           If you want to use ICU (as opposed to developing it), you should download
                    Packit 85c618
                          an official packaged version of the ICU source code. These versions are
                    Packit 85c618
                          tested more thoroughly than day-to-day development builds of the system,
                    Packit 85c618
                          and they are packaged in zip and tar files for convenient download. These
                    Packit 85c618
                          packaged files can be found at 
                    Packit 85c618
                          "http://site.icu-project.org/download">http://site.icu-project.org/download.
                    Packit 85c618
                           The packaged snapshots are named icu-nnnn.zip or
                    Packit 85c618
                          icu-nnnn.tgz, where nnnn is the version number. The .zip
                    Packit 85c618
                          file is used for Windows platforms, while the .tgz file is preferred on
                    Packit 85c618
                          most other platforms.
                    Packit 85c618
                           Please unzip this file. 
                    Packit 85c618
                    Packit 85c618
                          
                  • Subversion Source Repository:
                  • Packit 85c618
                           If you are interested in developing features, patches, or bug fixes for
                    Packit 85c618
                          ICU, you should probably be working with the latest version of the ICU
                    Packit 85c618
                          source code. You will need to check the code out of our Subversion repository to
                    Packit 85c618
                          ensure that you have the most recent version of all of the files. See our
                    Packit 85c618
                          source
                    Packit 85c618
                          repository for details.
                    Packit 85c618
                        
                    Packit 85c618
                    Packit 85c618
                        

                    ICU Source Code

                    Packit 85c618
                        Organization
                    Packit 85c618
                    Packit 85c618
                        

                    In the descriptions below, <ICU> is the full

                    Packit 85c618
                        path name of the ICU directory (the top level directory from the distribution
                    Packit 85c618
                        archives) in your file system. You can also view the 
                    Packit 85c618
                        "http://userguide.icu-project.org/design">ICU Architectural
                    Packit 85c618
                        Design section of the User's Guide to see which libraries you need for
                    Packit 85c618
                        your software product. You need at least the data ([lib]icudt)
                    Packit 85c618
                        and the common ([lib]icuuc) libraries in order to use ICU.

                    Packit 85c618
                    Packit 85c618
                        
                    Packit 85c618
                          <caption>
                    Packit 85c618
                            The following files describe the code drop.
                    Packit 85c618
                          </caption>
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            File
                    Packit 85c618
                    Packit 85c618
                            Description
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            readme.html
                    Packit 85c618
                    Packit 85c618
                            Describes the International Components for Unicode (this file)
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            LICENSE
                    Packit 85c618
                    Packit 85c618
                            Contains the text of the ICU license
                    Packit 85c618
                          
                    Packit 85c618
                        
                    Packit 85c618
                    Packit 85c618
                        


                    Packit 85c618
                        

                    Packit 85c618
                    Packit 85c618
                        
                    Packit 85c618
                        "The following directories contain source code and data files.">
                    Packit 85c618
                          <caption>
                    Packit 85c618
                            The following directories contain source code and data files.
                    Packit 85c618
                          </caption>
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            Directory
                    Packit 85c618
                    Packit 85c618
                            Description
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/common/
                    Packit 85c618
                    Packit 85c618
                            The core Unicode and support functionality, such as resource bundles,
                    Packit 85c618
                            character properties, locales, codepage conversion, normalization,
                    Packit 85c618
                            Unicode properties, Locale, and UnicodeString.
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/i18n/
                    Packit 85c618
                    Packit 85c618
                            Modules in i18n are generally the more data-driven, that is to say
                    Packit 85c618
                            resource bundle driven, components. These deal with higher-level
                    Packit 85c618
                            internationalization issues such as formatting, collation, text break
                    Packit 85c618
                            analysis, and transliteration.
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/layout/
                    Packit 85c618
                    Packit 85c618
                            Contains the ICU complex text layout engine. (Deprecated)
                    Packit 85c618
                          
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/layoutex/
                    Packit 85c618
                    Packit 85c618
                            Contains the ICU paragraph layout engine.
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/io/
                    Packit 85c618
                    Packit 85c618
                            Contains the ICU I/O library.
                    Packit 85c618
                          
                    Packit 85c618
                    Packit 85c618
                          
                    Packit 85c618
                            <ICU>/source/data/
                    Packit 85c618
                    Packit 85c618
                            
                    Packit 85c618
                              

                    This directory contains the source data in text format, which is

                    Packit 85c618
                              compiled into binary form during the ICU build process. It contains
                    Packit 85c618
                              several subdirectories, in which the data files are grouped by
                    Packit 85c618
                              function. Note that the build process must be run again after any
                    Packit 85c618
                              changes are made to this directory.

                    Packit 85c618
                    Packit 85c618
                              

                    If some of the following directories are missing, it's probably

                    Packit 85c618
                              because you got an official download. If you need the data source files
                    Packit 85c618
                              for customization, then please download the ICU source code from 
                    Packit 85c618
                              href="http://site.icu-project.org/repository">subversion.

                    Packit 85c618
                    Packit 85c618
                              
                      Packit 85c618
                                  
                    • in/ A directory that contains a pre-built data library for
                    • Packit 85c618
                                  ICU. A standard source code package will contain this file without
                      Packit 85c618
                                  several of the following directories. This is to simplify the build
                      Packit 85c618
                                  process for the majority of users and to reduce platform porting
                      Packit 85c618
                                  issues.
                      Packit 85c618
                      Packit 85c618
                                  
                    • brkitr/ Data files for character, word, sentence, title
                    • Packit 85c618
                                  casing and line boundary analysis.
                      Packit 85c618
                      Packit 85c618
                                  
                    • locales/ These .txt files contain ICU language and
                    • Packit 85c618
                                  culture-specific localization data. Two special bundles are
                      Packit 85c618
                                  root, which is the fallback data and parent of other bundles,
                      Packit 85c618
                                  and index, which contains a list of installed bundles. The
                      Packit 85c618
                                  makefile resfiles.mk contains the list of resource bundle
                      Packit 85c618
                                  files.
                      Packit 85c618
                      Packit 85c618
                                  
                    • mappings/ Here are the code page converter tables. These
                    • Packit 85c618
                                  .ucm files contain mappings to and from Unicode. These are compiled
                      Packit 85c618
                                  into .cnv files. convrtrs.txt is the alias mapping table from
                      Packit 85c618
                                  various converter name formats to ICU internal format and vice versa.
                      Packit 85c618
                                  It produces cnvalias.icu. The makefiles ucmfiles.mk,
                      Packit 85c618
                                  ucmcore.mk, and ucmebcdic.mk contain the list of
                      Packit 85c618
                                  converters to be built.
                      Packit 85c618
                      Packit 85c618
                                  
                    • translit/ This directory contains transliterator rules as
                    • Packit 85c618
                                  resource bundles, a makefile trnsfiles.mk containing the list
                      Packit 85c618
                                  of installed system translitaration files, and as well the special
                      Packit 85c618
                                  bundle translit_index which lists the system transliterator
                      Packit 85c618
                                  aliases.
                      Packit 85c618
                      Packit 85c618
                                  
                    • unidata/ This directory contains the Unicode data files.
                    • Packit 85c618
                                  Please see 
                      Packit 85c618
                                  "http://www.unicode.org/">http://www.unicode.org/ for more
                      Packit 85c618
                                  information.
                      Packit 85c618
                      Packit 85c618
                                  
                    • misc/ The misc directory contains other data files which
                    • Packit 85c618
                                  did not fit into the above categories. Currently it only contains
                      Packit 85c618
                                  time zone information, and a name preperation file for 
                      Packit 85c618
                                  "http://www.ietf.org/rfc/rfc3490.txt">IDNA.
                      Packit 85c618
                      Packit 85c618
                                  
                    • out/ This directory contains the assembled memory mapped
                    • Packit 85c618
                                  files.
                      Packit 85c618
                      Packit 85c618
                                  
                    • out/build/ This directory contains intermediate (compiled)
                    • Packit 85c618
                                  files, such as .cnv, .res, etc.
                      Packit 85c618
                                
                      Packit 85c618
                      Packit 85c618
                                

                      If you are creating a special ICU build, you can set the ICU_DATA

                      Packit 85c618
                                environment variable to the out/ or the out/build/ directories, but
                      Packit 85c618
                                this is generally discouraged because most people set it incorrectly.
                      Packit 85c618
                                You can view the 
                      Packit 85c618
                                "http://userguide.icu-project.org/icudata">ICU Data
                      Packit 85c618
                                Management section of the ICU User's Guide for details.

                      Packit 85c618
                              
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/test/intltest/
                      Packit 85c618
                      Packit 85c618
                              A test suite including all C++ APIs. For information about running
                      Packit 85c618
                              the test suite, see the build instructions specific to your platform
                      Packit 85c618
                              later in this document.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/test/cintltst/
                      Packit 85c618
                      Packit 85c618
                              A test suite written in C, including all C APIs. For information
                      Packit 85c618
                              about running the test suite, see the build instructions specific to your
                      Packit 85c618
                              platform later in this document.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/test/iotest/
                      Packit 85c618
                      Packit 85c618
                              A test suite written in C and C++ to test the icuio library. For
                      Packit 85c618
                              information about running the test suite, see the build instructions
                      Packit 85c618
                              specific to your platform later in this document.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/test/testdata/
                      Packit 85c618
                      Packit 85c618
                              Source text files for data, which are read by the tests. It contains
                      Packit 85c618
                              the subdirectories out/build/ which is used for intermediate
                      Packit 85c618
                              files, and out/ which contains testdata.dat.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/tools/
                      Packit 85c618
                      Packit 85c618
                              Tools for generating the data files. Data files are generated by
                      Packit 85c618
                              invoking <ICU>/source/data/build/makedata.bat on Win32 or
                      Packit 85c618
                              <ICU>/source/make on UNIX.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/samples/
                      Packit 85c618
                      Packit 85c618
                              Various sample programs that use ICU
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/extra/
                      Packit 85c618
                      Packit 85c618
                              Non-supported API additions. Currently, it contains the 'uconv' tool
                      Packit 85c618
                              to perform codepage conversion on files.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/packaging/
                      Packit 85c618
                      Packit 85c618
                              This directory contain scripts and tools for packaging the final
                      Packit 85c618
                              ICU build for various release platforms.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/config/
                      Packit 85c618
                      Packit 85c618
                              Contains helper makefiles for platform specific build commands. Used
                      Packit 85c618
                              by 'configure'.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/source/allinone/
                      Packit 85c618
                      Packit 85c618
                              Contains top-level ICU workspace and project files, for instance to
                      Packit 85c618
                              build all of ICU under one MSVC project.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/include/
                      Packit 85c618
                      Packit 85c618
                              Contains the headers needed for developing software that uses ICU on
                      Packit 85c618
                              Windows.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/lib/
                      Packit 85c618
                      Packit 85c618
                              Contains the import libraries for linking ICU into your Windows
                      Packit 85c618
                              application.
                      Packit 85c618
                            
                      Packit 85c618
                      Packit 85c618
                            
                      Packit 85c618
                              <ICU>/bin/
                      Packit 85c618
                      Packit 85c618
                              Contains the libraries and executables for using ICU on Windows.
                      Packit 85c618
                            
                      Packit 85c618
                          
                      Packit 85c618
                          
                      Packit 85c618
                      Packit 85c618
                          

                      How To Build And

                      Packit 85c618
                          Install ICU
                      Packit 85c618
                      Packit 85c618
                          

                      Packit 85c618
                          "RecBuild">Recommended Build Options
                      Packit 85c618
                      Packit 85c618
                          

                      Depending on the platform and the type of installation,

                      Packit 85c618
                          we recommend a small number of modifications and build options.
                      Packit 85c618
                          Note that C99 compatibility is now required.

                      Packit 85c618
                          
                        Packit 85c618
                              
                      • Namespace: By default, unicode/uversion.h has
                      • Packit 85c618
                                "using namespace icu;" which defeats much of the purpose of the namespace.
                        Packit 85c618
                                (This is for historical reasons: Originally, ICU4C did not use namespaces,
                        Packit 85c618
                                and some compilers did not support them. The default "using" statement
                        Packit 85c618
                                preserves source code compatibility.)
                        Packit 85c618
                                If this compatibility is not an issue, we recommend you turn this off
                        Packit 85c618
                                 via -DU_USING_ICU_NAMESPACE=0
                        Packit 85c618
                                or by modifying unicode/uversion.h:
                        Packit 85c618
                        Index: source/common/unicode/uversion.h
                        Packit 85c618
                        ===================================================================
                        Packit 85c618
                        --- source/common/unicode/uversion.h    (revision 26606)
                        Packit 85c618
                        +++ source/common/unicode/uversion.h    (working copy)
                        Packit 85c618
                        @@ -180,7 +180,8 @@
                        Packit 85c618
                         #   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
                        Packit 85c618
                        Packit 85c618
                         #   ifndef U_USING_ICU_NAMESPACE
                        Packit 85c618
                        -#       define U_USING_ICU_NAMESPACE 1
                        Packit 85c618
                        +        // Set to 0 to force namespace declarations in ICU usage.
                        Packit 85c618
                        +#       define U_USING_ICU_NAMESPACE 0
                        Packit 85c618
                         #   endif
                        Packit 85c618
                         #   if U_USING_ICU_NAMESPACE
                        Packit 85c618
                                 U_NAMESPACE_USE
                        Packit 85c618
                        Packit 85c618
                                ICU call sites then either qualify ICU types explicitly,
                        Packit 85c618
                                for example icu::UnicodeString,
                        Packit 85c618
                                or do using icu::UnicodeString; where appropriate.
                        Packit 85c618
                              
                      • Hardcode the default charset to UTF-8: On platforms where
                      • Packit 85c618
                                the default charset is always UTF-8,
                        Packit 85c618
                                like MacOS X and some Linux distributions,
                        Packit 85c618
                                we recommend hardcoding ICU's default charset to UTF-8.
                        Packit 85c618
                                This means that some implementation code becomes simpler and faster,
                        Packit 85c618
                                and statically linked ICU libraries become smaller.
                        Packit 85c618
                                (See the U_CHARSET_IS_UTF8
                        Packit 85c618
                                API documentation for more details.)
                        Packit 85c618
                                You can -DU_CHARSET_IS_UTF8=1 or
                        Packit 85c618
                                modify unicode/utypes.h (in ICU 4.8 and below)
                        Packit 85c618
                                or modify unicode/platform.h (in ICU 49 and higher):
                        Packit 85c618
                        Index: source/common/unicode/utypes.h
                        Packit 85c618
                        ===================================================================
                        Packit 85c618
                        --- source/common/unicode/utypes.h      (revision 26606)
                        Packit 85c618
                        +++ source/common/unicode/utypes.h      (working copy)
                        Packit 85c618
                        @@ -160,7 +160,7 @@
                        Packit 85c618
                          * @see UCONFIG_NO_CONVERSION
                        Packit 85c618
                          */
                        Packit 85c618
                         #ifndef U_CHARSET_IS_UTF8
                        Packit 85c618
                        -#   define U_CHARSET_IS_UTF8 0
                        Packit 85c618
                        +#   define U_CHARSET_IS_UTF8 1
                        Packit 85c618
                         #endif
                        Packit 85c618
                        Packit 85c618
                         /*===========================================================================*/
                        Packit 85c618
                        Packit 85c618
                              
                      • UnicodeString constructors: The UnicodeString class has
                      • Packit 85c618
                                several single-argument constructors that are not marked "explicit"
                        Packit 85c618
                                for historical reasons.
                        Packit 85c618
                                This can lead to inadvertent construction of a UnicodeString
                        Packit 85c618
                                with a single character by using an integer,
                        Packit 85c618
                                and it can lead to inadvertent dependency on the conversion framework
                        Packit 85c618
                                by using a C string literal.
                        Packit 85c618
                                Beginning with ICU 49, you should do the following:
                        Packit 85c618
                                
                          Packit 85c618
                                    
                        • Consider marking the from-UChar
                        • Packit 85c618
                                      and from-UChar32 constructors explicit via
                          Packit 85c618
                                      -DUNISTR_FROM_CHAR_EXPLICIT=explicit or similar.
                          Packit 85c618
                                    
                        • Consider marking the from-const char* and
                        • Packit 85c618
                                      from-const UChar* constructors explicit via
                          Packit 85c618
                                      -DUNISTR_FROM_STRING_EXPLICIT=explicit or similar.
                          Packit 85c618
                                  
                          Packit 85c618
                                  Note: The ICU test suites cannot be compiled with these settings.
                          Packit 85c618
                                
                          Packit 85c618
                                
                        • utf.h, utf8.h, utf16.h, utf_old.h:
                        • Packit 85c618
                                  By default, utypes.h (and thus almost every public ICU header)
                          Packit 85c618
                                  includes all of these header files.
                          Packit 85c618
                                  Often, none of them are needed, or only one or two of them.
                          Packit 85c618
                                  All of utf_old.h is deprecated or obsolete.
                          Packit 85c618
                                  Beginning with ICU 49,
                          Packit 85c618
                                  you should define U_NO_DEFAULT_INCLUDE_UTF_HEADERS to 1
                          Packit 85c618
                                  (via -D or uconfig.h, as above)
                          Packit 85c618
                                  and include those header files explicitly that you actually need.
                          Packit 85c618
                                  Note: The ICU test suites cannot be compiled with this setting.
                          Packit 85c618
                                
                        • .dat file: By default, the ICU data is built into
                        • Packit 85c618
                                  a shared library (DLL). This is convenient because it requires no
                          Packit 85c618
                                  install-time or runtime configuration,
                          Packit 85c618
                                  but the library is platform-specific and cannot be modified.
                          Packit 85c618
                                  A .dat package file makes the opposite trade-off:
                          Packit 85c618
                                  Platform-portable (except for endianness and charset family, which
                          Packit 85c618
                                  can be changed with the icupkg tool)
                          Packit 85c618
                                  and modifiable (also with the icupkg tool).
                          Packit 85c618
                                  If a path is set, then single data files (e.g., .res files)
                          Packit 85c618
                                  can be copied to that location to provide new locale data
                          Packit 85c618
                                  or conversion tables etc.
                          Packit 85c618
                                  The only drawback with a .dat package file is that the application
                          Packit 85c618
                                  needs to provide ICU with the file system path to the package file
                          Packit 85c618
                                  (e.g., by calling u_setDataDirectory())
                          Packit 85c618
                                  or with a pointer to the data (udata_setCommonData())
                          Packit 85c618
                                  before other ICU API calls.
                          Packit 85c618
                                  This is usually easy if ICU is used from an application where
                          Packit 85c618
                                  main() takes care of such initialization.
                          Packit 85c618
                                  It may be hard if ICU is shipped with
                          Packit 85c618
                                  another shared library (such as the Xerces-C++ XML parser)
                          Packit 85c618
                                  which does not control main().
                          Packit 85c618
                                  See the User Guide ICU Data
                          Packit 85c618
                                  chapter for more details.
                          Packit 85c618
                                  If possible, we recommend building the .dat package.
                          Packit 85c618
                                  Specify --with-data-packaging=archive
                          Packit 85c618
                                  on the configure command line, as in
                          Packit 85c618
                                  runConfigureICU Linux --with-data-packaging=archive
                          Packit 85c618
                                  (Read the configure script's output for further instructions.
                          Packit 85c618
                                  On Windows, the Visual Studio build generates both the .dat package
                          Packit 85c618
                                  and the data DLL.)
                          Packit 85c618
                                  Be sure to install and use the tiny stubdata library
                          Packit 85c618
                                  rather than the large data DLL.
                          Packit 85c618
                                
                        • Static libraries: It may make sense to build the ICU code
                        • Packit 85c618
                                  into static libraries (.a) rather than shared libraries (.so/.dll).
                          Packit 85c618
                                  Static linking reduces the overall size of the binary by removing
                          Packit 85c618
                                  code that is never called.
                          Packit 85c618
                                  Example configure command line:
                          Packit 85c618
                                  runConfigureICU Linux --enable-static --disable-shared
                          Packit 85c618
                                
                        • Out-of-source build: It is usually desirable to keep the ICU
                        • Packit 85c618
                                  source file tree clean and have build output files written to
                          Packit 85c618
                                  a different location. This is called an "out-of-source build".
                          Packit 85c618
                                  Simply invoke the configure script from the target location:
                          Packit 85c618
                          ~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
                          Packit 85c618
                          ~/icu$ mkdir trunk-dev
                          Packit 85c618
                          ~/icu$ cd trunk-dev
                          Packit 85c618
                          ~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
                          Packit 85c618
                          ~/icu/trunk-dev$ make check
                          Packit 85c618
                                  (Note: this example shows a relative path to
                          Packit 85c618
                                   runConfigureICU. If you experience difficulty,
                          Packit 85c618
                                   try using an absolute path to runConfigureICU
                          Packit 85c618
                                   instead.)
                          Packit 85c618
                                
                          Packit 85c618
                              
                          Packit 85c618
                              

                          ICU as a System-Level Library

                          Packit 85c618
                              

                          If ICU is installed as a system-level library, there are further

                          Packit 85c618
                                opportunities and restrictions to consider.
                          Packit 85c618
                                For details, see the Using ICU as an Operating System Level Library
                          Packit 85c618
                                section of the User Guide ICU Architectural Design chapter.

                          Packit 85c618
                              
                            Packit 85c618
                                  
                          • Data path: For a system-level library, it is best to load
                          • Packit 85c618
                                    ICU data from the .dat package file because the file system path
                            Packit 85c618
                                    to the .dat package file can be hardcoded. ICU will automatically set
                            Packit 85c618
                                    the path to the final install location using U_ICU_DATA_DEFAULT_DIR.
                            Packit 85c618
                                    Alternatively, you can set -DICU_DATA_DIR=/path/to/icu/data
                            Packit 85c618
                                    when building the ICU code. (Used by source/common/putil.c.)
                            Packit 85c618
                                    Consider also setting -DICU_NO_USER_DATA_OVERRIDE
                            Packit 85c618
                                    if you do not want the "ICU_DATA" environment variable to be used.
                            Packit 85c618
                                    (An application can still override the data path via
                            Packit 85c618
                                    u_setDataDirectory() or
                            Packit 85c618
                                    udata_setCommonData().
                            Packit 85c618
                                  
                          • Hide draft API: API marked with @draft
                          • Packit 85c618
                                    is new and not yet stable. Applications must not rely on unstable
                            Packit 85c618
                                    APIs from a system-level library.
                            Packit 85c618
                                    Define U_HIDE_DRAFT_API, U_HIDE_INTERNAL_API
                            Packit 85c618
                                    and U_HIDE_SYSTEM_API
                            Packit 85c618
                                    by modifying unicode/utypes.h before installing it.
                            Packit 85c618
                                  
                          • Only C APIs: Applications must not rely on C++ APIs from a
                          • Packit 85c618
                                    system-level library because binary C++ compatibility
                            Packit 85c618
                                    across library and compiler versions is very hard to achieve.
                            Packit 85c618
                                    Most ICU C++ APIs are in header files that contain a comment with
                            Packit 85c618
                                    \brief C++ API.
                            Packit 85c618
                                    Consider not installing these header files.
                            Packit 85c618
                                  
                          • Disable renaming: By default, ICU library entry point names
                          • Packit 85c618
                                    have an ICU version suffix. Turn this off for a system-level installation,
                            Packit 85c618
                                    to enable upgrading ICU without breaking applications. For example:
                            Packit 85c618
                                    runConfigureICU Linux --disable-renaming
                            Packit 85c618
                                    The public header files from this configuration must be installed
                            Packit 85c618
                                    for applications to include and get the correct entry point names.
                            Packit 85c618
                                
                            Packit 85c618
                            Packit 85c618
                                

                            User-Configurable Settings

                            Packit 85c618
                                

                            ICU4C can be customized via a number of user-configurable settings.

                            Packit 85c618
                                Many of them are controlled by preprocessor macros which are
                            Packit 85c618
                                defined in the source/common/unicode/uconfig.h header file.
                            Packit 85c618
                                Some turn off parts of ICU, for example conversion or collation,
                            Packit 85c618
                                trading off a smaller library for reduced functionality.
                            Packit 85c618
                                Other settings are recommended (see previous section)
                            Packit 85c618
                                but their default values are set for better source code compatibility.

                            Packit 85c618
                            Packit 85c618
                                

                            In order to change such user-configurable settings, you can

                            Packit 85c618
                                either modify the uconfig.h header file by adding
                            Packit 85c618
                                a specific #define ... for one or more of the macros
                            Packit 85c618
                                before they are first tested,
                            Packit 85c618
                                or set the compiler's preprocessor flags (CPPFLAGS) to include
                            Packit 85c618
                                an equivalent -D macro definition.

                            Packit 85c618
                            Packit 85c618
                                

                            Packit 85c618
                                "HowToBuildWindows">How To Build And Install On Windows
                            Packit 85c618
                            Packit 85c618
                                

                            Building International Components for Unicode requires:

                            Packit 85c618
                            Packit 85c618
                                
                              Packit 85c618
                                    
                            • Microsoft Windows
                            • Packit 85c618
                              Packit 85c618
                                    
                            • Microsoft Visual C++ (see the ICU download page for the currently compatible version)
                            • Packit 85c618
                                  
                              Packit 85c618
                                      

                              Cygwin is required if using a version of MSVC other than the one

                              Packit 85c618
                                      compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)

                              Packit 85c618
                              Packit 85c618
                                  

                              The steps are:

                              Packit 85c618
                              Packit 85c618
                                  
                                Packit 85c618
                                      
                              1. Unzip the icu-XXXX.zip file into any convenient location. Using command
                              2. Packit 85c618
                                      line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
                                Packit 85c618
                                      WinZip.
                                Packit 85c618
                                Packit 85c618
                                      
                              3. Be sure that the ICU binary directory, <ICU>\bin\, is
                              4. Packit 85c618
                                      included in the PATH environment variable. The tests will
                                Packit 85c618
                                      not work without the location of the ICU DLL files in the path.
                                Packit 85c618
                                Packit 85c618
                                      
                              5. Open the "<ICU>\source\allinone\allinone.sln" workspace
                              6. Packit 85c618
                                      file in Microsoft Visual Studio. (This solution includes all the
                                Packit 85c618
                                      International Components for Unicode libraries, necessary ICU building
                                Packit 85c618
                                      tools, and the test suite projects). Please see the 
                                Packit 85c618
                                      "#HowToBuildWindowsCommandLine">command line note below if you want to
                                Packit 85c618
                                      build from the command line instead.
                                Packit 85c618
                                Packit 85c618
                                      
                              7. Set the active platform to "Win32" or "x64" (See Windows platform note below)
                              8. Packit 85c618
                                      and configuration to "Debug" or "Release" (See Windows configuration note below).
                                Packit 85c618
                                Packit 85c618
                                      
                              9. Choose the "Build" menu and select "Rebuild Solution". If you want to
                              10. Packit 85c618
                                      build the Debug and Release at the same time, see the 
                                Packit 85c618
                                      "#HowToBuildWindowsBatch">batch configuration note below.
                                Packit 85c618
                                Packit 85c618
                                Packit 85c618
                                      
                              11. Run the tests. They can be run from the command line or from within Visual Studio.
                              12. Packit 85c618
                                Packit 85c618
                                	 

                                Running the Tests from the Windows Command Line (cmd)

                                Packit 85c618
                                	
                                  Packit 85c618
                                  	   
                                • For x86 (32 bit) and Debug, use:
                                • Packit 85c618
                                  Packit 85c618
                                  	<tt><ICU>\source\allinone\icucheck.bat  Platform Configuration
                                  Packit 85c618
                                  		</tt> 
                                  Packit 85c618
                                         
                                  Packit 85c618
                                  	
                                • So, for example:
                                • Packit 85c618
                                  				 
                                  Packit 85c618
                                  		<samp><ICU>\source\allinone\icucheck.bat  x86 Debug</samp>
                                  Packit 85c618
                                  				or
                                  Packit 85c618
                                  		<samp><ICU>\source\allinone\icucheck.bat  x86 Release</samp>
                                  Packit 85c618
                                  				or
                                  Packit 85c618
                                  		<samp><ICU>\source\allinone\icucheck.bat  x64 Release</samp>
                                  Packit 85c618
                                  	
                                  Packit 85c618
                                  Packit 85c618
                                           

                                  Running the Tests from within Visual Studio

                                  Packit 85c618
                                  Packit 85c618
                                  	
                                    Packit 85c618
                                          
                                  1. Run the C++ test suite, "intltest". To do this: set the active startup
                                  2. Packit 85c618
                                          project to "intltest", and press Ctrl+F5 to run it. Make sure that it
                                    Packit 85c618
                                          passes without any errors.
                                    Packit 85c618
                                    Packit 85c618
                                          
                                  3. Run the C test suite, "cintltst". To do this: set the active startup
                                  4. Packit 85c618
                                          project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
                                    Packit 85c618
                                          passes without any errors.
                                    Packit 85c618
                                    Packit 85c618
                                          
                                  5. Run the I/O test suite, "iotest". To do this: set the active startup
                                  6. Packit 85c618
                                          project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
                                    Packit 85c618
                                          without any errors.
                                    Packit 85c618
                                    Packit 85c618
                                    	
                                    Packit 85c618
                                    Packit 85c618
                                    	
                                    Packit 85c618
                                    Packit 85c618
                                          
                                  7. You are now able to develop applications with ICU by using the
                                  8. Packit 85c618
                                          libraries and tools in <ICU>\bin\. The headers are in
                                    Packit 85c618
                                          <ICU>\include\ and the link libraries are in
                                    Packit 85c618
                                          <ICU>\lib\. To install the ICU runtime on a machine, or ship
                                    Packit 85c618
                                          it with your application, copy the needed components from
                                    Packit 85c618
                                          <ICU>\bin\ to a location on the system PATH or to your
                                    Packit 85c618
                                          application directory.
                                    Packit 85c618
                                        
                                    Packit 85c618
                                    Packit 85c618
                                        

                                    Packit 85c618
                                        "HowToBuildWindowsCommandLine">Using MSDEV At The Command Line
                                    Packit 85c618
                                        Note: You can build ICU from the command line. Assuming that you
                                    Packit 85c618
                                        have properly installed Microsoft Visual C++ to support command line
                                    Packit 85c618
                                        execution, you can run the following command, 'devenv.com
                                    Packit 85c618
                                        <ICU>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
                                    Packit 85c618
                                        use Cygwin with this compiler to build ICU, and you can refer to the 
                                    Packit 85c618
                                        "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin
                                    Packit 85c618
                                        section for more details.

                                    Packit 85c618
                                    Packit 85c618
                                        

                                    Packit 85c618
                                        "HowToBuildWindowsPlatform">Setting Active Platform
                                    Packit 85c618
                                        Note: Even though you are able to select "x64" as the active platform, if your operating system is
                                    Packit 85c618
                                        not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:

                                    Packit 85c618
                                    Packit 85c618
                                        
                                      Packit 85c618
                                            
                                    • Choose "Build" menu, select "Configuration Manager...", and select
                                    • Packit 85c618
                                            "Win32" or "x64" for the Active Platform Solution.
                                      Packit 85c618
                                      Packit 85c618
                                            
                                    • Another way is to select the desired build configuration from "Solution
                                    • Packit 85c618
                                            Platforms" dropdown menu from the standard toolbar. It will say
                                      Packit 85c618
                                            "Win32" or "x64" in the dropdown list.
                                      Packit 85c618
                                          
                                      Packit 85c618
                                      Packit 85c618
                                          

                                      Packit 85c618
                                          "HowToBuildWindowsConfig">Setting Active Configuration
                                      Packit 85c618
                                          Note: To set the active configuration, two different
                                      Packit 85c618
                                          possibilities are:

                                      Packit 85c618
                                      Packit 85c618
                                          
                                        Packit 85c618
                                              
                                      • Choose "Build" menu, select "Configuration Manager...", and select
                                      • Packit 85c618
                                              "Release" or "Debug" for the Active Configuration Solution.
                                        Packit 85c618
                                        Packit 85c618
                                              
                                      • Another way is to select the desired build configuration from "Solution
                                      • Packit 85c618
                                              Configurations" dropdown menu from the standard toolbar. It will say
                                        Packit 85c618
                                              "Release" or "Debug" in the dropdown list.
                                        Packit 85c618
                                            
                                        Packit 85c618
                                        Packit 85c618
                                            

                                        Batch

                                        Packit 85c618
                                            Configuration Note: If you want to build the Win32 and x64 platforms and
                                        Packit 85c618
                                            Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
                                        Packit 85c618
                                            Build...". Click the "Select All" button, and then click the "Rebuild"
                                        Packit 85c618
                                            button.

                                        Packit 85c618
                                        Packit 85c618
                                            

                                        Packit 85c618
                                            "HowToBuildCygwin">How To Build And Install On Windows with Cygwin
                                        Packit 85c618
                                        Packit 85c618
                                            

                                        Building International Components for Unicode with this configuration

                                        Packit 85c618
                                            requires:

                                        Packit 85c618
                                        Packit 85c618
                                            
                                          Packit 85c618
                                                
                                        • Microsoft Windows
                                        • Packit 85c618
                                          Packit 85c618
                                                
                                        • Microsoft Visual C++ (when gcc isn't used).
                                        • Packit 85c618
                                          Packit 85c618
                                                
                                        • Packit 85c618
                                                  Cygwin with the following installed:
                                          Packit 85c618
                                          Packit 85c618
                                                  
                                            Packit 85c618
                                                      
                                          • bash
                                          • Packit 85c618
                                            Packit 85c618
                                                      
                                          • GNU make
                                          • Packit 85c618
                                            Packit 85c618
                                                      
                                          • ar
                                          • Packit 85c618
                                            Packit 85c618
                                                      
                                          • ranlib
                                          • Packit 85c618
                                            Packit 85c618
                                                      
                                          • man (if you plan to look at the man pages)
                                          • Packit 85c618
                                                    
                                            Packit 85c618
                                                  
                                            Packit 85c618
                                                
                                            Packit 85c618
                                            Packit 85c618
                                                

                                            There are two ways you can build ICU with Cygwin. You can build with gcc

                                            Packit 85c618
                                                or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
                                            Packit 85c618
                                                will depend on the Cygwin environment. If you use Microsoft Visual C++, the
                                            Packit 85c618
                                                resulting libraries and tools do not depend on Cygwin and can be more easily
                                            Packit 85c618
                                                distributed to other Windows computers (the generated man pages and shell
                                            Packit 85c618
                                                scripts still need Cygwin). To build with gcc, please follow the "
                                            Packit 85c618
                                                "#HowToBuildUNIX">How To Build And Install On UNIX" instructions, while
                                            Packit 85c618
                                                you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
                                            Packit 85c618
                                                please use the following instructions:

                                            Packit 85c618
                                            Packit 85c618
                                                
                                              Packit 85c618
                                                    
                                            1. Start the Windows "Command Prompt" window. This is different from the
                                            2. Packit 85c618
                                                    gcc build, which requires the Cygwin Bash command prompt. The Microsoft
                                              Packit 85c618
                                                    Visual C++ compiler will not work with a bash command prompt.
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            3. If the computer isn't set up to use Visual C++ from the command line,
                                            4. Packit 85c618
                                                    you need to run vcvars32.bat.
                                              For example:
                                              "<tt>C:\Program Files\Microsoft
                                              Packit 85c618
                                                    Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
                                              Packit 85c618
                                                    or 
                                              "<tt>C:\Program Files (x86)\Microsoft Visual Studio
                                              Packit 85c618
                                                    8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
                                              Packit 85c618
                                                    Windows x64.
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            5. Unzip the icu-XXXX.zip file into any convenient location. Using command
                                            6. Packit 85c618
                                                    line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
                                              Packit 85c618
                                                    WinZip.
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            7. Change directory to "icu/source", which is where you unzipped ICU.
                                            8. Packit 85c618
                                              Packit 85c618
                                                    
                                            9. Run "<tt>bash ./runConfigureICU
                                            10. Packit 85c618
                                                    Cygwin/MSVC</tt>" (See Windows
                                              Packit 85c618
                                                    configuration note and non-functional configure options below).
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            11. Type <tt>"make"</tt> to compile the libraries and all the data files.
                                            12. Packit 85c618
                                                    This make command should be GNU make.
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            13. Optionally, type <tt>"make check"</tt> to run the test suite, which
                                            14. Packit 85c618
                                                    checks for ICU's functionality integrity (See 
                                              Packit 85c618
                                                    "#HowToTestWithoutGmake">testing note below).
                                              Packit 85c618
                                              Packit 85c618
                                                    
                                            15. Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
                                            16. Packit 85c618
                                                    option on configure or runConfigureICU, ICU will be installed to the
                                              Packit 85c618
                                                    directory you specified. (See installation
                                              Packit 85c618
                                                    note below).
                                              Packit 85c618
                                                  
                                              Packit 85c618
                                              Packit 85c618
                                                  

                                              Packit 85c618
                                                  "HowToWindowsConfigureICU">Configuring ICU on Windows
                                              Packit 85c618
                                                  NOTE: 

                                              Packit 85c618
                                                  

                                              Packit 85c618
                                                  Ensure that the order of the PATH is MSVC, Cygwin, and then other PATHs. The configure
                                              Packit 85c618
                                                  script needs certain tools in Cygwin (e.g. grep).
                                              Packit 85c618
                                                  

                                              Packit 85c618
                                                  

                                              Packit 85c618
                                                  Also, you may need to run <tt>"dos2unix.exe"</tt> on all of the scripts (e.g. configure)
                                              Packit 85c618
                                                  in the top source directory of ICU. To avoid this issue, you can download
                                              Packit 85c618
                                                  the ICU source for Unix platforms (icu-xxx.tgz).
                                              Packit 85c618
                                                  

                                              Packit 85c618
                                                  

                                              In addition to the Unix

                                              Packit 85c618
                                                  "#HowToConfigureICU">configuration note the following configure options
                                              Packit 85c618
                                                  currently do not work on Windows with Microsoft's compiler. Some options can
                                              Packit 85c618
                                                  work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
                                              Packit 85c618
                                                  manually editing the files is not recommended.

                                              Packit 85c618
                                              Packit 85c618
                                                  
                                                Packit 85c618
                                                      
                                              • <tt>--disable-renaming</tt>
                                              • Packit 85c618
                                                Packit 85c618
                                                      
                                              • <tt>--enable-tracing</tt>
                                              • Packit 85c618
                                                Packit 85c618
                                                      
                                              • <tt>--enable-rpath</tt>
                                              • Packit 85c618
                                                Packit 85c618
                                                      
                                              • <tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
                                              • Packit 85c618
                                                      defined in user code that links against ICU's static libraries.)
                                                Packit 85c618
                                                Packit 85c618
                                                      
                                              • <tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
                                              • Packit 85c618
                                                      not work in this mode. Manual packaging is required to use this mode.)
                                                Packit 85c618
                                                    
                                                Packit 85c618
                                                Packit 85c618
                                                    

                                                How

                                                Packit 85c618
                                                    To Build And Install On UNIX
                                                Packit 85c618
                                                Packit 85c618
                                                    

                                                Building International Components for Unicode on UNIX requires:

                                                Packit 85c618
                                                Packit 85c618
                                                    
                                                  Packit 85c618
                                                        
                                                • A C++ compiler installed on the target machine (for example: gcc, CC,
                                                • Packit 85c618
                                                        xlC_r, aCC, cxx, etc...).
                                                  Packit 85c618
                                                  Packit 85c618
                                                        
                                                • An ANSI C compiler installed on the target machine (for example:
                                                • Packit 85c618
                                                        cc).
                                                  Packit 85c618
                                                  Packit 85c618
                                                        
                                                • A recent version of GNU make (3.80+).
                                                • Packit 85c618
                                                  Packit 85c618
                                                        
                                                • For a list of z/OS tools please view the z/OS
                                                • Packit 85c618
                                                        build section of this document for further details.
                                                  Packit 85c618
                                                      
                                                  Packit 85c618
                                                  Packit 85c618
                                                      

                                                  Here are the steps to build ICU:

                                                  Packit 85c618
                                                  Packit 85c618
                                                      
                                                    Packit 85c618
                                                          
                                                  1. Decompress the icu-X.Y.tgz (or
                                                  2. Packit 85c618
                                                          icu-X.Y.tar.gz) file. For example, <samp>gunzip -d < icu-X.Y.tgz | tar xvf -</samp>
                                                    Packit 85c618
                                                    Packit 85c618
                                                          
                                                  3. Change directory to icu/source.
                                                  4. Packit 85c618
                                                              <samp>cd icu/source</samp>
                                                    Packit 85c618
                                                              
                                                    Packit 85c618
                                                    Packit 85c618
                                                          
                                                  5. Some files may have the wrong permissions.<samp>chmod +x runConfigureICU configure install-sh</samp>
                                                  6. Packit 85c618
                                                    Packit 85c618
                                                          
                                                  7. Run the runConfigureICU
                                                  8. Packit 85c618
                                                          script for your platform. (See configuration
                                                    Packit 85c618
                                                          note below).
                                                    Packit 85c618
                                                    Packit 85c618
                                                          
                                                  9. Now build: <samp>gmake</samp> (or just make if GNU make is the default make on
                                                  10. Packit 85c618
                                                          your platform) to compile the libraries and all the data files. The proper
                                                    Packit 85c618
                                                          name of the GNU make command is printed at the end of the configuration
                                                    Packit 85c618
                                                          run, as in <tt>"You must use gmake to compile ICU"</tt>.
                                                    Packit 85c618
                                                          
                                                    Packit 85c618
                                                          Note that the compilation command output may be simplified on your platform.  If this is the case, you will see just:
                                                    Packit 85c618
                                                          <tt>gcc ... stubdata.c</tt>
                                                    Packit 85c618
                                                          rather than
                                                    Packit 85c618
                                                          <tt>gcc  -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -D_REENTRANT -I../common -DU_ATTRIBUTE_DEPRECATED= -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c -DPIC -fPIC -o stubdata.o stubdata.c</tt>
                                                    Packit 85c618
                                                          
                                                    Packit 85c618
                                                          If you need to see the whole compilation line,  use "gmake VERBOSE=1". The full compilation line will print if an error occurs.
                                                    Packit 85c618
                                                          
                                                    Packit 85c618
                                                    Packit 85c618
                                                          
                                                  11. Optionally,<samp>gmake check</samp> will run the test suite, which
                                                  12. Packit 85c618
                                                          checks for ICU's functionality integrity (See 
                                                    Packit 85c618
                                                          "#HowToTestWithoutGmake">testing note below).
                                                    Packit 85c618
                                                    Packit 85c618
                                                          
                                                  13. To install, <samp>gmake install</samp> to install ICU. If you used the --prefix=
                                                  14. Packit 85c618
                                                          option on configure or runConfigureICU, ICU will be installed to the
                                                    Packit 85c618
                                                          directory you specified. (See installation
                                                    Packit 85c618
                                                          note below).
                                                    Packit 85c618
                                                        
                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    Configuring ICU

                                                    Packit 85c618
                                                        NOTE: Type <tt>"./runConfigureICU --help"</tt> for help on how
                                                    Packit 85c618
                                                        to run it and a list of supported platforms. You may also want to type
                                                    Packit 85c618
                                                        <tt>"./configure --help"</tt> to print the available configure options that
                                                    Packit 85c618
                                                        you may want to give runConfigureICU. If you are not using the
                                                    Packit 85c618
                                                        runConfigureICU script, or your platform is not supported by the script, you
                                                    Packit 85c618
                                                        may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
                                                    Packit 85c618
                                                        type <tt>"./configure"</tt>.
                                                    Packit 85c618
                                                        HP-UX users, please see this note regarding
                                                    Packit 85c618
                                                        HP-UX multithreaded build issues with newer compilers. Solaris users,
                                                    Packit 85c618
                                                        please see this note regarding Solaris
                                                    Packit 85c618
                                                        multithreaded build issues.

                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    ICU is built with strict compiler warnings enabled by default. If this

                                                    Packit 85c618
                                                        causes excessive numbers of warnings on your platform, use the --disable-strict
                                                    Packit 85c618
                                                        option to configure to reduce the warning level.

                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    Running

                                                    Packit 85c618
                                                        The Tests From The Command Line NOTE: You may have to set
                                                    Packit 85c618
                                                        certain variables if you with to run test programs individually, that is
                                                    Packit 85c618
                                                        apart from "gmake check". The environment variable ICU_DATA
                                                    Packit 85c618
                                                        can be set to the full pathname of the data directory to indicate where the
                                                    Packit 85c618
                                                        locale data files and conversion mapping tables are when you are not using
                                                    Packit 85c618
                                                        the shared library (e.g. by using the .dat archive or the individual data
                                                    Packit 85c618
                                                        files). The trailing "/" is required after the directory name (e.g.
                                                    Packit 85c618
                                                        "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
                                                    Packit 85c618
                                                        not acceptable). You do not need to set ICU_DATA if the
                                                    Packit 85c618
                                                        complete shared data library is in your library path.

                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    Installing ICU

                                                    Packit 85c618
                                                        NOTE: Some platforms use package management tools to control the
                                                    Packit 85c618
                                                        installation and uninstallation of files on the system, as well as the
                                                    Packit 85c618
                                                        integrity of the system configuration. You may want to check if ICU can be
                                                    Packit 85c618
                                                        packaged for your package management tools by looking into the "packaging"
                                                    Packit 85c618
                                                        directory. (Please note that if you are using a snapshot of ICU from Subversion, it
                                                    Packit 85c618
                                                        is probable that the packaging scripts or related files are not up to date
                                                    Packit 85c618
                                                        with the contents of ICU at this time, so use them with caution).

                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    How To

                                                    Packit 85c618
                                                        Build And Install On z/OS (OS/390)
                                                    Packit 85c618
                                                    Packit 85c618
                                                        

                                                    You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM

                                                    Packit 85c618
                                                        tests only the z/OS installation. You install ICU in a z/OS UNIX system
                                                    Packit 85c618
                                                        services file system such as HFS or zFS. On this platform, it is important
                                                    Packit 85c618
                                                        that you understand a few details:

                                                    Packit 85c618
                                                    Packit 85c618
                                                        
                                                      Packit 85c618
                                                            
                                                    • The makedep and GNU make tools are required for building ICU. If it
                                                    • Packit 85c618
                                                            is not already installed on your system, it is available at the 
                                                      Packit 85c618
                                                            "http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html">z/OS UNIX -
                                                      Packit 85c618
                                                            Tools and Toys site. The PATH environment variable should be updated to
                                                      Packit 85c618
                                                            contain the location of this executable prior to build. Failure to add these
                                                      Packit 85c618
                                                            tools to your PATH will cause ICU build failures or cause pkgdata to fail
                                                      Packit 85c618
                                                            to run.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • Since USS does not support using the mmap() function over NFS, it is
                                                    • Packit 85c618
                                                            recommended that you build ICU on a local filesystem. Once ICU has been
                                                      Packit 85c618
                                                            built, you should not have this problem while using ICU when the data
                                                      Packit 85c618
                                                            library has been built as a shared library, which is this is the default
                                                      Packit 85c618
                                                            setting.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • Encoding considerations: The source code assumes that it is compiled
                                                    • Packit 85c618
                                                            with codepage ibm-1047 (to be exact, the UNIX System Services variant of
                                                      Packit 85c618
                                                            it). The pax command converts all of the source code files from ASCII to
                                                      Packit 85c618
                                                            codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
                                                      Packit 85c618
                                                            must not be converted, or must be converted back to their original state.
                                                      Packit 85c618
                                                            You can use the unpax-icu.sh script
                                                      Packit 85c618
                                                            to do this for you automatically. It will unpackage the tar file and
                                                      Packit 85c618
                                                            convert all the necessary files for you automatically.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • z/OS supports both native S/390 hexadecimal floating point and (with
                                                    • Packit 85c618
                                                            OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
                                                      Packit 85c618
                                                            time option. Applications built with IEEE should use ICU DLLs that are
                                                      Packit 85c618
                                                            built with IEEE (and vice versa). The environment variable IEEE390=0 will
                                                      Packit 85c618
                                                            cause the z/OS version of ICU to be built without IEEE floating point
                                                      Packit 85c618
                                                            support and use the native hexadecimal floating point. By default ICU is
                                                      Packit 85c618
                                                            built with IEEE 754 support. Native floating point support is sufficient
                                                      Packit 85c618
                                                            for codepage conversion, resource bundle and UnicodeString operations, but
                                                      Packit 85c618
                                                            the Format APIs require IEEE binary floating point.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
                                                    • Packit 85c618
                                                            bring performance improvement opportunities to call-intensive C and C++
                                                      Packit 85c618
                                                            applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
                                                      Packit 85c618
                                                            you are considering using XPLINK in your application that uses ICU, you
                                                      Packit 85c618
                                                            should consider building the XPLINK-enabled version of ICU. You need to
                                                      Packit 85c618
                                                            set ICU's environment variable OS390_XPLINK=1 prior to
                                                      Packit 85c618
                                                            invoking the make process to produce binaries that are enabled for
                                                      Packit 85c618
                                                            XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
                                                      Packit 85c618
                                                            requires the PTF PQ69418 to build XPLINK enabled binaries.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • ICU requires XPLINK for the icuio library. If you want to use the
                                                    • Packit 85c618
                                                            rest of ICU without XPLINK, then you must use the --disable-icuio
                                                      Packit 85c618
                                                            configure option.
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • The latest versions of z/OS use
                                                    • Packit 85c618
                                                            href="http://www.ibm.com/support/docview.wss?uid=swg2120240">XPLINK
                                                      Packit 85c618
                                                            version (C128) of the C++ standard library by default. You may see 
                                                      Packit 85c618
                                                            href="http://www.ibm.com/support/docview.wss?uid=swg21376279">an
                                                      Packit 85c618
                                                            error when running with XPLINK disabled. To avoid this error,
                                                      Packit 85c618
                                                            set the following environment variable or similar:
                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>export _CXX_PSYSIX="CEE.SCEELIB(C128N)":"CBC.SCLBSID(IOSTREAM,COMPLEX)"</samp>
                                                      Packit 85c618
                                                            
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • When building ICU data, the heap size may need to be increased with the following
                                                    • Packit 85c618
                                                            environment variable:
                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>export _CEE_RUNOPTS="HEAPPOOLS(ON),HEAP(4M,1M,ANY,FREE,0K,4080)"</samp>
                                                      Packit 85c618
                                                            
                                                      Packit 85c618
                                                      Packit 85c618
                                                      Packit 85c618
                                                            
                                                    • The rest of the instructions for building and testing ICU on z/OS with
                                                    • Packit 85c618
                                                            UNIX System Services are the same as the How To
                                                      Packit 85c618
                                                            Build And Install On UNIX section.
                                                      Packit 85c618
                                                          
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      z/OS (Batch/PDS) support outside the UNIX system services

                                                      Packit 85c618
                                                          environment
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      By default, ICU builds its libraries into the UNIX file system (HFS). In

                                                      Packit 85c618
                                                          addition, there is a z/OS specific environment variable (OS390BATCH) to build
                                                      Packit 85c618
                                                          some libraries into the z/OS native file system. This is useful, for example,
                                                      Packit 85c618
                                                          when your application is externalized via Job Control Language (JCL).

                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      The OS390BATCH environment variable enables non-UNIX support including the

                                                      Packit 85c618
                                                          batch environment. When OS390BATCH is set, the libicui18nXX.dll,
                                                      Packit 85c618
                                                          libicuucXX.dll, and libicudtXXe.dll binaries are built into
                                                      Packit 85c618
                                                          data sets (the native file system). Turning on OS390BATCH does not turn off
                                                      Packit 85c618
                                                          the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
                                                      Packit 85c618
                                                          always be created.

                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      Two additional environment variables indicate the names of the z/OS data

                                                      Packit 85c618
                                                          sets to use. The LOADMOD environment variable identifies the name of the data
                                                      Packit 85c618
                                                          set that contains the dynamic link libraries (DLLs) and the LOADEXP
                                                      Packit 85c618
                                                          environment variable identifies the name of the data set that contains the
                                                      Packit 85c618
                                                          side decks, which are normally the files with the .x suffix in the UNIX file
                                                      Packit 85c618
                                                          system.

                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      A data set is roughly equivalent to a UNIX or Windows file. For most kinds

                                                      Packit 85c618
                                                          of data sets the operating system maintains record boundaries. UNIX and
                                                      Packit 85c618
                                                          Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
                                                      Packit 85c618
                                                          data set of these two types contains a directory. It is like a UNIX
                                                      Packit 85c618
                                                          directory. Each "file" is called a "member". Each member name is limited to
                                                      Packit 85c618
                                                          eight bytes, normally EBCDIC.

                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      Here is an example of some environment variables that you can set prior to

                                                      Packit 85c618
                                                          building ICU:

                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>OS390BATCH=1
                                                      Packit 85c618
                                                      LOADMOD=USER.ICU.LOAD
                                                      Packit 85c618
                                                      LOADEXP=USER.ICU.EXP</samp>
                                                      Packit 85c618
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      The PDS member names for the DLL file names are as follows:

                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>IXMIXXIN --> libicui18nXX.dll
                                                      Packit 85c618
                                                      IXMIXXUC --> libicuucXX.dll
                                                      Packit 85c618
                                                      IXMIXXDA --> libicudtXXe.dll</samp>
                                                      Packit 85c618
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      You should point the LOADMOD environment variable at a partitioned data

                                                      Packit 85c618
                                                          set extended (PDSE) and point the LOADEXP environment variable at a
                                                      Packit 85c618
                                                          partitioned data set (PDS). The PDSE can be allocated with the following
                                                      Packit 85c618
                                                          attributes:

                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>Data Set Name . . . : USER.ICU.LOAD
                                                      Packit 85c618
                                                      Management class. . : **None**
                                                      Packit 85c618
                                                      Storage class . . . : BASE
                                                      Packit 85c618
                                                      Volume serial . . . : TSO007
                                                      Packit 85c618
                                                      Device type . . . . : 3390
                                                      Packit 85c618
                                                      Data class. . . . . : LOAD
                                                      Packit 85c618
                                                      Organization  . . . : PO
                                                      Packit 85c618
                                                      Record format . . . : U
                                                      Packit 85c618
                                                      Record length . . . : 0
                                                      Packit 85c618
                                                      Block size  . . . . : 32760
                                                      Packit 85c618
                                                      1st extent cylinders: 1
                                                      Packit 85c618
                                                      Secondary cylinders : 5
                                                      Packit 85c618
                                                      Data set name type  : LIBRARY</samp>
                                                      Packit 85c618
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      The PDS can be allocated with the following attributes:

                                                      Packit 85c618
                                                      Packit 85c618
                                                      <samp>Data Set Name . . . : USER.ICU.EXP
                                                      Packit 85c618
                                                      Management class. . : **None**
                                                      Packit 85c618
                                                      Storage class . . . : BASE
                                                      Packit 85c618
                                                      Volume serial . . . : TSO007
                                                      Packit 85c618
                                                      Device type . . . . : 3390
                                                      Packit 85c618
                                                      Data class. . . . . : **None**
                                                      Packit 85c618
                                                      Organization  . . . : PO
                                                      Packit 85c618
                                                      Record format . . . : FB
                                                      Packit 85c618
                                                      Record length . . . : 80
                                                      Packit 85c618
                                                      Block size  . . . . : 3200
                                                      Packit 85c618
                                                      1st extent cylinders: 3
                                                      Packit 85c618
                                                      Secondary cylinders : 3
                                                      Packit 85c618
                                                      Data set name type  : PDS</samp>
                                                      Packit 85c618
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      Packit 85c618
                                                          "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)
                                                      Packit 85c618
                                                      Packit 85c618
                                                          

                                                      Before you start building ICU, ICU requires the following:

                                                      Packit 85c618
                                                      Packit 85c618
                                                          
                                                        Packit 85c618
                                                              
                                                      • QSHELL interpreter installed (install base option 30, operating system)
                                                      • Packit 85c618
                                                              
                                                        Packit 85c618
                                                        Packit 85c618
                                                              
                                                      • ILE C/C++ Compiler installed on the system
                                                      • Packit 85c618
                                                        Packit 85c618
                                                              
                                                      • The latest IBM tools for Developers for IBM i —
                                                      • Packit 85c618
                                                                http://www.ibm.com/servers/enable/site/porting/tools/
                                                        Packit 85c618
                                                                
                                                        Packit 85c618
                                                              
                                                        Packit 85c618
                                                            
                                                        Packit 85c618
                                                        Packit 85c618
                                                            

                                                        The following describes how to setup and build ICU. For background

                                                        Packit 85c618
                                                            information, you should look at the UNIX build
                                                        Packit 85c618
                                                            instructions.

                                                        Packit 85c618
                                                        Packit 85c618
                                                            
                                                          Packit 85c618
                                                                
                                                        1. Packit 85c618
                                                                  Copy the ICU source .tgz to the IBM i environment, as binary.
                                                          Packit 85c618
                                                                  Also, copy the unpax-icu.sh script into the same directory, as a text file.
                                                          Packit 85c618
                                                                
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        2. Packit 85c618
                                                                  Create target library. This library will be the target for the
                                                          Packit 85c618
                                                                  resulting modules, programs and service programs. You will specify this
                                                          Packit 85c618
                                                                  library on the OUTPUTDIR environment variable.
                                                          Packit 85c618
                                                          Packit 85c618
                                                          <samp>CRTLIB LIB(libraryname)
                                                          Packit 85c618
                                                          ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('libraryname') REPLACE(*YES)   </samp>
                                                          Packit 85c618
                                                                
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        3. Packit 85c618
                                                                Set up the following environment variables and job characteristics in your build process
                                                          Packit 85c618
                                                          Packit 85c618
                                                          <samp>ADDENVVAR ENVVAR(MAKE) VALUE('gmake') REPLACE(*YES)
                                                          Packit 85c618
                                                          CHGJOB CCSID(37)</samp>
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        4. Fire up the QSH (all subsequent commands are run inside the qsh session.)
                                                        5. Packit 85c618
                                                                  
                                                          <samp>qsh</samp>
                                                          Packit 85c618
                                                                
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        6. Set up the PATH:
                                                          <samp>export PATH=/QIBM/ProdData/DeveloperTools/qsh/bin:$PATH:/QOpenSys/usr/bin</samp>
                                                        7. Packit 85c618
                                                                
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        8. Unpack the ICU source code archive:
                                                        9. Packit 85c618
                                                                  
                                                          <samp>gzip -d icu-X.Y.tgz</samp>
                                                          Packit 85c618
                                                                    
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        10. Run unpax-icu.sh on the tar file generated from the previous step.
                                                        11. Packit 85c618
                                                                  
                                                          <samp>unpax-icu.sh icu.tar</samp>
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        12. Build the program ICULD which ICU will use for linkage.
                                                        13. Packit 85c618
                                                                  
                                                          <samp>cd icu/as_is/os400
                                                          Packit 85c618
                                                          qsh bldiculd.sh
                                                          Packit 85c618
                                                          cd ../../..</samp>
                                                          Packit 85c618
                                                                  
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        14. Change into the 'source' directory, and configure ICU. (See configuration
                                                        15. Packit 85c618
                                                                note for details). Note that --with-data-packaging=archive and setting the --prefix are recommended, building in default (dll) mode is currently not supported.
                                                          Packit 85c618
                                                                  
                                                          <samp>cd icu/source
                                                          Packit 85c618
                                                          ./runConfigureICU IBMi --prefix=/path/to/somewhere --with-data-packaging=archive</samp>
                                                          Packit 85c618
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                        16. Build ICU. (Note: Do not use the -j option)
                                                          <samp>gmake</samp>
                                                        17. Packit 85c618
                                                          Packit 85c618
                                                                
                                                        18. Test ICU.
                                                          <samp>gmake check</samp>
                                                        19. Packit 85c618
                                                                  (The <tt> QIBM_MULTI_THREADED=Y</tt> flag will be automatically applied to intltest -
                                                          Packit 85c618
                                                                    you can look at the 
                                                          Packit 85c618
                                                                "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
                                                          Packit 85c618
                                                                iSeries Information Center for more details regarding the running of multiple threads
                                                          Packit 85c618
                                                                on IBM i.)
                                                          Packit 85c618
                                                              
                                                          Packit 85c618
                                                          Packit 85c618
                                                                
                                                          Packit 85c618
                                                              

                                                          How To Cross Compile ICU

                                                          Packit 85c618
                                                          		

                                                          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.

                                                          Packit 85c618
                                                          		

                                                          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).

                                                          Packit 85c618
                                                          		

                                                          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.

                                                          Packit 85c618
                                                          		

                                                          The autoconf docs use the term "build" for A, and "host" for B. More details at: http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html

                                                          Packit 85c618
                                                          		

                                                          Three initially-empty directories will be used in this example:

                                                          Packit 85c618
                                                          		
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          				/icua copy of the ICU source
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          				/buildAan empty directory, it will contain ICU built for A
                                                          (MacOSX in this case)
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          				/buildBan empty directory, it will contain ICU built for B
                                                          (HaikuOS in this case)
                                                          Packit 85c618
                                                          			
                                                          Packit 85c618
                                                          		
                                                          Packit 85c618
                                                          Packit 85c618
                                                          		
                                                            Packit 85c618
                                                            		
                                                          1. Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.
                                                          2. Packit 85c618
                                                            		
                                                          3. Build ICU in /buildA normally (using runConfigureICU or configure):
                                                          4. Packit 85c618
                                                            cd /buildA
                                                            Packit 85c618
                                                            sh /icu/source/runConfigureICU MacOSX
                                                            Packit 85c618
                                                            gnumake
                                                            Packit 85c618
                                                            Packit 85c618
                                                            		
                                                            Packit 85c618
                                                            		
                                                          5. Set PATH or other variables as needed, such as CPPFLAGS.
                                                          6. Packit 85c618
                                                            		
                                                          7. Build ICU in /buildB
                                                          8. Packit 85c618
                                                            			

                                                            "--with-cross-build" takes an absolute path.

                                                            Packit 85c618
                                                            cd /buildB
                                                            Packit 85c618
                                                            sh /icu/source/configure --host=i586-pc-haiku --with-cross-build=/buildA
                                                            Packit 85c618
                                                            gnumake
                                                            Packit 85c618
                                                            		
                                                            Packit 85c618
                                                            		
                                                          9. Tests and testdata can be built with "gnumake tests".
                                                          10. Packit 85c618
                                                            	
                                                            Packit 85c618
                                                                  
                                                            Packit 85c618
                                                            Packit 85c618
                                                                
                                                            Packit 85c618
                                                            Packit 85c618
                                                                

                                                            How To

                                                            Packit 85c618
                                                                Package ICU
                                                            Packit 85c618
                                                            Packit 85c618
                                                                

                                                            There are many ways that a person can package ICU with their software

                                                            Packit 85c618
                                                                products. Usually only the libraries need to be considered for packaging.

                                                            Packit 85c618
                                                            Packit 85c618
                                                                

                                                            On UNIX, you should use "<tt>gmake install</tt>" to make it easier to

                                                            Packit 85c618
                                                                develop and package ICU. The bin, lib and include directories are needed to
                                                            Packit 85c618
                                                                develop applications that use ICU. These directories will be created relative
                                                            Packit 85c618
                                                                to the "<tt>--prefix=</tt>dir" configure option (See the 
                                                            Packit 85c618
                                                                "#HowToBuildUNIX">UNIX build instructions). When ICU is built on Windows,
                                                            Packit 85c618
                                                                a similar directory structure is built.

                                                            Packit 85c618
                                                            Packit 85c618
                                                                

                                                            When changes have been made to the standard ICU distribution, it is

                                                            Packit 85c618
                                                                recommended that at least one of the following guidelines be followed for
                                                            Packit 85c618
                                                                special packaging.

                                                            Packit 85c618
                                                            Packit 85c618
                                                                
                                                              Packit 85c618
                                                                    
                                                            1. Add a suffix name to the library names. This can be done with the
                                                            2. Packit 85c618
                                                                    --with-library-suffix configure option.
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                            3. The installation script should install the ICU libraries into the
                                                            4. Packit 85c618
                                                                    application's directory.
                                                              Packit 85c618
                                                                  
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Following these guidelines prevents other applications that use a standard

                                                              Packit 85c618
                                                                  ICU distribution from conflicting with any libraries that you need. On
                                                              Packit 85c618
                                                                  operating systems that do not have a standard C++ ABI (name mangling) for
                                                              Packit 85c618
                                                                  compilers, it is recommended to do this special packaging anyway. More
                                                              Packit 85c618
                                                                  details on customizing ICU are available in the 
                                                              Packit 85c618
                                                                  "http://userguide.icu-project.org/">User's Guide. The 
                                                              Packit 85c618
                                                                  "#SourceCode">ICU Source Code Organization section of this readme.html
                                                              Packit 85c618
                                                                  gives a more complete description of the libraries.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  
                                                              Packit 85c618
                                                                  "ICU has several libraries for you to use.">
                                                              Packit 85c618
                                                                    <caption>
                                                              Packit 85c618
                                                                      Here is an example of libraries that are frequently packaged.
                                                              Packit 85c618
                                                                    </caption>
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Library Name
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      Windows Filename
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      Linux Filename
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      Comment
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Data Library
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      icudtXYl.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicudata.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      Data required by the Common and I18n libraries. There are many ways
                                                              Packit 85c618
                                                                      to package and 
                                                              Packit 85c618
                                                                      "http://userguide.icu-project.org/icudata">customize this
                                                              Packit 85c618
                                                                      data, but by default this is all you need.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Common Library
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      icuucXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicuuc.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      Base library required by all other ICU libraries.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Internationalization (i18n) Library
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      icuinXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicui18n.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      A library that contains many locale based internationalization (i18n)
                                                              Packit 85c618
                                                                      functions.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Layout Engine
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      iculeXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicule.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      An optional engine for doing font layout.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Layout Extensions Engine
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      iculxXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libiculx.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      An optional engine for doing font layout that uses parts of ICU.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      ICU I/O (Unicode stdio) Library
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      icuioXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicuio.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      An optional library that provides a stdio like API with Unicode
                                                              Packit 85c618
                                                                      support.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                      Tool Utility Library
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      icutuXY.dll
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      libicutu.so.XY.Z
                                                              Packit 85c618
                                                              Packit 85c618
                                                                      An internal library that contains internal APIs that are only used by
                                                              Packit 85c618
                                                                      ICU's tools. If you do not use ICU's tools, you do not need this
                                                              Packit 85c618
                                                                      library.
                                                              Packit 85c618
                                                                    
                                                              Packit 85c618
                                                                  
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Normally only the above ICU libraries need to be considered for packaging.

                                                              Packit 85c618
                                                                  The versionless symbolic links to these libraries are only needed for easier
                                                              Packit 85c618
                                                                  development. The X, Y and Z parts of the name are the
                                                              Packit 85c618
                                                                  version numbers of ICU. For example, ICU 2.0.2 would have the name
                                                              Packit 85c618
                                                                  libicuuc.so.20.2 for the common library. The exact format of the library
                                                              Packit 85c618
                                                                  names can vary between platforms due to how each platform can handles library
                                                              Packit 85c618
                                                                  versioning.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotes">Important Notes About Using ICU
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
                                                              Packit 85c618
                                                                  Environment
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Some versions of ICU require calling the u_init() function

                                                              Packit 85c618
                                                                  from uclean.h to ensure that ICU is initialized properly. In
                                                              Packit 85c618
                                                                  those ICU versions, u_init() must be called before ICU is used
                                                              Packit 85c618
                                                                  from multiple threads. There is no harm in calling u_init() in a
                                                              Packit 85c618
                                                                  single-threaded application, on a single-CPU machine, or in other cases where
                                                              Packit 85c618
                                                                  u_init() is not required.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              In addition to ensuring thread safety, u_init() also attempts

                                                              Packit 85c618
                                                                  to load at least one ICU data file. Assuming that all data files are packaged
                                                              Packit 85c618
                                                                  together (or are in the same folder in files mode), a failure code from
                                                              Packit 85c618
                                                                  u_init() usually means that the data cannot be found. In this
                                                              Packit 85c618
                                                                  case, the data may not be installed properly, or the application may have
                                                              Packit 85c618
                                                                  failed to call udata_setCommonData() or
                                                              Packit 85c618
                                                                  u_setDataDirectory() which specify to ICU where it can find its
                                                              Packit 85c618
                                                                  data.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Since u_init() will load only one or two data files, it

                                                              Packit 85c618
                                                                  cannot guarantee that all of the data that an application needs is available.
                                                              Packit 85c618
                                                                  It cannot check for all data files because the set of files is customizable,
                                                              Packit 85c618
                                                                  and some ICU services work without loading any data at all. An application
                                                              Packit 85c618
                                                                  should always check for error codes when opening ICU service objects (using
                                                              Packit 85c618
                                                                  ucnv_open(), ucol_open(), C++ constructors,
                                                              Packit 85c618
                                                                  etc.).

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 3.4 and later

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 3.4 self-initializes properly for multi-threaded use. It achieves this

                                                              Packit 85c618
                                                                  without performance penalty by hardcoding the core Unicode properties data,
                                                              Packit 85c618
                                                                  at the cost of some flexibility. (For details see Jitterbug 4497.)

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              u_init() can be used to check for data loading. It tries to

                                                              Packit 85c618
                                                                  load the converter alias table (cnvalias.icu).

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 2.6..3.2

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              These ICU versions require a call to u_init() before

                                                              Packit 85c618
                                                                  multi-threaded use. The services that are directly affected are those that
                                                              Packit 85c618
                                                                  don't have a service object and need to be fast: normalization and character
                                                              Packit 85c618
                                                                  properties.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              u_init() loads and initializes the data files for

                                                              Packit 85c618
                                                                  normalization and character properties (unorm.icu and
                                                              Packit 85c618
                                                                  uprops.icu) and can therefore also be used to check for data
                                                              Packit 85c618
                                                                  loading.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 2.4 and earlier

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 2.4 and earlier versions were not prepared for multithreaded use on

                                                              Packit 85c618
                                                                  multi-CPU platforms where the CPUs implement weak memory coherency. These
                                                              Packit 85c618
                                                                  CPUs include: Power4, Power5, Alpha, Itanium. u_init() was not
                                                              Packit 85c618
                                                                  defined yet.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
                                                              Packit 85c618
                                                                  HP-UX
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              When ICU is built with aCC on HP-UX, the

                                                              Packit 85c618
                                                                  href="http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=eb08b3f1eee02110b3f1eee02110275d6e10RCRD">-AA
                                                              Packit 85c618
                                                                  compiler flag is used. It is required in order to use the latest
                                                              Packit 85c618
                                                                  <iostream> API in a thread safe manner. This compiler flag affects the
                                                              Packit 85c618
                                                                  version of the C++ library being used. Your applications will also need to
                                                              Packit 85c618
                                                                  be compiled with -AA in order to use ICU.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
                                                              Packit 85c618
                                                                  Solaris
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  
                                                              Linking on Solaris
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              In order to avoid synchronization and threading issues, developers are

                                                              Packit 85c618
                                                                  suggested to strictly follow the compiling and linking
                                                              Packit 85c618
                                                                  guidelines for multithreaded applications, specified in the following
                                                              Packit 85c618
                                                                  document from Sun Microsystems. Most notably, pay strict attention to the
                                                              Packit 85c618
                                                                  following statements from Sun:

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  
                                                              Packit 85c618
                                                                    

                                                              To use libthread, specify -lthread before -lc on the ld command line, or

                                                              Packit 85c618
                                                                    last on the cc command line.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                    

                                                              To use libpthread, specify -lpthread before -lc on the ld command line,

                                                              Packit 85c618
                                                                    or last on the cc command line.

                                                              Packit 85c618
                                                                  
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Failure to do this may cause spurious lock conflicts, recursive mutex

                                                              Packit 85c618
                                                                  failure, and deadlock.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Source: "Solaris Multithreaded Programming Guide, Compiling and

                                                              Packit 85c618
                                                                  Debugging", Sun Microsystems, Inc., Apr 2004
                                                              Packit 85c618
                                                                   
                                                              Packit 85c618
                                                                  "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotesWindows">Windows Platform
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              If you are building on the Win32 platform, it is important that you

                                                              Packit 85c618
                                                                  understand a few of the following build details.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              DLL directories and the PATH setting

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              As delivered, the International Components for Unicode build as several

                                                              Packit 85c618
                                                                  DLLs, which are placed in the "<ICU>\bin" directory. You must
                                                              Packit 85c618
                                                                  add this directory to the PATH environment variable in your system, or any
                                                              Packit 85c618
                                                                  executables you build will not be able to access International Components for
                                                              Packit 85c618
                                                                  Unicode libraries. Alternatively, you can copy the DLL files into a directory
                                                              Packit 85c618
                                                                  already in your PATH, but we do not recommend this. You can wind up with
                                                              Packit 85c618
                                                                  multiple copies of the DLL and wind up using the wrong one.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotesWindowsPath">Changing your PATH
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Windows 2000/XP: Use the System Icon in the Control

                                                              Packit 85c618
                                                                  Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
                                                              Packit 85c618
                                                                  button. Select the variable PATH in the lower box, and select the lower
                                                              Packit 85c618
                                                                  "Edit..." button. In the "Variable Value" box, append the string
                                                              Packit 85c618
                                                                  ";<ICU>\bin" to the end of the path string. If there is
                                                              Packit 85c618
                                                                  nothing there, just type in "<ICU>\bin". Click the Set button,
                                                              Packit 85c618
                                                                  then the OK button.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Note: When packaging a Windows application for distribution and

                                                              Packit 85c618
                                                                  installation on user systems, copies of the ICU DLLs should be included with
                                                              Packit 85c618
                                                                  the application, and installed for exclusive use by the application. This is
                                                              Packit 85c618
                                                                  the only way to insure that your application is running with the same version
                                                              Packit 85c618
                                                                  of ICU, built with exactly the same options, that you developed and tested
                                                              Packit 85c618
                                                                  with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
                                                              Packit 85c618
                                                                  phrase "DLL hell" on 
                                                              Packit 85c618
                                                                  "http://msdn.microsoft.com/">msdn.microsoft.com.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "ImportantNotesUNIX">UNIX Type Platform
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              If you are building on a UNIX platform, and if you are installing ICU in a

                                                              Packit 85c618
                                                                  non-standard location, you may need to add the location of your ICU libraries
                                                              Packit 85c618
                                                                  to your LD_LIBRARY_PATH or LIBPATH
                                                              Packit 85c618
                                                                  environment variable (or the equivalent runtime library path environment
                                                              Packit 85c618
                                                                  variable for your system). The ICU libraries may not link or load properly
                                                              Packit 85c618
                                                                  without doing this.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Note that if you do not want to have to set this variable, you may instead

                                                              Packit 85c618
                                                                  use the --enable-rpath option at configuration time. This option will
                                                              Packit 85c618
                                                                  instruct the linker to always look for the libraries where they are
                                                              Packit 85c618
                                                                  installed. You will need to use the appropriate linker options when linking
                                                              Packit 85c618
                                                                  your own applications and libraries against ICU, too. Please refer to your
                                                              Packit 85c618
                                                                  system's linker manual for information about runtime paths. The use of rpath
                                                              Packit 85c618
                                                                  also means that when building a new version of ICU you should not have an
                                                              Packit 85c618
                                                                  older version installed in the same place as the new version's installation
                                                              Packit 85c618
                                                                  directory, as the older libraries will used during the build, instead of the
                                                              Packit 85c618
                                                                  new ones, likely leading to an incorrectly build ICU. This is the proper
                                                              Packit 85c618
                                                                  behavior of rpath.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "PlatformDependencies">Platform Dependencies
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                                  "PlatformDependenciesNew">Porting To A New Platform
                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              If you are using ICU's Makefiles to build ICU on a new platform, there are

                                                              Packit 85c618
                                                                  a few places where you will need to add or modify some files. If you need
                                                              Packit 85c618
                                                                  more help, you can always ask the 
                                                              Packit 85c618
                                                                  "http://site.icu-project.org/contacts">icu-support mailing list. Once
                                                              Packit 85c618
                                                                  you have finished porting ICU to a new platform, it is recommended that you
                                                              Packit 85c618
                                                                  contribute your changes back to ICU via the icu-support mailing list. This
                                                              Packit 85c618
                                                                  will make it easier for everyone to benefit from your work.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Data For a New Platform

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              For some people, it may not be necessary for completely build ICU. Most of

                                                              Packit 85c618
                                                                  the makefiles and build targets are for tools that are used for building
                                                              Packit 85c618
                                                                  ICU's data, and an application's data (when an application uses ICU resource
                                                              Packit 85c618
                                                                  bundles for its data).

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Data files can be built on a different platform when both platforms share

                                                              Packit 85c618
                                                                  the same endianness and the same charset family. This assertion does not
                                                              Packit 85c618
                                                                  include platform dependent DLLs/shared/static libraries. For details see the
                                                              Packit 85c618
                                                                  User Guide ICU
                                                              Packit 85c618
                                                                  Data chapter.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              ICU 3.6 removes the requirement that ICU be completely built in the native

                                                              Packit 85c618
                                                                  operating environment. It adds the icupkg tool which can be run on any
                                                              Packit 85c618
                                                                  platform to turn binary ICU data files from any one of the three formats into
                                                              Packit 85c618
                                                                  any one of the other data formats. This allows a application to use ICU data
                                                              Packit 85c618
                                                                  built anywhere to be used for any other target platform.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              WARNING! Building ICU without running the tests is not

                                                              Packit 85c618
                                                                  recommended. The tests verify that ICU is safe to use. It is recommended that
                                                              Packit 85c618
                                                                  you try to completely port and test ICU before using the libraries for your
                                                              Packit 85c618
                                                                  own application.

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Adapting Makefiles For a New Platform

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  

                                                              Try to follow the build steps from the UNIX

                                                              Packit 85c618
                                                                  build instructions. If the configure script fails, then you will need to
                                                              Packit 85c618
                                                                  modify some files. Here are the usual steps for porting to a new
                                                              Packit 85c618
                                                                  platform:
                                                              Packit 85c618
                                                                  

                                                              Packit 85c618
                                                              Packit 85c618
                                                                  
                                                                Packit 85c618
                                                                      
                                                              1. Create an mh file in icu/source/config/. You can use mh-linux or a
                                                              2. Packit 85c618
                                                                      similar mh file as your base configuration.
                                                                Packit 85c618
                                                                Packit 85c618
                                                                      
                                                              3. Modify icu/source/aclocal.m4 to recognize your platform's mh file.
                                                              4. Packit 85c618
                                                                Packit 85c618
                                                                      
                                                              5. Modify icu/source/configure.in to properly set your platform C
                                                              6. Packit 85c618
                                                                      Macro define.
                                                                Packit 85c618
                                                                Packit 85c618
                                                                      
                                                              7. Run autoconf in
                                                              8. Packit 85c618
                                                                      icu/source/ without any options. The autoconf tool is standard on most
                                                                Packit 85c618
                                                                      Linux systems.
                                                                Packit 85c618
                                                                Packit 85c618
                                                                      
                                                              9. If you have any optimization options that you want to normally use, you
                                                              10. Packit 85c618
                                                                      can modify icu/source/runConfigureICU to specify those options for your
                                                                Packit 85c618
                                                                      platform.
                                                                Packit 85c618
                                                                Packit 85c618
                                                                      
                                                              11. Build and test ICU on your platform. It is very important that you run
                                                              12. Packit 85c618
                                                                      the tests. If you don't run the tests, there is no guarentee that you have
                                                                Packit 85c618
                                                                      properly ported ICU.
                                                                Packit 85c618
                                                                    
                                                                Packit 85c618
                                                                Packit 85c618
                                                                    

                                                                Packit 85c618
                                                                    "PlatformDependenciesImpl">Platform Dependent Implementations
                                                                Packit 85c618
                                                                Packit 85c618
                                                                    

                                                                The platform dependencies have been mostly isolated into the following

                                                                Packit 85c618
                                                                    files in the common library. This information can be useful if you are
                                                                Packit 85c618
                                                                    porting ICU to a new platform.

                                                                Packit 85c618
                                                                Packit 85c618
                                                                    
                                                                  Packit 85c618
                                                                        
                                                                • Packit 85c618
                                                                          unicode/platform.h.in (autoconf'ed platforms)
                                                                  Packit 85c618
                                                                           unicode/pXXXX.h (others: pwin32.h, ppalmos.h,
                                                                  Packit 85c618
                                                                          ..): Platform-dependent typedefs and defines:
                                                                  Packit 85c618
                                                                          
                                                                  Packit 85c618
                                                                  Packit 85c618
                                                                  Packit 85c618
                                                                          
                                                                    Packit 85c618
                                                                              
                                                                  • Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
                                                                  • Packit 85c618
                                                                              uint64_t etc.
                                                                    Packit 85c618
                                                                    Packit 85c618
                                                                              
                                                                  • U_EXPORT and U_IMPORT for specifying dynamic library import and
                                                                  • Packit 85c618
                                                                              export
                                                                    Packit 85c618
                                                                    Packit 85c618
                                                                              
                                                                  • String handling support for the char16_t and wchar_t types.
                                                                  • Packit 85c618
                                                                            
                                                                    Packit 85c618
                                                                            
                                                                    Packit 85c618
                                                                          
                                                                    Packit 85c618
                                                                    Packit 85c618
                                                                          
                                                                  • Packit 85c618
                                                                            unicode/putil.h, putil.c: platform-dependent
                                                                    Packit 85c618
                                                                            implementations of various functions that are platform dependent:
                                                                    Packit 85c618
                                                                            
                                                                    Packit 85c618
                                                                    Packit 85c618
                                                                    Packit 85c618
                                                                            
                                                                      Packit 85c618
                                                                                
                                                                    • uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
                                                                    • Packit 85c618
                                                                                handling special floating point values.
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                                
                                                                    • uprv_tzset, uprv_timezone, uprv_tzname and time for getting
                                                                    • Packit 85c618
                                                                                platform specific time and time zone information.
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                                
                                                                    • u_getDataDirectory for getting the default data directory.
                                                                    • Packit 85c618
                                                                      Packit 85c618
                                                                                
                                                                    • uprv_getDefaultLocaleID for getting the default locale
                                                                    • Packit 85c618
                                                                                setting.
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                                
                                                                    • uprv_getDefaultCodepage for getting the default codepage
                                                                    • Packit 85c618
                                                                                encoding.
                                                                      Packit 85c618
                                                                              
                                                                      Packit 85c618
                                                                              
                                                                      Packit 85c618
                                                                            
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                            
                                                                    • Packit 85c618
                                                                              umutex.h, umutex.c: Code for doing synchronization in
                                                                      Packit 85c618
                                                                              multithreaded applications. If you wish to use International Components
                                                                      Packit 85c618
                                                                              for Unicode in a multithreaded application, you must provide a
                                                                      Packit 85c618
                                                                              synchronization primitive that the classes can use to protect their
                                                                      Packit 85c618
                                                                              global data against simultaneous modifications. We already supply working
                                                                      Packit 85c618
                                                                              implementations for many platforms that ICU builds on.
                                                                      Packit 85c618
                                                                              
                                                                      Packit 85c618
                                                                            
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                            
                                                                    • umapfile.h, umapfile.c: functions for mapping or
                                                                    • Packit 85c618
                                                                            otherwise reading or loading files into memory. All access by ICU to data
                                                                      Packit 85c618
                                                                            from files makes use of these functions.
                                                                      Packit 85c618
                                                                            
                                                                      Packit 85c618
                                                                            
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                            
                                                                    • Using platform specific #ifdef macros are highly discouraged outside of
                                                                    • Packit 85c618
                                                                            the scope of these files. When the source code gets updated in the future,
                                                                      Packit 85c618
                                                                            these #ifdef's can cause testing problems for your platform.
                                                                      Packit 85c618
                                                                          
                                                                      Packit 85c618
                                                                          
                                                                      Packit 85c618
                                                                      Packit 85c618
                                                                          

                                                                      Copyright © 1997-2016 International Business Machines Corporation and

                                                                      Packit 85c618
                                                                          others. All Rights Reserved.
                                                                      Packit 85c618
                                                                           IBM Globalization Center of Competency - San José
                                                                      Packit 85c618
                                                                           4400 North First Street
                                                                      Packit 85c618
                                                                           San José, CA 95134
                                                                      Packit 85c618
                                                                           USA

                                                                      Packit 85c618
                                                                        </body>
                                                                      Packit 85c618
                                                                      </html>