<refentry id="gtk-building" revision="6 Sept 2001">
<refmeta>
<refentrytitle>Compiling the GTK+ package</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>GTK Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>Compiling the GTK+ Package</refname>
<refpurpose>
How to compile GTK+ itself
</refpurpose>
</refnamediv>

    <refsect1 id="building">
      <title>Building the Library on UNIX</title>
      <para>
	On UNIX, GTK+ 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 GTK+ 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>
    </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 GTK+
	library supports these additional arguments:

	<cmdsynopsis>
	  <command>configure</command>

	  <group>
	    <arg>--disable-modules</arg>
	    <arg>--enable-modules</arg>
	  </group>
	  <group>
	    <arg>--with-included-loaders==LOADER1,LOADER2,...</arg>
	  </group>
	  <group>
	    <arg>--enable-debug=[no|minimum|yes]</arg>
	  </group>
          <group>
	    <arg>--disable-shm</arg>
	    <arg>--enable-shm</arg>
	  </group>
          <group>
	    <arg>--disable-xim</arg>
	    <arg>--enable-xim</arg>
	  </group>
          <group>
	    <arg>--disable-xim-inst</arg>
	    <arg>--enable-xim-inst</arg>
	  </group>
          <group>
	    <arg>--disable-xkb</arg>
	    <arg>--enable-xkb</arg>
	  </group>
	  <group>
	    <arg>--disable-gtk-doc</arg>
	    <arg>--enable-gtk-doc</arg>
	  </group>
          <group>
            <arg>--with-xinput=[no|gxi|xfree]</arg>
          </group>
	  <group>
	    <arg>--with-gdktarget=[x11|linux-fb|win32]</arg>
	  </group>
	  <group>
	    <arg>--disable-shadowfb</arg>
	    <arg>--enable-shadowfb</arg>
	  </group>
	</cmdsynopsis>
      </para>

      <formalpara>
	<title><systemitem>--disable-modules</systemitem> and
	  <systemitem>--enable-modules</systemitem></title>

	<para>
	  Normally GTK+ will try to build the GdkPixbuf image file
	  format loaders as little shared libraries that are loaded on
	  demand.  The <systemitem>--disable-modules</systemitem>
	  argument indicates that they should all be built statically
	  into the GTK+ library instead.  This is useful for
	  people who need to produce statically-linked binaries.  If
	  neither <systemitem>--disable-modules</systemitem> nor
	  <systemitem>--enable-modules</systemitem> is specified, then
	  the <command>configure</command> script will try to
	  auto-detect whether shared modules work on your system.
	</para>
      </formalpara>

      <formalpara>
	<title><systemitem>--with-included-loaders</systemitem></title>

	<para>
         This option allows you to specify which image loaders you
         want to include; for example, you might include only the PNG
         loader to create a smaller GdkPixbuf binary.
	</para>
      </formalpara>

      <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="GTK-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 gtk+.
        </para>
      </formalpara>

      <formalpara>
        <title><systemitem>--disable-shm</systemitem> and
          <systemitem>--enable-shm</systemitem></title>
 
        <para>
          These options can be used to control whether GTK+ will use shared 
          memory to communicate with the X server when possible.
          The default is yes.
        </para>
      </formalpara>

      <formalpara>
        <title><systemitem>--disable-xim</systemitem> and
          <systemitem>--enable-xim</systemitem></title>
 
        <para>
          These options can be used to control whether GTK+ will 
          be compiled with support for XIM. 
          The default is yes.
        </para>
      </formalpara>

      <formalpara>
        <title><systemitem>--disable-xim-inst</systemitem> and
          <systemitem>--enable-xim-inst</systemitem></title>
 
        <para>
          These options determine whether GTK+ will use the 
	  XIM instantiate callback. 
          The default is yes, unless the host system is Solaris,
	  where <function>XRegisterIMInstantiateCallback</function>
	  seems to cause a segfault.
        </para>
      </formalpara>

      <formalpara>
        <title><systemitem>--disable-xkb</systemitem> and
          <systemitem>--enable-xkb</systemitem></title>
 
        <para>
	  By default the <command>configure</command> script will try
	  to auto-detect whether the XKB extension is supported by
          the X libraries GTK+ is linked with.
          These options can be used to explicitly control whether
	  GTK+ will support the XKB extension. 
        </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 GTK+ 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>--with-xinput</systemitem></title>

        <para>
          
        </para>
      </formalpara>

      <formalpara>
	<title><systemitem>--with-gdktarget</systemitem></title>

	<para>
          Toggles between the supported backends for GDK. 
          The default is x11, unless the platform is Windows, in which
	  case the default is win32.
	</para>
      </formalpara>

      <formalpara>
	<title><systemitem>--disable-shadowfb</systemitem> and
	  <systemitem>--enable-shadowfb</systemitem></title>

	<para>
         Toggles shadow framebuffer support for the linux-fb target, 
         if selected.
	</para>
      </formalpara>

    </refsect1>

</refentry>
