view src/pthreads-1-autostatic.patch @ 989:05c8ebf4681d

add the autostatic patch to package pthreads
author Volker Grabsch <vog@notjusthosting.com>
date Thu, 20 May 2010 00:16:26 +0200
parents
children f653602a0500
line wrap: on
line source

This file is part of mingw-cross-env.
See doc/index.html for further information.

This patch has been taken from:
http://sourceware.org/ml/pthreads-win32/2010/msg00006.html

diff -ur pthreads-win32-20091019.orig/GNUmakefile pthreads-win32-20091019/GNUmakefile
--- pthreads-win32-20091019.orig/GNUmakefile	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/GNUmakefile	2010-02-01 14:45:28.471432337 -0200
@@ -63,7 +63,6 @@
 XOPT	=
 
 RCFLAGS		= --include-dir=.
-LFLAGS		= -lwsock32
 
 # ----------------------------------------------------------------------
 # The library can be built with some alternative behaviour to
diff -ur pthreads-win32-20091019.orig/pthread.c pthreads-win32-20091019/pthread.c
--- pthreads-win32-20091019.orig/pthread.c	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread.c	2010-02-01 14:26:48.601487556 -0200
@@ -49,6 +49,7 @@
 #include "condvar.c"
 #include "create.c"
 #include "dll.c"
+#include "autostatic.c"
 #include "errno.c"
 #include "exit.c"
 #include "fork.c"
diff -ur pthreads-win32-20091019.orig/pthread_getspecific.c pthreads-win32-20091019/pthread_getspecific.c
--- pthreads-win32-20091019.orig/pthread_getspecific.c	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread_getspecific.c	2010-02-01 14:28:36.603981857 -0200
@@ -72,12 +72,10 @@
   else
     {
       int lasterror = GetLastError ();
-      int lastWSAerror = WSAGetLastError ();
 
       ptr = TlsGetValue (key->key);
 
       SetLastError (lasterror);
-      WSASetLastError (lastWSAerror);
     }
 
   return ptr;
diff -ur pthreads-win32-20091019.orig/pthread.h pthreads-win32-20091019/pthread.h
--- pthreads-win32-20091019.orig/pthread.h	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/pthread.h	2010-02-02 16:51:05.047931915 -0200
@@ -533,7 +533,7 @@
  * do NOT define PTW32_BUILD, and then the variables/functions will
  * be imported correctly.
  */
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
 #  ifdef PTW32_BUILD
 #    define PTW32_DLLPORT __declspec (dllexport)
 #  else
diff -ur pthreads-win32-20091019.orig/sched.h pthreads-win32-20091019/sched.h
--- pthreads-win32-20091019.orig/sched.h	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/sched.h	2010-02-02 16:51:00.665887720 -0200
@@ -76,7 +76,7 @@
  * do NOT define PTW32_BUILD, and then the variables/functions will
  * be imported correctly.
  */
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
 #  ifdef PTW32_BUILD
 #    define PTW32_DLLPORT __declspec (dllexport)
 #  else
diff -ur pthreads-win32-20091019.orig/semaphore.h pthreads-win32-20091019/semaphore.h
--- pthreads-win32-20091019.orig/semaphore.h	2009-10-19 08:07:32.000000000 -0200
+++ pthreads-win32-20091019/semaphore.h	2010-02-02 16:50:45.916576916 -0200
@@ -75,7 +75,7 @@
  * do NOT define PTW32_BUILD, and then the variables/functions will
  * be imported correctly.
  */
-#ifndef PTW32_STATIC_LIB
+#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__)
 #  ifdef PTW32_BUILD
 #    define PTW32_DLLPORT __declspec (dllexport)
 #  else
--- /dev/null	2010-01-29 12:57:37.677072272 -0200
+++ pthreads-win32-20091019/autostatic.c	2010-02-01 14:26:48.601487556 -0200
@@ -0,0 +1,67 @@
+/*
+ * autostatic.c
+ *
+ * Description:
+ * This translation unit implements static library initialisation.
+ *
+ * --------------------------------------------------------------------------
+ *
+ *      Pthreads-win32 - POSIX Threads Library for Win32
+ *      Copyright(C) 1998 John E. Bossom
+ *      Copyright(C) 1999,2005 Pthreads-win32 contributors
+ * 
+ *      Contact Email: rpj@callisto.canberra.edu.au
+ * 
+ *      The current list of contributors is contained
+ *      in the file CONTRIBUTORS included with the source
+ *      code distribution. The list can also be seen at the
+ *      following World Wide Web location:
+ *      http://sources.redhat.com/pthreads-win32/contributors.html
+ * 
+ *      This library is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU Lesser General Public
+ *      License as published by the Free Software Foundation; either
+ *      version 2 of the License, or (at your option) any later version.
+ * 
+ *      This library is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *      Lesser General Public License for more details.
+ * 
+ *      You should have received a copy of the GNU Lesser General Public
+ *      License along with this library in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef PTW32_STATIC_LIB
+
+#include "pthread.h"
+#include "implement.h"
+
+static void on_process_init(void)
+{
+    pthread_win32_process_attach_np ();
+}
+
+static void on_process_exit(void)
+{
+    pthread_win32_thread_detach_np  ();
+    pthread_win32_process_detach_np ();
+}
+
+#ifdef __MINGW32__
+#    define attribute_section(a) __attribute__((section(a)))
+#elif defined(_MSC_VER)
+#    define attribute_section(a) __pragma(section(a,long,read)); __declspec(allocate(a))
+#else
+#error compiler not supported!
+#endif
+
+attribute_section(".CRT$XCU") void *msc_ctor = on_process_init;
+attribute_section(".CRT$XPU") void *msc_dtor = on_process_exit;
+
+attribute_section(".ctors"  ) void *gcc_ctor = on_process_init;
+attribute_section(".dtors"  ) void *gcc_dtor = on_process_exit;
+
+#endif /* PTW32_STATIC_LIB */