Blame SOURCES/glib-prefer-constructors-over-DllMain.patch

e79b05
From bc90511c1eb333e26e0bc0eaee62375d0e788db6 Mon Sep 17 00:00:00 2001
e79b05
From: Erik van Pienbroek <epienbro@fedoraproject.org>
e79b05
Date: Tue, 16 Apr 2013 11:42:11 +0200
e79b05
Subject: [PATCH] win32: Prefer the use of constructors over DllMain
e79b05
e79b05
This prevents having to depend on DllMain in static libraries
e79b05
e79b05
Constructors are available in both the GCC build (GCC 2.7 and later)
e79b05
and the MSVC build (MSVC 2008 and later using _Pragma, earlier
e79b05
versions using #pragma)
e79b05
---
e79b05
 glib/glib-init.c | 22 ++++++++++++++--------
e79b05
 1 file changed, 14 insertions(+), 8 deletions(-)
e79b05
e79b05
diff --git a/glib/glib-init.c b/glib/glib-init.c
e79b05
index 0032ee8..dd6ccbf 100644
e79b05
--- a/glib/glib-init.c
e79b05
+++ b/glib/glib-init.c
e79b05
@@ -223,12 +223,14 @@ glib_init (void)
e79b05
 
e79b05
 #if defined (G_OS_WIN32)
e79b05
 
e79b05
+HMODULE glib_dll = NULL;
e79b05
+
e79b05
+#if defined (DLL_EXPORT)
e79b05
+
e79b05
 BOOL WINAPI DllMain (HINSTANCE hinstDLL,
e79b05
                      DWORD     fdwReason,
e79b05
                      LPVOID    lpvReserved);
e79b05
 
e79b05
-HMODULE glib_dll;
e79b05
-
e79b05
 BOOL WINAPI
e79b05
 DllMain (HINSTANCE hinstDLL,
e79b05
          DWORD     fdwReason,
afe32b
@@ -238,14 +240,6 @@ DllMain (HINSTANCE hinstDLL,
e79b05
     {
e79b05
     case DLL_PROCESS_ATTACH:
e79b05
       glib_dll = hinstDLL;
afe32b
-      g_crash_handler_win32_init ();
e79b05
-      g_clock_win32_init ();
e79b05
-#ifdef THREADS_WIN32
e79b05
-      g_thread_win32_init ();
e79b05
-#endif
e79b05
-      glib_init ();
afe32b
-      /* must go after glib_init */
afe32b
-      g_console_win32_init ();
e79b05
       break;
e79b05
 
e79b05
     case DLL_THREAD_DETACH:
e79b05
@@ -259,7 +256,10 @@ DllMain (HINSTANCE hinstDLL,
e79b05
   return TRUE;
e79b05
 }
e79b05
 
e79b05
-#elif defined (G_HAS_CONSTRUCTORS)
e79b05
+#endif /* defined (DLL_EXPORT) */
e79b05
+#endif /* defined (G_OS_WIN32) */
e79b05
+
e79b05
+#if defined (G_HAS_CONSTRUCTORS)
e79b05
 
e79b05
 #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
e79b05
 #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(glib_init_ctor)
afe32b
@@ -269,7 +266,15 @@ G_DEFINE_CONSTRUCTOR(glib_init_ctor)
e79b05
 static void
e79b05
 glib_init_ctor (void)
e79b05
 {
e79b05
+#if defined (G_OS_WIN32)
e79b05
+  g_clock_win32_init ();
e79b05
+#ifdef THREADS_WIN32
e79b05
+  g_thread_win32_init ();
e79b05
+#endif /* defined (THREADS_WIN32) */
e79b05
+#endif /* defined (G_OS_WIN32) */
e79b05
   glib_init ();
afe32b
+  /* must go after glib_init */
afe32b
+  g_console_win32_init ();
e79b05
 }
afe32b
afe32b
 #else
e79b05
-- 
e79b05
1.8.2