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 dyanmic loader. This is the right way of doing things.

The configure script invokation 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 developpment 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 faciliate 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>
