diff options
-rw-r--r-- | user/wine/APKBUILD | 6 | ||||
-rw-r--r-- | user/wine/dlclose.patch | 66 | ||||
-rw-r--r-- | user/wine/printer.patch | 13 |
3 files changed, 84 insertions, 1 deletions
diff --git a/user/wine/APKBUILD b/user/wine/APKBUILD index ef31fa802..87590ebb9 100644 --- a/user/wine/APKBUILD +++ b/user/wine/APKBUILD @@ -16,14 +16,16 @@ subpackages="$pkgname-libs $pkgname-dev $pkgname-doc" depends_dev="$pkgname perl" makedepends="fontconfig-dev openldap-dev libxslt-dev libxxf86dga-dev libxcursor-dev libxrandr-dev libxdamage-dev mesa-dev flex-dev bison - libpng-dev libjpeg-turbo-dev freetype-dev ncurses-dev libressl-dev + libpng-dev libjpeg-turbo-dev freetype-dev ncurses-dev openssl-dev libxcomposite-dev libxrender-dev libxinerama-dev zlib-dev cups-dev alsa-lib-dev libxml2-dev dbus-dev libxi-dev gnutls-dev tiff-dev v4l-utils-dev udisks2-dev autoconf automake openal-soft-dev pulseaudio-dev sane-dev eudev-dev mpg123-dev autoconf automake libtool" source="http://dl.winehq.org/$pkgname/source/${pkgver%.[1-9]}/$pkgname-$pkgver.tar.xz + dlclose.patch no-pie.patch + printer.patch winhlp32-flex.patch " @@ -120,5 +122,7 @@ libs() { } sha512sums="dd240525e389f841123a569fd2f9b8da698b7707bc0de408dfd60ae73c5e24d522abb42b76571c840df52c686fdeae56e0a9c69db2cd31f04cdb345feeacf1dc wine-4.0.1.tar.xz +7e68ffc953f8858538b03d79b78b53b46e33dc01a474cf2eadaa726ff04918eb8675e80da1c82d2d61b12753f10fd6eda9114c5bc263fe373b6900f174bc246f dlclose.patch a96b1e248447912ba522067b67fc920063f355f326eaf3fec760c79a1c6e46019fbdcfa8b95b9d389959a7e3d3ab794f9aaf78913ad6a73be32b5d34ca8a2267 no-pie.patch +05dcc931a3bf5569f0314e3ede9df11a6f2a5806ed9ed66da094f3ee811af316046f177d5190c09007227a455e402b4dc747098fc82cd410574fb241cc5d53ba printer.patch 522a94a31fc459e80ea7dd05f7aee64f6ae666ec05236d06614acde118d5c60002e0f253ae75edb5f02164f22937ca89578504b690d1a5611bd60f703c8f0c00 winhlp32-flex.patch" diff --git a/user/wine/dlclose.patch b/user/wine/dlclose.patch new file mode 100644 index 000000000..a9844ff68 --- /dev/null +++ b/user/wine/dlclose.patch @@ -0,0 +1,66 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -1123,6 +1123,12 @@ then + + dnl *** End of X11/Xlib.h check + ++ dnl Check for the unload_after_dlclose libc ++ AC_RUN_IFELSE( ++ [AC_LANG_PROGRAM([[#include <dlfcn.h>]], [[dlclose(dlopen("./conftest", 0)); return 0;]])], ++ ac_save_CPPFLAGS="$ac_save_CPPFLAGS -DNO_UNLOAD_AFTER_DLCLOSE", ++ []) ++ + dnl Check for the presence of OpenGL + opengl_msg="" + if test "x$with_opengl" != "xno" +--- a/dlls/ntdll/loader.c ++++ b/dlls/ntdll/loader.c +@@ -2289,6 +2289,13 @@ + if (mod->Flags & LDR_WINE_INTERNAL && mod->SectionHandle == handle) + { + info.wm = CONTAINING_RECORD(mod, WINE_MODREF, ldr); ++#ifdef NO_UNLOAD_AFTER_DLCLOSE ++ if (info.wm->ldr.LoadCount == 0) { ++ RtlEnterCriticalSection( &loader_section ); ++ info.wm->ldr.LoadCount = 1; ++ RtlLeaveCriticalSection( &loader_section ); ++ } ++#endif + TRACE( "Found %s at %p for builtin %s\n", + debugstr_w(info.wm->ldr.FullDllName.Buffer), info.wm->ldr.BaseAddress, debugstr_w(path) ); + break; +@@ -3199,6 +3199,9 @@ + * LdrShutdownProcess (NTDLL.@) + * + */ ++#ifdef NO_UNLOAD_AFTER_DLCLOSE ++static void MODULE_FlushModrefs(void); ++#endif + void WINAPI LdrShutdownProcess(void) + { + TRACE("()\n"); +@@ -3194,6 +3203,12 @@ + TRACE("()\n"); ++#ifdef NO_UNLOAD_AFTER_DLCLOSE ++ RtlEnterCriticalSection( &loader_section ); ++ process_detach(); ++ MODULE_FlushModrefs(); ++ RtlLeaveCriticalSection( &loader_section ); ++#endif + process_detaching = TRUE; + process_detach(); + } + + +@@ -3384,7 +3398,11 @@ + if ( free_lib_count <= 1 ) + { ++#ifdef NO_UNLOAD_AFTER_DLCLOSE ++ TRACE("apply no-op dlclose hacks on this platform\n"); ++#else + process_detach(); + MODULE_FlushModrefs(); ++#endif + } + + TRACE("END\n"); diff --git a/user/wine/printer.patch b/user/wine/printer.patch new file mode 100644 index 000000000..4910e4726 --- /dev/null +++ b/user/wine/printer.patch @@ -0,0 +1,13 @@ + dlls/winspool.drv/info.c | 1 + + 1 file changed, 1 insertion(+) +--- a/dlls/winspool.drv/info.c ++++ a/dlls/winspool.drv/info.c +@@ -1620,6 +1620,7 @@ void WINSPOOL_LoadSystemPrinters(void) + #endif + + /* FIXME: The init code should be moved to spoolsv.exe */ ++ SetLastError(0); + init_mutex = CreateMutexW( NULL, TRUE, winspool_mutex_name ); + if (!init_mutex) + { +-- |