mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 19:36:18 +01:00
d08e4661de
Drop mentions of autotools. In particular, update the list of configure options to reflect what’s available in the Meson build. Further work is needed as a follow-up to improve our handling of (what was formerly) the --enable-debug option. Signed-off-by: Philip Withnall <withnall@endlessm.com>
385 lines
15 KiB
XML
385 lines
15 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
]>
|
|
<refentry id="glib-building">
|
|
<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 <application>Meson</application> build
|
|
system. The normal sequence for compiling and installing the GLib library
|
|
is thus:
|
|
|
|
<literallayout>
|
|
<userinput>meson _build</userinput>
|
|
<userinput>ninja -C _build</userinput>
|
|
<userinput>ninja -C _build install</userinput>
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
The standard options provided by <application>Meson</application> may be
|
|
passed to the <command>meson</command> command. Please see the
|
|
<application>Meson</application> documentation or run
|
|
<command>meson configure --help</command> for information about
|
|
the standard options.
|
|
</para>
|
|
<para>
|
|
GLib is compiled with
|
|
<ulink url="https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fstrict-aliasing">strict aliasing</ulink>
|
|
disabled. It is strongly recommended that this is not re-enabled by
|
|
overriding the compiler flags, as GLib has not been tested with strict
|
|
aliasing and cannot be guaranteed to work.
|
|
</para>
|
|
<para>
|
|
The GTK+ documentation contains
|
|
<ulink url="https://developer.gnome.org/gtk3/stable/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.
|
|
If you are building from a release archive, you will need
|
|
<ulink url="https://wiki.gnome.org/Projects/GLib/CompilerRequirements">a compliant C toolchain</ulink>,
|
|
<application>Meson</application>, and <application>pkg-config</application>;
|
|
the requirements are the same when building from a Git repository clone
|
|
of GLib.
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<ulink url="https://www.freedesktop.org/wiki/Software/pkg-config/">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).
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<para>
|
|
A UNIX build of GLib requires that the system implements at
|
|
least the original 1990 version of POSIX. Beyond this, it
|
|
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
|
|
<option>-Diconv=gnu</option> option to <command>meson</command>. 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.gnu.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. The thread support in GLib
|
|
can be based upon POSIX threads or win32 threads.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
GRegex uses the <ulink url="http://www.pcre.org/">PCRE library</ulink>
|
|
for regular expression matching. The default is to use the system
|
|
version of PCRE, to reduce the chances of security fixes going out
|
|
of sync. GLib additionally provides an internal copy of PCRE in case
|
|
the system version is too old, or does not support UTF-8; the internal
|
|
copy is patched to use GLib for memory management and to share the
|
|
same Unicode tables.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The optional extended attribute support in GIO requires the
|
|
<function>getxattr()</function> family of functions that may be
|
|
provided by the C library or by the standalone libattr library. To
|
|
build GLib without extended attribute support, use the
|
|
<option>-Dxattr=false</option> option.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The optional SELinux support in GIO requires libselinux.
|
|
To build GLib without SELinux support, use the
|
|
<option>-Dselinux=false</option> option.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The optional support for DTrace requires the
|
|
<filename>sys/sdt.h</filename> header, which is provided
|
|
by SystemTap on Linux. To build GLib without DTrace, use
|
|
the <option>-Ddtrace=false</option> option.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
The optional support for
|
|
<ulink url="http://sourceware.org/systemtap/">SystemTap</ulink>
|
|
can be disabled with the <option>-Dsystemtap=false</option>
|
|
option. Additionally, you can control the location
|
|
where GLib installs the SystemTap probes, using the
|
|
<option>-Dtapset_install_dir=DIR</option> option.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
</refsect1>
|
|
<refsect1 id="extra-configuration-options">
|
|
<title>Extra Configuration Options</title>
|
|
|
|
<para>
|
|
In addition to the normal options, these additional ones are supported
|
|
when configuring the GLib library:
|
|
</para>
|
|
|
|
<formalpara>
|
|
<title><option>--buildtype</option></title>
|
|
|
|
<para>
|
|
This is a standard <application>Meson</application> option which
|
|
specifies how much debugging and optimization to enable. If the build
|
|
type starts with <literal>debug</literal>,
|
|
<literal>G_ENABLE_DEBUG</literal> will be defined and GLib will be built
|
|
with additional debug code enabled.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dforce_posix_threads=true</option></title>
|
|
|
|
<para>
|
|
Normally, <application>Meson</application> should be able to work out
|
|
the correct thread implementation to use. This option forces POSIX
|
|
threads to be used even if the platform provides another threading API
|
|
(for example, on Windows).
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dinternal_pcre=true</option></title>
|
|
|
|
<para>
|
|
Normally, GLib will be configured to use the system-supplied PCRE
|
|
library if it is suitable, falling back to an internal version
|
|
otherwise. If this option is specified, the internal version will always
|
|
be used.
|
|
</para>
|
|
<para>
|
|
Using the internal PCRE is the preferred solution if:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
your system has strict resource constraints; the system-supplied
|
|
PCRE has a separated copy of the tables used for Unicode
|
|
handling, whereas the internal copy shares the Unicode tables
|
|
used by GLib.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
your system has PCRE built without some needed features,
|
|
such as UTF-8 and Unicode support.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
you are planning to use both GRegex and PCRE API at the same
|
|
time, either directly or indirectly through a dependency; PCRE
|
|
uses some global variables for memory management and
|
|
other features, and if both GLib and PCRE try to access them
|
|
at the same time, this could lead to undefined behavior.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dbsymbolic_functions=false</option> and
|
|
<option>-Dbsymbolic_functions=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib uses the <option>-Bsymbolic-functions</option>
|
|
linker flag to avoid intra-library PLT jumps. A side-effect
|
|
of this is that it is no longer possible to override
|
|
internal uses of GLib functions with
|
|
<envar>LD_PRELOAD</envar>. Therefore, it may make
|
|
sense to turn this feature off in some situations.
|
|
The <option>-Dbsymbolic_functions=false</option> option allows
|
|
to do that.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dgtk_doc=false</option> and
|
|
<option>-Dgtk_doc=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib will 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><option>-Dman=false</option> and
|
|
<option>-Dman=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib will 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>
|
|
|
|
<formalpara>
|
|
<title><option>-Dxattr=false</option> and
|
|
<option>-Dxattr=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib will detect whether the
|
|
<function>getxattr()</function>
|
|
family of functions is available. If it is, then extended
|
|
attribute support will be included in GIO. These options can
|
|
be used to explicitly control whether extended attribute
|
|
support should be included or not. <function>getxattr()</function>
|
|
and friends can be provided by glibc or by the standalone
|
|
libattr library.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dselinux=false</option> and
|
|
<option>-Dselinux=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib will detect if libselinux is available and
|
|
include SELinux support in GIO if it is. These options can be
|
|
used to explicitly control whether SELinux support should
|
|
be included.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Ddtrace=false</option> and
|
|
<option>-Ddtrace=true</option></title>
|
|
|
|
<para>
|
|
By default, GLib will detect if DTrace support is available, and use it.
|
|
These options can be used to explicitly control whether DTrace support
|
|
is compiled into GLib.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Dsystemtap=false</option> and
|
|
<option>-Dsystemtap=true</option></title>
|
|
|
|
<para>
|
|
This option requires DTrace support. If it is available, then
|
|
GLib will also check for the presence of SystemTap.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Db_coverage=true</option> and
|
|
<option>-Db_coverage=false</option></title>
|
|
|
|
<para>
|
|
Enable the generation of coverage reports for the GLib tests.
|
|
This requires the lcov frontend to gcov from the
|
|
<ulink url="http://ltp.sourceforge.net">Linux Test Project</ulink>.
|
|
To generate a coverage report, use
|
|
<command>ninja coverage-html</command>. The report is placed in the
|
|
<filename>meson-logs</filename> directory.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<formalpara>
|
|
<title><option>-Druntime_libdir=RELPATH</option></title>
|
|
|
|
<para>
|
|
Allows specifying a relative path to where to install the runtime
|
|
libraries (meaning library files used for running, not developing,
|
|
GLib applications). This can be used in operating system setups where
|
|
programs using GLib needs to run before e.g. <filename>/usr</filename>
|
|
is mounted.
|
|
For example, if <varname>LIBDIR</varname> is <filename>/usr/lib</filename> and
|
|
<filename>../../lib</filename> is passed to
|
|
<option>-Druntime_libdir</option> then the
|
|
runtime libraries are installed into <filename>/lib</filename> rather
|
|
than <filename>/usr/lib</filename>.
|
|
</para>
|
|
</formalpara>
|
|
</refsect1>
|
|
|
|
</refentry>
|