| <?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> |
| |
| On FreeBSD: |
| <literallayout> |
| <userinput>env CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib -Wl,--disable-new-dtags" meson -Dxattr=false -Dinstalled_tests=true -Diconv=external -Db_lundef=false _build</userinput> |
| <userinput>ninja -C _build</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> |
| Python 3.5 or newer is required. Your system Python must |
| conform to <ulink |
| url="https://www.python.org/dev/peps/pep-0394/">PEP 394 |
| </ulink> |
| For FreeBSD, this means that the |
| <literal>lang/python3</literal> port must be installed. |
| </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 system version of PCRE is used, |
| unless not available (which is the case on Android), in which case a |
| fallback subproject is used. |
| </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=disabled</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> |
| <para> |
| If the build type is <literal>plain</literal>, GLib will not enable any |
| optimization or debug options by default, and will leave it entirely to |
| the user to choose their options. To build with the options recommended |
| by GLib developers, choose <literal>release</literal>. |
| </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>-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=auto</option>, |
| <option>-Dselinux=enabled</option> or |
| <option>-Dselinux=disabled</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> |