changeset 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 e55bb62b2970
children 37e7bea19863
files src/pthreads-1-autostatic.patch
diffstat 1 files changed, 150 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pthreads-1-autostatic.patch	Thu May 20 00:16:26 2010 +0200
@@ -0,0 +1,150 @@
+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 */