app-emulation/wine: Version bump 1.7.30 to fix regressions
This commit is contained in:
parent
6b4fdc85d2
commit
9fe47e5485
@ -8,12 +8,14 @@ AUX wine-1.5.26-winegcc.patch 1808 SHA256 91c1012059b93a421b2eae9f2ea46b7b327d6d
|
||||
AUX wine-1.5.30-libwine.patch 1777 SHA256 2f0155c2c1d11fd9a06deab54dd753c1161e32217eae82604f8c1d542e87af4f SHA512 e6d566f75632065def197cf27b5705a3f2f736a7b3bb4ae03df19fea00fd980a5b5d0517981469fef0fa5347c1c3b9651894fb23d937b5dbbd993cd292f67183 WHIRLPOOL 62ed15db6bddda47dcf74d846e15a9904c11abdf63e0321e7e2bc3197f60c819992b3a95a4395f85edeef9181a1866749194b9744be8d42bd94acab37470aad6
|
||||
AUX wine-1.5.31-gnutls-3.2.0.patch 1616 SHA256 3ce82009b05fe997b0d198ad83533026d6410811ecfc6254c1505d0b9d18caf0 SHA512 09de6ff03da996197cd6833c1f53e9f39b43fc43e02ad3b4e12648a57288c1fa200886a805e6811372e12665f9a5d463603f9a9ba39cb1392b2cf4d11f3f9a65 WHIRLPOOL 590a9206913a51eae81e236057bbed346dae8f895575dcc948ba7168edf5c0605db6278344fad727c2a828a2aeef258f72a57a12b5dca244a3b7b82cfe43452a
|
||||
AUX wine-1.6-memset-O3.patch 695 SHA256 1f04496713e8a401ba068702c5c3e104b18635bfb54808e5641a3c48a9b9bad4 SHA512 ad7231f8dedf98f9e9b91fcb8bbe72a716d78285127b0c33396de0b1e17a191f91f9a4a377c0e90671bb5f4e57bfb087ef7e80c9537c6c73b3c9bb90b3885968 WHIRLPOOL 91689c31054b896609493e2b0b4fe67e3d752d889f4ccae9c3e15229543341998809fd19a2040457e04fbdbd45505f0f2b49052844004193872713053d7239f8
|
||||
AUX wine-1.7.12-osmesa-check.patch 1722 SHA256 42648efa15040011ef868f92fd615924a83b5a30dab25505928226d8bc48159d SHA512 faca80f9747f3d7bfd05c3410bcccfaf17b3f397e30dd9ec382eccc326de346d195d6a184ec78e44b26d5e5e4b2af749ce58a0e6bad0b15a4fd1f2ea610d3124 WHIRLPOOL c5314849d15a53dc00af80f44249c10107b17825c4a2ab4510a5799b154bb1cdb516b3b632e1e959802588f673b9eac8ed6de2dfb59bde34acdd5b752115f695
|
||||
AUX wine-1.7.2-osmesa-check.patch 1740 SHA256 5264ac291435eb64c70cef4bdccbf8d4448472b4f014ab15ede35bcceebb6579 SHA512 4738a381923df7b45ea68092efb7ccb967907976d6d2f8bb0167af4211c377a73e296481b94092ac232f9ae09edf21447da92a134ebfff9b32acdd9e20340b95 WHIRLPOOL 95a90f8ff5a649833b39cb28de997c3b516cd09a53cf71d616c4fd412dfa6e71c47a1255a4d0597d85a62966cd9d6b9fae1c21c88e67d8650d31d414fca8fd42
|
||||
AUX wine-1.7.28-gstreamer-v4.patch 19689 SHA256 9d621741a9909973bfbd28f07b4e2eb54813d0a5d2ff10d6550f7097aff36590 SHA512 383f588f40d9efaa653c3fa326692c36df02de382729b939d04d085c28f388cc0d8c7fac49671a2045f095bf624e2be6f9de6a064e9d9e606db07b2b61b1329f WHIRLPOOL 9078e8966c1777376a077f5a636c1997b33b26150a4a4efdae472c22e0d97c572c7ce34825a98b1e5240c08dc504fea6442c9e3c193a38ea8b75bccd4c56fc77
|
||||
AUX wine-1.7.9-hcce.patch 4699 SHA256 93d5dd444f3cd445156d21dad8653ad67d195cd8c373335d43b122e68e76e673 SHA512 084fd9af46acdb035e3ec4bcdeb04cb21a09c4288777905136f8bfe74ee14833a3cee241be891ceca9c70e0a506d936d92d12422c54d1a2e211c0dbe128f98bc WHIRLPOOL ccc3fa16bf5ef0f7e1b227d0c35b4dae986a30b2a99ae2fbccff1416feac6bd6ade389d900882daa86a16e1209e977b212f33e227a5beb355d9cde2a6df1badb
|
||||
DIST wine-1.7.11.tar.bz2 21359534 SHA256 c07d2771ed96c45d428bb11d164c5e4bbe48d6857a0a4cba2e0b73c5f1044f93 SHA512 9743c4cf382b6846d98aa383d9db22cb99bca510ec2db3e9224f10d08095c4a3fe4449b3019d5a6f401458a98696d096a454d00584c667074aed618c47544dcf WHIRLPOOL 38356b5df2c9f5a78b9eb66c6e0f09f7371c57d84f601e6614228b64c629a2c9c222696078d7627df850792a0111e7876fe460c4575bac4accf2f56a391315c6
|
||||
DIST wine-1.7.30.tar.bz2 21835863 SHA256 10f7caf0420970772d868ab2ae24578f89b8a04b93604473e7c41bb295e0086c SHA512 d9b20fa58b353e60ebee930c969da10618e2aca8aba530f1d31ee315e1e3e5d4c495998e59cccbfeb6452811a5c8e360c76b9ec2ae0e16a987a197a559d1f954 WHIRLPOOL 2d5a0c00d356f0960c89e162080e7b67a63ee40439b7b2e8b3774b85ecef9406ffce7cbf9b9941856c9f97f542fa34a5610607307623b07b677991710c7d92e4
|
||||
DIST wine-gentoo-2013.06.24.tar.bz2 85442 SHA256 bfbf6b25e98f717320de2ede467e3628fbc749d936b8449f8477c9dc6f41e04b SHA512 b6819889314f6a6ea16c1332f4b177c43623116763969c31b23b61754cd304dd085f5d3eafbe847159331eb97dddd9b4c10699430129ea4a71da418c1fe175f0 WHIRLPOOL 227e0ac6569736d4ad5813cef49f775dae956f4fc9255de95753d5d3cba1bf6cf3db31d23d3702bb54d2e60c5a6f779b602f0efb2096e4c827c924565b273d00
|
||||
DIST wine-mono-4.5.2.msi 52502528 SHA256 d9124edb41ba4418af10eba519dafb25ab4338c567d25ce0eb4ce1e1b4d7eaad SHA512 73c907f63b73836d5afd0753197358aaea43a74a47800f929ef0627112298256f1fa46d1b9ff297b117468d953cdeab21fb5962db13c5debbcb71004462df609 WHIRLPOOL 18d3544c6753c5a01917bfc1b694f31ce45213108527f13317ec0bb8b2d2339ce41800534967e067cd15cd186ef9e186a5d3252275e443dfa1a6ae3641d4d17c
|
||||
DIST wine-staging-1.7.30.tar.gz 8439935 SHA256 42d761cde615c5d70656078a7c2b23cf1e57f7ba174b3e6c9da6de876bc268d2 SHA512 b0dc44e6ca75f0578a7a76682b3a4acd369a18ed57d0b3bfa95c4416ed31e2630bbdf9f83e98db8b39e2f5b5fc745259af57fcc09de51b37e5e4184cbd71fd0c WHIRLPOOL f4fe5253b5c2579e342f863a0e07df872a2876a67413fa07ab61f66d32b04537e57c952e7017905fd5febad7797173aaf38132b3c067ef5068b87e74acf1ca64
|
||||
DIST wine_gecko-2.24-x86.msi 22373888 SHA256 6e38acae87ea66e2c1e8f2f0afe88f89eed3e6e0b431cd3da38dea814b71202c SHA512 f158d28ca09bc900a2680892e7ac10770e06050a9251e1ec3a953fee0bf9b1c326e166f92fb88a4648297b6587c91a5ef5af35f267bb2ba5f679da4c8fdb6898 WHIRLPOOL bbe7a2572d89dc5e0347ba11b2014bac79fc4427d7551655313a46b147a79c1607b7f46596877c459ddaa0e202337fb3d217429ddd6a4df49ee33b373a788487
|
||||
DIST wine_gecko-2.24-x86_64.msi 23608320 SHA256 47557da68bcb2aedaebb93af73275aac96ba23e896bd98f25f2acbfd216d9cc8 SHA512 45ce0dcf42c3e2fe2198092812242e3467b19db4a4946e0b1a2d6327fd48aa936fb85cc1930bace6eaba0c61bff3a6536767ba0a91a0f085f307d1bddd171f0c WHIRLPOOL b6ba7c784d3a79d7afc11f0e12f0372b52b9f194eedfd083abed36a461e7301d2dd936be3be12619364f6ac5aae9cfbfb7fc47141bff92b62826f209365210ec
|
||||
DIST winepulse-patches-1.7.10.tar.bz2 49205 SHA256 7330b4552b572244bbe99c16005d725eaf382995c986add170474381b90df468 SHA512 ef3a5477bc5803bfba609dc3299a7c07833958628d1aff01d100da57c0d270344ee326649206708c50c2a12b025f987a4e0f1dee9126e52e2778b256c45ba567 WHIRLPOOL b40088d8665f3cc57b4936774ac6dc2e6b005d75aa7c7385248ce35e5cf6e168ae212771f771b68dbf91fc5034b7ba54f907e93283cc2eddaa18e825d9b734a9
|
||||
EBUILD wine-1.7.11-r1.ebuild 12802 SHA256 9f588b795c882e25e343f09b14d3def3f864c8bb778ed8a169c7f686838ad78f SHA512 5b2e5edd5d1990a4860af333fc58c5f059ded3ad8e7fdb8bf69549dd45b1d4fd5e5d64f5f24cd34e48260265009ae61e71c9e6de3ed176165e1e28094f6dedb9 WHIRLPOOL 02827b60b5f46acec1c467a58a270d8917f62f9097cc5fb6d567a698c422cbfa4553fc32f17acfd5ec9571addebb0a07fab55844e3085cf2e52677f4a9028d0c
|
||||
EBUILD wine-1.7.30.ebuild 15473 SHA256 a65a860f35b89492d535d52fa1951d91034bf0e71ec4bbf740afc98bcf907242 SHA512 cad207131d2631a9236954122655803543a3f44aca3a84aff6a6866ad900417078ac495ba1baff4baaa0b22d704a4007f1003de3753bd863cb613424302daf54 WHIRLPOOL fbdd9275d06cccab7cbb39ce81719346fa679563e715466517c9e231903b7061d3cb53c98925cad74b5d4d19bad39c36c531056d6ed002fe867a4bd863e57453
|
||||
|
38
app-emulation/wine/files/wine-1.7.12-osmesa-check.patch
Normal file
38
app-emulation/wine/files/wine-1.7.12-osmesa-check.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From 6932b9a17c4f64c13f7060895d46334bc7022430 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Rostovtsev <tetromino@gentoo.org>
|
||||
Date: Tue, 7 Aug 2012 01:29:01 -0400
|
||||
Subject: [PATCH] Do not check for libGL symbols when checking libOSMesa
|
||||
|
||||
If mesa had been built with shared glapi, glAccum is not available in
|
||||
libOSMesa without explicitly linking to libGL. In addition, in
|
||||
mesa-8.0.x and earlier, libOSMesa needs to be explicitly linked to
|
||||
libglapi if mesa was built with shared glapi, see
|
||||
https://bugs.gentoo.org/show_bug.cgi?id=399813
|
||||
And in mesa-8.1.x, libOSMesa in addition needs libdl, libpthread, and
|
||||
libstdc++, see https://bugs.gentoo.org/show_bug.cgi?id=431832
|
||||
---
|
||||
configure.ac | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index de807d2..a2e8684 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1233,7 +1233,13 @@ This probably prevents linking to OpenGL. Try deleting the file and restarting c
|
||||
|
||||
if test "x$with_osmesa" != "xno"
|
||||
then
|
||||
- WINE_CHECK_SONAME(OSMesa,glAccum,,,[$X_LIBS -lm $X_EXTRA_LIBS])
|
||||
+ WINE_CHECK_SONAME(OSMesa,OSMesaCreateContext,,,[$X_LIBS -lm $X_EXTRA_LIBS])
|
||||
+ if test "x$ac_cv_lib_soname_OSMesa" = "x"; then
|
||||
+ osmesa_save_CC=$CC
|
||||
+ CC=$CXX
|
||||
+ WINE_CHECK_SONAME(OSMesa,OSMesaCreateContext,,,[-lglapi -lpthread -ldl $X_LIBS -lm $X_EXTRA_LIBS])
|
||||
+ CC=$osmesa_save_CC
|
||||
+ fi
|
||||
WINE_NOTICE_WITH(osmesa,[test "x$ac_cv_lib_soname_OSMesa" = "x"],
|
||||
[libOSMesa ${notice_platform}development files not found (or too old), OpenGL rendering in bitmaps won't be supported.])
|
||||
fi
|
||||
--
|
||||
1.8.5.3
|
||||
|
629
app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch
Normal file
629
app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch
Normal file
@ -0,0 +1,629 @@
|
||||
From 9e081cd4a04e3326d4927aa082695f15432590e2 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Thu, 14 Aug 2014 11:49:20 +0200
|
||||
Subject: [PATCH] TESTING -- override pthreads to fix gstreamer v4
|
||||
|
||||
I believe the code is ready and will work properly now in all cases.
|
||||
but please test before cherry picking this patch, and report
|
||||
success or failure to me please.
|
||||
|
||||
Changes since v1:
|
||||
- Call pthread_yield to make sure that we link against libpthread.
|
||||
This fixes the build on saucy.
|
||||
Changes since v2:
|
||||
- Set thread_data->detached before creating the thread to prevent
|
||||
a race condition.
|
||||
Changes since v3:
|
||||
- Set thread_data->detached CORRECTLY. Fix a small race between
|
||||
thread creation and pthread_detach.
|
||||
---
|
||||
dlls/ntdll/ntdll_misc.h | 3 +
|
||||
dlls/ntdll/thread.c | 307 +++++++++++++++++++++++++++++++++++++--
|
||||
dlls/winegstreamer/glibthread.c | 13 ++
|
||||
libs/wine/loader.c | 7 +
|
||||
libs/wine/wine.map | 6 +
|
||||
loader/Makefile.in | 2 +-
|
||||
loader/main.c | 41 +++++
|
||||
7 files changed, 362 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
|
||||
index 4370084..1af819b 100644
|
||||
--- a/dlls/ntdll/ntdll_misc.h
|
||||
+++ b/dlls/ntdll/ntdll_misc.h
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "winnt.h"
|
||||
#include "winternl.h"
|
||||
#include "wine/server.h"
|
||||
+#include "wine/list.h"
|
||||
|
||||
#define MAX_NT_PATH_LENGTH 277
|
||||
|
||||
@@ -235,6 +236,8 @@ struct ntdll_thread_data
|
||||
WINE_VM86_TEB_INFO vm86; /* 1fc vm86 private data */
|
||||
void *exit_frame; /* 204 exit frame pointer */
|
||||
#endif
|
||||
+ struct list entry;
|
||||
+ BOOL detached;
|
||||
};
|
||||
|
||||
static inline struct ntdll_thread_data *ntdll_get_thread_data(void)
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index c8461b0..8d5470e 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#ifdef HAVE_SYS_SYSCALL_H
|
||||
#include <sys/syscall.h>
|
||||
#endif
|
||||
+#include <errno.h>
|
||||
|
||||
#define NONAMELESSUNION
|
||||
#include "ntstatus.h"
|
||||
@@ -58,6 +59,7 @@ struct startup_info
|
||||
TEB *teb;
|
||||
PRTL_THREAD_START_ROUTINE entry_point;
|
||||
void *entry_arg;
|
||||
+ BOOL native_thread;
|
||||
};
|
||||
|
||||
static PEB *peb;
|
||||
@@ -202,6 +204,78 @@ static ULONG get_dyld_image_info_addr(void)
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
+#ifdef __linux__
|
||||
+extern typeof(pthread_create) *__glob_pthread_create, *call_pthread_create;
|
||||
+extern typeof(pthread_join) *__glob_pthread_join, *call_pthread_join;
|
||||
+extern typeof(pthread_detach) *__glob_pthread_detach, *call_pthread_detach;
|
||||
+
|
||||
+static typeof(pthread_create) __hook_pthread_create;
|
||||
+static typeof(pthread_join) __hook_pthread_join;
|
||||
+static typeof(pthread_detach) __hook_pthread_detach;
|
||||
+
|
||||
+static pthread_mutex_t thread_lock;
|
||||
+
|
||||
+static void thread_wrap_init(void)
|
||||
+{
|
||||
+ pthread_mutexattr_t attr;
|
||||
+ pthread_mutexattr_init(&attr);
|
||||
+ pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
|
||||
+ pthread_mutex_init(&thread_lock, &attr);
|
||||
+ pthread_mutexattr_destroy(&attr);
|
||||
+
|
||||
+ call_pthread_create = __hook_pthread_create;
|
||||
+ call_pthread_join = __hook_pthread_join;
|
||||
+ call_pthread_detach = __hook_pthread_detach;
|
||||
+}
|
||||
+
|
||||
+static TEB *dead_teb;
|
||||
+static struct list active_list = LIST_INIT(active_list);
|
||||
+
|
||||
+static void take_thread_lock(void)
|
||||
+{
|
||||
+ int ret = pthread_mutex_lock(&thread_lock);
|
||||
+ if (ret == EOWNERDEAD)
|
||||
+ pthread_mutex_consistent(&thread_lock);
|
||||
+}
|
||||
+
|
||||
+static void detach_thread_unlock(TEB *own_teb)
|
||||
+{
|
||||
+ struct ntdll_thread_data *thread_data;
|
||||
+ TEB *teb = dead_teb;
|
||||
+
|
||||
+ dead_teb = own_teb;
|
||||
+
|
||||
+ pthread_mutex_unlock(&thread_lock);
|
||||
+ if (!teb)
|
||||
+ return;
|
||||
+
|
||||
+ thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
|
||||
+ __glob_pthread_join(thread_data->pthread_id, NULL);
|
||||
+ signal_free_thread(teb);
|
||||
+}
|
||||
+
|
||||
+static void reap_thread(TEB *teb)
|
||||
+{
|
||||
+ struct ntdll_thread_data *thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
|
||||
+ take_thread_lock();
|
||||
+ if (thread_data->detached)
|
||||
+ detach_thread_unlock(teb);
|
||||
+ else {
|
||||
+ /*
|
||||
+ * Do not unlock, wait until the thread is thoroughly dead.
|
||||
+ * This prevents a race condition where detach is called
|
||||
+ * after the thread has not finished dying yet.
|
||||
+ */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+#define __glob_pthread_create pthread_create
|
||||
+#define __glob_pthread_join pthread_join
|
||||
+#define __glob_pthread_detach pthread_detach
|
||||
+#define thread_wrap_init()
|
||||
+#endif
|
||||
+
|
||||
/***********************************************************************
|
||||
* thread_init
|
||||
*
|
||||
@@ -220,6 +294,7 @@ HANDLE thread_init(void)
|
||||
struct ntdll_thread_data *thread_data;
|
||||
static struct debug_info debug_info; /* debug info for initial thread */
|
||||
|
||||
+ thread_wrap_init();
|
||||
virtual_init();
|
||||
|
||||
/* reserve space for shared user data */
|
||||
@@ -349,14 +424,12 @@ void terminate_thread( int status )
|
||||
pthread_exit( UIntToPtr(status) );
|
||||
}
|
||||
|
||||
-
|
||||
-/***********************************************************************
|
||||
- * exit_thread
|
||||
- */
|
||||
-void exit_thread( int status )
|
||||
+static void exit_thread_common( int status )
|
||||
{
|
||||
+#ifndef __linux__
|
||||
static void *prev_teb;
|
||||
TEB *teb;
|
||||
+#endif
|
||||
|
||||
if (status) /* send the exit code to the server (0 is already the default) */
|
||||
{
|
||||
@@ -380,24 +453,177 @@ void exit_thread( int status )
|
||||
|
||||
pthread_sigmask( SIG_BLOCK, &server_block_set, NULL );
|
||||
|
||||
+#ifndef __linux__
|
||||
if ((teb = interlocked_xchg_ptr( &prev_teb, NtCurrentTeb() )))
|
||||
{
|
||||
struct ntdll_thread_data *thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
|
||||
|
||||
if (thread_data->pthread_id)
|
||||
{
|
||||
- pthread_join( thread_data->pthread_id, NULL );
|
||||
+ __glob_pthread_join( thread_data->pthread_id, NULL );
|
||||
signal_free_thread( teb );
|
||||
}
|
||||
}
|
||||
+#else
|
||||
+ reap_thread(NtCurrentTeb());
|
||||
+#endif
|
||||
|
||||
close( ntdll_get_thread_data()->wait_fd[0] );
|
||||
close( ntdll_get_thread_data()->wait_fd[1] );
|
||||
close( ntdll_get_thread_data()->reply_fd );
|
||||
close( ntdll_get_thread_data()->request_fd );
|
||||
+}
|
||||
+
|
||||
+void exit_thread( int status )
|
||||
+{
|
||||
+ exit_thread_common(status);
|
||||
pthread_exit( UIntToPtr(status) );
|
||||
}
|
||||
|
||||
+#ifdef __linux__
|
||||
+
|
||||
+struct unix_arg {
|
||||
+ void *(*start)(void *);
|
||||
+ void *arg;
|
||||
+};
|
||||
+
|
||||
+/* dummy used for comparison */
|
||||
+static DWORD native_unix_start;
|
||||
+
|
||||
+static void call_native_cleanup(void *arg)
|
||||
+{
|
||||
+ exit_thread_common(0);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+__hook_pthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||
+ void *(*start_routine) (void *), void *parm)
|
||||
+{
|
||||
+ NTSTATUS ret;
|
||||
+ pthread_t tid;
|
||||
+ size_t stack = 8 * 1024 * 1024;
|
||||
+ struct unix_arg arg;
|
||||
+ arg.start = start_routine;
|
||||
+ arg.arg = parm;
|
||||
+
|
||||
+ if (!thread)
|
||||
+ thread = &tid;
|
||||
+
|
||||
+ TRACE("Overriding thread creation!\n");
|
||||
+ if (attr) {
|
||||
+ static int once;
|
||||
+ if (!once++)
|
||||
+ FIXME("most thread attributes ignored!\n");
|
||||
+ else
|
||||
+ WARN("most thread attributes ignored!\n");
|
||||
+
|
||||
+ pthread_attr_getstacksize(attr, &stack);
|
||||
+ }
|
||||
+
|
||||
+ ret = RtlCreateUserThread( NtCurrentProcess(), NULL, FALSE, NULL, stack, 0, (void*)&native_unix_start, &arg, NULL, (void*)thread );
|
||||
+ if (ret != STATUS_SUCCESS)
|
||||
+ FIXME("ret: %08x\n", ret);
|
||||
+ switch (ret) {
|
||||
+ case STATUS_SUCCESS:
|
||||
+ TRACE("created thread %lx for %p/%p\n", *thread, start_routine, parm);
|
||||
+ return 0;
|
||||
+ case STATUS_NO_MEMORY:
|
||||
+ return ENOMEM;
|
||||
+ case STATUS_TOO_MANY_OPENED_FILES:
|
||||
+ return EMFILE;
|
||||
+ default:
|
||||
+ ERR("Unhandled ntstatus %08x\n", ret);
|
||||
+ return ENOMEM;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int __hook_pthread_detach(pthread_t thread)
|
||||
+{
|
||||
+ struct ntdll_thread_data *thread_data;
|
||||
+ TEB *teb = NULL;
|
||||
+
|
||||
+ if (pthread_equal(thread, pthread_self())) {
|
||||
+ TRACE("Detached self: %lx\n", pthread_self());
|
||||
+ ntdll_get_thread_data()->detached = 1;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ take_thread_lock();
|
||||
+ LIST_FOR_EACH_ENTRY(thread_data, &active_list, typeof(*thread_data), entry) {
|
||||
+ if (pthread_equal(thread_data->pthread_id, thread)) {
|
||||
+ teb = CONTAINING_RECORD(thread_data, typeof(*teb), SpareBytes1);
|
||||
+
|
||||
+ list_remove(&thread_data->entry);
|
||||
+ if (!pthread_tryjoin_np(thread, NULL)) {
|
||||
+ detach_thread_unlock(NULL);
|
||||
+ TRACE("Thread %lx was dead, cleaning up\n", thread);
|
||||
+ signal_free_thread(teb);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ thread_data->detached = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ detach_thread_unlock(NULL);
|
||||
+ if (!teb)
|
||||
+ TRACE("Could not find thread %lx to detach\n", thread);
|
||||
+ else
|
||||
+ TRACE("Changed thread %lx to detached\n", thread);
|
||||
+ return teb ? 0 : ESRCH;
|
||||
+}
|
||||
+
|
||||
+static int __hook_pthread_join(pthread_t thread, void **retval)
|
||||
+{
|
||||
+ struct ntdll_thread_data *thread_data, *t2;
|
||||
+ int ret = ESRCH;
|
||||
+
|
||||
+ if (pthread_equal(thread, pthread_self()))
|
||||
+ return EDEADLK;
|
||||
+
|
||||
+ take_thread_lock();
|
||||
+ LIST_FOR_EACH_ENTRY(thread_data, &active_list, typeof(*thread_data), entry) {
|
||||
+ TEB *teb = CONTAINING_RECORD(thread_data, typeof(*teb), SpareBytes1);
|
||||
+
|
||||
+ if (pthread_equal(thread, thread_data->pthread_id)) {
|
||||
+
|
||||
+ ret = pthread_tryjoin_np(thread, retval);
|
||||
+ if (!ret) {
|
||||
+ TRACE("Thread %lx was dead fastpath, cleaning up\n", thread);
|
||||
+ goto free;
|
||||
+ }
|
||||
+ detach_thread_unlock(NULL);
|
||||
+
|
||||
+ ret = __glob_pthread_join(thread, retval);
|
||||
+ if (ret) {
|
||||
+ TRACE("Thread %lx join failed with %i, ignoring\n", thread, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ take_thread_lock();
|
||||
+ /* Check if someone else freed the thread yet */
|
||||
+ LIST_FOR_EACH_ENTRY(t2, &active_list, typeof(*thread_data), entry)
|
||||
+ if (t2 == thread_data) {
|
||||
+ TRACE("Cleaning up after successful join\n");
|
||||
+ goto free;
|
||||
+ }
|
||||
+ TRACE("No clean up after successful join, multiple pthread_join's?\n");
|
||||
+ break;
|
||||
+
|
||||
+free:
|
||||
+ list_remove(&thread_data->entry);
|
||||
+ detach_thread_unlock(NULL);
|
||||
+ signal_free_thread(teb);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ detach_thread_unlock(NULL);
|
||||
+ if (ret)
|
||||
+ TRACE("failed with %i\n", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
|
||||
/***********************************************************************
|
||||
* start_thread
|
||||
@@ -426,9 +652,19 @@ static void start_thread( struct startup_info *info )
|
||||
if (TRACE_ON(relay))
|
||||
DPRINTF( "%04x:Starting thread proc %p (arg=%p)\n", GetCurrentThreadId(), func, arg );
|
||||
|
||||
- call_thread_entry_point( (LPTHREAD_START_ROUTINE)func, arg );
|
||||
-}
|
||||
+#ifdef __linux__
|
||||
+ if (info->native_thread) {
|
||||
+ void *(*start)(void*) = (void*)func;
|
||||
|
||||
+ FIXME("Started native thread %08x\n", GetCurrentThreadId());
|
||||
+ pthread_cleanup_push(call_native_cleanup, NULL);
|
||||
+ pthread_exit(start(arg));
|
||||
+ pthread_cleanup_pop(1);
|
||||
+ return;
|
||||
+ }
|
||||
+#endif
|
||||
+ call_thread_entry_point( (LPTHREAD_START_ROUTINE)func, arg );
|
||||
+}
|
||||
|
||||
/***********************************************************************
|
||||
* RtlCreateUserThread (NTDLL.@)
|
||||
@@ -440,14 +676,13 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
|
||||
HANDLE *handle_ptr, CLIENT_ID *id )
|
||||
{
|
||||
sigset_t sigset;
|
||||
- pthread_t pthread_id;
|
||||
pthread_attr_t attr;
|
||||
struct ntdll_thread_data *thread_data;
|
||||
struct startup_info *info = NULL;
|
||||
HANDLE handle = 0, actctx = 0;
|
||||
TEB *teb = NULL;
|
||||
DWORD tid = 0;
|
||||
- int request_pipe[2];
|
||||
+ int request_pipe[2], ret;
|
||||
NTSTATUS status;
|
||||
|
||||
if (process != NtCurrentProcess())
|
||||
@@ -472,10 +707,14 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
|
||||
if (handle_ptr) *handle_ptr = wine_server_ptr_handle( result.create_thread.handle );
|
||||
else NtClose( wine_server_ptr_handle( result.create_thread.handle ));
|
||||
}
|
||||
+ TRACE("CreateThread for other process returns %08x\n", result.create_thread.status);
|
||||
return result.create_thread.status;
|
||||
}
|
||||
|
||||
- if (server_pipe( request_pipe ) == -1) return STATUS_TOO_MANY_OPENED_FILES;
|
||||
+ if (server_pipe( request_pipe ) == -1) {
|
||||
+ TRACE("CreateThread cannot create request pipe: %m\n");
|
||||
+ return STATUS_TOO_MANY_OPENED_FILES;
|
||||
+ }
|
||||
wine_server_send_fd( request_pipe[0] );
|
||||
|
||||
SERVER_START_REQ( new_thread )
|
||||
@@ -496,12 +735,16 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
|
||||
if (status)
|
||||
{
|
||||
close( request_pipe[1] );
|
||||
+ TRACE("CreateThread server request failed with %08x\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
pthread_sigmask( SIG_BLOCK, &server_block_set, &sigset );
|
||||
|
||||
- if ((status = signal_alloc_thread( &teb ))) goto error;
|
||||
+ if ((status = signal_alloc_thread( &teb ))) {
|
||||
+ TRACE("CreateThread signal thread allocation failed with %08x\n", status);
|
||||
+ goto error;
|
||||
+ }
|
||||
|
||||
teb->Peb = NtCurrentTeb()->Peb;
|
||||
teb->ClientId.UniqueProcess = ULongToHandle(GetCurrentProcessId());
|
||||
@@ -524,32 +767,64 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
|
||||
|
||||
info = (struct startup_info *)(teb + 1);
|
||||
info->teb = teb;
|
||||
- info->entry_point = start;
|
||||
- info->entry_arg = param;
|
||||
+#ifdef __linux__
|
||||
+ info->native_thread = (void*)start == (void*)&native_unix_start;
|
||||
+ if (info->native_thread) {
|
||||
+ struct unix_arg *arg = param;
|
||||
+ info->entry_point = (void*)arg->start;
|
||||
+ info->entry_arg = arg->arg;
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ info->entry_point = start;
|
||||
+ info->entry_arg = param;
|
||||
+ }
|
||||
|
||||
thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
|
||||
+#ifdef __linux__
|
||||
+ thread_data->detached = !info->native_thread;
|
||||
+#endif
|
||||
thread_data->request_fd = request_pipe[1];
|
||||
thread_data->reply_fd = -1;
|
||||
thread_data->wait_fd[0] = -1;
|
||||
thread_data->wait_fd[1] = -1;
|
||||
+ thread_data->entry.next = NULL;
|
||||
|
||||
- if ((status = virtual_alloc_thread_stack( teb, stack_reserve, stack_commit ))) goto error;
|
||||
+ if ((status = virtual_alloc_thread_stack( teb, stack_reserve ?: (8 << 20), stack_commit ?: (1 << 20) ))) {
|
||||
+ TRACE("Allocating virtual stack for %p (%li/%li) failed with %08x\n", start, stack_reserve, stack_commit, status);
|
||||
+ goto error;
|
||||
+ }
|
||||
|
||||
pthread_attr_init( &attr );
|
||||
pthread_attr_setstack( &attr, teb->DeallocationStack,
|
||||
(char *)teb->Tib.StackBase - (char *)teb->DeallocationStack );
|
||||
pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM ); /* force creating a kernel thread */
|
||||
interlocked_xchg_add( &nb_threads, 1 );
|
||||
- if (pthread_create( &pthread_id, &attr, (void * (*)(void *))start_thread, info ))
|
||||
+
|
||||
+ take_thread_lock();
|
||||
+ ret = __glob_pthread_create( &thread_data->pthread_id, &attr, (void * (*)(void *))start_thread, info );
|
||||
+ if (ret)
|
||||
{
|
||||
+ TRACE("pthread create failed with %i/%m\n", ret);
|
||||
interlocked_xchg_add( &nb_threads, -1 );
|
||||
pthread_attr_destroy( &attr );
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto error;
|
||||
}
|
||||
+ if (!thread_data->detached)
|
||||
+ list_add_tail(&active_list, &thread_data->entry);
|
||||
+ detach_thread_unlock(NULL);
|
||||
+
|
||||
pthread_attr_destroy( &attr );
|
||||
pthread_sigmask( SIG_SETMASK, &sigset, NULL );
|
||||
|
||||
+ TRACE("Created thread succesfully, win handle: %04x, pthread: %lx\n", tid, thread_data->pthread_id);
|
||||
+
|
||||
+#ifdef __linux__
|
||||
+ if ((void*)start == (void*)&native_unix_start && id)
|
||||
+ *(pthread_t*)id = thread_data->pthread_id;
|
||||
+ else
|
||||
+#endif
|
||||
if (id) id->UniqueThread = ULongToHandle(tid);
|
||||
if (handle_ptr) *handle_ptr = handle;
|
||||
else NtClose( handle );
|
||||
diff --git a/dlls/winegstreamer/glibthread.c b/dlls/winegstreamer/glibthread.c
|
||||
index 0d829a0..46e22f4 100644
|
||||
--- a/dlls/winegstreamer/glibthread.c
|
||||
+++ b/dlls/winegstreamer/glibthread.c
|
||||
@@ -43,6 +43,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
+#if 0
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winnls.h"
|
||||
@@ -388,3 +389,15 @@ void g_thread_impl_init (void)
|
||||
g_thread_self_tls = TlsAlloc ();
|
||||
g_thread_init(&g_thread_functions_for_glib_use_default);
|
||||
}
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+void g_thread_impl_init (void)
|
||||
+{
|
||||
+ static gboolean beenhere = FALSE;
|
||||
+
|
||||
+ if (!beenhere++)
|
||||
+ g_thread_init(NULL);
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/libs/wine/loader.c b/libs/wine/loader.c
|
||||
index 7261522..a8c31b9 100644
|
||||
--- a/libs/wine/loader.c
|
||||
+++ b/libs/wine/loader.c
|
||||
@@ -73,6 +73,13 @@ char **__wine_main_argv = NULL;
|
||||
WCHAR **__wine_main_wargv = NULL;
|
||||
char **__wine_main_environ = NULL;
|
||||
|
||||
+#ifdef __linux__
|
||||
+#include <pthread.h>
|
||||
+typeof(pthread_create) *call_pthread_create, *__glob_pthread_create;
|
||||
+typeof(pthread_join) *call_pthread_join, *__glob_pthread_join;
|
||||
+typeof(pthread_detach) *call_pthread_detach, *__glob_pthread_detach;
|
||||
+#endif
|
||||
+
|
||||
struct dll_path_context
|
||||
{
|
||||
unsigned int index; /* current index in the dll path list */
|
||||
diff --git a/libs/wine/wine.map b/libs/wine/wine.map
|
||||
index 2159fac..fb3b951 100644
|
||||
--- a/libs/wine/wine.map
|
||||
+++ b/libs/wine/wine.map
|
||||
@@ -117,6 +117,12 @@ WINE_1.0
|
||||
wine_utf8_mbstowcs;
|
||||
wine_utf8_wcstombs;
|
||||
wine_wctype_table;
|
||||
+ __glob_pthread_create;
|
||||
+ call_pthread_create;
|
||||
+ __glob_pthread_join;
|
||||
+ call_pthread_join;
|
||||
+ __glob_pthread_detach;
|
||||
+ call_pthread_detach;
|
||||
|
||||
local: *;
|
||||
};
|
||||
diff --git a/loader/Makefile.in b/loader/Makefile.in
|
||||
index 95e4798..a18dd02 100644
|
||||
--- a/loader/Makefile.in
|
||||
+++ b/loader/Makefile.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-EXTRALIBS = $(PTHREAD_LIBS)
|
||||
+EXTRALIBS = $(PTHREAD_LIBS) $(DL_LIBS)
|
||||
|
||||
C_SRCS = \
|
||||
main.c \
|
||||
diff --git a/loader/main.c b/loader/main.c
|
||||
index ac67290..76609e1 100644
|
||||
--- a/loader/main.c
|
||||
+++ b/loader/main.c
|
||||
@@ -202,6 +202,45 @@ static int pre_exec(void)
|
||||
|
||||
#endif
|
||||
|
||||
+#ifdef __linux__
|
||||
+
|
||||
+extern typeof(pthread_create) *call_pthread_create, *__glob_pthread_create;
|
||||
+extern typeof(pthread_detach) *call_pthread_detach, *__glob_pthread_detach;
|
||||
+extern typeof(pthread_join) *call_pthread_join, *__glob_pthread_join;
|
||||
+
|
||||
+int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||
+ void *(*start_routine) (void *), void *arg)
|
||||
+{
|
||||
+ return call_pthread_create(thread, attr, start_routine, arg);
|
||||
+}
|
||||
+
|
||||
+int pthread_detach(pthread_t thread)
|
||||
+{
|
||||
+ return call_pthread_detach(thread);
|
||||
+}
|
||||
+
|
||||
+int pthread_join(pthread_t thread, void **retval)
|
||||
+{
|
||||
+ return call_pthread_join(thread, retval);
|
||||
+}
|
||||
+
|
||||
+static void init_thread_hook(void) {
|
||||
+ call_pthread_create = __glob_pthread_create = dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.2.5");
|
||||
+ if (!__glob_pthread_create)
|
||||
+ call_pthread_create = __glob_pthread_create = dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.1");
|
||||
+
|
||||
+ call_pthread_detach = __glob_pthread_detach = dlsym(RTLD_NEXT, "pthread_detach");
|
||||
+ call_pthread_join = __glob_pthread_join = dlsym(RTLD_NEXT, "pthread_join");
|
||||
+
|
||||
+ /* Call a function from libpthread to ensure being linked against it */
|
||||
+ pthread_yield();
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+#define init_thread_hook()
|
||||
+
|
||||
+#endif
|
||||
|
||||
/**********************************************************************
|
||||
* main
|
||||
@@ -211,6 +250,8 @@ int main( int argc, char *argv[] )
|
||||
char error[1024];
|
||||
int i;
|
||||
|
||||
+ init_thread_hook();
|
||||
+
|
||||
if (!getenv( "WINELOADERNOEXEC" )) /* first time around */
|
||||
{
|
||||
static char noexec[] = "WINELOADERNOEXEC=1";
|
||||
--
|
||||
1.7.6.6.GIT
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.11.ebuild,v 1.1 2014/01/22 06:58:56 tetromino Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.29.ebuild,v 1.1 2014/10/25 20:37:44 ryao Exp $
|
||||
|
||||
EAPI="5"
|
||||
|
||||
@ -8,7 +8,7 @@ AUTOTOOLS_AUTORECONF=1
|
||||
PLOCALES="ar bg ca cs da de el en en_US eo es fa fi fr he hi hr hu it ja ko lt ml nb_NO nl or pa pl pt_BR pt_PT rm ro ru sk sl sr_RS@cyrillic sr_RS@latin sv te th tr uk wa zh_CN zh_TW"
|
||||
PLOCALE_BACKUP="en"
|
||||
|
||||
inherit autotools-multilib eutils fdo-mime flag-o-matic gnome2-utils l10n multilib pax-utils toolchain-funcs virtualx
|
||||
inherit autotools-utils eutils fdo-mime flag-o-matic gnome2-utils l10n multilib multilib-minimal pax-utils toolchain-funcs virtualx
|
||||
|
||||
if [[ ${PV} == "9999" ]] ; then
|
||||
EGIT_REPO_URI="git://source.winehq.org/git/wine.git"
|
||||
@ -24,7 +24,7 @@ fi
|
||||
|
||||
GV="2.24"
|
||||
MV="4.5.2"
|
||||
PULSE_PATCHES="winepulse-patches-1.7.10"
|
||||
COMPHOLIO_P="wine-staging-${PV}"
|
||||
WINE_GENTOO="wine-gentoo-2013.06.24"
|
||||
DESCRIPTION="Free implementation of Windows(tm) on Unix"
|
||||
HOMEPAGE="http://www.winehq.org/"
|
||||
@ -34,12 +34,13 @@ SRC_URI="${SRC_URI}
|
||||
abi_x86_64? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86_64.msi )
|
||||
)
|
||||
mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi )
|
||||
pulseaudio? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${PULSE_PATCHES}.tar.bz2 )
|
||||
pipelight? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${COMPHOLIO_P}.tar.gz )
|
||||
pulseaudio? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${COMPHOLIO_P}.tar.gz )
|
||||
http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2"
|
||||
|
||||
LICENSE="LGPL-2.1"
|
||||
SLOT="0"
|
||||
IUSE="+abi_x86_32 +abi_x86_64 +alsa capi cups custom-cflags dos elibc_glibc +fontconfig +gecko gphoto2 gsm gstreamer +jpeg lcms ldap +mono mp3 ncurses netapi nls odbc openal opencl +opengl osmesa oss +perl +png +prelink pulseaudio +realtime +run-exes samba scanner selinux +ssl test +threads +truetype +udisks v4l +X xcomposite xinerama +xml"
|
||||
IUSE="+abi_x86_32 +abi_x86_64 +alsa capi cups custom-cflags dos elibc_glibc +fontconfig +gecko gphoto2 gsm gstreamer +jpeg lcms ldap +mono mp3 ncurses netapi nls odbc openal opencl +opengl osmesa oss +perl pipelight +png +prelink pulseaudio +realtime +run-exes samba scanner selinux +ssl test +threads +truetype +udisks v4l +X xcomposite xinerama +xml"
|
||||
REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )
|
||||
test? ( abi_x86_32 )
|
||||
elibc_glibc? ( threads )
|
||||
@ -83,6 +84,7 @@ NATIVE_DEPEND="
|
||||
nls? ( sys-devel/gettext )
|
||||
odbc? ( dev-db/unixODBC:= )
|
||||
osmesa? ( media-libs/mesa[osmesa] )
|
||||
pipelight? ( sys-apps/attr )
|
||||
pulseaudio? ( media-sound/pulseaudio )
|
||||
xml? ( dev-libs/libxml2 dev-libs/libxslt )
|
||||
scanner? ( media-gfx/sane-backends:= )
|
||||
@ -97,100 +99,133 @@ COMMON_DEPEND="
|
||||
abi_x86_64? ( ${NATIVE_DEPEND} )
|
||||
abi_x86_32? (
|
||||
truetype? ( || (
|
||||
>=app-emulation/emul-linux-x86-xlibs-2.1[development]
|
||||
>=media-libs/freetype-2.0.0[abi_x86_32]
|
||||
>=app-emulation/emul-linux-x86-xlibs-2.1[development,-abi_x86_32(-)]
|
||||
>=media-libs/freetype-2.5.0.1[abi_x86_32(-)]
|
||||
) )
|
||||
ncurses? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
sys-libs/ncurses[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=sys-libs/ncurses-5.9-r3[abi_x86_32(-)]
|
||||
) )
|
||||
udisks? ( || (
|
||||
>=app-emulation/emul-linux-x86-baselibs-20130224[development]
|
||||
sys-apps/dbus[abi_x86_32]
|
||||
>=app-emulation/emul-linux-x86-baselibs-20130224[development,-abi_x86_32(-)]
|
||||
>=sys-apps/dbus-1.6.18-r1[abi_x86_32(-)]
|
||||
) )
|
||||
fontconfig? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
media-libs/fontconfig[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)]
|
||||
>=media-libs/fontconfig-2.10.92[abi_x86_32(-)]
|
||||
) )
|
||||
gphoto2? ( || (
|
||||
app-emulation/emul-linux-x86-medialibs[development,-abi_x86_32(-)]
|
||||
>=media-libs/libgphoto2-2.5.3.1[abi_x86_32(-)]
|
||||
) )
|
||||
gphoto2? (
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
)
|
||||
openal? ( || (
|
||||
app-emulation/emul-linux-x86-sdl[development]
|
||||
media-libs/openal[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-sdl[development,-abi_x86_32(-)]
|
||||
>=media-libs/openal-1.15.1[abi_x86_32(-)]
|
||||
) )
|
||||
gstreamer? (
|
||||
app-emulation/emul-linux-x86-gstplugins
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
)
|
||||
X? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
gstreamer? ( || (
|
||||
app-emulation/emul-linux-x86-medialibs[development,-abi_x86_32(-)]
|
||||
(
|
||||
x11-libs/libXcursor[abi_x86_32]
|
||||
x11-libs/libXext[abi_x86_32]
|
||||
x11-libs/libXrandr[abi_x86_32]
|
||||
x11-libs/libXi[abi_x86_32]
|
||||
x11-libs/libXxf86vm[abi_x86_32]
|
||||
>=media-libs/gstreamer-0.10.36-r2:0.10[abi_x86_32(-)]
|
||||
>=media-libs/gst-plugins-base-0.10.36:0.10[abi_x86_32(-)]
|
||||
)
|
||||
) )
|
||||
X? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)]
|
||||
(
|
||||
>=x11-libs/libXcursor-1.1.14[abi_x86_32(-)]
|
||||
>=x11-libs/libXext-1.3.2[abi_x86_32(-)]
|
||||
>=x11-libs/libXrandr-1.4.2[abi_x86_32(-)]
|
||||
>=x11-libs/libXi-1.7.2[abi_x86_32(-)]
|
||||
>=x11-libs/libXxf86vm-1.1.3[abi_x86_32(-)]
|
||||
)
|
||||
) )
|
||||
xinerama? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
x11-libs/libXinerama[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)]
|
||||
>=x11-libs/libXinerama-1.1.3[abi_x86_32(-)]
|
||||
) )
|
||||
alsa? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[alsa,development]
|
||||
media-libs/alsa-lib[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-soundlibs[alsa,development,-abi_x86_32(-)]
|
||||
>=media-libs/alsa-lib-1.0.27.2[abi_x86_32(-)]
|
||||
) )
|
||||
cups? ( app-emulation/emul-linux-x86-baselibs )
|
||||
opencl? ( virtual/opencl[abi_x86_32] )
|
||||
cups? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs
|
||||
>=net-print/cups-1.7.1-r1[abi_x86_32(-)]
|
||||
) )
|
||||
opencl? ( >=virtual/opencl-0-r3[abi_x86_32(-)] )
|
||||
opengl? ( || (
|
||||
app-emulation/emul-linux-x86-opengl[development]
|
||||
app-emulation/emul-linux-x86-opengl[development,-abi_x86_32(-)]
|
||||
(
|
||||
virtual/glu[abi_x86_32]
|
||||
virtual/opengl[abi_x86_32]
|
||||
>=virtual/glu-9.0-r1[abi_x86_32(-)]
|
||||
>=virtual/opengl-7.0-r1[abi_x86_32(-)]
|
||||
)
|
||||
) )
|
||||
gsm? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
media-sound/gsm[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-soundlibs[development,-abi_x86_32(-)]
|
||||
>=media-sound/gsm-1.0.13-r1[abi_x86_32(-)]
|
||||
) )
|
||||
jpeg? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
virtual/jpeg:0[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=virtual/jpeg-0-r2:0[abi_x86_32(-)]
|
||||
) )
|
||||
ldap? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=net-nds/openldap-2.4.38-r1:=[abi_x86_32(-)]
|
||||
) )
|
||||
ldap? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
lcms? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
media-libs/lcms:2[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=media-libs/lcms-2.5:2[abi_x86_32(-)]
|
||||
) )
|
||||
mp3? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
>=media-sound/mpg123-1.5.0[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-soundlibs[development,-abi_x86_32(-)]
|
||||
>=media-sound/mpg123-1.15.4[abi_x86_32(-)]
|
||||
) )
|
||||
netapi? ( >=net-fs/samba-3.6.23-r1[netapi(+),abi_x86_32(-)] )
|
||||
nls? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=sys-devel/gettext-0.18.3.2[abi_x86_32(-)]
|
||||
) )
|
||||
odbc? ( || (
|
||||
app-emulation/emul-linux-x86-db[development,-abi_x86_32(-)]
|
||||
>=dev-db/unixODBC-2.3.2:=[abi_x86_32(-)]
|
||||
) )
|
||||
nls? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
odbc? ( app-emulation/emul-linux-x86-db[development] )
|
||||
osmesa? ( || (
|
||||
>=app-emulation/emul-linux-x86-opengl-20121028[development]
|
||||
media-libs/mesa[osmesa,abi_x86_32]
|
||||
>=app-emulation/emul-linux-x86-opengl-20121028[development,-abi_x86_32(-)]
|
||||
>=media-libs/mesa-9.1.6[osmesa,abi_x86_32(-)]
|
||||
) )
|
||||
pipelight? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=sys-apps/attr-2.4.47-r1[abi_x86_32(-)]
|
||||
) )
|
||||
pulseaudio? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
>=media-sound/pulseaudio-4.0-r1[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-soundlibs[development,-abi_x86_32(-)]
|
||||
>=media-sound/pulseaudio-5.0[abi_x86_32(-)]
|
||||
) )
|
||||
xml? ( || (
|
||||
>=app-emulation/emul-linux-x86-baselibs-20131008[development,-abi_x86_32(-)]
|
||||
(
|
||||
>=dev-libs/libxml2-2.9.1-r4[abi_x86_32(-)]
|
||||
>=dev-libs/libxslt-1.1.28-r1[abi_x86_32(-)]
|
||||
)
|
||||
) )
|
||||
scanner? ( || (
|
||||
app-emulation/emul-linux-x86-medialibs[development,-abi_x86_32(-)]
|
||||
>=media-gfx/sane-backends-1.0.23:=[abi_x86_32(-)]
|
||||
) )
|
||||
ssl? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=net-libs/gnutls-2.12.23-r6:=[abi_x86_32(-)]
|
||||
) )
|
||||
xml? ( >=app-emulation/emul-linux-x86-baselibs-20131008[development] )
|
||||
scanner? ( app-emulation/emul-linux-x86-medialibs[development] )
|
||||
ssl? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
png? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
media-libs/libpng:0[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)]
|
||||
>=media-libs/libpng-1.6.10:0[abi_x86_32(-)]
|
||||
) )
|
||||
v4l? ( || (
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
media-libs/libv4l[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-medialibs[development,-abi_x86_32(-)]
|
||||
>=media-libs/libv4l-0.9.5[abi_x86_32(-)]
|
||||
) )
|
||||
xcomposite? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
x11-libs/libXcomposite[abi_x86_32]
|
||||
app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)]
|
||||
>=x11-libs/libXcomposite-0.4.4-r1[abi_x86_32(-)]
|
||||
) )
|
||||
)
|
||||
)"
|
||||
@ -256,7 +291,8 @@ src_unpack() {
|
||||
unpack ${MY_P}.tar.bz2
|
||||
fi
|
||||
|
||||
use pulseaudio && unpack "${PULSE_PATCHES}.tar.bz2"
|
||||
use pipelight || use pulseaudio && unpack "${COMPHOLIO_P}.tar.gz"
|
||||
|
||||
unpack "${WINE_GENTOO}.tar.bz2"
|
||||
|
||||
l10n_find_plocales_changes "${S}/po" "" ".po"
|
||||
@ -264,17 +300,46 @@ src_unpack() {
|
||||
|
||||
src_prepare() {
|
||||
local md5="$(md5sum server/protocol.def)"
|
||||
local f
|
||||
local PATCHES=(
|
||||
"${FILESDIR}"/${PN}-1.5.26-winegcc.patch #260726
|
||||
"${FILESDIR}"/${PN}-1.4_rc2-multilib-portage.patch #395615
|
||||
"${FILESDIR}"/${PN}-1.7.2-osmesa-check.patch #429386
|
||||
"${FILESDIR}"/${PN}-1.7.12-osmesa-check.patch #429386
|
||||
"${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508
|
||||
"${FILESDIR}"/${PN}-1.7.9-hcce.patch #46554
|
||||
)
|
||||
use pulseaudio && PATCHES+=(
|
||||
"../${PULSE_PATCHES}"/*.patch #421365
|
||||
)
|
||||
local COMPHOLIO_MAKE_ARGS="-W fonts-Missing_Fonts.ok"
|
||||
|
||||
use pulseaudio || COMPHOLIO_MAKE_ARGS="${COMPHOLIO_MAKE_ARGS} -W winepulse-PulseAudio_Support.ok"
|
||||
if use gstreamer; then
|
||||
# See http://bugs.winehq.org/show_bug.cgi?id=30557
|
||||
ewarn "Applying experimental patch to fix GStreamer support. Note that"
|
||||
ewarn "this patch has been reported to cause crashes in certain games."
|
||||
|
||||
PATCHES+=( "${FILESDIR}/${PN}-1.7.28-gstreamer-v4.patch" )
|
||||
fi
|
||||
if use pipelight; then
|
||||
ewarn "Applying the unofficial Compholio patchset for Pipelight support,"
|
||||
ewarn "which is unsupported by Wine developers. Please don't report bugs"
|
||||
ewarn "to Wine bugzilla unless you can reproduce them with USE=-pipelight"
|
||||
|
||||
# epatch doesn't support binary patches and we ship our own pulse patches
|
||||
emake -C "${WORKDIR}/${COMPHOLIO_P}/patches" \
|
||||
$(echo ${COMPHOLIO_MAKE_ARGS}) \
|
||||
series
|
||||
|
||||
PATCHES+=( $(sed -e "s:^:${WORKDIR}/${COMPHOLIO_P}/patches/:" \
|
||||
"${WORKDIR}/${COMPHOLIO_P}/patches/series") )
|
||||
|
||||
# epatch doesn't support binary patches
|
||||
ebegin "Applying Compholio font patches"
|
||||
for f in "${WORKDIR}/${COMPHOLIO_P}/patches/fonts-Missing_Fonts"/*.patch; do
|
||||
"../${COMPHOLIO_P}/debian/tools/gitapply.sh" < "${f}" \
|
||||
|| die "Failed to apply ${f}"
|
||||
done
|
||||
eend
|
||||
elif use pulseaudio; then
|
||||
PATCHES+=( "../${COMPHOLIO_P}/patches/winepulse-PulseAudio_Support"/*.patch )
|
||||
fi
|
||||
autotools-utils_src_prepare
|
||||
|
||||
if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then
|
||||
@ -292,33 +357,15 @@ src_prepare() {
|
||||
l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS
|
||||
}
|
||||
|
||||
do_configure() {
|
||||
local myeconfargs=( "${myeconfargs[@]}" )
|
||||
|
||||
if use amd64; then
|
||||
if [[ ${ABI} == amd64 ]]; then
|
||||
myeconfargs+=( --enable-win64 )
|
||||
else
|
||||
use netapi && ewarn "Disabling netapi in wine32; see https://bugs.gentoo.org/494394"
|
||||
# We currently don't have 32-bit libnetapi on amd64; #494394
|
||||
myeconfargs+=(
|
||||
--without-netapi
|
||||
--disable-win64
|
||||
)
|
||||
fi
|
||||
|
||||
# Note: using --with-wine64 results in problems with multilib.eclass
|
||||
# CC/LD hackery. We're using separate tools instead.
|
||||
fi
|
||||
|
||||
autotools-utils_src_configure
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
export LDCONFIG=/bin/true
|
||||
use custom-cflags || strip-flags
|
||||
|
||||
local myeconfargs=( # common
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
local myconf=(
|
||||
--sysconfdir=/etc/wine
|
||||
$(use_with alsa)
|
||||
$(use_with capi)
|
||||
@ -342,6 +389,7 @@ src_configure() {
|
||||
$(use_with opengl)
|
||||
$(use_with osmesa)
|
||||
$(use_with oss)
|
||||
--without-pcap
|
||||
$(use_with png)
|
||||
$(use_with threads pthread)
|
||||
$(use_with scanner sane)
|
||||
@ -355,44 +403,55 @@ src_configure() {
|
||||
$(use_with xml xslt)
|
||||
)
|
||||
|
||||
use pulseaudio && myeconfargs+=( --with-pulse )
|
||||
use pulseaudio && myconf+=( --with-pulse )
|
||||
use pipelight && myconf+=( --with-xattr )
|
||||
|
||||
if use amd64 && use abi_x86_32; then
|
||||
# Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
|
||||
# set AR and RANLIB to make QA scripts happy; #483342
|
||||
tc-export PKG_CONFIG AR RANLIB
|
||||
local PKG_CONFIG AR RANLIB
|
||||
# Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
|
||||
# set AR and RANLIB to make QA scripts happy; #483342
|
||||
tc-export PKG_CONFIG AR RANLIB
|
||||
|
||||
if use amd64; then
|
||||
if [[ ${ABI} == amd64 ]]; then
|
||||
myconf+=( --enable-win64 )
|
||||
else
|
||||
myconf+=( --disable-win64 )
|
||||
fi
|
||||
|
||||
# Note: using --with-wine64 results in problems with multilib.eclass
|
||||
# CC/LD hackery. We're using separate tools instead.
|
||||
fi
|
||||
|
||||
multilib_parallel_foreach_abi do_configure
|
||||
ECONF_SOURCE=${S} \
|
||||
econf "${myconf[@]}"
|
||||
emake depend
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
autotools-multilib_src_compile depend
|
||||
autotools-multilib_src_compile all
|
||||
}
|
||||
|
||||
src_test() {
|
||||
if [[ $(id -u) == 0 ]]; then
|
||||
ewarn "Skipping tests since they cannot be run under the root user."
|
||||
ewarn "To run the test ${PN} suite, add userpriv to FEATURES in make.conf"
|
||||
return
|
||||
fi
|
||||
|
||||
multilib_src_test() {
|
||||
# FIXME: win32-only; wine64 tests fail with "could not find the Wine loader"
|
||||
multilib_toolchain_setup x86
|
||||
local BUILD_DIR="${S}-${ABI}"
|
||||
cd "${BUILD_DIR}" || die
|
||||
WINEPREFIX="${T}/.wine-${ABI}" Xemake test
|
||||
if [[ ${ABI} == x86 ]]; then
|
||||
if [[ $(id -u) == 0 ]]; then
|
||||
ewarn "Skipping tests since they cannot be run under the root user."
|
||||
ewarn "To run the test ${PN} suite, add userpriv to FEATURES in make.conf"
|
||||
return
|
||||
fi
|
||||
|
||||
WINEPREFIX="${T}/.wine-${ABI}" \
|
||||
Xemake test
|
||||
fi
|
||||
}
|
||||
|
||||
src_install() {
|
||||
multilib_src_install_all() {
|
||||
local DOCS=( ANNOUNCE AUTHORS README )
|
||||
local l
|
||||
add_locale_docs() {
|
||||
local locale_doc="documentation/README.$1"
|
||||
[[ ! -e ${locale_doc} ]] || DOCS=( "${DOCS[@]}" ${locale_doc} )
|
||||
[[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} )
|
||||
}
|
||||
l10n_for_each_locale_do add_locale_docs
|
||||
autotools-multilib_src_install
|
||||
|
||||
einstalldocs
|
||||
prune_libtool_files --all
|
||||
|
||||
emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}"
|
||||
if use gecko ; then
|
Loading…
Reference in New Issue
Block a user