Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upower: 1.90.0 → 1.90.2 #243217

Merged
merged 3 commits into from
Jul 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nixos/tests/installed-tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -107,5 +107,6 @@ in
malcontent = callInstalledTest ./malcontent.nix {};
ostree = callInstalledTest ./ostree.nix {};
pipewire = callInstalledTest ./pipewire.nix {};
upower = callInstalledTest ./upower.nix {};
xdg-desktop-portal = callInstalledTest ./xdg-desktop-portal.nix {};
}
9 changes: 9 additions & 0 deletions nixos/tests/installed-tests/upower.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{ pkgs, makeInstalledTest, ... }:

makeInstalledTest {
tested = pkgs.upower;

testConfig = {
services.upower.enable = true;
};
}
93 changes: 69 additions & 24 deletions pkgs/os-specific/linux/upower/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
, stdenv
, fetchFromGitLab
, fetchpatch
, makeWrapper
, pkg-config
, rsync
, libxslt
Expand All @@ -23,27 +24,31 @@
, useIMobileDevice ? true
, libimobiledevice
, withDocs ? (stdenv.buildPlatform == stdenv.hostPlatform)
, nixosTests
}:

stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "upower";
version = "1.90.0";
version = "1.90.2";

outputs = [ "out" "dev" ]
outputs = [ "out" "dev" "installedTests" ]
++ lib.optionals withDocs [ "devdoc" ];

src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "upower";
repo = "upower";
rev = "v${version}";
hash = "sha256-+C/4dDg6WTLpBgkpNyxjthSdqYdaTLC8vG6jG1LNJ7w=";
rev = "v${finalAttrs.version}";
hash = "sha256-7WzMAJuf1czU8ZalsEU/NwCXYqTGvcqEqxFt5ocgt48=";
};

# Remove when this is fixed upstream:
# https://gitlab.freedesktop.org/upower/upower/-/issues/214
patches = lib.optional (stdenv.hostPlatform.system == "i686-linux")
./i686-test-remove-battery-check.patch;
patches = lib.optionals (stdenv.hostPlatform.system == "i686-linux") [
# Remove when this is fixed upstream:
# https://gitlab.freedesktop.org/upower/upower/-/issues/214
./i686-test-remove-battery-check.patch
] ++ [
./installed-tests-path.patch
];

strictDeps = true;

Expand All @@ -60,6 +65,7 @@ stdenv.mkDerivation rec {
gettext
gobject-introspection
libxslt
makeWrapper
pkg-config
rsync
];
Expand All @@ -71,6 +77,14 @@ stdenv.mkDerivation rec {
systemd
# Duplicate from nativeCheckInputs until https://github.com/NixOS/nixpkgs/issues/161570 is solved
umockdev

# For installed tests.
(python3.withPackages (pp: [
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is normally ps

pp.dbus-python
pp.python-dbusmock
pp.pygobject3
pp.packaging
]))
] ++ lib.optionals useIMobileDevice [
libimobiledevice
];
Expand Down Expand Up @@ -98,13 +112,17 @@ stdenv.mkDerivation rec {
"-Dudevhwdbdir=${placeholder "out"}/lib/udev/hwdb.d"
"-Dintrospection=${if (stdenv.buildPlatform == stdenv.hostPlatform) then "auto" else "disabled"}"
"-Dgtk-doc=${lib.boolToString withDocs}"
"-Dinstalled_test_prefix=${placeholder "installedTests"}"
];

doCheck = true;

postPatch = ''
patchShebangs src/linux/integration-test.py
patchShebangs src/linux/unittest_inspector.py

substituteInPlace src/linux/integration-test.py \
--replace "/usr/share/dbus-1" "$out/share/dbus-1"
'';

