137 lines
2.8 KiB
Nix
137 lines
2.8 KiB
Nix
{ lib
|
||
, stdenv
|
||
, fetchFromGitLab
|
||
, gitUpdater
|
||
, pkg-config
|
||
, meson
|
||
, ninja
|
||
, libevdev
|
||
, mtdev
|
||
, udev
|
||
, libwacom
|
||
, documentationSupport ? false
|
||
, doxygen
|
||
, graphviz
|
||
, runCommand
|
||
, eventGUISupport ? false
|
||
, cairo
|
||
, glib
|
||
, gtk3
|
||
, testsSupport ? false
|
||
, check
|
||
, valgrind
|
||
, python3
|
||
, nixosTests
|
||
}:
|
||
|
||
let
|
||
mkFlag = optSet: flag: "-D${flag}=${lib.boolToString optSet}";
|
||
|
||
sphinx-build =
|
||
let
|
||
env = python3.withPackages (pp: with pp; [
|
||
sphinx
|
||
recommonmark
|
||
sphinx-rtd-theme
|
||
]);
|
||
in
|
||
# Expose only the sphinx-build binary to avoid contaminating
|
||
# everything with Sphinx’s Python environment.
|
||
runCommand "sphinx-build" { } ''
|
||
mkdir -p "$out/bin"
|
||
ln -s "${env}/bin/sphinx-build" "$out/bin"
|
||
'';
|
||
in
|
||
|
||
stdenv.mkDerivation rec {
|
||
pname = "libinput";
|
||
version = "1.24.0";
|
||
|
||
outputs = [ "bin" "out" "dev" ];
|
||
|
||
src = fetchFromGitLab {
|
||
domain = "gitlab.freedesktop.org";
|
||
owner = "libinput";
|
||
repo = "libinput";
|
||
rev = version;
|
||
sha256 = "sha256-gTcgEZ7cs4jq8w5Genxtio9nVFy7y3n0nNXJ6SVtYHY=";
|
||
};
|
||
|
||
patches = [
|
||
./udev-absolute-path.patch
|
||
];
|
||
|
||
nativeBuildInputs = [
|
||
pkg-config
|
||
meson
|
||
ninja
|
||
] ++ lib.optionals documentationSupport [
|
||
doxygen
|
||
graphviz
|
||
sphinx-build
|
||
];
|
||
|
||
buildInputs = [
|
||
libevdev
|
||
mtdev
|
||
libwacom
|
||
(python3.withPackages (pp: with pp; [
|
||
pp.libevdev # already in scope
|
||
pyudev
|
||
pyyaml
|
||
setuptools
|
||
]))
|
||
] ++ lib.optionals eventGUISupport [
|
||
# GUI event viewer
|
||
cairo
|
||
glib
|
||
gtk3
|
||
];
|
||
|
||
propagatedBuildInputs = [
|
||
udev
|
||
];
|
||
|
||
nativeCheckInputs = [
|
||
check
|
||
valgrind
|
||
];
|
||
|
||
mesonFlags = [
|
||
(mkFlag documentationSupport "documentation")
|
||
(mkFlag eventGUISupport "debug-gui")
|
||
(mkFlag testsSupport "tests")
|
||
"--sysconfdir=/etc"
|
||
"--libexecdir=${placeholder "bin"}/libexec"
|
||
];
|
||
|
||
doCheck = testsSupport && stdenv.hostPlatform == stdenv.buildPlatform;
|
||
|
||
postPatch = ''
|
||
patchShebangs \
|
||
test/symbols-leak-test \
|
||
test/check-leftover-udev-rules.sh \
|
||
test/helper-copy-and-exec-from-tmp.sh
|
||
|
||
# Don't create an empty directory under /etc.
|
||
sed -i "/install_emptydir(dir_etc \/ 'libinput')/d" meson.build
|
||
'';
|
||
|
||
passthru = {
|
||
tests = {
|
||
libinput-module = nixosTests.libinput;
|
||
};
|
||
updateScript = gitUpdater {
|
||
patchlevel-unstable = true;
|
||
};
|
||
};
|
||
|
||
meta = with lib; {
|
||
description = "Handles input devices in Wayland compositors and provides a generic X.Org input driver";
|
||
homepage = "https://www.freedesktop.org/wiki/Software/libinput/";
|
||
license = licenses.mit;
|
||
platforms = platforms.unix;
|
||
maintainers = with maintainers; [ codyopel ] ++ teams.freedesktop.members;
|
||
changelog = "https://gitlab.freedesktop.org/libinput/libinput/-/releases/${version}";
|
||
};
|
||
}
|