python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / libraries / spice-gtk / default.nix
blob2564162c3bf1e1db56dc03142c7a03bff862abc7
1 { lib
2 , stdenv
3 , fetchurl
4 , acl
5 , cyrus_sasl
6 , docbook_xsl
7 , libepoxy
8 , gettext
9 , gobject-introspection
10 , gst_all_1
11 , gtk-doc
12 , gtk3
13 , hwdata
14 , json-glib
15 , libcacard
16 , libcap_ng
17 , libdrm
18 , libjpeg_turbo
19 , libopus
20 , withLibsoup2 ? false
21 , libsoup
22 , libsoup_3
23 , libusb1
24 , lz4
25 , meson
26 , ninja
27 , openssl
28 , perl
29 , phodav_2_0
30 , phodav
31 , pixman
32 , pkg-config
33 , polkit
34 , python3
35 , spice-protocol
36 , usbredir
37 , vala
38 , wayland-protocols
39 , zlib
40 , withPolkit ? stdenv.isLinux
43 # If this package is built with polkit support (withPolkit=true),
44 # usb redirection reqires spice-client-glib-usb-acl-helper to run setuid root.
45 # The helper confirms via polkit that the user has an active session,
46 # then adds a device acl entry for that user.
47 # Example NixOS config to create a setuid wrapper for the helper:
48 # security.wrappers.spice-client-glib-usb-acl-helper.source =
49 #   "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper";
50 # On non-NixOS installations, make a setuid copy of the helper
51 # outside the store and adjust PATH to find the setuid version.
53 # If this package is built without polkit support (withPolkit=false),
54 # usb redirection requires read-write access to usb devices.
55 # This can be granted by adding users to a custom group like "usb"
56 # and using a udev rule to put all usb devices in that group.
57 # Example NixOS config:
58 #  users.groups.usb = {};
59 #  users.users.dummy.extraGroups = [ "usb" ];
60 #  services.udev.extraRules = ''
61 #    KERNEL=="*", SUBSYSTEMS=="usb", MODE="0664", GROUP="usb"
62 #  '';
64 stdenv.mkDerivation rec {
65   pname = "spice-gtk";
66   version = "0.41";
68   outputs = [ "out" "dev" "devdoc" "man" ];
70   src = fetchurl {
71     url = "https://www.spice-space.org/download/gtk/${pname}-${version}.tar.xz";
72     sha256 = "sha256-2Pi1y+qRhHAu64zCdqZ9cqzbbjbnxzNJ+4RF5byglp8=";
73   };
75   postPatch = ''
76     # get rid of absolute path to helper in store so we can use a setuid wrapper
77     substituteInPlace src/usb-acl-helper.c \
78       --replace 'ACL_HELPER_PATH"/' '"'
79     # don't try to setcap/suid in a nix builder
80     substituteInPlace src/meson.build \
81       --replace "meson.add_install_script('../build-aux/setcap-or-suid'," \
82       "# meson.add_install_script('../build-aux/setcap-or-suid',"
83   '';
85   nativeBuildInputs = [
86     docbook_xsl
87     gettext
88     gobject-introspection
89     gtk-doc
90     meson
91     ninja
92     perl
93     pkg-config
94     python3
95     python3.pkgs.pyparsing
96     python3.pkgs.six
97     vala
98   ];
100   propagatedBuildInputs = [
101     gst_all_1.gst-plugins-base
102     gst_all_1.gst-plugins-good
103   ];
105   buildInputs = [
106     cyrus_sasl
107     libepoxy
108     gtk3
109     json-glib
110     libcacard
111     libjpeg_turbo
112     libopus
113     (if withLibsoup2 then libsoup else libsoup_3)
114     libusb1
115     lz4
116     openssl
117     (if withLibsoup2 then phodav_2_0 else phodav)
118     pixman
119     spice-protocol
120     usbredir
121     zlib
122   ] ++ lib.optionals withPolkit [
123     polkit
124     acl
125   ] ++ lib.optionals stdenv.isLinux [
126     libcap_ng
127     libdrm
128     wayland-protocols
129   ];
131   PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions";
133   mesonFlags = [
134     "-Dusb-acl-helper-dir=${placeholder "out"}/bin"
135     "-Dusb-ids-path=${hwdata}/share/hwdata/usb.ids"
136   ] ++ lib.optionals (!withPolkit) [
137     "-Dpolkit=disabled"
138   ] ++ lib.optionals (!stdenv.isLinux) [
139     "-Dlibcap-ng=disabled"
140   ];
142   meta = with lib; {
143     description = "GTK 3 SPICE widget";
144     longDescription = ''
145       spice-gtk is a GTK 3 SPICE widget. It features glib-based
146       objects for SPICE protocol parsing and a gtk widget for embedding
147       the SPICE display into other applications such as virt-manager.
148       Python bindings are available too.
149     '';
151     homepage = "https://www.spice-space.org/";
152     license = licenses.lgpl21;
153     maintainers = [ maintainers.xeji ];
154     platforms = platforms.unix;
155   };