mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
be3728b9fa
In cases where performance are critical it can be useful to disable checks and asserts. GStreamer has those options too, using the same name and setting them yielding means we can set those options on the main project (e.g. gst-build) and glib will inherit the same value when built as subproject.
54 lines
2.4 KiB
Plaintext
54 lines
2.4 KiB
Plaintext
GLib's configure options and corresponding macros
|
|
=================================================
|
|
|
|
--buildtype={plain,release,minsize,custom}
|
|
none
|
|
--buildtype={debug,debugoptimized} [debugoptimized is the default]
|
|
-DG_ENABLE_DEBUG -g
|
|
-Dglib_asserts=false
|
|
-DG_DISABLE_ASSERT
|
|
-Dglib_checks=false
|
|
-DG_DISABLE_CHECKS
|
|
|
|
Besides these, there are some local feature specific options, but my main
|
|
focus here is to concentrate on macros that affect overall GLib behaviour
|
|
and/or third party code.
|
|
|
|
|
|
Notes on GLib's internal and global macros
|
|
==========================================
|
|
|
|
G_DISABLE_ASSERT
|
|
The g_assert() and g_assert_not_reached() become non-functional
|
|
with this define. The motivation is to speed up end-user apps by
|
|
avoiding expensive checks.
|
|
This macro can affect third-party code. Defining it when building GLib
|
|
will only disable the assertion macros for GLib itself, but third-party code
|
|
that passes -DG_DISABLE_ASSERT to the compiler upon its own build
|
|
will end up with the non-functional variants after including glib.h
|
|
as well.
|
|
NOTE: Code inside the assertion macros should not have side effects
|
|
that affect the operation of the program.
|
|
G_DISABLE_CHECKS
|
|
This macro is similar to G_DISABLE_ASSERT, it affects third-party
|
|
code as mentioned above and the NOTE about G_DISABLE_ASSERT applies
|
|
too. The macros that become non-functional here are
|
|
g_return_if_fail(), g_return_val_if_fail(), g_return_if_reached() and
|
|
g_return_val_if_reached().
|
|
Additionally the glib_mem_profiler_table and g_mem_profile() from
|
|
gmem.h become non-functional if this macro is supplied.
|
|
This macro also switches off certain checks in the GSignal code.
|
|
G_ENABLE_DEBUG
|
|
Quite a bit of additional debugging code is compiled into GLib for this
|
|
macro, and since it is a globally visible define, third-party code may
|
|
be affected by it similar to G_DISABLE_ASSERT.
|
|
The additional code executed/compiled for this macro currently involve:
|
|
- extra validity checks for GDate
|
|
- memory profiling traps in gmem.c (consult debugging.txt for details)
|
|
- BREAKPOINT abortion for fatal log levels in gmessage.c instead of
|
|
plain abort() to allow debuggers trapping and overriding them
|
|
- added verbosity of gscanner.c to catch deprecated code paths
|
|
- added verbosity of gutils.c to catch deprecated code paths
|
|
- object ref/unref traps (consult debugging.txt) and object bookkeeping
|
|
in gobject.c
|
|
- extra validity checks in gsignal.c |