glib/glib/glibconfig.h.in
Loic Le Page 42c77c7ac7 Enable full-static build on Windows
Glib cannot be built statically on Windows because glib, gobject and gio
modules need to perform specific initialization when DLL are loaded and
cleanup when unloaded. Those initializations and cleanups are performed
using the DllMain function which is not called with static builds.

Issue is known for a while and solutions were already proposed but never
merged (see: https://gitlab.gnome.org/GNOME/glib/-/issues/692). Last
patch is from version 2.36.x and since then the
"constructor/destructor" mechanism has been implemented and used in
other part of the system.

This patch takes back the old idea and updates it to the last version of
glib to allow static compilation on Windows.

WARNING: because DllMain doesn't exist anymore in static compilation
mode, there is no easy way of knowing when a Windows thread finishes.
This patch implements a workaround for glib threads created by calling
g_thread_new(), so all glib threads created through glib API will behave
exactly the same way in static and dynamic compilation modes.
Unfortunately, Windows threads created by using CreateThread() or
_beginthread/ex() will not work with glib TLS functions. If users need
absolutely to use a thread NOT created with glib API under Windows and
in static compilation mode, they should not use glib functions within
their thread or they may encounter memory leaks when the thread finishes.

This should not be an issue as users should use exclusively the glib API
to manipulate threads in order to be cross-platform compatible and this
would be very unlikely and cumbersome that they may mix up Windows native
threads API with glib one.

Closes #692
2022-01-26 10:14:02 +01:00

211 lines
6.5 KiB
C

/* glibconfig.h
*
* This is a generated file. Please modify 'glibconfig.h.in'
*/
#ifndef __GLIBCONFIG_H__
#define __GLIBCONFIG_H__
#include <glib/gmacros.h>
#include <limits.h>
#include <float.h>
#mesondefine GLIB_HAVE_ALLOCA_H
/* Specifies that GLib's g_print*() functions wrap the
* system printf functions. This is useful to know, for example,
* when using glibc's register_printf_function().
*/
#mesondefine GLIB_USING_SYSTEM_PRINTF
#mesondefine GLIB_STATIC_COMPILATION
#mesondefine GOBJECT_STATIC_COMPILATION
#mesondefine G_INTL_STATIC_COMPILATION
#mesondefine FFI_STATIC_BUILD
G_BEGIN_DECLS
#define G_MINFLOAT FLT_MIN
#define G_MAXFLOAT FLT_MAX
#define G_MINDOUBLE DBL_MIN
#define G_MAXDOUBLE DBL_MAX
#define G_MINSHORT SHRT_MIN
#define G_MAXSHORT SHRT_MAX
#define G_MAXUSHORT USHRT_MAX
#define G_MININT INT_MIN
#define G_MAXINT INT_MAX
#define G_MAXUINT UINT_MAX
#define G_MINLONG LONG_MIN
#define G_MAXLONG LONG_MAX
#define G_MAXULONG ULONG_MAX
typedef signed char gint8;
typedef unsigned char guint8;
typedef signed @gint16@ gint16;
typedef unsigned @gint16@ guint16;
#define G_GINT16_MODIFIER @gint16_modifier@
#define G_GINT16_FORMAT @gint16_format@
#define G_GUINT16_FORMAT @guint16_format@
typedef signed @gint32@ gint32;
typedef unsigned @gint32@ guint32;
#define G_GINT32_MODIFIER @gint32_modifier@
#define G_GINT32_FORMAT @gint32_format@
#define G_GUINT32_FORMAT @guint32_format@
#define G_HAVE_GINT64 1 /* deprecated, always true */
@glib_extension@typedef signed @gint64@ gint64;
@glib_extension@typedef unsigned @gint64@ guint64;
#define G_GINT64_CONSTANT(val) @gint64_constant@
#define G_GUINT64_CONSTANT(val) @guint64_constant@
#define G_GINT64_MODIFIER @gint64_modifier@
#define G_GINT64_FORMAT @gint64_format@
#define G_GUINT64_FORMAT @guint64_format@
#define GLIB_SIZEOF_VOID_P @glib_void_p@
#define GLIB_SIZEOF_LONG @glib_long@
#define GLIB_SIZEOF_SIZE_T @glib_size_t@
#define GLIB_SIZEOF_SSIZE_T @glib_ssize_t@
typedef signed @glib_size_type_define@ gssize;
typedef unsigned @glib_size_type_define@ gsize;
#define G_GSIZE_MODIFIER @gsize_modifier@
#define G_GSSIZE_MODIFIER @gssize_modifier@
#define G_GSIZE_FORMAT @gsize_format@
#define G_GSSIZE_FORMAT @gssize_format@
#define G_MAXSIZE G_MAXU@glib_msize_type@
#define G_MINSSIZE G_MIN@glib_msize_type@
#define G_MAXSSIZE G_MAX@glib_msize_type@
typedef gint64 goffset;
#define G_MINOFFSET G_MININT64
#define G_MAXOFFSET G_MAXINT64
#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER
#define G_GOFFSET_FORMAT G_GINT64_FORMAT
#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
#define G_POLLFD_FORMAT @g_pollfd_format@
#define GPOINTER_TO_INT(p) ((gint) @glib_gpi_cast@ (p))
#define GPOINTER_TO_UINT(p) ((guint) @glib_gpui_cast@ (p))
#define GINT_TO_POINTER(i) ((gpointer) @glib_gpi_cast@ (i))
#define GUINT_TO_POINTER(u) ((gpointer) @glib_gpui_cast@ (u))
typedef signed @glib_intptr_type_define@ gintptr;
typedef unsigned @glib_intptr_type_define@ guintptr;
#define G_GINTPTR_MODIFIER @gintptr_modifier@
#define G_GINTPTR_FORMAT @gintptr_format@
#define G_GUINTPTR_FORMAT @guintptr_format@
#define GLIB_MAJOR_VERSION @GLIB_MAJOR_VERSION@
#define GLIB_MINOR_VERSION @GLIB_MINOR_VERSION@
#define GLIB_MICRO_VERSION @GLIB_MICRO_VERSION@
@glib_os@
@glib_vacopy@
@g_have_iso_c_varargs@
@g_have_iso_cxx_varargs@
/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
* is passed ISO vararg support is turned off, and there is no work
* around to turn it on, so we unconditionally turn it off.
*/
#if __GNUC__ == 2 && __GNUC_MINOR__ == 95
# undef G_HAVE_ISO_VARARGS
#endif
#mesondefine G_HAVE_GROWING_STACK
#mesondefine G_HAVE_GNUC_VISIBILITY
#ifndef _MSC_VER
# define G_HAVE_GNUC_VARARGS 1
#endif
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
#define G_GNUC_INTERNAL __hidden
#elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
#else
#define G_GNUC_INTERNAL
#endif
#define G_THREADS_ENABLED
#define G_THREADS_IMPL_@g_threads_impl_def@
#mesondefine G_ATOMIC_LOCK_FREE
#define GINT16_TO_@g_bs_native@(val) ((gint16) (val))
#define GUINT16_TO_@g_bs_native@(val) ((guint16) (val))
#define GINT16_TO_@g_bs_alien@(val) ((gint16) GUINT16_SWAP_LE_BE (val))
#define GUINT16_TO_@g_bs_alien@(val) (GUINT16_SWAP_LE_BE (val))
#define GINT32_TO_@g_bs_native@(val) ((gint32) (val))
#define GUINT32_TO_@g_bs_native@(val) ((guint32) (val))
#define GINT32_TO_@g_bs_alien@(val) ((gint32) GUINT32_SWAP_LE_BE (val))
#define GUINT32_TO_@g_bs_alien@(val) (GUINT32_SWAP_LE_BE (val))
#define GINT64_TO_@g_bs_native@(val) ((gint64) (val))
#define GUINT64_TO_@g_bs_native@(val) ((guint64) (val))
#define GINT64_TO_@g_bs_alien@(val) ((gint64) GUINT64_SWAP_LE_BE (val))
#define GUINT64_TO_@g_bs_alien@(val) (GUINT64_SWAP_LE_BE (val))
#define GLONG_TO_LE(val) ((glong) GINT@glongbits@_TO_LE (val))
#define GULONG_TO_LE(val) ((gulong) GUINT@glongbits@_TO_LE (val))
#define GLONG_TO_BE(val) ((glong) GINT@glongbits@_TO_BE (val))
#define GULONG_TO_BE(val) ((gulong) GUINT@glongbits@_TO_BE (val))
#define GINT_TO_LE(val) ((gint) GINT@gintbits@_TO_LE (val))
#define GUINT_TO_LE(val) ((guint) GUINT@gintbits@_TO_LE (val))
#define GINT_TO_BE(val) ((gint) GINT@gintbits@_TO_BE (val))
#define GUINT_TO_BE(val) ((guint) GUINT@gintbits@_TO_BE (val))
#define GSIZE_TO_LE(val) ((gsize) GUINT@gsizebits@_TO_LE (val))
#define GSSIZE_TO_LE(val) ((gssize) GINT@gsizebits@_TO_LE (val))
#define GSIZE_TO_BE(val) ((gsize) GUINT@gsizebits@_TO_BE (val))
#define GSSIZE_TO_BE(val) ((gssize) GINT@gsizebits@_TO_BE (val))
#define G_BYTE_ORDER @g_byte_order@
#define GLIB_SYSDEF_POLLIN =@g_pollin@
#define GLIB_SYSDEF_POLLOUT =@g_pollout@
#define GLIB_SYSDEF_POLLPRI =@g_pollpri@
#define GLIB_SYSDEF_POLLHUP =@g_pollhup@
#define GLIB_SYSDEF_POLLERR =@g_pollerr@
#define GLIB_SYSDEF_POLLNVAL =@g_pollnval@
#define G_MODULE_SUFFIX "@g_module_suffix@"
typedef @g_pid_type@ GPid;
#define G_PID_FORMAT @g_pid_format@
#define GLIB_SYSDEF_AF_UNIX @g_af_unix@
#define GLIB_SYSDEF_AF_INET @g_af_inet@
#define GLIB_SYSDEF_AF_INET6 @g_af_inet6@
#define GLIB_SYSDEF_MSG_OOB @g_msg_oob@
#define GLIB_SYSDEF_MSG_PEEK @g_msg_peek@
#define GLIB_SYSDEF_MSG_DONTROUTE @g_msg_dontroute@
#define G_DIR_SEPARATOR '@g_dir_separator@'
#define G_DIR_SEPARATOR_S "@g_dir_separator@"
#define G_SEARCHPATH_SEPARATOR '@g_searchpath_separator@'
#define G_SEARCHPATH_SEPARATOR_S "@g_searchpath_separator@"
G_END_DECLS
#endif /* __GLIBCONFIG_H__ */