diff options
Diffstat (limited to 'pkgs/os-specific/linux/power-profiles-daemon')
-rw-r--r-- | pkgs/os-specific/linux/power-profiles-daemon/default.nix | 168 | ||||
-rw-r--r-- | pkgs/os-specific/linux/power-profiles-daemon/installed-tests-path.patch | 37 |
2 files changed, 205 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/power-profiles-daemon/default.nix b/pkgs/os-specific/linux/power-profiles-daemon/default.nix new file mode 100644 index 00000000000..9f96eb2576d --- /dev/null +++ b/pkgs/os-specific/linux/power-profiles-daemon/default.nix @@ -0,0 +1,168 @@ +{ stdenv +, lib +, pkg-config +, meson +, ninja +, fetchFromGitLab +, fetchpatch +, libgudev +, glib +, polkit +, gobject-introspection +, gettext +, gtk-doc +, docbook-xsl-nons +, docbook_xml_dtd_412 +, libxml2 +, libxslt +, upower +, umockdev +, systemd +, python3 +, wrapGAppsNoGuiHook +, nixosTests +}: + +let + testPythonPkgs = ps: with ps; [ + pygobject3 + dbus-python + python-dbusmock + ]; + testTypelibPath = lib.makeSearchPathOutput "lib" "lib/girepository-1.0" [ umockdev ]; +in +stdenv.mkDerivation rec { + pname = "power-profiles-daemon"; + version = "0.10.1"; + + outputs = [ "out" "devdoc" "installedTests" ]; + + src = fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "hadess"; + repo = "power-profiles-daemon"; + rev = version; + sha256 = "sha256-sQWiCHc0kEELdmPq9Qdk7OKDUgbM5R44639feC7gjJc="; + }; + + patches = [ + # Enable installed tests. + # https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/merge_requests/92 + (fetchpatch { + url = "https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/commit/3c64d9e1732eb6425e33013c452f1c4aa7a26f7e.patch"; + sha256 = "din5VuZZwARNDInHtl44yJK8pLmlxr5eoD4iMT4a8HA="; + }) + + # Install installed tests to separate output. + ./installed-tests-path.patch + ]; + + nativeBuildInputs = [ + pkg-config + meson + ninja + gettext + gtk-doc + docbook-xsl-nons + docbook_xml_dtd_412 + libxml2 # for xmllint for stripping GResources + libxslt # for xsltproc for building docs + gobject-introspection + wrapGAppsNoGuiHook + python3.pkgs.wrapPython + + # For finding tests. + (python3.withPackages testPythonPkgs) + ]; + + buildInputs = [ + libgudev + systemd + upower + glib + polkit + python3 # for cli tool + ]; + + strictDeps = true; + + # for cli tool + pythonPath = [ + python3.pkgs.pygobject3 + ]; + + mesonFlags = [ + "-Dinstalled_test_prefix=${placeholder "installedTests"}" + "-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system" + "-Dgtk_doc=true" + ]; + + PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions"; + + # Avoid double wrapping + dontWrapGApps = true; + + postPatch = '' + patchShebangs tests/unittest_inspector.py + ''; + + preConfigure = '' + # For finding tests. + GI_TYPELIB_PATH_original=$GI_TYPELIB_PATH + addToSearchPath GI_TYPELIB_PATH "${testTypelibPath}" + ''; + + postConfigure = '' + # Restore the original value to prevent the program from depending on umockdev. + export GI_TYPELIB_PATH=$GI_TYPELIB_PATH_original + unset GI_TYPELIB_PATH_original + ''; + + preInstall = '' + # We have pkexec on PATH so Meson will try to use it when installation fails + # due to being unable to write to e.g. /etc. + # Let’s pretend we already ran pkexec – + # the pkexec on PATH would complain it lacks setuid bit, + # obscuring the underlying error. + # https://github.com/mesonbuild/meson/blob/492cc9bf95d573e037155b588dc5110ded4d9a35/mesonbuild/minstall.py#L558 + export PKEXEC_UID=-1 + ''; + + postFixup = '' + # Avoid double wrapping + makeWrapperArgs+=("''${gappsWrapperArgs[@]}") + # Make Python libraries available + wrapPythonProgramsIn "$out/bin" "$pythonPath" + + # Make Python libraries available for installed tests + makeWrapperArgs+=( + --prefix GI_TYPELIB_PATH : "${testTypelibPath}" + --prefix PATH : "${lib.makeBinPath [ umockdev ]}" + # Vala does not use absolute paths in typelibs + # https://github.com/NixOS/nixpkgs/issues/47226 + # Also umockdev binaries use relative paths for LD_PRELOAD. + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ umockdev ]}" + # dbusmock calls its templates using exec so our regular patching of Python scripts + # to add package directories to site will not carry over. + # https://github.com/martinpitt/python-dbusmock/blob/2254e69279a02fb3027b500ed7288b77c7a80f2a/dbusmock/mockobject.py#L51 + # https://github.com/martinpitt/python-dbusmock/blob/2254e69279a02fb3027b500ed7288b77c7a80f2a/dbusmock/__main__.py#L60-L62 + --prefix PYTHONPATH : "${lib.makeSearchPath python3.sitePackages (testPythonPkgs python3.pkgs)}" + ) + wrapPythonProgramsIn "$installedTests/libexec/installed-tests" "$pythonPath ${lib.concatStringsSep " " (testPythonPkgs python3.pkgs)}" + ''; + + passthru = { + tests = { + nixos = nixosTests.power-profiles-daemon; + installed-tests = nixosTests.installed-tests.power-profiles-daemon; + }; + }; + + meta = with lib; { + homepage = "https://gitlab.freedesktop.org/hadess/power-profiles-daemon"; + description = "Makes user-selected power profiles handling available over D-Bus"; + platforms = platforms.linux; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ jtojnar mvnetbiz ]; + }; +} diff --git a/pkgs/os-specific/linux/power-profiles-daemon/installed-tests-path.patch b/pkgs/os-specific/linux/power-profiles-daemon/installed-tests-path.patch new file mode 100644 index 00000000000..63059f3ac73 --- /dev/null +++ b/pkgs/os-specific/linux/power-profiles-daemon/installed-tests-path.patch @@ -0,0 +1,37 @@ +diff --git a/meson_options.txt b/meson_options.txt +index 7e89619..76497db 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -1,3 +1,4 @@ ++option('installed_test_prefix', type: 'string', description: 'Prefix for installed tests') + option('systemdsystemunitdir', + description: 'systemd unit directory', + type: 'string', +diff --git a/tests/meson.build b/tests/meson.build +index b306a7f..7670e1b 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -2,8 +2,8 @@ envs = environment() + envs.set ('top_builddir', meson.build_root()) + envs.set ('top_srcdir', meson.source_root()) + +-installed_test_bindir = libexecdir / 'installed-tests' / meson.project_name() +-installed_test_datadir = datadir / 'installed-tests' / meson.project_name() ++installed_test_bindir = get_option('installed_test_prefix') / 'libexec' / 'installed-tests' / meson.project_name() ++installed_test_datadir = get_option('installed_test_prefix') / 'share' / 'installed-tests' / meson.project_name() + + python3 = find_program('python3') + unittest_inspector = find_program('unittest_inspector.py') +diff --git a/tests/integration-test.py b/tests/integration-test.py +index 22dc42c..0f92b76 100755 +--- a/tests/integration-test.py ++++ b/tests/integration-test.py +@@ -67,7 +67,7 @@ class Tests(dbusmock.DBusTestCase): + print('Testing binaries from JHBuild (%s)' % cls.daemon_path) + else: + cls.daemon_path = None +- with open('/usr/lib/systemd/system/power-profiles-daemon.service') as f: ++ with open('/run/current-system/sw/lib/systemd/system/power-profiles-daemon.service') as f: + for line in f: + if line.startswith('ExecStart='): + cls.daemon_path = line.split('=', 1)[1].strip() |