1 <refentry id="glib-building" revision="16 Jan 2002">
3 <refentrytitle>Compiling the GLib package</refentrytitle>
4 <manvolnum>3</manvolnum>
5 <refmiscinfo>GLib Library</refmiscinfo>
9 <refname>Compiling the GLib Package</refname>
11 How to compile GLib itself
15 <refsect1 id="building">
16 <title>Building the Library on UNIX</title>
18 On UNIX, GLib uses the standard GNU build system,
19 using <application>autoconf</application> for package
20 configuration and resolving portability issues,
21 <application>automake</application> for building makefiles
22 that comply with the GNU Coding Standards, and
23 <application>libtool</application> for building shared
24 libraries on multiple platforms. The normal sequence for
25 compiling and installing the GLib library is thus:
28 <userinput>./configure</userinput>
29 <userinput>make</userinput>
30 <userinput>make install</userinput>
35 The standard options provided by <application>GNU
36 autoconf</application> may be passed to the
37 <command>configure</command> script. Please see the
38 <application>autoconf</application> documentation or run
39 <command>./configure --help</command> for information about
43 The GTK+ documentation contains
44 <ulink url="../gtk/gtk-building.html">further details</ulink>
45 about the build process and ways to influence it.
48 <refsect1 id="dependencies">
49 <title>Dependencies</title>
51 Before you can compile the GLib library, you need to have
52 various other tools and libraries installed on your
53 system. The two tools needed during the build process (as
54 differentiated from the tools used in when creating GLib
55 mentioned above such as <application>autoconf</application>)
56 are <command>pkg-config</command> and GNU make.
62 url="http://www.freedesktop.org/software/pkgconfig/">pkg-config</ulink>
63 is a tool for tracking the compilation flags needed for
64 libraries that are used by the GLib library. (For each
65 library, a small <literal>.pc</literal> text file is
66 installed in a standard location that contains the compilation
67 flags needed for that library along with version number
68 information.) The version of <command>pkg-config</command>
69 needed to build GLib is mirrored in the
70 <filename>dependencies</filename> directory
71 on the <ulink url="ftp://ftp.gtk.org/pub/gtk/v2.2/">GTK+ FTP
77 The GTK+ makefiles will mostly work with different versions
78 of <command>make</command>, however, there tends to be
79 a few incompatibilities, so the GTK+ team recommends
80 installing <ulink url="http://www.gnu.org/software/make">GNU
81 make</ulink> if you don't already have it on your system
82 and using it. (It may be called <command>gmake</command>
83 rather than <command>make</command>.)
88 GLib depends on a number of other libraries.
93 The <ulink url="http://www.gnu.org/software/libiconv/">GNU
94 libiconv library</ulink> is needed to build GLib if your
95 system doesn't have the <function>iconv()</function>
96 function for doing conversion between character
97 encodings. Most modern systems should have
98 <function>iconv()</function>, however many older systems lack
99 an <function>iconv()</function> implementation. On such systems,
100 you must install the libiconv library. This can be found at:
101 <ulink url="http://www.gnu.org/software/libiconv">http://www.gnu.org/software/libiconv</ulink>.
104 If your system has an <function>iconv()</function> implementation but
105 you want to use libiconv instead, you can pass the
106 --with-libiconv option to configure. This forces
110 Note that if you have libiconv installed in your default include
111 search path (for instance, in <filename>/usr/local/</filename>), but
112 don't enable it, you will get an error while compiling GLib because
113 the <filename>iconv.h</filename> that libiconv installs hides the
117 If you are using the native iconv implementation on Solaris
118 instead of libiconv, you'll need to make sure that you have
119 the converters between locale encodings and UTF-8 installed.
120 At a minimum you'll need the SUNWuiu8 package. You probably
121 should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and
125 The native iconv on Compaq Tru64 doesn't contain support for
126 UTF-8, so you'll need to use GNU libiconv instead. (When
127 using GNU libiconv for GLib, you'll need to use GNU libiconv
128 for GNU gettext as well.) This probably applies to related
129 operating systems as well.
134 The libintl library from the <ulink
135 url="http://www.gtk.org/software/gettext">GNU gettext
136 package</ulink> is needed if your system doesn't have the
137 <function>gettext()</function> functionality for handling
138 message translation databases.
143 A thread implementation is needed, unless you want to compile GLib
144 without thread support, which is not recommended. The thread support
145 in GLib can be based upon several native thread implementations,
146 e.g. POSIX threads, DCE threads or Solaris threads.
152 <refsect1 id="extra-configuration-options">
153 <title>Extra Configuration Options</title>
156 In addition to the normal options, the
157 <command>configure</command> script in the GLib
158 library supports these additional arguments:
161 <command>configure</command>
163 <arg>--enable-debug=[no|minimum|yes]</arg>
166 <arg>--disable-gc-friendly</arg>
167 <arg>--enable-gc-friendly</arg>
170 <arg>--disable-mem-pools</arg>
171 <arg>--enable-mem-pools</arg>
174 <arg>--disable-threads</arg>
175 <arg>--enable-threads</arg>
178 <arg>--with-threads=[none|posix|dce|win32]</arg>
181 <arg>--disable-included-printf</arg>
182 <arg>--enable-included-printf</arg>
185 <arg>--disable-visibility</arg>
186 <arg>--enable-visibility</arg>
189 <arg>--disable-gtk-doc</arg>
190 <arg>--enable-gtk-doc</arg>
193 <arg>--disable-man</arg>
194 <arg>--enable-man</arg>
200 <title><systemitem>--enable-debug</systemitem></title>
203 Turns on various amounts of debugging support. Setting this to 'no'
204 disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and
205 all cast checks between different object types. Setting it to 'minimum' disables only cast checks. Setting it to 'yes' enables
206 <link linkend="GLIB-Debug-Options">runtime debugging</link>.
207 The default is 'minimum'.
208 Note that 'no' is fast, but dangerous as it tends to destabilize
209 even mostly bug-free software by changing the effect of many bugs
210 from simple warnings into fatal crashes. Thus
211 <option>--enable-debug=no</option> should <emphasis>not</emphasis>
212 be used for stable releases of GLib.
217 <title><systemitem>--disable-gc-friendly</systemitem> and
218 <systemitem>--enable-gc-friendly</systemitem></title>
221 By default, and with <systemitem>--disable-gc-friendly</systemitem>
222 as well, Glib does not clear the memory for certain objects before they
223 are freed. For example, Glib may decide to recycle GList nodes by
224 putting them in a free list. However, memory profiling and debugging tools like <ulink
225 url="http://www.valgrind.org">Valgrind</ulink> work better if an
226 application does not keep dangling pointers to freed memory (even
227 though these pointers are no longer dereferenced), or invalid pointers inside
228 uninitialized memory. The
229 <systemitem>--enable-gc-friendly</systemitem> option makes Glib clear
230 memory in these situations:
237 When shrinking a GArray, Glib will clear the memory no longer
238 available in the array: shrink an array from 10 bytes to 7, and
239 the last 3 bytes will be cleared. This includes removals of single and multiple elements.
248 When growing a GArray, Glib will clear the new chunk of memory.
249 Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will be cleared.
254 The above applies to GPtrArray as well.
259 When freeing a node from a GHashTable, Glib will first clear
260 the node, which used to have pointers to the key and the value
266 When destroying or removing a GTree node, Glib will clear the node,
267 which used to have pointers to the node's value, and the left and right subnodes.
273 Since clearing the memory has a cost,
274 <systemitem>--disable-gc-friendly</systemitem> is the default.
278 <title><systemitem>--disable-mem-pools</systemitem> and
279 <systemitem>--enable-mem-pools</systemitem></title>
282 Many small chunks of memory are often allocated via collective pools
283 in GLib and are cached after release to speed up reallocations.
284 For sparse memory systems this behaviour is often inferior, so
285 memory pools can be disabled to avoid excessive caching and force
286 atomic maintenance of chunks through the <function>g_malloc()</function>
287 and <function>g_free()</function> functions. Code currently affected by
292 <structname>GList</structname>, <structname>GSList</structname>,
293 <structname>GNode</structname>, <structname>GHash</structname>
294 allocations. The functions g_list_push_allocator(),
295 g_list_pop_allocator(), g_slist_push_allocator(),
296 g_slist_pop_allocator(), g_node_push_allocator() and
297 g_node_pop_allocator() are not available
302 <structname>GMemChunk</structname>s become basically non-effective
307 <structname>GSignal</structname> disables all caching (potentially
313 <structname>GType</structname> doesn't honour the
314 <structname>GTypeInfo</structname>
315 <structfield>n_preallocs</structfield> field anymore
320 the <structname>GBSearchArray</structname> flag
321 <literal>G_BSEARCH_ALIGN_POWER2</literal> becomes non-functional
329 <title><systemitem>--disable-threads</systemitem> and
330 <systemitem>--enable-threads</systemitem></title>
333 Do not compile GLib to be multi thread safe. GLib
334 will be slightly faster then. This is however not
335 recommended, as many programs rely on GLib being
341 <title><systemitem>--with-threads</systemitem></title>
344 Specify a thread implementation to use.
347 'posix' and 'dce' can be used interchangeable
348 to mean the different versions of Posix
349 threads. configure tries to find out, which
354 'none' means that GLib will be thread safe,
355 but does not have a default thread
356 implementation. This has to be supplied to
357 <function>g_thread_init()</function> by the programmer.
365 <title><systemitem>--disable-included-printf</systemitem> and
366 <systemitem>--enable-included-printf</systemitem></title>
369 By default the <command>configure</command> script will try
370 to auto-detect whether the C library provides a suitable set
371 of <function>printf()</function> functions. In detail,
372 <command>configure</command> checks that the semantics of
373 <function>snprintf()</function> are as specified by C99 and
374 that positional parameters as specified in the Single Unix
375 Specification are supported. If this not the case, GLib will
376 include an implementation of the <function>printf()</function>
378 These options can be used to explicitly control whether
379 an implementation fo the <function>printf()</function> family
380 should be included or not.
385 <title><systemitem>--disable-visibility</systemitem> and
386 <systemitem>--enable-visibility</systemitem></title>
389 By default, GLib uses ELF visibility attributes to optimize
390 PLT table entries if the compiler supports ELF visibility
391 attributes. A side-effect of the way in which this is currently
392 implemented is that any header change forces a full
393 recompilation, and missing includes may go unnoticed.
394 Therefore, it makes sense to turn this feature off while
395 doing GLib development, even if the compiler supports ELF
396 visibility attributes. The <option>--disable-visibility</option>
397 option allows to do that.
402 <title><systemitem>--disable-gtk-doc</systemitem> and
403 <systemitem>--enable-gtk-doc</systemitem></title>
406 By default the <command>configure</command> script will try
407 to auto-detect whether the
408 <application>gtk-doc</application> package is installed. If
409 it is, then it will use it to extract and build the
410 documentation for the GLib library. These options
411 can be used to explicitly control whether
412 <application>gtk-doc</application> should be
413 used or not. If it is not used, the distributed,
414 pre-generated HTML files will be installed instead of
415 building them on your machine.
420 <title><systemitem>--disable-man</systemitem> and
421 <systemitem>--enable-man</systemitem></title>
424 By default the <command>configure</command> script will try
425 to auto-detect whether <application>xsltproc</application>
426 and the necessary Docbook stylesheets are installed. If
427 they are, then it will use them to rebuild the included
428 man pages from the XML sources. These options can be used
429 to explicitly control whether man pages should be rebuilt
430 used or not. The distribution includes pre-generated man