How to Configure libucw libraries
=================================

What can be configured
----------------------
There are two different levels of configuring program
based on the libucw libraries:

  - runtime configuration in configuration files (see <<config:>>)

  - compile-time configuration of the libraries: config switches set
    before compiling, selecting optional features.

Where to build
--------------
If you run configure in the source directory, it prepares for compilation inside
the source tree. In this case, an `obj` subdirectory is created to hold all generated
files (object files, binaries, generated source files etc.) and all final files
are linked to the `run` subdirectory. No other parts of the source tree are written into.

Alternatively, you can compile in a separate object tree (which is useful when you
want to build several different configurations from a single source tree). In order
to do that, switch to the destination directory and issue `<source-dir>/configure ...`.
This way, configure will create the `obj` and `run` directories locally and set up
a Makefile which refers to the original source tree.

How to configure
----------------
To set up compilation, possibly overriding default compile-time
options, just run:

	./configure [<option> | -<option> | <option>=<value> ...]

The default values of feature options are taken from `default.cfg`.
Compiler flags and options dependent on compiler, OS and CPU type
are set in `ucw/perl/UCW/Configure/C.pm`. Everything can be overriden by
options specified on the configure's command line, which have the highest
priority.

If you want to see the resulting set of options, take a look at
`obj/config.mk`.

Options specifying compiler/linker/debugger options can be also overriden
during compilation by `make <option>=<value>`. While it's also possible
to specify the other options in this way, it probably won't have the desired
effect, because configure also generates C include files containing the
options.

Installation options
--------------------
By default, the package is compiled to be installed and it chooses a
place where it will install. If you want to place it somewhere else,
set the `PREFIX` option:

	./configure PREFIX=/where/to/install

[[local_build]]
You can create a local compilation, which does not need to be
installed. To compile it that way, turn on the `CONFIG_LOCAL` option
(and do not set `PREFIX`):

	./configure CONFIG_LOCAL

Alternatively you can add the `CONFIG_RELATIVE_PATHS` option.
All paths are then set relative to a `run` directory and
programs expect to have current working directory set to it. However,
you can move the `run` directory around your filesystem as you like:

	./configure CONFIG_LOCAL CONFIG_RELATIVE_PATHS

Examples
--------
  - `./configure -CONFIG_SHARED` will build the libraries statically.
  - `./configure -CONFIG_XML` avoids building the XML library.
  - `./configure -CONFIG_UCW_UTILS` compiles only the libraries
    without its utility programs.
  - `./configure CONFIG_IMAGES PREFIX=$HOME/libucw` includes an image
    library and installs into your home directory.