base16-schemes: unstable-2024-06-21 -> unstable-2024-11-12
[NixPkgs.git] / pkgs / by-name / um / umockdev / package.nix
blob662a1237e471bd4f78046bcfd22ab12f52367ea1
1 { stdenv
2 , lib
3 , docbook-xsl-nons
4 , fetchurl
5 , glib
6 , gobject-introspection
7 , gtk-doc
8 , libgudev
9 , libpcap
10 , meson
11 , mesonEmulatorHook
12 , ninja
13 , pkg-config
14 , python3
15 , substituteAll
16 , systemdMinimal
17 , usbutils
18 , vala
19 , which
22 stdenv.mkDerivation (finalAttrs: {
23   pname = "umockdev";
24   version = "0.18.4";
26   outputs = [ "bin" "out" "dev" "devdoc" ];
28   src = fetchurl {
29     url = "https://github.com/martinpitt/umockdev/releases/download/${finalAttrs.version}/umockdev-${finalAttrs.version}.tar.xz";
30     hash = "sha256-EVMG8Xvnj4yZ4gZS4t7M3UjfOHNr8A609D/vw4CaMZw=";
31   };
33   patches = [
34     # Hardcode absolute paths to libraries so that consumers
35     # do not need to set LD_LIBRARY_PATH themselves.
36     ./hardcode-paths.patch
38     # Replace references to udevadm with an absolute paths, so programs using
39     # umockdev will just work without having to provide it in their test environment
40     # $PATH.
41     (substituteAll {
42       src = ./substitute-udevadm.patch;
43       udevadm = "${systemdMinimal}/bin/udevadm";
44     })
45   ];
47   nativeBuildInputs = [
48     docbook-xsl-nons
49     gobject-introspection
50     gtk-doc
51     meson
52     ninja
53     pkg-config
54     vala
55   ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
56     mesonEmulatorHook
57   ];
59   buildInputs = [
60     glib
61     systemdMinimal
62     libpcap
63   ];
65   checkInputs = lib.optionals finalAttrs.passthru.withGudev [
66     libgudev
67   ];
69   nativeCheckInputs = [
70     python3
71     usbutils
72     which
73   ];
75   strictDeps = true;
77   mesonFlags = [
78     "-Dgtk_doc=true"
79   ];
81   doCheck = true;
83   postPatch = ''
84     # Substitute the path to this derivation in the patch we apply.
85     substituteInPlace src/umockdev-wrapper \
86       --subst-var-by 'LIBDIR' "''${!outputLib}/lib"
87   '';
89   preCheck = ''
90     # Our patch makes the path to the `LD_PRELOAD`ed library absolute.
91     # When running tests, the library is not yet installed, though,
92     # so we need to replace the absolute path with a local one during build.
93     # We are using a symlink that will be overridden during installation.
94     mkdir -p "$out/lib"
95     ln -s "$PWD/libumockdev-preload.so.0" "$out/lib/libumockdev-preload.so.0"
96   '';
98   passthru = {
99     # libgudev is needed for an optional test but it itself relies on umockdev for testing.
100     withGudev = false;
102     tests = {
103       withGudev = finalAttrs.finalPackage.overrideAttrs (attrs: {
104         passthru = attrs.passthru // {
105           withGudev = true;
106         };
107       });
108     };
109   };
111   meta = with lib; {
112     homepage = "https://github.com/martinpitt/umockdev";
113     changelog = "https://github.com/martinpitt/umockdev/releases/tag/${finalAttrs.version}";
114     description = "Mock hardware devices for creating unit tests";
115     license = licenses.lgpl21Plus;
116     maintainers = with maintainers; [ flokli ];
117     platforms = with platforms; linux;
118   };