| <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|solaris|win32]</arg> |
| </group> |
| <group> |
| <arg>--disable-included-printf</arg> |
| <arg>--enable-included-printf</arg> |
| </group> |
| <group> |
| <arg>--disable-gtk-doc</arg> |
| <arg>--enable-gtk-doc</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> |
| 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 and is thus disabled by default. |
| </para> |
| </formalpara> |
| |
| <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 |
| </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> |
| 'solaris' uses the native Solaris thread implementation. |
| </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-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> |
| |
| </refsect1> |
| |
| </refentry> |