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

  % gzip -cd glib-@GLIB_VERSION@.tar.gz | tar xvf -  # unpack the sources
  % cd glib-@GLIB_VERSION@                           # 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 GLib 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 GLib, 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, GLib 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/


Support for extended attributes and SELinux in GIO requires
libattr and libselinux.

Some of the mimetype-related functionality in GIO requires the
update-mime-database and update-desktop-database utilities, which
are part of shared-mime-info and desktop-file-utils, respectively.

GObject uses libffi to implement generic marshalling functionality.

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

Complete information about installing GLib can be found
in the file:

 docs/reference/glib/html/glib-building.html

Or online at:

 http://library.gnome.org/devel/glib/stable/glib-building.html


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


Cross-compiling GLib
====================

Information about cross-compilation of GLib can be found
in the file:

 docs/reference/glib/html/glib-cross-compiling.html

Or online at:

 http://library.gnome.org/devel/glib/stable/glib-cross-compiling.html
