summaryrefslogtreecommitdiff
path: root/docs/reference/glib/building.xml
blob: e30cd66c4fe5648515774a060ad998c7faf8148c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
<?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 -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://gitlab.gnome.org/GNOME/glib/-/blob/main/docs/toolchain-requirements.md">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, make sure it is installed to the
          default compiler header/library search path (for instance, in
          <filename>/usr/local/</filename>). The <filename>iconv.h</filename>
          that libiconv installs hides the system iconv. Meson then detects
          this, recognizes that the system iconv is unusable and the external
          one is mandatory, and automatically forces it to be used.
        </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 is <literal>debug</literal>,
        <literal>G_ENABLE_DEBUG</literal> will be defined and GLib will be built
        with additional debug code enabled. You can override this behavior using
        <option>-Dglib_debug</option>.
      </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>
  </refsect1>

</refentry>