@@ -4,19 +4,24 @@
44 autoconf, hexdump, perl, nixosTests,
55 supportFlags,
66 patches,
7+ vkd3dArches,
78 buildScript ? null, configureFlags ? []
89}:
910
1011with import ./util.nix { inherit lib; };
1112
1213let
13− vkd3d = callPackage ./vkd3d.nix {};
1414 patches' = patches;
15+ prevName = name;
16+ prevPlatforms = platforms;
17+ prevConfigFlags = configureFlags;
1518in
1619stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
1720 builder = buildScript;
1821}) // rec {
19− inherit name src configureFlags;
22+ inherit src;
23+
24+ name = if supportFlags.waylandSupport then "${prevName}-wayland" else prevName;
2025
2126 # Fixes "Compiler cannot create executables" building wineWow with mingwSupport
2227 strictDeps = true;
@@ -36,7 +41,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
3641 ++ lib.optionals supportFlags.mingwSupport mingwGccs;
3742
3843 buildInputs = toBuildInputs pkgArches (with supportFlags; (pkgs:
39− [ pkgs.freetype pkgs.perl pkgs.xorg.libX11 ]
44+ [ pkgs.freetype pkgs.perl ]
4045 ++ lib.optional stdenv.isLinux pkgs.libcap
4146 ++ lib.optional pngSupport pkgs.libpng
4247 ++ lib.optional jpegSupport pkgs.libjpeg
@@ -61,12 +66,12 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
6166 ++ lib.optional fontconfigSupport pkgs.fontconfig
6267 ++ lib.optional alsaSupport pkgs.alsa-lib
6368 ++ lib.optional pulseaudioSupport pkgs.libpulseaudio
64− ++ lib.optional xineramaSupport pkgs.xorg.libXinerama
69+ ++ lib.optional (xineramaSupport && !waylandSupport) pkgs.xorg.libXinerama
6570 ++ lib.optional udevSupport pkgs.udev
6671 ++ lib.optional vulkanSupport pkgs.vulkan-loader
6772 ++ lib.optional sdlSupport pkgs.SDL2
6873 ++ lib.optional faudioSupport pkgs.faudio
69− ++ lib.optional vkd3dSupport vkd3d
74+ ++ vkd3dArches
7075 ++ lib.optionals gstreamerSupport (with pkgs.gst_all_1;
7176 [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly gst-libav
7277 (gst-plugins-bad.override { enableZbar = false; }) ])
@@ -79,12 +84,20 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
7984 CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration Security
8085 ApplicationServices AudioToolbox CoreAudio AudioUnit CoreMIDI OpenAL OpenCL Cocoa Carbon
8186 ])
82− ++ lib.optionals stdenv.isLinux (with pkgs.xorg; [
83− libXi libXcursor libXrandr libXrender libXxf86vm libXcomposite libXext
87+ ++ lib.optionals (stdenv.isLinux && !waylandSupport) (with pkgs.xorg; [
88+ libX11 libXi libXcursor libXrandr libXrender libXxf86vm libXcomposite libXext
89+ ])
90+ ++ lib.optionals waylandSupport (with pkgs; [
91+ wayland libxkbcommon wayland-protocols wayland.dev libxkbcommon.dev
8492 ])));
8593
8694 patches = [ ] ++ patches';
8795
96+ configureFlags = prevConfigFlags
97+ ++ lib.optionals supportFlags.waylandSupport [ "--with-wayland" ]
98+ ++ lib.optionals supportFlags.vulkanSupport [ "--with-vulkan" ]
99+ ++ lib.optionals supportFlags.vkd3dSupport [ "--with-vkd3d" ];
100+
88101 # Wine locates a lot of libraries dynamically through dlopen(). Add
89102 # them to the RPATH so that the user doesn't have to set them in
90103 # LD_LIBRARY_PATH.
@@ -93,6 +106,8 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
93106 # libpulsecommon.so is linked but not found otherwise
94107 ++ lib.optionals supportFlags.pulseaudioSupport (map (x: "${lib.getLib x}/lib/pulseaudio")
95108 (toBuildInputs pkgArches (pkgs: [ pkgs.libpulseaudio ])))
109+ ++ lib.optionals supportFlags.waylandSupport (map (x: "${lib.getLib x}/share/wayland-protocols")
110+ (toBuildInputs pkgArches (pkgs: [ pkgs.wayland-protocols ])))
96111 ));
97112
98113 # Don't shrink the ELF RPATHs in order to keep the extra RPATH
@@ -149,11 +164,12 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
149164 tests = { inherit (nixosTests) wine; };
150165 };
151166 meta = {
152− inherit version platforms;
167+ inherit version;
153168 homepage = "https://www.winehq.org/";
154169 license = with lib.licenses; [ lgpl21Plus ];
155− description = "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix";
156− maintainers = with lib.maintainers; [ avnik raskin bendlas ];
170+ 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";
171+ platforms = if supportFlags.waylandSupport then (lib.remove "x86_64-darwin" prevPlatforms) else prevPlatforms;
172+ maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira ];
157173 mainProgram = "wine";
158174 };
159175})