Copyright (C) 2016 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
Copyright (C) 2000-2003, International Business Machines
Corporation and others.  All Rights Reserved.
ICU is packaged into a number of small, interdependent packages. This
file describes what these packages are, what their name should be
like, and what their contents are. It is useful as a reference and a
guide when packaging ICU on a new system.

+ List of ICU packages.

ICU is distributed as the following packages:

- ICU libraries. This package contains the runtime libraries needed by
applications that use ICU. All the other packages require this package
to be installed.
- ICU. This package contains the converters data, the timezones data,
and all the ICU tools.
- ICU locales. This package adds locales and break data.
- ICU development. This package contains the files necessary to build
applications that use ICU, i.e. header files, links to shared
libraries used by the linker, static libraries, etc... It also
contains sample applications and documentation.
- ICU docs. This package contains further documentation for ICU,
including a complete API reference.
- ICU data. This package contains the source for the compiled data
contained by the ICU package.
- ICU international data. This package contains the source for the
compiled data contained by the ICU locales package.

In this file, we will refer to Autoconf variables as in $(bindir). In
addition to these, we will use the following variables to denote
ICU-specific directories or information:

  VERSION       ICU's dotted version number, e.g. 1.6.0.1 as of this
		writing.

  ICUDATADIR	The directory where portable ICU data are. This is
	        defined as $(datadir)/icu/$(VERSION).
  ICULIBDIR	The directory where platform-specific ICU data
		are. This is defined as $(libdir)/icu/$(VERSION).
  ICUSYSCONFDIR	The directory where ICU configuration files are. This
		is defined as $(sysconfdir)/icu.

When referring to libraries, .so will be used to denote the extension
of a shared library, and .a to denote the extension of a static
library. These extensions will actually be different on some platforms.

+ Configuration and compilation of ICU

ICU should be configured with the following options:

  --with-data-packaging=files
  --disable-rpath
  --enable-shared
  --enable-static
  --without-samples

in addition to platform-specific settings (like a specific mandir or
sysconfdir). Note that the use of --disable-rpath assumes that the
packaging is made for a standard location, or that the package
installation/deinstallation will correctly manage the configuration
of the system's dynamic loader. This is the right way of doing things.

The configure script invocation should also be done with

  CFLAGS="-O2"

set, as in:

  $ CFLAGS="-O2" ./configure ...

The files packaging mode is chosen because it offers the maximum
flexibility. Packages can be split easily, and system administrators
can add converters, aliases, and other resources with little
effort. Ideally, the ICU build will be modified to allow for distributing a
libicudata.so with all the converters and locales, but indexes and aliases
as separate files. But for now, this is the easiest way to get started.

+ The ICU libraries package

The ICU libraries package is typically named `libicuXX' where XX is
the major number of ICU's libraries. This number is ICU's version
number multiplied by 10 and rounded down to the nearest integer (it is
also the value of the LIB_VERSION_MAJOR configure substitution
variable). For example, for ICU 1.6.0.1, it is 16, so the package name
is `libicu16'. The major version is part of the package name to allow
for the simultaneous installation of different ICU releases.

This package contains:

- All the shared libraries, and their major number symbolic link, but
not the .so symbolic link that is only used at link time (this one is
part of the development package). These are $(libdir)/libicu*.so.* and
$(libdir)/libustdio.so.* at the time of this writing.

+ The ICU package

The ICU package is simply named `icu'.  It provides data used by the ICU
libraries package and commands to create and manipulate that data.

This package contains:

- The Unicode data files (uprops.dat and unames.dat as of this writing).
- The time zones data files (tz.dat).
- All the binary data files for converters (.cnv files).
- All the ICU commands.
- The manual pages for ICU commands and file formats.

+ The ICU locales package

The ICU locales package is named `icu-locales'. It provides data used by
internationalization support in ICU.

This package contains:

- All the data for locales in ICU (.dat files).
- All the break data for specific locales (.brk files).

+ The ICU development package

The ICU development package is named `libicu-dev'. It provides all
the files necessary to write applications that use ICU, along with
examples and some documentation.

This package contains:

- The /usr/include/unicode directory which contains all the ICU
headers.
- The .so symbolic links used by the linker to link against the
latest version of the libraries.
- A sample Makefile fragment that can be included by applications
using ICU, to facilitate their building, along with a platform-specific
configuration file included by this fragment.
- The sample applications from the ICU source tree, in an appropriate
location for the system that the package is installed on (for example,
on Debian, in /usr/share/doc/libicu-dev/examples).

This package depends on the ICU libraries package with the exact same
version, since it provides .so symbolic links to the latest libraries.

+ The ICU docs package

The ICU docs package is named `libicu-doc'. It contains the files
generated by doxygen when the `make doc' command is executed, in a
location appropriate for the system that the package is installed on.

+ The ICU data package

The ICU data package is named `icu-data'. It contains source files for
the data found in the ICU package. These files are installed in
$(ICUDATADIR).

+ The ICU international data package

The ICU data package is named `icu-i18ndata'. It contains source files for
the dat founf in the ICU locales package. These files are installed in
$(ICUDATADIR).

----
Yves Arrouye <yves@realnames.com>
