Simple install procedure
========================

  % gzip -cd glib-2.1.5.tar.gz | tar xvf -  # unpack the sources
  % cd glib-2.1.5                           # change to the toplevel directory
  % ./configure                             # run the `configure' script
  % make                                    # build GLIB

  [ Become root if necessary ]
  % rm -rf /install-prefix/include/glib.h /install-prefix/include/gmodule.h
  % make install                            # install GLIB

Requirements
============

GLib-2.0 requires pkg-config, which is tool for tracking the
compilation flags needed for libraries. (For each library, a small .pc
text file is installed in a standard location that contains the
compilation flags needed for that library along with version number
information.) Information about pkg-config can be found at:

  http://www.freedesktop.org/software/pkgconfig/

GNU make (http://www.gnu.org/software/make) is also recommended.

In order to implement conversions between character sets,
GLib requires an implementation of the standard iconv() routine.
Most modern systems will have a suitable implementation, however
many older systems lack an iconv() implementation. On such systems, 
you must install the libiconv library. This can be found at:

 http://www.gnu.org/software/libiconv/

If your system has an iconv implementation but you want to use
libiconv instead, you can pass the --with-libiconv option to
configure. This forces libiconv to be used. 

Note that if you have libiconv installed in your default include
search path (for instance, in /usr/local/), but don't enable
it, you will get an error while compiling GTK+ because the
iconv.h that libiconv installs hides the system iconv.

If you are using the native iconv implementation on Solaris
instead of libiconv, you'll need to make sure that you have 
the converters between locale encodings and UTF-8 installed.
At a minimum you'll need the SUNWuiu8 package. You probably
should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and
SUNWkiu8 packages.

The native iconv on Compaq Tru64 doesn't contain support for
UTF-8, so you'll need to use GNU libiconv instead. (When
using GNU libiconv for GTK+, you'll need to use GNU libiconv
for GNU gettext as well.) This probably applies to related
operating systems as well.

Finally, for message catalog handling, GTK+ requires an implementation
of gettext(). If your system doesn't provide this functionality,
you should use the libintl library from the GNU gettext package,
available from:

 http://www.gnu.org/software/gettext/

The Nitty-Gritty
================

The 'configure' script can be given a number of options to enable
and disable various features. For a complete list, type:

  ./configure --help

A few of the more important ones:

*  --prefix=PREFIX         install architecture-independent files in PREFIX
                           [ Defaults to /usr/local ]

*  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                           [ Defaults to the value given to --prefix ]

*  --enable-gc-friendly    When enabled all memory freed by the application,
                           but retained by GLib for performance reasons  
                           is set to zero, thus making deployed garbage
                           collection or memory profiling tools detect 
                           unlinked memory correctly. This will make GLib 
                           slightly slower.
                           [ Disabled by default ]

* --disable-threads        Do not compile GLib to be multi thread safe. GLib
                           will be slightly faster then. This is however not
                           recommended, as many programs rely on GLib being 
                           multi thread safe.
                           [ Enabled by default ]

* --with-threads=[none/posix/dce/solaris/win32] Specify a thread 
                           implementation to use. 
                           * 'posix' and 'dce' can be used interchangeable 
                             to mean the different versions of posix 
                             threads. configure tries to find out, which 
                             one is installed. 
                           * 'solaris' uses the native Solaris thread
                             implementation. 
                           * 'none' means that GLib will be thread safe, 
                             but does not have a default thread 
                             implementation. This has to be supplied to 
                             g_thread_init() by the programmer. 
                           [ Determined by configure by default ]

Options can be given to the compiler and linker by setting
environment variables before running configure. A few of the more
important ones:

 CC       : The C compiler to use
 CPPFLAGS : Flags for the C preprocesser such as -I and -D
 CFLAGS   : C compiler flags

The most important use of this is to set the
optimization/debugging flags. For instance, to compile with no
debugging information at all, run configure as:

 CFLAGS=-O2 ./configure           # Bourne compatible shells (sh/bash/zsh)

or,

 setenv CFLAGS -O2 ; ./configure  # csh and variants


Installation directories
========================

The location of the installed files is determined by the --prefix
and --exec-prefix options given to configure. There are also more
detailed flags to control individual directories. However, the
use of these flags is not tested.

One particular detail to note, is that the architecture-dependent
include file glibconfig.h is installed in:

  $exec_prefix/lib/glib/include/

if you have a version in $prefix/include, this is out of date
and should be deleted.

.pc files for the various libraries are installed in 
$exec_prefix/lib/pkgconfig to provide information when compiling
other packages that depend on GTK+. If you set PKG_CONFIG_PATH
so that it points to this directory, then you can get the 
correct include flags and library flags for compiling a GLib
application with:

 pkg-config --cflags glib-2.0
 pkg-config --libs glib-2.0

