mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-16 09:16:15 +01:00
32ffaf4c32
Tue Dec 13 10:13:32 2005 Tim Janik <timj@imendio.com> * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
438 lines
16 KiB
Plaintext
438 lines
16 KiB
Plaintext
<refentry id="glib-building" revision="16 Jan 2002">
|
|
<refmeta>
|
|
<refentrytitle>Compiling the GLib package</refentrytitle>
|
|
<manvolnum>3</manvolnum>
|
|
<refmiscinfo>GLib Library</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>Compiling the GLib Package</refname>
|
|
<refpurpose>
|
|
How to compile GLib itself
|
|
</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 id="building">
|
|
<title>Building the Library on UNIX</title>
|
|
<para>
|
|
On UNIX, GLib uses the standard GNU build system,
|
|
using <application>autoconf</application> for package
|
|
configuration and resolving portability issues,
|
|
<application>automake</application> for building makefiles
|
|
that comply with the GNU Coding Standards, and
|
|
<application>libtool</application> for building shared
|
|
libraries on multiple platforms. The normal sequence for
|
|
compiling and installing the GLib library is thus:
|
|
|
|
<literallayout>
|
|
<userinput>./configure</userinput>
|
|
<userinput>make</userinput>
|
|
<userinput>make install</userinput>
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
The standard options provided by <application>GNU
|
|
autoconf</application> may be passed to the
|
|
<command>configure</command> script. Please see the
|
|
<application>autoconf</application> documentation or run
|
|
<command>./configure --help</command> for information about
|
|
the standard options.
|
|
</para>
|
|
<para>
|
|
The GTK+ documentation contains
|
|
<ulink url="../gtk/gtk-building.html">further details</ulink>
|
|
about the build process and ways to influence it.
|
|
</para>
|
|
</refsect1>
|
|
<refsect1 id="dependencies">
|
|
<title>Dependencies</title>
|
|
<para>
|
|
Before you can compile the GLib library, you need to have
|
|
various other tools and libraries installed on your
|
|
system. The two tools needed during the build process (as
|
|
differentiated from the tools used in when creating GLib
|
|
mentioned above such as <application>autoconf</application>)
|
|
are <command>pkg-config</command> and GNU make.
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<ulink
|
|
url="http://www.freedesktop.org/software/pkgconfig/">pkg-config</ulink>
|
|
is a tool for tracking the compilation flags needed for
|
|
libraries that are used by the GLib library. (For each
|
|
library, a small <literal>.pc</literal> text file is
|
|
installed in a standard location that contains the compilation
|
|
flags needed for that library along with version number
|
|
information.) The version of <command>pkg-config</command>
|
|
needed to build GLib is mirrored in the
|
|
<filename>dependencies</filename> directory
|
|
on the <ulink url="ftp://ftp.gtk.org/pub/gtk/v2.2/">GTK+ FTP
|
|
site.</ulink>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The GTK+ makefiles will mostly work with different versions
|
|
of <command>make</command>, however, there tends to be
|
|
a few incompatibilities, so the GTK+ team recommends
|
|
installing <ulink url="http://www.gnu.org/software/make">GNU
|
|
make</ulink> if you don't already have it on your system
|
|
and using it. (It may be called <command>gmake</command>
|
|
rather than <command>make</command>.)
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<para>
|
|
GLib depends on a number of other libraries.
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
The <ulink url="http://www.gnu.org/software/libiconv/">GNU
|
|
libiconv library</ulink> is needed to build GLib if your
|
|
system doesn't have the <function>iconv()</function>
|
|
function for doing conversion between character
|
|
encodings. Most modern systems should have
|
|
<function>iconv()</function>, however many older systems lack
|
|
an <function>iconv()</function> implementation. On such systems,
|
|
you must install the libiconv library. This can be found at:
|
|
<ulink url="http://www.gnu.org/software/libiconv">http://www.gnu.org/software/libiconv</ulink>.
|
|
</para>
|
|
<para>
|
|
If your system has an <function>iconv()</function> implementation but
|
|
you want to use libiconv instead, you can pass the
|
|
--with-libiconv option to configure. This forces
|
|
libiconv to be used.
|
|
</para>
|
|
<para>
|
|
Note that if you have libiconv installed in your default include
|
|
search path (for instance, in <filename>/usr/local/</filename>), but
|
|
don't enable it, you will get an error while compiling GLib because
|
|
the <filename>iconv.h</filename> that libiconv installs hides the
|
|
system iconv.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The libintl library from the <ulink
|
|
url="http://www.gtk.org/software/gettext">GNU gettext
|
|
package</ulink> is needed if your system doesn't have the
|
|
<function>gettext()</function> functionality for handling
|
|
message translation databases.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
A thread implementation is needed, unless you want to compile GLib
|
|
without thread support, which is not recommended. The thread support
|
|
in GLib can be based upon several native thread implementations,
|
|
e.g. POSIX threads, DCE threads or Solaris threads.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
</refsect1>
|
|
<refsect1 id="extra-configuration-options">
|
|
<title>Extra Configuration Options</title>
|
|
|
|
<para>
|
|
In addition to the normal options, the
|
|
<command>configure</command> script in the GLib
|
|
library supports these additional arguments:
|
|
|
|
<cmdsynopsis>
|
|
<command>configure</command>
|
|
<group>
|
|
<arg>--enable-debug=[no|minimum|yes]</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-gc-friendly</arg>
|
|
<arg>--enable-gc-friendly</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-mem-pools</arg>
|
|
<arg>--enable-mem-pools</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-threads</arg>
|
|
<arg>--enable-threads</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--with-threads=[none|posix|dce|win32]</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-included-printf</arg>
|
|
<arg>--enable-included-printf</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-visibility</arg>
|
|
<arg>--enable-visibility</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-gtk-doc</arg>
|
|
<arg>--enable-gtk-doc</arg>
|
|
</group>
|
|
<group>
|
|
<arg>--disable-man</arg>
|
|
<arg>--enable-man</arg>
|
|
</group>
|
|
</cmdsynopsis>
|
|
</para>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--enable-debug</systemitem></title>
|
|
|
|
<para>
|
|
Turns on various amounts of debugging support. Setting this to 'no'
|
|
disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and
|
|
all cast checks between different object types. Setting it to 'minimum' disables only cast checks. Setting it to 'yes' enables
|
|
<link linkend="GLIB-Debug-Options">runtime debugging</link>.
|
|
The default is 'minimum'.
|
|
Note that 'no' is fast, but dangerous as it tends to destabilize
|
|
even mostly bug-free software by changing the effect of many bugs
|
|
from simple warnings into fatal crashes. Thus
|
|
<option>--enable-debug=no</option> should <emphasis>not</emphasis>
|
|
be used for stable releases of GLib.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-gc-friendly</systemitem> and
|
|
<systemitem>--enable-gc-friendly</systemitem></title>
|
|
|
|
<para>
|
|
By default, and with <systemitem>--disable-gc-friendly</systemitem>
|
|
as well, Glib does not clear the memory for certain objects before they
|
|
are freed. For example, Glib may decide to recycle GList nodes by
|
|
putting them in a free list. However, memory profiling and debugging tools like <ulink
|
|
url="http://www.valgrind.org">Valgrind</ulink> work better if an
|
|
application does not keep dangling pointers to freed memory (even
|
|
though these pointers are no longer dereferenced), or invalid pointers inside
|
|
uninitialized memory. The
|
|
<systemitem>--enable-gc-friendly</systemitem> option makes Glib clear
|
|
memory in these situations:
|
|
</para>
|
|
</formalpara>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
When shrinking a GArray, Glib will clear the memory no longer
|
|
available in the array: shrink an array from 10 bytes to 7, and
|
|
the last 3 bytes will be cleared. This includes removals of single and multiple elements.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
When growing a GArray, Glib will clear the new chunk of memory.
|
|
Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will be cleared.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The above applies to GPtrArray as well.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
When freeing a node from a GHashTable, Glib will first clear
|
|
the node, which used to have pointers to the key and the value
|
|
stored at that node.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
When destroying or removing a GTree node, Glib will clear the node,
|
|
which used to have pointers to the node's value, and the left and right subnodes.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
Since clearing the memory has a cost,
|
|
<systemitem>--disable-gc-friendly</systemitem> is the default.
|
|
</para>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-mem-pools</systemitem> and
|
|
<systemitem>--enable-mem-pools</systemitem></title>
|
|
|
|
<para>
|
|
Many small chunks of memory are often allocated via collective pools
|
|
in GLib and are cached after release to speed up reallocations.
|
|
For sparse memory systems this behaviour is often inferior, so
|
|
memory pools can be disabled to avoid excessive caching and force
|
|
atomic maintenance of chunks through the <function>g_malloc()</function>
|
|
and <function>g_free()</function> functions. Code currently affected by
|
|
this:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<structname>GList</structname>, <structname>GSList</structname>,
|
|
<structname>GNode</structname>, <structname>GHash</structname>
|
|
allocations. The functions g_list_push_allocator(),
|
|
g_list_pop_allocator(), g_slist_push_allocator(),
|
|
g_slist_pop_allocator(), g_node_push_allocator() and
|
|
g_node_pop_allocator() are not available
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<structname>GMemChunk</structname>s become basically non-effective
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<structname>GSignal</structname> disables all caching (potentially
|
|
very slow)
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<structname>GType</structname> doesn't honour the
|
|
<structname>GTypeInfo</structname>
|
|
<structfield>n_preallocs</structfield> field anymore
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
the <structname>GBSearchArray</structname> flag
|
|
<literal>G_BSEARCH_ALIGN_POWER2</literal> becomes non-functional
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-threads</systemitem> and
|
|
<systemitem>--enable-threads</systemitem></title>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--with-threads</systemitem></title>
|
|
|
|
<para>
|
|
Specify a thread implementation to use.
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
'posix' and 'dce' can be used interchangeable
|
|
to mean the different versions of Posix
|
|
threads. configure tries to find out, which
|
|
one is installed.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
'none' means that GLib will be thread safe,
|
|
but does not have a default thread
|
|
implementation. This has to be supplied to
|
|
<function>g_thread_init()</function> by the programmer.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-included-printf</systemitem> and
|
|
<systemitem>--enable-included-printf</systemitem></title>
|
|
|
|
<para>
|
|
By default the <command>configure</command> script will try
|
|
to auto-detect whether the C library provides a suitable set
|
|
of <function>printf()</function> functions. In detail,
|
|
<command>configure</command> checks that the semantics of
|
|
<function>snprintf()</function> are as specified by C99 and
|
|
that positional parameters as specified in the Single Unix
|
|
Specification are supported. If this not the case, GLib will
|
|
include an implementation of the <function>printf()</function>
|
|
family.
|
|
These options can be used to explicitly control whether
|
|
an implementation fo the <function>printf()</function> family
|
|
should be included or not.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-visibility</systemitem> and
|
|
<systemitem>--enable-visibility</systemitem></title>
|
|
|
|
<para>
|
|
By default, GLib uses ELF visibility attributes to optimize
|
|
PLT table entries if the compiler supports ELF visibility
|
|
attributes. A side-effect of the way in which this is currently
|
|
implemented is that any header change forces a full
|
|
recompilation, and missing includes may go unnoticed.
|
|
Therefore, it makes sense to turn this feature off while
|
|
doing GLib development, even if the compiler supports ELF
|
|
visibility attributes. The <option>--disable-visibility</option>
|
|
option allows to do that.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-gtk-doc</systemitem> and
|
|
<systemitem>--enable-gtk-doc</systemitem></title>
|
|
|
|
<para>
|
|
By default the <command>configure</command> script will try
|
|
to auto-detect whether the
|
|
<application>gtk-doc</application> package is installed. If
|
|
it is, then it will use it to extract and build the
|
|
documentation for the GLib library. These options
|
|
can be used to explicitly control whether
|
|
<application>gtk-doc</application> should be
|
|
used or not. If it is not used, the distributed,
|
|
pre-generated HTML files will be installed instead of
|
|
building them on your machine.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><systemitem>--disable-man</systemitem> and
|
|
<systemitem>--enable-man</systemitem></title>
|
|
|
|
<para>
|
|
By default the <command>configure</command> script will try
|
|
to auto-detect whether <application>xsltproc</application>
|
|
and the necessary Docbook stylesheets are installed. If
|
|
they are, then it will use them to rebuild the included
|
|
man pages from the XML sources. These options can be used
|
|
to explicitly control whether man pages should be rebuilt
|
|
used or not. The distribution includes pre-generated man
|
|
pages.
|
|
</para>
|
|
</formalpara>
|
|
|
|
</refsect1>
|
|
|
|
</refentry>
|