This file is part of MXE. See index.html for further information. Contains ad hoc patches for cross building. From 544cc902caf39c937bbac7c9f7b07f5fcb869d81 Mon Sep 17 00:00:00 2001 From: MXE Date: Thu, 23 Sep 2010 21:42:46 +0200 Subject: [PATCH 1/6] fix tool paths diff --git a/glib-2.0.pc.in b/glib-2.0.pc.in index 275fc01..ac09887 100644 --- a/glib-2.0.pc.in +++ b/glib-2.0.pc.in @@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -glib_genmarshal=glib-genmarshal -gobject_query=gobject-query -glib_mkenums=glib-mkenums +glib_genmarshal=@bindir@/glib-genmarshal +gobject_query=@bindir@/gobject-query +glib_mkenums=@bindir@/glib-mkenums Name: GLib Description: C Utility Library -- 2.3.2 (Apple Git-55) From 10e38774090ee198d7f70e80f7dd29ef18dcd9d9 Mon Sep 17 00:00:00 2001 From: MXE Date: Fri, 15 Jun 2012 15:25:01 +0200 Subject: [PATCH 2/6] Avoid DllMain symbol conflict when linking statically diff --git a/gio/giomodule.c b/gio/giomodule.c index 510f652..f66ca9b 100644 --- a/gio/giomodule.c +++ b/gio/giomodule.c @@ -904,14 +904,12 @@ extern GType g_gtk_notification_backend_get_type (void); static HMODULE gio_dll = NULL; -#ifdef DLL_EXPORT - -BOOL WINAPI DllMain (HINSTANCE hinstDLL, +BOOL WINAPI gio_DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); BOOL WINAPI -DllMain (HINSTANCE hinstDLL, +gio_DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { @@ -921,8 +919,6 @@ DllMain (HINSTANCE hinstDLL, return TRUE; } -#endif - void * _g_io_win32_get_module (void) { diff --git a/glib/glib-init.c b/glib/glib-init.c index 24efe9d..6fb9e25 100644 --- a/glib/glib-init.c +++ b/glib/glib-init.c @@ -237,14 +237,14 @@ glib_init (void) #if defined (G_OS_WIN32) -BOOL WINAPI DllMain (HINSTANCE hinstDLL, +BOOL WINAPI glib_DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); HMODULE glib_dll; BOOL WINAPI -DllMain (HINSTANCE hinstDLL, +glib_DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { -- 2.3.2 (Apple Git-55) From ca4e5a60cc9176279bd27a44c679e18666fac5e6 Mon Sep 17 00:00:00 2001 From: MXE Date: Fri, 15 Jun 2012 15:27:22 +0200 Subject: [PATCH 3/6] Allow building without inotify support diff --git a/configure.ac b/configure.ac index 4a904a4..427d9e2 100644 --- a/configure.ac +++ b/configure.ac @@ -1669,10 +1669,16 @@ dnl ***************************** dnl ** Check for inotify (GIO) ** dnl ***************************** inotify_support=no + AC_ARG_ENABLE(inotify, + AC_HELP_STRING([--disable-inotify], + [build without inotify support])) + + if test "x$enable_inotify" != "xno"; then AC_CHECK_HEADERS([sys/inotify.h], [ AC_CHECK_FUNCS(inotify_init1, [inotify_support=yes], [inotify_support=no]) ]) +fi AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"]) -- 2.3.2 (Apple Git-55) From 024bc122e81e418096281400b4b5340a7949eca1 Mon Sep 17 00:00:00 2001 From: MXE Date: Fri, 15 Jun 2012 15:28:14 +0200 Subject: [PATCH 4/6] Make sure STDC_HEADERS is set for AC_CHECK_ALIGNOF. Backported from upstream diff --git a/configure.ac b/configure.ac index 427d9e2..afb6232 100644 --- a/configure.ac +++ b/configure.ac @@ -499,6 +499,8 @@ LT_INIT([disable-static win32-dll]) dnl when using libtool 2.x create libtool early, because it's used in configure m4_ifdef([LT_OUTPUT], [LT_OUTPUT]) +# Make sure STDC_HEADERS is set for AC_CHECK_ALIGNOF +AS_IF([false], [AC_CHECK_HEADER([stdint.h])]) AS_IF([test "$glib_native_win32" = "yes"], [ if test x$enable_static = xyes -a x$enable_shared = xyes; then -- 2.3.2 (Apple Git-55) From bb1a73677634f3a70dbe5baac36ba8e6acf4f4cd Mon Sep 17 00:00:00 2001 From: MXE Date: Fri, 15 Jun 2012 15:29:06 +0200 Subject: [PATCH 5/6] Link with dnsapi diff --git a/gio-2.0.pc.in b/gio-2.0.pc.in index 899af0c..b8308f8 100644 --- a/gio-2.0.pc.in +++ b/gio-2.0.pc.in @@ -13,6 +13,6 @@ Description: glib I/O library Version: @VERSION@ Requires: glib-2.0 gobject-2.0 Requires.private: gmodule-no-export-2.0 -Libs: -L${libdir} -lgio-2.0 +Libs: -L${libdir} -lgio-2.0 -ldnsapi -liphlpapi Libs.private: @ZLIB_LIBS@ @NETWORK_LIBS@ @SELINUX_LIBS@ @COCOA_LIBS@ @CARBON_LIBS@ Cflags: -- 2.3.2 (Apple Git-55) From bb796f32a497ef983e2e7483cab25b6142e15630 Mon Sep 17 00:00:00 2001 From: MXE Date: Fri, 15 Jun 2012 15:29:38 +0200 Subject: [PATCH 6/6] Ensure globals are initialized even when DllMain is not being run diff --git a/glib/gmain.c b/glib/gmain.c index 30fac70..736cb57 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -2566,12 +2566,15 @@ g_get_real_time (void) #if defined (G_OS_WIN32) static ULONGLONG (*g_GetTickCount64) (void) = NULL; static guint32 g_win32_tick_epoch = 0; +static gboolean g_win32_clock_is_initialized; void g_clock_win32_init (void) { HMODULE kernel32; + g_win32_clock_is_initialized = TRUE; + g_GetTickCount64 = NULL; kernel32 = GetModuleHandle ("KERNEL32.DLL"); if (kernel32 != NULL) @@ -2630,6 +2633,9 @@ g_get_monotonic_time (void) * timeBeginPeriod() to increase it as much as they want */ + if (!g_win32_clock_is_initialized) + g_clock_win32_init (); + if (g_GetTickCount64 != NULL) { guint32 ticks_as_32bit; diff --git a/glib/gthread-win32.c b/glib/gthread-win32.c index 275ecc6..8285187 100644 --- a/glib/gthread-win32.c +++ b/glib/gthread-win32.c @@ -116,18 +116,28 @@ typedef struct void (__stdcall * WakeConditionVariable) (gpointer cond); } GThreadImplVtable; +/* Needed for static builds where DllMain initializer doesn't get called */ +static gboolean g_threads_is_initialized; +G_GNUC_INTERNAL void g_thread_win32_init (void); + static GThreadImplVtable g_thread_impl_vtable; /* {{{1 GMutex */ void g_mutex_init (GMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.InitializeSRWLock (mutex); } void g_mutex_clear (GMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + if (g_thread_impl_vtable.DeleteSRWLock != NULL) g_thread_impl_vtable.DeleteSRWLock (mutex); } @@ -135,18 +145,27 @@ g_mutex_clear (GMutex *mutex) void g_mutex_lock (GMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.AcquireSRWLockExclusive (mutex); } gboolean g_mutex_trylock (GMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + return g_thread_impl_vtable.TryAcquireSRWLockExclusive (mutex); } void g_mutex_unlock (GMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.ReleaseSRWLockExclusive (mutex); } @@ -157,6 +176,9 @@ g_rec_mutex_impl_new (void) { CRITICAL_SECTION *cs; + if (!g_threads_is_initialized) + g_thread_win32_init (); + cs = g_slice_new (CRITICAL_SECTION); InitializeCriticalSection (cs); @@ -167,6 +189,10 @@ static void g_rec_mutex_impl_free (CRITICAL_SECTION *cs) { DeleteCriticalSection (cs); + + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_slice_free (CRITICAL_SECTION, cs); } @@ -175,6 +201,9 @@ g_rec_mutex_get_impl (GRecMutex *mutex) { CRITICAL_SECTION *impl = mutex->p; + if (!g_threads_is_initialized) + g_thread_win32_init (); + if G_UNLIKELY (mutex->p == NULL) { impl = g_rec_mutex_impl_new (); @@ -189,30 +218,45 @@ g_rec_mutex_get_impl (GRecMutex *mutex) void g_rec_mutex_init (GRecMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + mutex->p = g_rec_mutex_impl_new (); } void g_rec_mutex_clear (GRecMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_rec_mutex_impl_free (mutex->p); } void g_rec_mutex_lock (GRecMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + EnterCriticalSection (g_rec_mutex_get_impl (mutex)); } void g_rec_mutex_unlock (GRecMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + LeaveCriticalSection (mutex->p); } gboolean g_rec_mutex_trylock (GRecMutex *mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + return TryEnterCriticalSection (g_rec_mutex_get_impl (mutex)); } @@ -221,12 +265,18 @@ g_rec_mutex_trylock (GRecMutex *mutex) void g_rw_lock_init (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.InitializeSRWLock (lock); } void g_rw_lock_clear (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + if (g_thread_impl_vtable.DeleteSRWLock != NULL) g_thread_impl_vtable.DeleteSRWLock (lock); } @@ -234,36 +284,54 @@ g_rw_lock_clear (GRWLock *lock) void g_rw_lock_writer_lock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.AcquireSRWLockExclusive (lock); } gboolean g_rw_lock_writer_trylock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + return g_thread_impl_vtable.TryAcquireSRWLockExclusive (lock); } void g_rw_lock_writer_unlock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.ReleaseSRWLockExclusive (lock); } void g_rw_lock_reader_lock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.AcquireSRWLockShared (lock); } gboolean g_rw_lock_reader_trylock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + return g_thread_impl_vtable.TryAcquireSRWLockShared (lock); } void g_rw_lock_reader_unlock (GRWLock *lock) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.ReleaseSRWLockShared (lock); } @@ -271,12 +339,18 @@ g_rw_lock_reader_unlock (GRWLock *lock) void g_cond_init (GCond *cond) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.InitializeConditionVariable (cond); } void g_cond_clear (GCond *cond) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + if (g_thread_impl_vtable.DeleteConditionVariable) g_thread_impl_vtable.DeleteConditionVariable (cond); } @@ -284,12 +358,18 @@ g_cond_clear (GCond *cond) void g_cond_signal (GCond *cond) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.WakeConditionVariable (cond); } void g_cond_broadcast (GCond *cond) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.WakeAllConditionVariable (cond); } @@ -297,6 +377,9 @@ void g_cond_wait (GCond *cond, GMutex *entered_mutex) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + g_thread_impl_vtable.SleepConditionVariableSRW (cond, entered_mutex, INFINITE, 0); } @@ -307,6 +390,9 @@ g_cond_wait_until (GCond *cond, { gint64 span; + if (!g_threads_is_initialized) + g_thread_win32_init (); + span = end_time - g_get_monotonic_time (); if G_UNLIKELY (span < 0) @@ -339,6 +425,9 @@ g_private_get_impl (GPrivate *key) if G_UNLIKELY (impl == 0) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + EnterCriticalSection (&g_private_lock); impl = (DWORD) key->p; if (impl == 0) @@ -432,6 +521,9 @@ g_system_thread_free (GRealThread *thread) { GThreadWin32 *wt = (GThreadWin32 *) thread; + if (!g_threads_is_initialized) + g_thread_win32_init (); + win32_check_for_error (CloseHandle (wt->handle)); g_slice_free (GThreadWin32, wt); } @@ -439,6 +531,9 @@ g_system_thread_free (GRealThread *thread) void g_system_thread_exit (void) { + if (!g_threads_is_initialized) + g_thread_win32_init (); + _endthreadex (0); } @@ -447,6 +542,9 @@ g_thread_win32_proxy (gpointer data) { GThreadWin32 *self = data; + if (!g_threads_is_initialized) + g_thread_win32_init (); + self->proxy (self); g_system_thread_exit (); @@ -464,6 +562,9 @@ g_system_thread_new (GThreadFunc func, GThreadWin32 *thread; guint ignore; + if (!g_threads_is_initialized) + g_thread_win32_init (); + thread = g_slice_new0 (GThreadWin32); thread->proxy = func; @@ -493,6 +594,9 @@ g_system_thread_wait (GRealThread *thread) { GThreadWin32 *wt = (GThreadWin32 *) thread; + if (!g_threads_is_initialized) + g_thread_win32_init (); + win32_check_for_error (WAIT_FAILED != WaitForSingleObject (wt->handle, INFINITE)); } @@ -984,6 +1088,8 @@ g_thread_lookup_native_funcs (void) void g_thread_win32_init (void) { + g_threads_is_initialized = TRUE; + if (!g_thread_lookup_native_funcs ()) g_thread_xp_init (); -- 2.3.2 (Apple Git-55)