[gtk/docs-gtk-org] glib: Add section on building GLib
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/docs-gtk-org] glib: Add section on building GLib
- Date: Tue, 10 Aug 2021 23:23:19 +0000 (UTC)
commit 54fc7f9d62033b4317c99cbe05cd84f058258b76
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Aug 11 00:19:07 2021 +0100
glib: Add section on building GLib
glib/glib/building.md | 205 +++++++++++++++++++++++++++++++++++++++++++++++++
glib/glib/glib.toml.in | 1 +
glib/glib/meson.build | 1 +
3 files changed, 207 insertions(+)
---
diff --git a/glib/glib/building.md b/glib/glib/building.md
new file mode 100644
index 0000000000..d350043cb4
--- /dev/null
+++ b/glib/glib/building.md
@@ -0,0 +1,205 @@
+Title: Building GLib
+
+# Building GLib
+
+GLib uses the [Meson build system](https://mesonbuild.com). The normal
+sequence for compiling and installing the GLib library is thus:
+
+ $ meson setup _build
+ $ meson compile -C _build
+ $ meson install -C _build
+
+On FreeBSD, you will need something more complex:
+
+ $ env CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib -Wl,--disable-new-dtags" \
+ > meson setup \
+ > -Dxattr=false \
+ > -Dinstalled_tests=true \
+ > -Diconv=external \
+ > -Db_lundef=false \
+ > _build
+ $ meson compile -C _build
+
+The standard options provided by Meson may be passed to the `meson` command. Please see the Meson
documentation or run:
+
+ meson configure --help
+
+for information about the standard options.
+
+GLib is compiled with strict aliasing 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.
+
+## Dependencies
+
+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 a [compliant C
+toolchain](https://wiki.gnome.org/Projects/GLib/CompilerRequirements),
+Meson, and pkg-config; the requirements are the same when building from a
+Git repository clone of GLib.
+
+- [`pkg-config`](https://www.freedesktop.org/wiki/Software/pkg-config/) is a
+ tool for tracking the compilation flags needed for libraries that are used
+ by the GLib library. (For each library, a small `.pc` text file is
+ installed in a standard location that contains the compilation flags
+ needed for that library along with version number information).
+
+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.
+
+- The [GNU libiconv library](http://www.gnu.org/software/libiconv/) is
+ needed to build GLib if your system doesn't have the `iconv()` function
+ for doing conversion between character encodings. Most modern systems
+ should have `iconv()`, however many older systems lack an `iconv()`
+ implementation. On such systems, you must install the libiconv library.
+ This can be found at: http://www.gnu.org/software/libiconv.
+
+ If your system has an `iconv()` implementation but you want to use
+ `libiconv` instead, you can pass the `-Diconv=gnu` option to Meson. This
+ forces libiconv to be used.
+
+ Note that if you have libiconv installed in your default include search
+ path (for instance, in /usr/local/), but don't enable it, you will get an
+ error while compiling GLib because the `iconv.h` that libiconv installs
+ hides the system iconv.
+
+ 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.
+
+ 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.
+
+- Python 3.5 or newer is required. Your system Python must conform to PEP
+ 394 For FreeBSD, this means that the lang/python3 port must be installed.
+
+- The libintl library from the [GNU
+ gettext](http://www.gnu.org/software/gettext) package is needed if your
+ system doesn't have the `gettext()` functionality for handling message
+ translation databases.
+
+- A thread implementation is needed. The thread support in GLib can be based
+ upon POSIX threads or win32 threads.
+
+- GRegex uses the [PCRE library](http://www.pcre.org/) 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.
+
+- The optional extended attribute support in GIO requires the `getxattr()`
+ 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 `-Dxattr=false` option.
+
+- The optional SELinux support in GIO requires libselinux. To build GLib
+ without SELinux support, use the `-Dselinux=disabled` option.
+
+- The optional support for DTrace requires the `sys/sdt.h` header, which is
+ provided by SystemTap on Linux. To build GLib without DTrace, use the
+ `-Ddtrace=false` option.
+
+- The optional support for SystemTap can be disabled with the
+ `-Dsystemtap=false` option. Additionally, you can control the location
+ where GLib installs the SystemTap probes, using the
+ `-Dtapset_install_dir=DIR` option.
+
+## Extra Configuration Options
+
+In addition to the normal options, these additional ones are supported when
+configuring the GLib library:
+
+`--buildtype`
+: This is a standard Meson option which specifies how much debugging and
+ optimization to enable. If the build type starts with `debug`,
+ `G_ENABLE_DEBUG` will be defined and GLib will be built with additional
+ debug code enabled. If the build type is `plain`, 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 `release`.
+
+`-Dforce_posix_threads=true`
+: Normally, Meson 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).
+
+`-Dinternal_pcre=true`
+: 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. Using the
+ internal PCRE is the preferred solution if:
+
+ - 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.
+ - your system has PCRE built without some needed features, such as UTF-8
+ and Unicode support.
+ - 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.
+
+`-Dbsymbolic_functions=false` and `-Dbsymbolic_functions=true`
+: By default, GLib uses the `-Bsymbolic-functions` 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 `LD_PRELOAD`.
+ Therefore, it may make sense to turn this feature off in some
+ situations. The `-Dbsymbolic_functions=false` option allows to do that.
+
+`-Dgtk_doc=false` and `-Dgtk_doc=true`
+: By default, GLib will detect whether the gtk-doc 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 gtk-doc 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.
+
+`-Dman=false` and `-Dman=true`
+: By default, GLib will detect whether xsltproc 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.
+
+`-Dxattr=false` and `-Dxattr=true`
+: By default, GLib will detect whether the `getxattr()` 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. `getxattr()` and friends can be
+ provided by glibc or by the standalone libattr library.
+
+`-Dselinux=auto`, `-Dselinux=enabled` or `-Dselinux=disabled`
+: 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.
+
+`-Ddtrace=false` and `-Ddtrace=true`
+: 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.
+
+`-Dsystemtap=false` and `-Dsystemtap=true`
+: This option requires DTrace support. If it is available, then GLib will also
+ check for the presence of SystemTap.
+
+`-Db_coverage=true` and `-Db_coverage=false`
+: Enable the generation of coverage reports for the GLib tests. This requires
+ the lcov frontend to gcov from the Linux Test Project. To generate a
+ coverage report, use `ninja coverage-html`. The report is placed in the
+ `meson-logs` directory.
+
+`-Druntime_libdir=RELPATH`
+: 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. `/usr` is mounted. For example, if LIBDIR is `/usr/lib`
+ and `../../lib` is passed to `-Druntime_libdir` then the runtime libraries
+ are installed into `/lib` rather than `/usr/lib`.
diff --git a/glib/glib/glib.toml.in b/glib/glib/glib.toml.in
index 2a711b8093..66b29ca145 100644
--- a/glib/glib/glib.toml.in
+++ b/glib/glib/glib.toml.in
@@ -33,6 +33,7 @@ base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/master/"
urlmap_file = "urlmap.js"
# The same order will be used when generating the index
content_files = [
+ "building.md",
"compiling.md",
"error-reporting.md",
"i18n.md",
diff --git a/glib/glib/meson.build b/glib/glib/meson.build
index 6fc5abff0c..bb60586fbe 100644
--- a/glib/glib/meson.build
+++ b/glib/glib/meson.build
@@ -1,4 +1,5 @@
expand_content_files = [
+ 'building.md',
'compiling.md',
'error-reporting.md',
'i18n.md',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]