/* 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

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__ */
