about summary refs log tree commit diff
path: root/pkgs/tools/networking/modemmanager/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/networking/modemmanager/default.nix')
-rw-r--r--pkgs/tools/networking/modemmanager/default.nix49
1 files changed, 35 insertions, 14 deletions
diff --git a/pkgs/tools/networking/modemmanager/default.nix b/pkgs/tools/networking/modemmanager/default.nix
index 64d61f0e323ca..a91854865b1b2 100644
--- a/pkgs/tools/networking/modemmanager/default.nix
+++ b/pkgs/tools/networking/modemmanager/default.nix
@@ -1,10 +1,9 @@
 { lib
 , stdenv
 , fetchFromGitLab
+, fetchpatch
 , glib
-, udev
 , libgudev
-, polkit
 , ppp
 , gettext
 , pkg-config
@@ -12,14 +11,19 @@
 , python3
 , libmbim
 , libqmi
-, systemd
 , bash-completion
 , meson
 , ninja
 , vala
-, gobject-introspection
 , dbus
 , bash
+, gobject-introspection
+, buildPackages
+, withIntrospection ? lib.meta.availableOn stdenv.hostPlatform gobject-introspection && stdenv.hostPlatform.emulatorAvailable buildPackages
+, polkit
+, withPolkit ? lib.meta.availableOn stdenv.hostPlatform polkit
+, systemd
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
 }:
 
 stdenv.mkDerivation rec {
@@ -38,6 +42,12 @@ stdenv.mkDerivation rec {
     # Since /etc is the domain of NixOS, not Nix, we cannot install files there.
     # But these are just placeholders so we do not need to install them at all.
     ./no-dummy-dirs-in-sysconfdir.patch
+
+    (fetchpatch {
+      name = "GI_TYPELIB_PATH.patch";
+      url = "https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/commit/daa829287894273879799a383ed4dc373c6111b0.patch";
+      hash = "sha256-tPQokiZO2SpTlX8xMlkWjP1AIXgoLHW3rJwnmG33z/k=";
+    })
   ];
 
   strictDeps = true;
@@ -45,26 +55,29 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     meson
     ninja
-    vala
-    gobject-introspection
     gettext
+    glib
     pkg-config
     libxslt
     python3
+  ] ++ lib.optionals withIntrospection [
+    gobject-introspection
+    vala
   ];
 
   buildInputs = [
     glib
-    udev
     libgudev
-    polkit
     ppp
     libmbim
     libqmi
-    systemd
     bash-completion
     dbus
     bash # shebangs in share/ModemManager/fcc-unlock.available.d/
+  ] ++ lib.optionals withPolkit [
+    polkit
+  ] ++ lib.optionals withSystemd [
+    systemd
   ];
 
   nativeInstallCheckInputs = [
@@ -76,9 +89,15 @@ stdenv.mkDerivation rec {
   mesonFlags = [
     "-Dudevdir=${placeholder "out"}/lib/udev"
     "-Ddbus_policy_dir=${placeholder "out"}/share/dbus-1/system.d"
+    "-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
     "--sysconfdir=/etc"
     "--localstatedir=/var"
-    "-Dvapi=true"
+    (lib.mesonBool "introspection" withIntrospection)
+    (lib.mesonBool "qrtr" withIntrospection)
+    (lib.mesonBool "vapi" withIntrospection)
+    (lib.mesonBool "systemd_suspend_resume" withSystemd)
+    (lib.mesonBool "systemd_journal" withSystemd)
+    (lib.mesonOption "polkit" (if withPolkit then "strict" else "no"))
   ];
 
   postPatch = ''
@@ -89,14 +108,16 @@ stdenv.mkDerivation rec {
   # In Nixpkgs g-ir-scanner is patched to produce absolute paths, and
   # that interferes with ModemManager's tests, causing them to try to
   # load libraries from the install path, which doesn't usually exist
-  # when `make check' is run.  So to work around that, we run it as an
+  # when `meson test' is run.  So to work around that, we run it as an
   # install check instead, when those paths will have been created.
-  doInstallCheck = true;
-  preInstallCheck = ''
+  doInstallCheck = withIntrospection;
+  installCheckPhase = ''
+    runHook preInstallCheck
     export G_TEST_DBUS_DAEMON="${dbus}/bin/dbus-daemon"
     patchShebangs tools/tests/test-wrapper.sh
+    mesonCheckPhase
+    runHook postInstallCheck
   '';
-  installCheckTarget = "check";
 
   meta = with lib; {
     description = "WWAN modem manager, part of NetworkManager";