

GLib's configure options and corresponding macros
=================================================

--enable-debug=no
	-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS
--enable-debug=minimum	[default for stable branches]
	none
--enable-debug=yes	[default for development branches]
	-DG_ENABLE_DEBUG -g
--enable-gc-friendly=yes
	#define ENABLE_GC_FRIENDLY_DEFAULT 1
--disable-mem-pools=yes
	#define DISABLE_MEM_POOLS 1

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
==========================================


ENABLE_GC_FRIENDLY_DEFAULT
	Newly allocated memory that isn't directly initialized, as well
	as memory being freed should be reset to 0. The point here is to
	allow memory checkers and similar programs that use bohem GC alike
	algorithms to produce more accurate results.
	This can also be accomplished by setting the environment variable
	G_DEBUG=gc-friendly.
DISABLE_MEM_POOLS
	Many small chunks of memory are often allocated via collective pools
	in GLib and are cached after release to speed up reallocations.
	For sparse memory systems this behaviour is often inferior, so
	memory pools can be disabled to avoid excessive caching and force
	atomic maintenance of chunks through the g_malloc/g_free.
	Code currently affected by this macro:
	- GList, GSList, GNode allocations
	- GMemChunks become basically non-effective
	- GSignal disables all caching (potentially very slow)
	- GType doesn't honour the GTypeInfo n_preallocs field anymore
	- the GBSearchArray flag G_BSEARCH_ALIGN_POWER2 becomes non-functional
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. --enable-debug=no 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


2000/12/28	Tim Janik