preCheck = ''
Expand All @@ -126,35 +144,62 @@ stdenv.mkDerivation rec {
runHook postCheck
'';

postCheck = ''
# Undo patchShebangs from postPatch so that it can be replaced with runtime shebang
# unittest_inspector.py intentionally not reverted because it would trigger
# meson rebuild during install and it is not used at runtime anyway.
sed -Ei 's~#!.+/bin/python3~#!/usr/bin/python3~' \
../src/linux/integration-test.py
'';

postInstall = ''
# Move stuff from DESTDIR to proper location.
# We use rsync to merge the directories.
for dir in etc var; do
rsync --archive "${DESTDIR}/$dir" "$out"
rm --recursive "${DESTDIR}/$dir"
rsync --archive "$DESTDIR/$dir" "$out"
rm --recursive "$DESTDIR/$dir"
done
for o in out dev; do
rsync --archive "${DESTDIR}/''${!o}" "$(dirname "''${!o}")"
rm --recursive "${DESTDIR}/''${!o}"
for o in out dev installedTests; do
rsync --archive "$DESTDIR/''${!o}" "$(dirname "''${!o}")"
rm --recursive "$DESTDIR/''${!o}"
done
# Ensure the DESTDIR is removed.
rmdir "${DESTDIR}/nix/store" "${DESTDIR}/nix" "${DESTDIR}"
rmdir "$DESTDIR/nix/store" "$DESTDIR/nix" "$DESTDIR"
'';

# HACK: We want to install configuration files to $out/etc
# but upower should read them from /etc on a NixOS system.
# With autotools, it was possible to override Make variables
# at install time but Meson does not support this
# so we need to convince it to install all files to a temporary
# location using DESTDIR and then move it to proper one in postInstall.
DESTDIR = "${placeholder "out"}/dest";
postFixup = ''
wrapProgram "$installedTests/libexec/upower/integration-test.py" \
--prefix GI_TYPELIB_PATH : "${lib.makeSearchPath "lib/girepository-1.0" [
"$out"
umockdev.out
]}" \
--prefix PATH : "${lib.makeBinPath [
umockdev
]}"
'';

env = {
# HACK: We want to install configuration files to $out/etc
# but upower should read them from /etc on a NixOS system.
# With autotools, it was possible to override Make variables
# at install time but Meson does not support this
# so we need to convince it to install all files to a temporary
# location using DESTDIR and then move it to proper one in postInstall.
DESTDIR = "${placeholder "out"}/dest";
};

passthru = {
tests = {
installedTests = nixosTests.installed-tests.upower;
};
};

meta = with lib; {
homepage = "https://upower.freedesktop.org/";
changelog = "https://gitlab.freedesktop.org/upower/upower/-/blob/v${version}/NEWS";
changelog = "https://gitlab.freedesktop.org/upower/upower/-/blob/v${finalAttrs.version}/NEWS";
description = "A D-Bus service for power management";
maintainers = teams.freedesktop.members;
platforms = platforms.linux;
license = licenses.gpl2Plus;
};
}
})
56 changes: 56 additions & 0 deletions pkgs/os-specific/linux/upower/installed-tests-path.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
diff --git a/meson_options.txt b/meson_options.txt
index eec3659..f064a1b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,6 +6,10 @@ option('gtk-doc',
type : 'boolean',
value : 'true',
description : 'Build developer documentation')
+option('installed_test_prefix',
+ type: 'string',
+ value: '',
+ description: 'Prefix for installed tests')
option('introspection',
type : 'feature',
value : 'auto',
diff --git a/src/meson.build b/src/meson.build
index a2352ac..c1f25ac 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -85,6 +85,7 @@ install_subdir('does-not-exist', install_dir: historydir, strip_directory : true

cdata = configuration_data()
cdata.set('libexecdir', get_option('prefix') / get_option('libexecdir'))
+cdata.set('installed_test_bindir', get_option('installed_test_prefix') / 'libexec' / 'upower')
cdata.set('historydir', historydir)

configure_file(
@@ -147,16 +148,16 @@ if os_backend == 'linux' and gobject_introspection.found()
'linux/integration-test.py',
'linux/output_checker.py',
],
- install_dir: get_option('prefix') / get_option('libexecdir') / 'upower'
+ install_dir: get_option('installed_test_prefix') / 'libexec' / 'upower'
)
install_subdir('linux/tests/',
- install_dir: get_option('prefix') / get_option('libexecdir') / 'upower'
+ install_dir: get_option('installed_test_prefix') / 'libexec' / 'upower'
)

configure_file(
input: 'upower-integration.test.in',
output: 'upower-integration.test',
- install_dir: get_option('datadir') / 'installed-tests' / 'upower',
+ install_dir: get_option('installed_test_prefix') / 'share' / 'installed-tests' / 'upower',
configuration: cdata
)
endif
diff --git a/src/upower-integration.test.in b/src/upower-integration.test.in
index 151ded0..b0a9bec 100644
--- a/src/upower-integration.test.in
+++ b/src/upower-integration.test.in
@@ -1,3 +1,3 @@
[Test]
Type=session
-Exec=@libexecdir@/upower/integration-test.py
+Exec=@installed_test_bindir@/integration-test.py