commit:     a62ccb7245ecaedf4bf99bd1f4101f3b1d02ae49
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 23 23:46:33 2022 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Thu Nov 24 00:54:16 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a62ccb72

app-emulation/wine-vanilla: backport opengl32.dll fix to 7.21

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 .../files/wine-vanilla-7.21-opengl32.patch         | 73 ++++++++++++++++++++++
 ...lla-7.21.ebuild => wine-vanilla-7.21-r1.ebuild} |  3 +-
 2 files changed, 75 insertions(+), 1 deletion(-)

diff --git a/app-emulation/wine-vanilla/files/wine-vanilla-7.21-opengl32.patch 
b/app-emulation/wine-vanilla/files/wine-vanilla-7.21-opengl32.patch
new file mode 100644
index 000000000000..9411e05e96fd
--- /dev/null
+++ b/app-emulation/wine-vanilla/files/wine-vanilla-7.21-opengl32.patch
@@ -0,0 +1,73 @@
+Fixes PE opengl32.dll failing to initialize.
+
+https://gitlab.winehq.org/wine/wine/-/commit/34099bba6cb
+From:  RĂ©mi Bernon <rber...@codeweavers.com>
+Date: Mon, 14 Nov 2022 11:55:51 +0100
+Subject: [PATCH] ntdll: Delay loading unixlibs until the functions are
+ requested.
+
+Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53909
+--- a/dlls/ntdll/unix/virtual.c
++++ b/dlls/ntdll/unix/virtual.c
+@@ -98,6 +98,7 @@ struct builtin_module
+     unsigned int refcount;
+     void        *handle;
+     void        *module;
++    char        *unix_path;
+     void        *unix_handle;
+ };
+ 
+@@ -583,6 +584,7 @@ static void add_builtin_module( void *module, void *handle 
)
+     builtin->handle      = handle;
+     builtin->module      = module;
+     builtin->refcount    = 1;
++    builtin->unix_path   = NULL;
+     builtin->unix_handle = NULL;
+     list_add_tail( &builtin_modules, &builtin->entry );
+ }
+@@ -603,6 +605,7 @@ void release_builtin_module( void *module )
+             list_remove( &builtin->entry );
+             if (builtin->handle) dlclose( builtin->handle );
+             if (builtin->unix_handle) dlclose( builtin->unix_handle );
++            free( builtin->unix_path );
+             free( builtin );
+         }
+         break;
+@@ -652,6 +655,8 @@ static NTSTATUS get_builtin_unix_funcs( void *module, BOOL 
wow, const void **fun
+     LIST_FOR_EACH_ENTRY( builtin, &builtin_modules, struct builtin_module, 
entry )
+     {
+         if (builtin->module != module) continue;
++        if (builtin->unix_path && !builtin->unix_handle)
++            builtin->unix_handle = dlopen( builtin->unix_path, RTLD_NOW );
+         if (builtin->unix_handle)
+         {
+             *funcs = dlsym( builtin->unix_handle, ptr_name );
+@@ -669,26 +674,19 @@ static NTSTATUS get_builtin_unix_funcs( void *module, 
BOOL wow, const void **fun
+  */
+ NTSTATUS load_builtin_unixlib( void *module, const char *name )
+ {
+-    void *handle;
+     sigset_t sigset;
+-    NTSTATUS status = STATUS_DLL_NOT_FOUND;
++    NTSTATUS status = STATUS_SUCCESS;
+     struct builtin_module *builtin;
+ 
+-    if (!(handle = dlopen( name, RTLD_NOW ))) return status;
+     server_enter_uninterrupted_section( &virtual_mutex, &sigset );
+     LIST_FOR_EACH_ENTRY( builtin, &builtin_modules, struct builtin_module, 
entry )
+     {
+         if (builtin->module != module) continue;
+-        if (!builtin->unix_handle)
+-        {
+-            builtin->unix_handle = handle;
+-            status = STATUS_SUCCESS;
+-        }
++        if (!builtin->unix_path) builtin->unix_path = strdup( name );
+         else status = STATUS_IMAGE_ALREADY_LOADED;
+         break;
+     }
+     server_leave_uninterrupted_section( &virtual_mutex, &sigset );
+-    if (status) dlclose( handle );
+     return status;
+ }
+ 

diff --git a/app-emulation/wine-vanilla/wine-vanilla-7.21.ebuild 
b/app-emulation/wine-vanilla/wine-vanilla-7.21-r1.ebuild
similarity index 99%
rename from app-emulation/wine-vanilla/wine-vanilla-7.21.ebuild
rename to app-emulation/wine-vanilla/wine-vanilla-7.21-r1.ebuild
index d931d7219d8d..38fe963828ae 100644
--- a/app-emulation/wine-vanilla/wine-vanilla-7.21.ebuild
+++ b/app-emulation/wine-vanilla/wine-vanilla-7.21-r1.ebuild
@@ -128,7 +128,8 @@ QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC 
-Wl,-z,notext
 PATCHES=(
        "${FILESDIR}"/${PN}-7.0-noexecstack.patch
        "${FILESDIR}"/${PN}-7.20-unwind.patch
-       "${FILESDIR}"/${PN}-7.21-crossflags.patch
+       "${FILESDIR}"/${P}-crossflags.patch
+       "${FILESDIR}"/${P}-opengl32.patch
 )
 
 pkg_pretend() {

Reply via email to