diff options
author | Alexandre Rostovtsev <tetromino@gentoo.org> | 2015-03-08 07:00:24 +0000 |
---|---|---|
committer | Alexandre Rostovtsev <tetromino@gentoo.org> | 2015-03-08 07:00:24 +0000 |
commit | 74a808dcfb38c7f9870ffee6d81b98607cccd9ca (patch) | |
tree | 7a42b853e6f00e4bc8189527842b7e8ab9d9d48c /app-emulation/wine | |
parent | Version bump. (diff) | |
download | gentoo-2-74a808dcfb38c7f9870ffee6d81b98607cccd9ca.tar.gz gentoo-2-74a808dcfb38c7f9870ffee6d81b98607cccd9ca.tar.bz2 gentoo-2-74a808dcfb38c7f9870ffee6d81b98607cccd9ca.zip |
Belated version bump (bug #536380), see https://www.winehq.org/announce/1.7.38 for the announcement. Sync changes from NP-Hardass's overlay and add him as proxy maintainer. Move big gstreamer patches out of filesdir and into compressed downloads.
(Portage version: 2.2.18/cvs/Linux x86_64, signed Manifest commit with key 0x18E5B6F2D8D5EC8D)
Diffstat (limited to 'app-emulation/wine')
-rw-r--r-- | app-emulation/wine/ChangeLog | 14 | ||||
-rw-r--r-- | app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch | 629 | ||||
-rw-r--r-- | app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-post.patch | 50 | ||||
-rw-r--r-- | app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-pre.patch | 48 | ||||
-rw-r--r-- | app-emulation/wine/metadata.xml | 11 | ||||
-rw-r--r-- | app-emulation/wine/wine-1.7.28.ebuild | 7 | ||||
-rw-r--r-- | app-emulation/wine/wine-1.7.29.ebuild | 7 | ||||
-rw-r--r-- | app-emulation/wine/wine-1.7.33.ebuild | 7 | ||||
-rw-r--r-- | app-emulation/wine/wine-1.7.38.ebuild | 530 | ||||
-rw-r--r-- | app-emulation/wine/wine-9999.ebuild | 130 |
10 files changed, 746 insertions, 687 deletions
diff --git a/app-emulation/wine/ChangeLog b/app-emulation/wine/ChangeLog index 6da5b806d25c..bbfae8463922 100644 --- a/app-emulation/wine/ChangeLog +++ b/app-emulation/wine/ChangeLog @@ -1,6 +1,18 @@ # ChangeLog for app-emulation/wine # Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/ChangeLog,v 1.526 2015/01/01 21:01:23 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/ChangeLog,v 1.527 2015/03/08 07:00:24 tetromino Exp $ + +*wine-1.7.38 (08 Mar 2015) + + 08 Mar 2015; Alexandre Rostovtsev <tetromino@gentoo.org> wine-1.7.28.ebuild, + wine-1.7.29.ebuild, wine-1.7.33.ebuild, +wine-1.7.38.ebuild, + wine-9999.ebuild, -files/wine-1.7.28-gstreamer-v4.patch, + +files/wine-1.7.38-gstreamer-v5-staging-post.patch, + +files/wine-1.7.38-gstreamer-v5-staging-pre.patch, metadata.xml: + Belated version bump (bug #536380), see + https://www.winehq.org/announce/1.7.38 for the announcement. Sync changes + from NP-Hardass's overlay and add him as proxy maintainer. Move big gstreamer + patches out of filesdir and into compressed downloads. *wine-1.7.33 (01 Jan 2015) diff --git a/app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch b/app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch deleted file mode 100644 index fbf930bd0280..000000000000 --- a/app-emulation/wine/files/wine-1.7.28-gstreamer-v4.patch +++ /dev/null @@ -1,629 +0,0 @@ -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 - diff --git a/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-post.patch b/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-post.patch new file mode 100644 index 000000000000..3e597baba24c --- /dev/null +++ b/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-post.patch @@ -0,0 +1,50 @@ +From 0f579172142d290dc48b9d466f9cd699987aacf3 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner <sebastian@fds-team.de> +Date: Wed, 25 Feb 2015 22:45:42 +0100 +Subject: [PATCH] ntdll: Fix race-condition when threads are killed during + shutdown. + +When exit_thread is executed, nb_threads is decremented before the thread is +fully shutdown. When another thread runs ExitProcess() this will cause a SIGQUIT +signal to all threads, effectively decrementing nb_threads twice. The process +will terminate with a wrong exitcode then because the refcount reaches zero too +early. + +Currently Wine has no locking protection of LdrShutdownProcess(), so it can +only be executed safely when all other threads have terminated before. Most +likely there are more Wine bugs in this area, but the attached patch should +fix the most critical one (messed up refcounting of threads) for now. + +[Alexandre Rostovtsev <tetromino@gentoo.org> : rebase to be applied after + Maarten Lankhorst's "override pthreads to fix gstreamer v5" patch.] +--- + dlls/ntdll/thread.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c +index 936cabe..98e679e 100755 +--- a/dlls/ntdll/thread.c ++++ b/dlls/ntdll/thread.c +@@ -459,6 +459,7 @@ static void exit_thread_common( int status ) + { + #ifndef __linux__ + static void *prev_teb; ++ sigset_t sigset; + TEB *teb; + #endif + +@@ -495,6 +496,11 @@ static void exit_thread_common( int status ) + signal_free_thread( teb ); + } + } ++ ++ sigemptyset( &sigset ); ++ sigaddset( &sigset, SIGQUIT ); ++ pthread_sigmask( SIG_BLOCK, &sigset, NULL ); ++ if (interlocked_xchg_add( &nb_threads, -1 ) <= 1) _exit( status ); + #else + reap_thread(NtCurrentTeb()); + #endif +-- +2.3.1 + diff --git a/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-pre.patch b/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-pre.patch new file mode 100644 index 000000000000..eee42ff900f8 --- /dev/null +++ b/app-emulation/wine/files/wine-1.7.38-gstreamer-v5-staging-pre.patch @@ -0,0 +1,48 @@ +From 0d92921d264d5d0d1041c66353f022f1bc88577f Mon Sep 17 00:00:00 2001 +From: Alexandre Rostovtsev <tetromino@gentoo.org> +Date: Sun, 8 Mar 2015 00:10:31 -0500 +Subject: [PATCH] Revert "ntdll: Fix race-condition when threads are killed + during shutdown." + +This reverts Sebastian Lackner's Wine-Staging patch to allow Maarten +Lankhorst's "override pthreads to fix gstreamer v5" to apply +--- + dlls/ntdll/thread.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c +index 74e64c9..3696c8e 100644 +--- a/dlls/ntdll/thread.c ++++ b/dlls/ntdll/thread.c +@@ -370,7 +370,6 @@ void terminate_thread( int status ) + void exit_thread( int status ) + { + static void *prev_teb; +- sigset_t sigset; + TEB *teb; + + if (status) /* send the exit code to the server (0 is already the default) */ +@@ -384,7 +383,7 @@ void exit_thread( int status ) + SERVER_END_REQ; + } + +- if (interlocked_xchg_add( &nb_threads, 0 ) <= 1) ++ if (interlocked_xchg_add( &nb_threads, -1 ) <= 1) + { + LdrShutdownProcess(); + exit( status ); +@@ -406,11 +405,6 @@ void exit_thread( int status ) + } + } + +- sigemptyset( &sigset ); +- sigaddset( &sigset, SIGQUIT ); +- pthread_sigmask( SIG_BLOCK, &sigset, NULL ); +- if (interlocked_xchg_add( &nb_threads, -1 ) <= 1) _exit( status ); +- + close( ntdll_get_thread_data()->wait_fd[0] ); + close( ntdll_get_thread_data()->wait_fd[1] ); + close( ntdll_get_thread_data()->reply_fd ); +-- +2.3.1 + diff --git a/app-emulation/wine/metadata.xml b/app-emulation/wine/metadata.xml index 2c9b917d9e74..34b2fcd2361d 100644 --- a/app-emulation/wine/metadata.xml +++ b/app-emulation/wine/metadata.xml @@ -2,6 +2,12 @@ <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> <herd>wine</herd> +<herd>proxy-maintainers</herd> +<maintainer> + <email>np.hardass@gmail.com</email> + <name>NP-Hardass</name> + <description>Proxied co-maintainer</description> +</maintainer> <longdescription> Wine is an Open Source implementation of the Windows API on top of X and Unix. @@ -18,14 +24,15 @@ Think of Wine as a compatibility layer for running Windows programs. Wine does n <flag name='osmesa'>Add support for OpenGL in bitmaps using libOSMesa</flag> <flag name='pcap'>Support packet capture software (e.g. wireshark)</flag> <flag name='perl'>Install helpers written in perl (winedump/winemaker)</flag> - <flag name='pipelight'>Apply unofficial Compholio patches for Pipelight/Silverlight support; - use at your own peril</flag> + <flag name='pipelight'>Apply unofficial Wine-Staging patches for Pipelight/Silverlight support</flag> <flag name='prelink'>Run prelink on DLLs during build -- do not disable if you do not know what this means as it can break things at runtime</flag> <flag name='realtime'>Pull in <pkg>sys-auth/rtkit</pkg> for low-latency pulseaudio support</flag> <flag name='run-exes'>Use Wine to open and run .EXE and .MSI files</flag> + <flag name='s3tc'>Pull in <pkg>media-libs/libtxc_dxtn</pkg> for DXTn texture compression, needed for many games</flag> <flag name='samba'>Add support for NTLM auth. see http://wiki.winehq.org/NtlmAuthSetupGuide and http://wiki.winehq.org/NtlmSigningAndSealing</flag> + <flag name='staging'>Apply unofficial Wine-Staging patches for advanced feature support that haven't made it into upstream Wine yet</flag> <flag name='win32'>Build a 32bit version of Wine (won't run Win64 binaries)</flag> <flag name='win64'>Build a 64bit version of Wine (won't run Win32 binaries)</flag> </use> diff --git a/app-emulation/wine/wine-1.7.28.ebuild b/app-emulation/wine/wine-1.7.28.ebuild index 37ec58490f6d..75bcf3d87a1a 100644 --- a/app-emulation/wine/wine-1.7.28.ebuild +++ b/app-emulation/wine/wine-1.7.28.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.28.ebuild,v 1.2 2015/01/01 21:01:23 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.28.ebuild,v 1.3 2015/03/08 07:00:24 tetromino Exp $ EAPI="5" @@ -26,6 +26,7 @@ GV="2.24" MV="4.5.2" COMPHOLIO_P="wine-compholio-${PV}" WINE_GENTOO="wine-gentoo-2013.06.24" +GST_P="wine-1.7.28-gstreamer-v4" DESCRIPTION="Free implementation of Windows(tm) on Unix" HOMEPAGE="http://www.winehq.org/" SRC_URI="${SRC_URI} @@ -36,6 +37,7 @@ SRC_URI="${SRC_URI} mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi ) pipelight? ( https://github.com/compholio/wine-compholio-daily/archive/v${PV}.tar.gz -> ${COMPHOLIO_P}.tar.gz ) pulseaudio? ( https://github.com/compholio/wine-compholio-daily/archive/v${PV}.tar.gz -> ${COMPHOLIO_P}.tar.gz ) + gstreamer? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 ) http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2" LICENSE="LGPL-2.1" @@ -295,6 +297,7 @@ src_unpack() { use pipelight || use pulseaudio && unpack "${COMPHOLIO_P}.tar.gz" unpack "${WINE_GENTOO}.tar.bz2" + use gstreamer && unpack "${GST_P}.patch.bz2" l10n_find_plocales_changes "${S}/po" "" ".po" } @@ -316,7 +319,7 @@ src_prepare() { 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" ) + PATCHES+=( "${WORKDIR}/${GST_P}.patch" ) fi if use pipelight; then ewarn "Applying the unofficial Compholio patchset for Pipelight support," diff --git a/app-emulation/wine/wine-1.7.29.ebuild b/app-emulation/wine/wine-1.7.29.ebuild index 021ef9048c67..6594da7ef5bd 100644 --- a/app-emulation/wine/wine-1.7.29.ebuild +++ b/app-emulation/wine/wine-1.7.29.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.29.ebuild,v 1.2 2015/01/01 21:01:23 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.29.ebuild,v 1.3 2015/03/08 07:00:24 tetromino Exp $ EAPI="5" @@ -26,6 +26,7 @@ GV="2.24" MV="4.5.2" COMPHOLIO_P="wine-staging-${PV}" WINE_GENTOO="wine-gentoo-2013.06.24" +GST_P="wine-1.7.28-gstreamer-v4" DESCRIPTION="Free implementation of Windows(tm) on Unix" HOMEPAGE="http://www.winehq.org/" SRC_URI="${SRC_URI} @@ -36,6 +37,7 @@ SRC_URI="${SRC_URI} mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi ) 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 ) + gstreamer? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 ) http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2" LICENSE="LGPL-2.1" @@ -294,6 +296,7 @@ src_unpack() { use pipelight || use pulseaudio && unpack "${COMPHOLIO_P}.tar.gz" unpack "${WINE_GENTOO}.tar.bz2" + use gstreamer && unpack "${GST_P}.patch.bz2" l10n_find_plocales_changes "${S}/po" "" ".po" } @@ -315,7 +318,7 @@ src_prepare() { 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" ) + PATCHES+=( "${WORKDIR}/${GST_P}.patch" ) fi if use pipelight; then ewarn "Applying the unofficial Compholio patchset for Pipelight support," diff --git a/app-emulation/wine/wine-1.7.33.ebuild b/app-emulation/wine/wine-1.7.33.ebuild index dfa6477a7a79..6dda5b5031eb 100644 --- a/app-emulation/wine/wine-1.7.33.ebuild +++ b/app-emulation/wine/wine-1.7.33.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.33.ebuild,v 1.1 2015/01/01 21:01:23 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.33.ebuild,v 1.2 2015/03/08 07:00:24 tetromino Exp $ EAPI="5" @@ -26,6 +26,7 @@ GV="2.34" MV="4.5.4" COMPHOLIO_P="wine-staging-${PV}" WINE_GENTOO="wine-gentoo-2013.06.24" +GST_P="wine-1.7.28-gstreamer-v4" DESCRIPTION="Free implementation of Windows(tm) on Unix" HOMEPAGE="http://www.winehq.org/" SRC_URI="${SRC_URI} @@ -36,6 +37,7 @@ SRC_URI="${SRC_URI} mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi ) 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 ) + gstreamer? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 ) http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2" LICENSE="LGPL-2.1" @@ -296,6 +298,7 @@ src_unpack() { use pipelight || use pulseaudio && unpack "${COMPHOLIO_P}.tar.gz" unpack "${WINE_GENTOO}.tar.bz2" + use gstreamer && unpack "${GST_P}.patch.bz2" l10n_find_plocales_changes "${S}/po" "" ".po" } @@ -317,7 +320,7 @@ src_prepare() { 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" ) + PATCHES+=( "${WORKDIR}/${GST_P}.patch" ) fi if use pipelight; then ewarn "Applying the unofficial Compholio patchset for Pipelight support," diff --git a/app-emulation/wine/wine-1.7.38.ebuild b/app-emulation/wine/wine-1.7.38.ebuild new file mode 100644 index 000000000000..78210970cd41 --- /dev/null +++ b/app-emulation/wine/wine-1.7.38.ebuild @@ -0,0 +1,530 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.38.ebuild,v 1.1 2015/03/08 07:00:24 tetromino Exp $ + +EAPI="5" + +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-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" + EGIT_BRANCH="master" + inherit git-r3 + SRC_URI="" + #KEYWORDS="" +else + MY_P="${PN}-${PV/_/-}" + SRC_URI="mirror://sourceforge/${PN}/Source/${MY_P}.tar.bz2" + KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd" + S=${WORKDIR}/${MY_P} +fi + +GV="2.36" +MV="4.5.6" +STAGING_P="wine-staging-${PV}" +STAGING_DIR="${WORKDIR}/${STAGING_P}" +WINE_GENTOO="wine-gentoo-2015.03.07" +GST_P="wine-1.7.34-gstreamer-v5" +DESCRIPTION="Free implementation of Windows(tm) on Unix" +HOMEPAGE="http://www.winehq.org/" +SRC_URI="${SRC_URI} + gecko? ( + abi_x86_32? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86.msi ) + 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 ) + gstreamer? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 ) + http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2" + +if [[ ${PV} == "9999" ]] ; then + STAGING_EGIT_REPO_URI="git://github.com/wine-compholio/wine-staging.git" +else + SRC_URI="${SRC_URI} + staging? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz ) + pulseaudio? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz )" +fi + +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 pcap pipelight +png +prelink pulseaudio +realtime +run-exes s3tc samba scanner selinux +ssl staging test +threads +truetype +udisks v4l vaapi +X +xcomposite xinerama +xml" +REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 ) + test? ( abi_x86_32 ) + elibc_glibc? ( threads ) + mono? ( abi_x86_32 ) + pipelight? ( staging ) + s3tc? ( staging ) + vaapi? ( staging ) + osmesa? ( opengl )" #286560 + +# FIXME: the test suite is unsuitable for us; many tests require net access +# or fail due to Xvfb's opengl limitations. +RESTRICT="test" + +NATIVE_DEPEND=" + truetype? ( >=media-libs/freetype-2.0.0 ) + capi? ( net-dialup/capi4k-utils ) + ncurses? ( >=sys-libs/ncurses-5.2:= ) + udisks? ( sys-apps/dbus ) + fontconfig? ( media-libs/fontconfig:= ) + gphoto2? ( media-libs/libgphoto2:= ) + openal? ( media-libs/openal:= ) + gstreamer? ( media-libs/gstreamer:0.10 media-libs/gst-plugins-base:0.10 ) + X? ( + x11-libs/libXcursor + x11-libs/libXext + x11-libs/libXrandr + x11-libs/libXi + x11-libs/libXxf86vm + ) + xinerama? ( x11-libs/libXinerama ) + alsa? ( media-libs/alsa-lib ) + cups? ( net-print/cups:= ) + opencl? ( virtual/opencl ) + opengl? ( + virtual/glu + virtual/opengl + ) + gsm? ( media-sound/gsm:= ) + jpeg? ( virtual/jpeg:0= ) + ldap? ( net-nds/openldap:= ) + lcms? ( media-libs/lcms:2= ) + mp3? ( >=media-sound/mpg123-1.5.0 ) + netapi? ( net-fs/samba[netapi(+)] ) + nls? ( sys-devel/gettext ) + odbc? ( dev-db/unixODBC:= ) + osmesa? ( media-libs/mesa[osmesa] ) + pcap? ( net-libs/libpcap ) + staging? ( sys-apps/attr ) + pulseaudio? ( media-sound/pulseaudio ) + xml? ( dev-libs/libxml2 dev-libs/libxslt ) + scanner? ( media-gfx/sane-backends:= ) + ssl? ( net-libs/gnutls:= ) + png? ( media-libs/libpng:0= ) + v4l? ( media-libs/libv4l ) + vaapi? ( x11-libs/libva[X] ) + xcomposite? ( x11-libs/libXcomposite )" + +COMMON_DEPEND=" + !amd64? ( ${NATIVE_DEPEND} ) + amd64? ( + abi_x86_64? ( ${NATIVE_DEPEND} ) + abi_x86_32? ( + truetype? ( || ( + >=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,-abi_x86_32(-)] + >=sys-libs/ncurses-5.9-r3[abi_x86_32(-)] + ) ) + udisks? ( || ( + >=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,-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(-)] + ) ) + openal? ( || ( + 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-medialibs[development,-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,-abi_x86_32(-)] + >=x11-libs/libXinerama-1.1.3[abi_x86_32(-)] + ) ) + alsa? ( || ( + 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 + >=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,-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,-abi_x86_32(-)] + >=media-sound/gsm-1.0.13-r1[abi_x86_32(-)] + ) ) + jpeg? ( || ( + 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(-)] + ) ) + lcms? ( || ( + 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,-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(-)] + ) ) + osmesa? ( || ( + >=app-emulation/emul-linux-x86-opengl-20121028[development,-abi_x86_32(-)] + >=media-libs/mesa-9.1.6[osmesa,abi_x86_32(-)] + ) ) + pcap? ( net-libs/libpcap[abi_x86_32(-)] ) + pulseaudio? ( || ( + app-emulation/emul-linux-x86-soundlibs[development,-abi_x86_32(-)] + >=media-sound/pulseaudio-5.0[abi_x86_32(-)] + ) ) + staging? ( || ( + app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)] + >=sys-apps/attr-2.4.47-r1[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(-)] + ) ) + png? ( || ( + 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,-abi_x86_32(-)] + >=media-libs/libv4l-0.9.5[abi_x86_32(-)] + ) ) + vaapi? ( x11-libs/libva[X,abi_x86_32(-)] ) + xcomposite? ( || ( + app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)] + >=x11-libs/libXcomposite-0.4.4-r1[abi_x86_32(-)] + ) ) + ) + )" + +RDEPEND="${COMMON_DEPEND} + dos? ( games-emulation/dosbox ) + perl? ( dev-lang/perl dev-perl/XML-Simple ) + s3tc? ( >=media-libs/libtxc_dxtn-1.0.1-r1[${MULTILIB_USEDEP}] ) + samba? ( >=net-fs/samba-3.0.25 ) + selinux? ( sec-policy/selinux-wine ) + udisks? ( sys-fs/udisks:2 ) + pulseaudio? ( realtime? ( sys-auth/rtkit ) )" + +# tools/make_requests requires perl +DEPEND="${COMMON_DEPEND} + amd64? ( abi_x86_32? ( !abi_x86_64? ( ${NATIVE_DEPEND} ) ) ) + staging? ( dev-lang/perl dev-perl/XML-Simple ) + X? ( + x11-proto/inputproto + x11-proto/xextproto + x11-proto/xf86vidmodeproto + ) + xinerama? ( x11-proto/xineramaproto ) + prelink? ( sys-devel/prelink ) + >=sys-kernel/linux-headers-2.6 + virtual/pkgconfig + virtual/yacc + sys-devel/flex" + +# These use a non-standard "Wine" category, which is provided by +# /etc/xdg/applications-merged/wine.menu +QA_DESKTOP_FILE="usr/share/applications/wine-browsedrive.desktop +usr/share/applications/wine-notepad.desktop +usr/share/applications/wine-uninstaller.desktop +usr/share/applications/wine-winecfg.desktop" + +wine_build_environment_check() { + [[ ${MERGE_TYPE} = "binary" ]] && return 0 + + if use abi_x86_64 && [[ $(( $(gcc-major-version) * 100 + $(gcc-minor-version) )) -lt 404 ]]; then + eerror "You need gcc-4.4+ to build 64-bit wine" + eerror + return 1 + fi + + if use abi_x86_32 && use opencl && [[ x$(eselect opencl show 2> /dev/null) = "xintel" ]]; then + eerror "You cannot build wine with USE=opencl because intel-ocl-sdk is 64-bit only." + eerror "See https://bugs.gentoo.org/487864 for more details." + eerror + return 1 + fi +} + +pkg_pretend() { + wine_build_environment_check || die +} + +pkg_setup() { + wine_build_environment_check || die +} + +src_unpack() { + if [[ ${PV} == "9999" ]] ; then + git-r3_src_unpack + if use staging || use pulseaudio; then + EGIT_REPO_URI=${STAGING_EGIT_REPO_URI} + unset ${PN}_LIVE_REPO; + EGIT_CHECKOUT_DIR=${STAGING_DIR} git-r3_src_unpack + fi + else + unpack ${MY_P}.tar.bz2 + use staging || use pulseaudio && unpack "${STAGING_P}.tar.gz" + fi + + unpack "${WINE_GENTOO}.tar.bz2" + use gstreamer && unpack "${GST_P}.patch.bz2" + + l10n_find_plocales_changes "${S}/po" "" ".po" +} + +src_prepare() { + local md5="$(md5sum server/protocol.def)" + local PATCHES=( + "${FILESDIR}"/${PN}-1.5.26-winegcc.patch #260726 + "${FILESDIR}"/${PN}-1.4_rc2-multilib-portage.patch #395615 + "${FILESDIR}"/${PN}-1.7.12-osmesa-check.patch #429386 + "${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508 + ) + 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." + + # Wine-Staging 1.7.38 "ntdll: Fix race-condition when threads are killed + # during shutdown" patch prevents the gstreamer patch from applying cleanly. + # So undo the staging patch, apply gstreamer, then re-apply rebased staging + # patch on top. + if use staging; then + PATCHES+=( + "${FILESDIR}/${PN}-1.7.38-gstreamer-v5-staging-pre.patch" + "${WORKDIR}/${GST_P}.patch" + "${FILESDIR}/${PN}-1.7.38-gstreamer-v5-staging-post.patch" ) + else + PATCHES+=( "${WORKDIR}/${GST_P}.patch" ) + fi + fi + if use staging; then + ewarn "Applying the unofficial Wine-Staging patchset which is unsupported" + ewarn "by Wine developers. Please don't report bugs to Wine bugzilla" + ewarn "unless you can reproduce them with USE=-staging" + + local STAGING_EXCLUDE="" + use pipelight || STAGING_EXCLUDE="${STAGING_EXCLUDE} -W Pipelight" + + # Launch wine-staging patcher in a subshell, using epatch as a backend, and gitapply.sh as a backend for binary patches + ebegin "Running Wine-Staging patch installer" + ( + set -- DESTDIR="${S}" --backend=epatch --no-autoconf --all ${STAGING_EXCLUDE} + cd "${STAGING_DIR}/patches" + source "${STAGING_DIR}/patches/patchinstall.sh" + ) + eend $? + elif use pulseaudio; then + PATCHES+=( "${STAGING_DIR}/patches/winepulse-PulseAudio_Support"/*.patch ) + fi + autotools-utils_src_prepare + + # Modification of the server protocol requires regenerating the server requests + if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then + einfo "server/protocol.def was patched; running tools/make_requests" + tools/make_requests || die #432348 + fi + sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die + if ! use run-exes; then + sed -i '/^MimeType/d' tools/wine.desktop || die #117785 + fi + + # hi-res default icon, #472990, http://bugs.winehq.org/show_bug.cgi?id=24652 + cp "${WORKDIR}"/${WINE_GENTOO}/icons/oic_winlogo.ico dlls/user32/resources/ || die + + l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS +} + +src_configure() { + export LDCONFIG=/bin/true + use custom-cflags || strip-flags + + multilib-minimal_src_configure +} + +multilib_src_configure() { + local myconf=( + --sysconfdir=/etc/wine + $(use_with alsa) + $(use_with capi) + $(use_with lcms cms) + $(use_with cups) + $(use_with ncurses curses) + $(use_with udisks dbus) + $(use_with fontconfig) + $(use_with ssl gnutls) + $(use_with gphoto2 gphoto) + $(use_with gsm) + $(use_with gstreamer) + --without-hal + $(use_with jpeg) + $(use_with ldap) + $(use_with mp3 mpg123) + $(use_with netapi) + $(use_with nls gettext) + $(use_with openal) + $(use_with opencl) + $(use_with opengl) + $(use_with osmesa) + $(use_with oss) + $(use_with pcap) + $(use_with png) + $(use_with threads pthread) + $(use_with scanner sane) + $(use_enable test tests) + $(use_with truetype freetype) + $(use_with v4l) + $(use_with X x) + $(use_with xcomposite) + $(use_with xinerama) + $(use_with xml) + $(use_with xml xslt) + ) + + if use pulseaudio || use staging; then + myconf+=( $(use_with pulseaudio pulse) ) + fi + use staging && myconf+=( + --with-xattr + $(use_with vaapi va) + ) + + 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 + + ECONF_SOURCE=${S} \ + econf "${myconf[@]}" + emake depend +} + +multilib_src_test() { + # FIXME: win32-only; wine64 tests fail with "could not find the Wine loader" + 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 +} + +multilib_src_install_all() { + local DOCS=( ANNOUNCE AUTHORS README ) + local l + add_locale_docs() { + local locale_doc="documentation/README.$1" + [[ ! -e ${locale_doc} ]] || DOCS+=( ${locale_doc} ) + } + l10n_for_each_locale_do add_locale_docs + + einstalldocs + prune_libtool_files --all + + emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}" + if use gecko ; then + insinto /usr/share/wine/gecko + use abi_x86_32 && doins "${DISTDIR}"/wine_gecko-${GV}-x86.msi + use abi_x86_64 && doins "${DISTDIR}"/wine_gecko-${GV}-x86_64.msi + fi + if use mono ; then + insinto /usr/share/wine/mono + doins "${DISTDIR}"/wine-mono-${MV}.msi + fi + if ! use perl ; then # winedump calls function_grep.pl, and winemaker is a perl script + rm "${D}"usr/bin/{wine{dump,maker},function_grep.pl} "${D}"usr/share/man/man1/wine{dump,maker}.1 || die + fi + + use abi_x86_32 && pax-mark psmr "${D}"usr/bin/wine{,-preloader} #255055 + use abi_x86_64 && pax-mark psmr "${D}"usr/bin/wine64{,-preloader} + + if use abi_x86_64 && ! use abi_x86_32; then + dosym /usr/bin/wine{64,} # 404331 + dosym /usr/bin/wine{64,}-preloader + fi + + # respect LINGUAS when installing man pages, #469418 + for l in de fr pl; do + use linguas_${l} || rm -r "${D}"usr/share/man/${l}* + done +} + +pkg_preinst() { + gnome2_icon_savelist +} + +pkg_postinst() { + gnome2_icon_cache_update + fdo-mime_desktop_database_update +} + +pkg_postrm() { + gnome2_icon_cache_update + fdo-mime_desktop_database_update +} diff --git a/app-emulation/wine/wine-9999.ebuild b/app-emulation/wine/wine-9999.ebuild index 3909223f07d9..74ff097449ff 100644 --- a/app-emulation/wine/wine-9999.ebuild +++ b/app-emulation/wine/wine-9999.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-9999.ebuild,v 1.173 2015/01/01 21:01:23 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-9999.ebuild,v 1.174 2015/03/08 07:00:24 tetromino Exp $ EAPI="5" @@ -12,7 +12,8 @@ inherit autotools-utils eutils fdo-mime flag-o-matic gnome2-utils l10n multilib if [[ ${PV} == "9999" ]] ; then EGIT_REPO_URI="git://source.winehq.org/git/wine.git" - inherit git-2 + EGIT_BRANCH="master" + inherit git-r3 SRC_URI="" #KEYWORDS="" else @@ -22,12 +23,12 @@ else S=${WORKDIR}/${MY_P} fi -GV="2.24" -MV="4.5.2" -PULSE_PATCHES="winepulse-patches-1.7.21" -COMPHOLIOV="1.7.21" -COMPHOLIO_PATCHES="wine-compholio-daily-${COMPHOLIOV}" -WINE_GENTOO="wine-gentoo-2013.06.24" +GV="2.36" +MV="4.5.6" +STAGING_P="wine-staging-${PV}" +STAGING_DIR="${WORKDIR}/${STAGING_P}" +WINE_GENTOO="wine-gentoo-2015.03.07" +GST_P="wine-1.7.34-gstreamer-v5" DESCRIPTION="Free implementation of Windows(tm) on Unix" HOMEPAGE="http://www.winehq.org/" SRC_URI="${SRC_URI} @@ -36,20 +37,28 @@ 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 ) - pipelight? ( https://github.com/compholio/wine-compholio-daily/archive/v${COMPHOLIOV}.tar.gz -> ${COMPHOLIO_PATCHES}.tar.gz ) - pulseaudio? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${PULSE_PATCHES}.tar.bz2 ) + gstreamer? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${GST_P}.patch.bz2 ) http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2" +if [[ ${PV} == "9999" ]] ; then + STAGING_EGIT_REPO_URI="git://github.com/wine-compholio/wine-staging.git" +else + SRC_URI="${SRC_URI} + staging? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz ) + pulseaudio? ( https://github.com/wine-compholio/wine-staging/archive/v${PV}.tar.gz -> ${STAGING_P}.tar.gz )" +fi + 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 pipelight +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 pcap pipelight +png +prelink pulseaudio +realtime +run-exes s3tc samba scanner selinux +ssl staging test +threads +truetype +udisks v4l vaapi +X +xcomposite xinerama +xml" REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 ) test? ( abi_x86_32 ) elibc_glibc? ( threads ) - gstreamer? ( pulseaudio ) mono? ( abi_x86_32 ) + pipelight? ( staging ) + s3tc? ( staging ) + vaapi? ( staging ) osmesa? ( opengl )" #286560 -# winepulse patches needed for gstreamer due to http://bugs.winehq.org/show_bug.cgi?id=30557 # FIXME: the test suite is unsuitable for us; many tests require net access # or fail due to Xvfb's opengl limitations. @@ -88,13 +97,15 @@ NATIVE_DEPEND=" nls? ( sys-devel/gettext ) odbc? ( dev-db/unixODBC:= ) osmesa? ( media-libs/mesa[osmesa] ) - pipelight? ( sys-apps/attr ) + pcap? ( net-libs/libpcap ) + staging? ( sys-apps/attr ) pulseaudio? ( media-sound/pulseaudio ) xml? ( dev-libs/libxml2 dev-libs/libxslt ) scanner? ( media-gfx/sane-backends:= ) ssl? ( net-libs/gnutls:= ) png? ( media-libs/libpng:0= ) v4l? ( media-libs/libv4l ) + vaapi? ( x11-libs/libva[X] ) xcomposite? ( x11-libs/libXcomposite )" COMMON_DEPEND=" @@ -196,14 +207,15 @@ COMMON_DEPEND=" >=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(-)] - ) ) + pcap? ( net-libs/libpcap[abi_x86_32(-)] ) pulseaudio? ( || ( app-emulation/emul-linux-x86-soundlibs[development,-abi_x86_32(-)] >=media-sound/pulseaudio-5.0[abi_x86_32(-)] ) ) + staging? ( || ( + app-emulation/emul-linux-x86-baselibs[development,-abi_x86_32(-)] + >=sys-apps/attr-2.4.47-r1[abi_x86_32(-)] + ) ) xml? ( || ( >=app-emulation/emul-linux-x86-baselibs-20131008[development,-abi_x86_32(-)] ( @@ -227,6 +239,7 @@ COMMON_DEPEND=" app-emulation/emul-linux-x86-medialibs[development,-abi_x86_32(-)] >=media-libs/libv4l-0.9.5[abi_x86_32(-)] ) ) + vaapi? ( x11-libs/libva[X,abi_x86_32(-)] ) xcomposite? ( || ( app-emulation/emul-linux-x86-xlibs[development,-abi_x86_32(-)] >=x11-libs/libXcomposite-0.4.4-r1[abi_x86_32(-)] @@ -237,13 +250,16 @@ COMMON_DEPEND=" RDEPEND="${COMMON_DEPEND} dos? ( games-emulation/dosbox ) perl? ( dev-lang/perl dev-perl/XML-Simple ) + s3tc? ( >=media-libs/libtxc_dxtn-1.0.1-r1[${MULTILIB_USEDEP}] ) samba? ( >=net-fs/samba-3.0.25 ) selinux? ( sec-policy/selinux-wine ) udisks? ( sys-fs/udisks:2 ) pulseaudio? ( realtime? ( sys-auth/rtkit ) )" +# tools/make_requests requires perl DEPEND="${COMMON_DEPEND} amd64? ( abi_x86_32? ( !abi_x86_64? ( ${NATIVE_DEPEND} ) ) ) + staging? ( dev-lang/perl dev-perl/XML-Simple ) X? ( x11-proto/inputproto x11-proto/xextproto @@ -290,61 +306,71 @@ pkg_setup() { src_unpack() { if [[ ${PV} == "9999" ]] ; then - git-2_src_unpack + git-r3_src_unpack + if use staging || use pulseaudio; then + EGIT_REPO_URI=${STAGING_EGIT_REPO_URI} + unset ${PN}_LIVE_REPO; + EGIT_CHECKOUT_DIR=${STAGING_DIR} git-r3_src_unpack + fi else unpack ${MY_P}.tar.bz2 + use staging || use pulseaudio && unpack "${STAGING_P}.tar.gz" fi - use pulseaudio && unpack "${PULSE_PATCHES}.tar.bz2" - if use pipelight; then - unpack "${COMPHOLIO_PATCHES}.tar.gz" - # we use a separate pulseaudio patchset - rm -r "${COMPHOLIO_PATCHES}/patches/06-winepulse" || die - # ... and need special tools for binary patches - mv "${COMPHOLIO_PATCHES}/patches/10-Missing_Fonts" "${T}" || die - fi unpack "${WINE_GENTOO}.tar.bz2" + use gstreamer && unpack "${GST_P}.patch.bz2" l10n_find_plocales_changes "${S}/po" "" ".po" } 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.12-osmesa-check.patch #429386 "${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508 ) - use pulseaudio && PATCHES+=( - "../${PULSE_PATCHES}"/*.patch #421365 - ) 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+=( "../${PULSE_PATCHES}"/gstreamer/*.patch ) + # Wine-Staging 1.7.38 "ntdll: Fix race-condition when threads are killed + # during shutdown" patch prevents the gstreamer patch from applying cleanly. + # So undo the staging patch, apply gstreamer, then re-apply rebased staging + # patch on top. + if use staging; then + PATCHES+=( + "${FILESDIR}/${PN}-1.7.38-gstreamer-v5-staging-pre.patch" + "${WORKDIR}/${GST_P}.patch" + "${FILESDIR}/${PN}-1.7.38-gstreamer-v5-staging-post.patch" ) + else + PATCHES+=( "${WORKDIR}/${GST_P}.patch" ) + fi 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" - - PATCHES+=( - "../${COMPHOLIO_PATCHES}/patches"/*/*.patch #507950 - "../${COMPHOLIO_PATCHES}/patches/patch-list.patch" + if use staging; then + ewarn "Applying the unofficial Wine-Staging patchset which is unsupported" + ewarn "by Wine developers. Please don't report bugs to Wine bugzilla" + ewarn "unless you can reproduce them with USE=-staging" + + local STAGING_EXCLUDE="" + use pipelight || STAGING_EXCLUDE="${STAGING_EXCLUDE} -W Pipelight" + + # Launch wine-staging patcher in a subshell, using epatch as a backend, and gitapply.sh as a backend for binary patches + ebegin "Running Wine-Staging patch installer" + ( + set -- DESTDIR="${S}" --backend=epatch --no-autoconf --all ${STAGING_EXCLUDE} + cd "${STAGING_DIR}/patches" + source "${STAGING_DIR}/patches/patchinstall.sh" ) - # epatch doesn't support binary patches - ebegin "Applying Compholio font patches" - for f in "${T}/10-Missing_Fonts"/*.patch; do - "../${COMPHOLIO_PATCHES}/debian/tools/gitapply.sh" < "${f}" || die "Failed to apply Compholio font patches" - done - eend + eend $? + elif use pulseaudio; then + PATCHES+=( "${STAGING_DIR}/patches/winepulse-PulseAudio_Support"/*.patch ) fi autotools-utils_src_prepare + # Modification of the server protocol requires regenerating the server requests if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then einfo "server/protocol.def was patched; running tools/make_requests" tools/make_requests || die #432348 @@ -392,6 +418,7 @@ multilib_src_configure() { $(use_with opengl) $(use_with osmesa) $(use_with oss) + $(use_with pcap) $(use_with png) $(use_with threads pthread) $(use_with scanner sane) @@ -405,8 +432,13 @@ multilib_src_configure() { $(use_with xml xslt) ) - use pulseaudio && myconf+=( --with-pulse ) - use pipelight && myconf+=( --with-xattr ) + if use pulseaudio || use staging; then + myconf+=( $(use_with pulseaudio pulse) ) + fi + use staging && myconf+=( + --with-xattr + $(use_with vaapi va) + ) local PKG_CONFIG AR RANLIB # Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038 @@ -465,7 +497,7 @@ multilib_src_install_all() { insinto /usr/share/wine/mono doins "${DISTDIR}"/wine-mono-${MV}.msi fi - if ! use perl ; then + if ! use perl ; then # winedump calls function_grep.pl, and winemaker is a perl script rm "${D}"usr/bin/{wine{dump,maker},function_grep.pl} "${D}"usr/share/man/man1/wine{dump,maker}.1 || die fi |