Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / desktops / gnome / core / mutter / default.nix
blob3fca3696cb1ae1ba2f78240e6bf4296786fc373d
1 { fetchurl
2 , runCommand
3 , lib
4 , stdenv
5 , pkg-config
6 , gnome
7 , gettext
8 , gobject-introspection
9 , cairo
10 , colord
11 , lcms2
12 , pango
13 , libstartup_notification
14 , libcanberra
15 , ninja
16 , xvfb-run
17 , libxcvt
18 , libICE
19 , libX11
20 , libXcomposite
21 , libXcursor
22 , libXdamage
23 , libXext
24 , libXfixes
25 , libXi
26 , libXtst
27 , libxkbfile
28 , xkeyboard_config
29 , libxkbcommon
30 , libXrender
31 , libxcb
32 , libXrandr
33 , libXinerama
34 , libXau
35 , libinput
36 , libdrm
37 , libei
38 , libdisplay-info
39 , gsettings-desktop-schemas
40 , glib
41 , atk
42 , gtk4
43 , fribidi
44 , harfbuzz
45 , gnome-desktop
46 , pipewire
47 , libgudev
48 , libwacom
49 , libSM
50 , xwayland
51 , mesa
52 , meson
53 , gnome-settings-daemon
54 , xorgserver
55 , python3
56 , wrapGAppsHook4
57 , gi-docgen
58 , sysprof
59 , libsysprof-capture
60 , desktop-file-utils
61 , egl-wayland
62 , graphene
63 , wayland
64 , wayland-protocols
67 stdenv.mkDerivation (finalAttrs: {
68   pname = "mutter";
69   version = "46.3.1";
71   outputs = [ "out" "dev" "man" "devdoc" ];
73   src = fetchurl {
74     url = "mirror://gnome/sources/mutter/${lib.versions.major finalAttrs.version}/mutter-${finalAttrs.version}.tar.xz";
75     hash = "sha256-dHpj2jdF8wSwG1U5PZar2qggmDsYi2C0DburPmg8gF8=";
76   };
78   mesonFlags = [
79     "-Degl_device=true"
80     "-Dinstalled_tests=false" # TODO: enable these
81     "-Dtests=false"
82     "-Dwayland_eglstream=true"
83     "-Dprofiler=true"
84     "-Dxwayland_path=${lib.getExe xwayland}"
85     # This should be auto detected, but it looks like it manages a false
86     # positive.
87     "-Dxwayland_initfd=disabled"
88     "-Ddocs=true"
89   ];
91   propagatedBuildInputs = [
92     # required for pkg-config to detect mutter-mtk
93     graphene
94   ];
96   nativeBuildInputs = [
97     desktop-file-utils
98     gettext
99     libxcvt
100     mesa # needed for gbm
101     meson
102     ninja
103     xvfb-run
104     pkg-config
105     python3
106     wrapGAppsHook4
107     gi-docgen
108     xorgserver
109     gobject-introspection
110   ];
112   buildInputs = [
113     cairo
114     egl-wayland
115     glib
116     gnome-desktop
117     gnome-settings-daemon
118     gsettings-desktop-schemas
119     atk
120     fribidi
121     harfbuzz
122     libcanberra
123     libdrm
124     libei
125     libdisplay-info
126     libgudev
127     libinput
128     libstartup_notification
129     libwacom
130     libSM
131     colord
132     lcms2
133     pango
134     pipewire
135     sysprof # for D-Bus interfaces
136     libsysprof-capture
137     xwayland
138     wayland
139     wayland-protocols
140   ] ++ [
141     # X11 client
142     gtk4
143     libICE
144     libX11
145     libXcomposite
146     libXcursor
147     libXdamage
148     libXext
149     libXfixes
150     libXi
151     libXtst
152     libxkbfile
153     xkeyboard_config
154     libxkbcommon
155     libXrender
156     libxcb
157     libXrandr
158     libXinerama
159     libXau
160   ];
162   postPatch = ''
163     patchShebangs src/backends/native/gen-default-modes.py
164   '';
166   postInstall = ''
167     ${glib.dev}/bin/glib-compile-schemas "$out/share/glib-2.0/schemas"
168   '';
170   postFixup = ''
171     # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
172     # TODO: Move this into a directory devhelp can find.
173     moveToOutput "share/mutter-14/doc" "$devdoc"
174   '';
176   # Install udev files into our own tree.
177   PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
179   separateDebugInfo = true;
181   passthru = {
182     libdir = "${finalAttrs.finalPackage}/lib/mutter-14";
184     tests = {
185       libdirExists = runCommand "mutter-libdir-exists" {} ''
186         if [[ ! -d ${finalAttrs.finalPackage.libdir} ]]; then
187           echo "passthru.libdir should contain a directory, “${finalAttrs.finalPackage.libdir}” is not one."
188           exit 1
189         fi
190         touch $out
191       '';
192     };
194     updateScript = gnome.updateScript {
195       packageName = "mutter";
196       attrPath = "gnome.mutter";
197     };
198   };
200   meta = with lib; {
201     description = "Window manager for GNOME";
202     mainProgram = "mutter";
203     homepage = "https://gitlab.gnome.org/GNOME/mutter";
204     license = licenses.gpl2Plus;
205     maintainers = teams.gnome.members;
206     platforms = platforms.linux;
207   };