Home | History | Annotate | Download | only in glib
      1 <refentry id="glib-building" revision="16 Jan 2002">
      2 <refmeta>
      3 <refentrytitle>Compiling the GLib package</refentrytitle>
      4 <manvolnum>3</manvolnum>
      5 <refmiscinfo>GLib Library</refmiscinfo>
      6 </refmeta>
      7 
      8 <refnamediv>
      9 <refname>Compiling the GLib Package</refname>
     10 <refpurpose>
     11 How to compile GLib itself
     12 </refpurpose>
     13   </refnamediv>
     14 
     15     <refsect1 id="building">
     16       <title>Building the Library on UNIX</title>
     17       <para>
     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:
     26 
     27         <literallayout>
     28           <userinput>./configure</userinput>
     29           <userinput>make</userinput>
     30           <userinput>make install</userinput>
     31         </literallayout>
     32       </para>
     33 
     34       <para>
     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
     40         the standard options.
     41       </para>
     42       <para>
     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. 
     46       </para>
     47     </refsect1>
     48     <refsect1 id="dependencies">
     49       <title>Dependencies</title>
     50       <para>
     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.
     57       </para>
     58       <itemizedlist>
     59         <listitem>
     60    	  <para>
     61 	    <ulink
     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
     72 	    site.</ulink>
     73 	  </para>
     74         </listitem>
     75         <listitem>
     76 	  <para>
     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>.)
     84 	  </para>
     85         </listitem>
     86       </itemizedlist>
     87       <para>
     88         GLib depends on a number of other libraries.
     89       </para>
     90       <itemizedlist>
     91         <listitem>
     92 	  <para>
     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>.	  
    102 	</para>
    103         <para>
    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
    107 	  libiconv to be used.  
    108 	</para>
    109         <para>
    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
    114 	  system iconv. 
    115 	</para>
    116 	<para>
    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
    122 	  SUNWkiu8 packages.
    123 	</para>
    124 	<para>
    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.
    130 	</para>
    131       </listitem>
    132       <listitem>
    133 	<para>
    134 	  The libintl library from the <ulink
    135 	  url="http://www.gnu.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.
    139 	</para>
    140       </listitem>
    141       <listitem>
    142 	<para>
    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. 
    147 	</para>
    148       </listitem>
    149       <listitem>
    150 	<para>
    151 	  GRegex uses the <ulink url="http://www.pcre.org/">PCRE library</ulink>
    152 	  for regular expression matching. The default is to use the internal
    153 	  version of PCRE that is patched to use GLib for memory management
    154 	  and Unicode handling. If you prefer to use the system-supplied PCRE
    155 	  library  you can pass the --with-pcre=system option to configure,
    156 	  but it is not recommended.
    157 	</para>
    158       </listitem>
    159       <listitem>
    160         <para>
    161           The optional extended attribute support in GIO requires the 
    162           getxattr() family of functions that may be provided by glibc or 
    163           by the standalone libattr library. To build GLib without extended 
    164           attribute support, use the <option>--disable-xattr</option> 
    165           configure option.
    166         </para>
    167       </listitem>
    168       <listitem>
    169         <para>
    170           The optional SELinux support in GIO requires libselinux. To build 
    171           GLib without SELinux support, use the 
    172           <option>--disable-selinux</option> configure option.
    173         </para>
    174       </listitem>
    175     </itemizedlist>
    176 
    177     </refsect1>
    178     <refsect1 id="extra-configuration-options">
    179       <title>Extra Configuration Options</title>
    180 
    181       <para>
    182         In addition to the normal options, the
    183         <command>configure</command> script in the GLib
    184         library supports these additional arguments:
    185 
    186         <cmdsynopsis>
    187           <command>configure</command>
    188           <group>
    189             <arg>--enable-debug=[no|minimum|yes]</arg>
    190           </group>
    191           <group>
    192             <arg>--disable-gc-friendly</arg>
    193             <arg>--enable-gc-friendly</arg>
    194           </group>
    195           <group>
    196             <arg>--disable-mem-pools</arg>
    197             <arg>--enable-mem-pools</arg>
    198           </group>
    199           <group>
    200             <arg>--disable-threads</arg>
    201             <arg>--enable-threads</arg>
    202           </group>
    203           <group>
    204             <arg>--with-threads=[none|posix|dce|win32]</arg>
    205           </group>
    206           <group>
    207             <arg>--disable-regex</arg>
    208             <arg>--enable-regex</arg>
    209           </group>
    210           <group>
    211             <arg>--with-pcre=[internal|system]</arg>
    212           </group>
    213 	  <group>
    214              <arg>--disable-included-printf</arg>
    215              <arg>--enable-included-printf</arg>
    216           </group>
    217 	  <group>
    218              <arg>--disable-visibility</arg>
    219              <arg>--enable-visibility</arg>
    220           </group>
    221           <group>
    222             <arg>--disable-gtk-doc</arg>
    223             <arg>--enable-gtk-doc</arg>
    224           </group>
    225           <group>
    226             <arg>--disable-man</arg>
    227             <arg>--enable-man</arg>
    228           </group>
    229           <group>
    230             <arg>--disable-xattr</arg>
    231             <arg>--enable-xattr</arg>
    232           </group>
    233           <group>
    234             <arg>--disable-selinux</arg>
    235             <arg>--enable-selinux</arg>
    236           </group>
    237         </cmdsynopsis>
    238       </para>
    239 
    240       <formalpara>
    241         <title><systemitem>--enable-debug</systemitem></title>
    242 
    243         <para>
    244          Turns on various amounts of debugging support. Setting this to 'no'
    245          disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and
    246          all cast checks between different object types. Setting it to 'minimum'         disables only cast checks. Setting it to 'yes' enables
    247          <link linkend="GLIB-Debug-Options">runtime debugging</link>.
    248          The default is 'minimum'.
    249          Note that 'no' is fast, but dangerous as it tends to destabilize
    250          even mostly bug-free software by changing the effect of many bugs
    251          from simple warnings into fatal crashes. Thus
    252          <option>--enable-debug=no</option> should <emphasis>not</emphasis>
    253          be used for stable releases of GLib.
    254         </para>
    255       </formalpara>
    256 
    257       <formalpara>
    258         <title><systemitem>--disable-gc-friendly</systemitem> and
    259           <systemitem>--enable-gc-friendly</systemitem></title>
    260 
    261         <para>
    262 	  By default, and with <systemitem>--disable-gc-friendly</systemitem>
    263 	  as well, Glib does not clear the memory for certain objects before they
    264 	  are freed.  For example, Glib may decide to recycle GList nodes by
    265 	  putting them in a free list.  However, memory profiling and debugging tools like <ulink
    266 	  url="http://www.valgrind.org">Valgrind</ulink> work better if an
    267 	  application does not keep dangling pointers to freed memory (even
    268 	  though these pointers are no longer dereferenced), or invalid pointers inside
    269 	  uninitialized memory.   The
    270 	  <systemitem>--enable-gc-friendly</systemitem> option makes Glib clear
    271 	  memory in these situations:
    272         </para>
    273       </formalpara>
    274 
    275       <itemizedlist>
    276         <listitem>
    277 	  <para>
    278 	    When shrinking a GArray, Glib will clear the memory no longer
    279 	    available in the array:  shrink an array from 10 bytes to 7, and
    280 	    the last 3 bytes will be cleared.  This includes removals of single and multiple elements.
    281 	  </para>
    282         </listitem>
    283         <listitem>
    284 	  <para>
    285 	  </para>
    286         </listitem>
    287         <listitem>
    288 	  <para>
    289 	    When growing a GArray, Glib will clear the new chunk of memory.  
    290 	    Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will be cleared.
    291 	  </para>
    292         </listitem>
    293         <listitem>
    294 	  <para>
    295 	    The above applies to GPtrArray as well.
    296 	  </para>
    297         </listitem>
    298         <listitem>
    299 	  <para>
    300 	    When freeing a node from a GHashTable, Glib will first clear
    301 	    the node, which used to have pointers to the key and the value 
    302 	    stored at that node.
    303 	  </para>
    304         </listitem>
    305         <listitem>
    306 	  <para>
    307 	    When destroying or removing a GTree node, Glib will clear the node,
    308 	    which used to have pointers to the node's value, and the left and right subnodes.
    309 	  </para>
    310         </listitem>
    311       </itemizedlist>
    312 
    313       <para>
    314         Since clearing the memory has a cost,
    315         <systemitem>--disable-gc-friendly</systemitem> is the default.
    316       </para>
    317 
    318       <formalpara>
    319         <title><systemitem>--disable-mem-pools</systemitem> and
    320           <systemitem>--enable-mem-pools</systemitem></title>
    321 
    322       <para>
    323         Many small chunks of memory are often allocated via collective pools
    324         in GLib and are cached after release to speed up reallocations.
    325         For sparse memory systems this behaviour is often inferior, so
    326         memory pools can be disabled to avoid excessive caching and force
    327         atomic maintenance of chunks through the <function>g_malloc()</function>
    328         and <function>g_free()</function> functions. Code currently affected by 
    329         this:
    330         <itemizedlist>
    331         <listitem>
    332         <para>
    333          <structname>GList</structname>, <structname>GSList</structname>,
    334          <structname>GNode</structname>, <structname>GHash</structname> 
    335          allocations. The functions g_list_push_allocator(), 
    336          g_list_pop_allocator(), g_slist_push_allocator(), 
    337          g_slist_pop_allocator(), g_node_push_allocator() and 
    338          g_node_pop_allocator() are not available
    339         </para>
    340         </listitem>
    341         <listitem>
    342         <para>
    343         <structname>GMemChunk</structname>s become basically non-effective
    344         </para>
    345         </listitem>
    346         <listitem>
    347         <para>
    348          <structname>GSignal</structname> disables all caching (potentially 
    349          very slow)
    350         </para>
    351         </listitem>
    352         <listitem>
    353         <para>
    354          <structname>GType</structname> doesn't honour the 
    355          <structname>GTypeInfo</structname> 
    356          <structfield>n_preallocs</structfield> field anymore
    357         </para>
    358         </listitem>
    359         <listitem>
    360         <para>
    361          the <structname>GBSearchArray</structname> flag 
    362          <literal>G_BSEARCH_ALIGN_POWER2</literal> becomes non-functional
    363         </para>
    364         </listitem>
    365         </itemizedlist>
    366       </para>
    367       </formalpara>
    368 
    369       <formalpara>
    370         <title><systemitem>--disable-threads</systemitem> and
    371           <systemitem>--enable-threads</systemitem></title>
    372 
    373         <para>
    374            Do not compile GLib to be multi thread safe. GLib
    375            will be slightly faster then. This is however not
    376            recommended, as many programs rely on GLib being
    377            multi thread safe.
    378         </para>
    379       </formalpara>
    380 
    381       <formalpara>
    382         <title><systemitem>--with-threads</systemitem></title>
    383 
    384         <para>
    385           Specify a thread implementation to use.
    386           <itemizedlist>
    387               <listitem><para>
    388                 'posix' and 'dce' can be used interchangeable
    389                 to mean the different versions of Posix
    390                 threads. configure tries to find out, which
    391                 one is installed.
    392               </para></listitem>
    393 
    394               <listitem><para>
    395                 'none' means that GLib will be thread safe,
    396                 but does not have a default thread
    397                 implementation. This has to be supplied to
    398                 <function>g_thread_init()</function> by the programmer.
    399               </para></listitem>
    400         </itemizedlist>
    401 
    402         </para>
    403       </formalpara>
    404 
    405       <formalpara>
    406         <title><systemitem>--disable-regex</systemitem> and
    407           <systemitem>--enable-regex</systemitem></title>
    408 
    409         <para>
    410            Do not compile GLib with regular expression support.
    411            GLib will be smaller because it will not need the
    412            PCRE library. This is however not recommended, as
    413            programs may need GRegex.
    414         </para>
    415       </formalpara>
    416 
    417       <formalpara>
    418         <title><systemitem>--with-pcre</systemitem></title>
    419 
    420         <para>
    421           Specify whether to use the internal or the system-supplied
    422           PCRE library.
    423           <itemizedlist>
    424             <listitem><para>
    425               'internal' means that GRegex will be compiled to use
    426               the internal PCRE library.
    427             </para></listitem>
    428 
    429             <listitem><para>
    430               'system' means that GRegex will be compiled to use
    431               the system-supplied PCRE library.
    432             </para></listitem>
    433           </itemizedlist>
    434           Using the internal PCRE is the preferred solution:
    435           <itemizedlist>
    436             <listitem>
    437               <para>
    438                 System-supplied PCRE has a separated copy of the big tables
    439                 used for Unicode handling.
    440               </para>
    441             </listitem>
    442             <listitem>
    443               <para>
    444                 Some systems have PCRE libraries compiled without some needed
    445                 features, such as UTF-8 and Unicode support.
    446               </para>
    447             </listitem>
    448             <listitem>
    449               <para>
    450                 PCRE uses some global variables for memory management and
    451                 other features. In the rare case of a program using both
    452                 GRegex and PCRE (maybe indirectly through a library),
    453                 this variables could lead to problems when they are modified.
    454               </para>
    455             </listitem>
    456           </itemizedlist>
    457         </para>
    458       </formalpara>
    459 
    460       <formalpara>
    461          <title><systemitem>--disable-included-printf</systemitem> and
    462            <systemitem>--enable-included-printf</systemitem></title>
    463 
    464         <para>
    465           By default the <command>configure</command> script will try
    466           to auto-detect whether the C library provides a suitable set
    467 	  of <function>printf()</function> functions. In detail, 
    468 	  <command>configure</command> checks that the semantics of
    469           <function>snprintf()</function> are as specified by C99 and
    470 	  that positional parameters as specified in the Single Unix
    471 	  Specification are supported. If this not the case, GLib will
    472 	  include an implementation of the <function>printf()</function> 
    473           family.
    474           These options can be used to explicitly control whether
    475           an implementation fo the <function>printf()</function> family
    476           should be included or not.
    477         </para>
    478       </formalpara>
    479 
    480       <formalpara>
    481          <title><systemitem>--disable-visibility</systemitem> and
    482            <systemitem>--enable-visibility</systemitem></title>
    483 
    484         <para>
    485           By default, GLib uses ELF visibility attributes to optimize
    486           PLT table entries if the compiler supports ELF visibility
    487           attributes. A side-effect of the way in which this is currently
    488           implemented is that any  header change forces a full 
    489           recompilation, and missing includes may go unnoticed. 
    490           Therefore, it makes sense to turn this feature off while
    491           doing GLib development, even if the compiler supports ELF
    492           visibility attributes. The <option>--disable-visibility</option> 
    493           option allows to do that.
    494         </para>
    495       </formalpara>
    496 
    497       <formalpara>
    498         <title><systemitem>--disable-gtk-doc</systemitem> and
    499           <systemitem>--enable-gtk-doc</systemitem></title>
    500 
    501         <para>
    502           By default the <command>configure</command> script will try
    503           to auto-detect whether the
    504           <application>gtk-doc</application> package is installed.  If
    505           it is, then it will use it to extract and build the
    506           documentation for the GLib library.  These options
    507           can be used to explicitly control whether
    508           <application>gtk-doc</application> should be
    509           used or not.  If it is not used, the distributed,
    510           pre-generated HTML files will be installed instead of
    511           building them on your machine.
    512         </para>
    513       </formalpara>
    514 
    515       <formalpara>
    516         <title><systemitem>--disable-man</systemitem> and
    517           <systemitem>--enable-man</systemitem></title>
    518 
    519         <para>
    520           By default the <command>configure</command> script will try
    521           to auto-detect whether <application>xsltproc</application> 
    522           and the necessary Docbook stylesheets are installed.  If
    523           they are, then it will use them to rebuild the included
    524           man pages from the XML sources.  These options can be used 
    525           to explicitly control whether man pages should be rebuilt
    526           used or not. The distribution includes pre-generated man 
    527           pages.
    528         </para>
    529       </formalpara>
    530 
    531       <formalpara>
    532         <title><systemitem>--disable-xattr</systemitem> and
    533           <systemitem>--enable-xattr</systemitem></title>
    534 
    535         <para>
    536           By default the <command>configure</command> script will try
    537           to auto-detect whether the getxattr() family of functions
    538           is available. If it is, then extended attribute support
    539           will be included in GIO. These options can be used to
    540           explicitly control whether extended attribute support 
    541           should be included or not. getxattr() and friends can
    542           be provided by glibc or by the standalone libattr library.
    543         </para>
    544      </formalpara>
    545 
    546       <formalpara>
    547         <title><systemitem>--disable-selinux</systemitem> and
    548           <systemitem>--enable-selinux</systemitem></title>
    549 
    550         <para>
    551           By default the <command>configure</command> script will
    552           auto-detect if libselinux is available and include
    553           SELinux support in GIO if it is. These options can be
    554           used to explicitly control whether SELinxu support should
    555 	  be included.
    556         </para>
    557      </formalpara>
    558    </refsect1>
    559 
    560 </refentry>
    561