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 name = "libinput-${version}";
30 version = "1.12.6";
31
32 src = fetchurl {
33 url = "https://www.freedesktop.org/software/libinput/${name}.tar.xz";
34 sha256 = "0pgla0mc6mvyr1ljy10mcqvfz8i5z6yp7dbx2bcd70y67wx05d0j";
35 };
36
37 outputs = [ "bin" "out" "dev" ];
38
39 mesonFlags = [
40 (mkFlag documentationSupport "documentation")
41 (mkFlag eventGUISupport "debug-gui")
42 (mkFlag testsSupport "tests")
43 "--libexecdir=${placeholder "bin"}/libexec"
44 ];
45
46 nativeBuildInputs = [ pkgconfig meson ninja ]
47 ++ optionals documentationSupport [ doxygen graphviz sphinx-build ]
48 ++ optionals testsSupport [ valgrind ];
49
50 buildInputs = [ libevdev mtdev libwacom (python3.withPackages (pkgs: with pkgs; [ evdev ])) ]
51 ++ optionals eventGUISupport [ cairo glib gtk3 ]
52 ++ optionals testsSupport [ check ];
53
54 propagatedBuildInputs = [ udev ];
55
56 patches = [ ./udev-absolute-path.patch ];
57
58 postPatch = ''
59 patchShebangs tools/helper-copy-and-exec-from-tmp.sh
60 patchShebangs test/symbols-leak-test
61 patchShebangs test/check-leftover-udev-rules.sh
62 '';
63
64 doCheck = testsSupport && stdenv.hostPlatform == stdenv.buildPlatform;
65
66 meta = {
67 description = "Handles input devices in Wayland compositors and provides a generic X.Org input driver";
68 homepage = http://www.freedesktop.org/wiki/Software/libinput;
69 license = licenses.mit;
70 platforms = platforms.unix;
71 maintainers = with maintainers; [ codyopel ];
72 };
73}