1{ stdenv, fetchurl, pkgconfig, meson, ninja
2, libevdev, mtdev, udev, libwacom
3, documentationSupport ? false, doxygen ? null, graphviz ? null # Documentation
4, eventGUISupport ? false, cairo ? null, glib ? null, gtk3 ? null # GUI event viewer support
5, testsSupport ? false, check ? null, valgrind ? null, python3 ? null
6}:
7
8assert documentationSupport -> doxygen != null && graphviz != null && python3 != null;
9assert eventGUISupport -> cairo != null && glib != null && gtk3 != null;
10assert testsSupport -> check != null && valgrind != null && python3 != null;
11
12let
13 mkFlag = optSet: flag: "-D${flag}=${stdenv.lib.boolToString optSet}";
14
15 sphinx-build = if documentationSupport then
16 python3.pkgs.sphinx.overrideAttrs (super: {
17 propagatedBuildInputs = super.propagatedBuildInputs ++ (with python3.pkgs; [ recommonmark sphinx_rtd_theme ]);
18
19 postFixup = super.postFixup or "" + ''
20 # Do not propagate Python
21 rm $out/nix-support/propagated-build-inputs
22 '';
23 })
24 else null;
25in
26
27with stdenv.lib;
28stdenv.mkDerivation rec {
29 pname = "libinput";
30 version = "1.16.1";
31
32 src = fetchurl {
33 url = "https://www.freedesktop.org/software/libinput/${pname}-${version}.tar.xz";
34 sha256 = "e6fRru3RUWi7IdF+nmKKocJ5V5Y6Qjo/6jk4pQF1hTk=";
35 };
36
37 outputs = [ "bin" "out" "dev" ];
38
39 mesonFlags = [
40 (mkFlag documentationSupport "documentation")
41 (mkFlag eventGUISupport "debug-gui")
42 (mkFlag testsSupport "tests")
43 "--sysconfdir=/etc"
44 "--libexecdir=${placeholder "bin"}/libexec"
45 ];
46
47 nativeBuildInputs = [ pkgconfig meson ninja ]
48 ++ optionals documentationSupport [ doxygen graphviz sphinx-build ];
49
50 buildInputs = [
51 libevdev
52 mtdev
53 libwacom
54 (python3.withPackages (pp: with pp; [
55 pp.libevdev # already in scope
56 pyudev
57 pyyaml
58 setuptools
59 ]))
60 ]
61 ++ optionals eventGUISupport [ cairo glib gtk3 ];
62
63 checkInputs = [
64 check
65 valgrind
66 ];
67
68 propagatedBuildInputs = [ udev ];
69
70 patches = [ ./udev-absolute-path.patch ];
71
72 postPatch = ''
73 patchShebangs tools/helper-copy-and-exec-from-tmp.sh
74 patchShebangs test/symbols-leak-test
75 patchShebangs test/check-leftover-udev-rules.sh
76 patchShebangs test/helper-copy-and-exec-from-tmp.sh
77 '';
78
79 doCheck = testsSupport && stdenv.hostPlatform == stdenv.buildPlatform;
80
81 meta = {
82 description = "Handles input devices in Wayland compositors and provides a generic X.Org input driver";
83 homepage = "http://www.freedesktop.org/wiki/Software/libinput";
84 license = licenses.mit;
85 platforms = platforms.unix;
86 maintainers = with maintainers; [ codyopel ];
87 };
88}