From 0f3611743aa1d4ba189d74716e5044460a435a1b Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 25 Aug 2023 11:39:02 +0000 Subject: [PATCH 1/3] wine64Packages.unstable: 8.13 -> 8.14 --- pkgs/applications/emulators/wine/sources.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/emulators/wine/sources.nix b/pkgs/applications/emulators/wine/sources.nix index 1bfb35e76d78..aca987417558 100644 --- a/pkgs/applications/emulators/wine/sources.nix +++ b/pkgs/applications/emulators/wine/sources.nix @@ -69,9 +69,9 @@ in rec { unstable = fetchurl rec { # NOTE: Don't forget to change the hash for staging as well. - version = "8.13"; + version = "8.14"; url = "https://dl.winehq.org/wine/source/8.x/wine-${version}.tar.xz"; - hash = "sha256-JuXTqD0lxUGMbA9USORD0gh2OiZDqrSw8a01KSKkwnU="; + hash = "sha256-4YNu9msYJfqdoEKDDASVsqw5SBVENkNGaXnuif3X+vQ="; inherit (stable) patches; ## see http://wiki.winehq.org/Gecko @@ -117,7 +117,7 @@ in rec { staging = fetchFromGitHub rec { # https://github.com/wine-staging/wine-staging/releases inherit (unstable) version; - hash = "sha256-5upC+IWHBJE5DeFv96lD1hr4LYYaqAAzfxIroK9KlOY="; + hash = "sha256-ct/RGXt9B6F3PHbirX8K03AZ0Kunitd2HmI0N5k6VHI="; owner = "wine-staging"; repo = "wine-staging"; rev = "v${version}"; From bdf47492d43d88844db5bd758150bb493aa22ff1 Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Sun, 27 Aug 2023 10:58:27 +0200 Subject: [PATCH 2/3] wine64Packages.unstable: Darwin compatibility fixes - Wine 8.12 changed the implementation of `macdrv_get_gpus_from_metal`, causing the patch used by nixpkgs to break. This patch splits that patch up to apply cleanly depending on the version; - Silence an implicit pointer to integer conversion warning due to the above patch (required by the Clang 16 stdenv bump); - Add the PCSC framework on Darwin, which is required as of Wine 8.14. Wine 8.14 changes the implementation of `macdrv_get_gpus_from_metal`, causing the patch to no longer apply cleanly. Splitting the patch allows only the parts that are still needed to apply cleanly dependin gon the Wine version being built. --- pkgs/applications/emulators/wine/base.nix | 19 +++++++++++++--- .../wine/darwin-metal-compat-pre8.12.patch | 22 +++++++++++++++++++ .../emulators/wine/darwin-metal-compat.patch | 21 +----------------- 3 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 pkgs/applications/emulators/wine/darwin-metal-compat-pre8.12.patch diff --git a/pkgs/applications/emulators/wine/base.nix b/pkgs/applications/emulators/wine/base.nix index bc8051d6de5f..50a2e7d75669 100644 --- a/pkgs/applications/emulators/wine/base.nix +++ b/pkgs/applications/emulators/wine/base.nix @@ -90,7 +90,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) { ++ lib.optionals tlsSupport [ pkgs.openssl pkgs.gnutls ] ++ lib.optionals (openglSupport && !stdenv.isDarwin) [ pkgs.libGLU pkgs.libGL pkgs.mesa.osmesa pkgs.libdrm ] ++ lib.optionals stdenv.isDarwin (with pkgs.buildPackages.darwin.apple_sdk.frameworks; [ - CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration Security + CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration PCSC Security ApplicationServices AudioToolbox CoreAudio AudioUnit CoreMIDI OpenCL Cocoa Carbon ]) ++ lib.optionals (stdenv.isLinux && !waylandSupport) (with pkgs.xorg; [ @@ -103,14 +103,27 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) { patches = [ ] ++ lib.optionals stdenv.isDarwin [ - # Wine requires `MTLDevice.registryID` for `winemac.drv`, but that property is not available - # in the 10.12 SDK (current SDK on x86_64-darwin). Work around that by using selector syntax. + # Wine uses `MTLDevice.registryID` in `winemac.drv`, but that property is not available in + # the 10.12 SDK (current SDK on x86_64-darwin). That can be worked around by using selector + # syntax. As of Wine 8.12, the logic has changed and uses selector syntax, but it still + # uses property syntax in one place. The first patch is necessary only with older + # versions of Wine. The second is needed on all versions of Wine. + (lib.optional (lib.versionOlder version "8.12") ./darwin-metal-compat-pre8.12.patch) ./darwin-metal-compat.patch # Wine requires `qos.h`, which is not included by default on the 10.12 SDK in nixpkgs. ./darwin-qos.patch ] ++ patches'; + # Because the 10.12 SDK doesn’t define `registryID`, clang assumes the undefined selector returns + # `id`, which is a pointer. This causes implicit pointer to integer errors in clang 15+. + # The following post-processing step adds a cast to `uint64_t` before the selector invocation to + # silence these errors. + postPatch = lib.optionalString stdenv.isDarwin '' + sed -e 's|\(\[[A-Za-z_][][A-Za-z_0-9]* registryID\]\)|(uint64_t)\1|' \ + -i dlls/winemac.drv/cocoa_display.m + ''; + configureFlags = prevConfigFlags ++ lib.optionals supportFlags.waylandSupport [ "--with-wayland" ] ++ lib.optionals supportFlags.vulkanSupport [ "--with-vulkan" ] diff --git a/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.12.patch b/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.12.patch new file mode 100644 index 000000000000..aaf8a1b89bfd --- /dev/null +++ b/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.12.patch @@ -0,0 +1,22 @@ +diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m +--- a/dlls/winemac.drv/cocoa_display.m ++++ b/dlls/winemac.drv/cocoa_display.m +@@ -289,7 +289,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count) + * the primary GPU because we need to hide the integrated GPU for an automatic graphic switching pair to avoid apps + * using the integrated GPU. This is the behavior of Windows on a Mac. */ + primary_device = [MTLCreateSystemDefaultDevice() autorelease]; +- if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, primary_device.registryID)) ++ if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, [primary_device registryID])) + goto done; + + /* Hide the integrated GPU if the system default device is a dedicated GPU */ +@@ -301,7 +301,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count) + + for (i = 0; i < devices.count; i++) + { +- if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], devices[i].registryID)) ++ if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], [devices[i] registryID])) + goto done; + + if (hide_integrated && devices[i].isLowPower) + diff --git a/pkgs/applications/emulators/wine/darwin-metal-compat.patch b/pkgs/applications/emulators/wine/darwin-metal-compat.patch index aeee7533bbd4..181b2a0d1a47 100644 --- a/pkgs/applications/emulators/wine/darwin-metal-compat.patch +++ b/pkgs/applications/emulators/wine/darwin-metal-compat.patch @@ -1,31 +1,12 @@ diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m -index f64a6c0f6ad..6da0391e3fa 100644 --- a/dlls/winemac.drv/cocoa_display.m +++ b/dlls/winemac.drv/cocoa_display.m -@@ -289,7 +289,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count) - * the primary GPU because we need to hide the integrated GPU for an automatic graphic switching pair to avoid apps - * using the integrated GPU. This is the behavior of Windows on a Mac. */ - primary_device = [MTLCreateSystemDefaultDevice() autorelease]; -- if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, primary_device.registryID)) -+ if (macdrv_get_gpu_info_from_registry_id(&primary_gpu, (uint64_t)[primary_device registryID])) - goto done; - - /* Hide the integrated GPU if the system default device is a dedicated GPU */ -@@ -301,7 +301,7 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count) - - for (i = 0; i < devices.count; i++) - { -- if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], devices[i].registryID)) -+ if (macdrv_get_gpu_info_from_registry_id(&gpus[gpu_count], (uint64_t)[devices[i] registryID])) - goto done; - - if (hide_integrated && devices[i].isLowPower) @@ -354,7 +354,7 @@ static int macdrv_get_gpu_info_from_display_id_using_metal(struct macdrv_gpu* gp device = [CGDirectDisplayCopyCurrentMetalDevice(display_id) autorelease]; if (device && [device respondsToSelector:@selector(registryID)]) - ret = macdrv_get_gpu_info_from_registry_id(gpu, device.registryID); -+ ret = macdrv_get_gpu_info_from_registry_id(gpu, (uint64_t)[device registryID]); ++ ret = macdrv_get_gpu_info_from_registry_id(gpu, [device registryID]); done: [pool release]; From 7c6847bfc92561333a6dca89dc887de4dee98379 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Mon, 28 Aug 2023 00:43:57 +0200 Subject: [PATCH 3/3] winePackages: add reckenrode as a maintainer --- pkgs/applications/emulators/wine/base.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/emulators/wine/base.nix b/pkgs/applications/emulators/wine/base.nix index 50a2e7d75669..8b1b4966ddab 100644 --- a/pkgs/applications/emulators/wine/base.nix +++ b/pkgs/applications/emulators/wine/base.nix @@ -205,7 +205,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) { ]; description = if supportFlags.waylandSupport then "An Open Source implementation of the Windows API on top of OpenGL and Unix (with experimental Wayland support)" else "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix"; platforms = if supportFlags.waylandSupport then (lib.remove "x86_64-darwin" prevPlatforms) else prevPlatforms; - maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira ]; + maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira reckenrode ]; inherit mainProgram; }; })