keepassxc: move to by-name, modernize, fix build on darwin (#398600)

This commit is contained in:
Gaétan Lepage
2025-04-16 16:35:42 +02:00
committed by GitHub
4 changed files with 73 additions and 58 deletions
@@ -3,54 +3,46 @@
stdenv,
fetchFromGitHub,
cmake,
qttools,
libsForQt5,
apple-sdk_15,
asciidoctor,
botan3,
curl,
darwinMinVersionHook,
kio,
libXi,
libXtst,
libargon2,
libusb1,
minizip,
nix-update-script,
pcsclite,
pkg-config,
qrencode,
qtbase,
qtmacextras,
qtsvg,
qtx11extras,
readline,
wrapGAppsHook3,
wrapQtAppsHook,
zlib,
LocalAuthentication,
withKeePassBrowser ? true,
withKeePassBrowserPasskeys ? true,
withKeePassFDOSecrets ? true,
withKeePassFDOSecrets ? stdenv.hostPlatform.isLinux,
withKeePassKeeShare ? true,
withKeePassNetworking ? true,
withKeePassSSHAgent ? true,
withKeePassTouchID ? true,
withKeePassX11 ? true,
withKeePassYubiKey ? true,
withKeePassYubiKey ? stdenv.hostPlatform.isLinux,
nixosTests,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "keepassxc";
version = "2.7.10";
src = fetchFromGitHub {
owner = "keepassxreboot";
repo = "keepassxc";
rev = version;
tag = finalAttrs.version;
hash = "sha256-FBoqCYNM/leN+w4aV0AJMx/G0bjHbI9KVWrnmq3NfaI=";
};
@@ -64,40 +56,58 @@ stdenv.mkDerivation rec {
patches = [ ./darwin.patch ];
cmakeFlags =
[
"-DKEEPASSXC_BUILD_TYPE=Release"
"-DWITH_GUI_TESTS=ON"
"-DWITH_XC_UPDATECHECK=OFF"
]
++ (lib.optional (!withKeePassX11) "-DWITH_XC_X11=OFF")
++ (lib.optional (withKeePassFDOSecrets && stdenv.hostPlatform.isLinux) "-DWITH_XC_FDOSECRETS=ON")
++ (lib.optional (withKeePassYubiKey && stdenv.hostPlatform.isLinux) "-DWITH_XC_YUBIKEY=ON")
++ (lib.optional withKeePassBrowser "-DWITH_XC_BROWSER=ON")
++ (lib.optional withKeePassBrowserPasskeys "-DWITH_XC_BROWSER_PASSKEYS=ON")
++ (lib.optional withKeePassKeeShare "-DWITH_XC_KEESHARE=ON")
++ (lib.optional withKeePassNetworking "-DWITH_XC_NETWORKING=ON")
++ (lib.optional withKeePassSSHAgent "-DWITH_XC_SSHAGENT=ON");
cmakeFlags = [
(lib.cmakeFeature "KEEPASSXC_BUILD_TYPE" "Release")
(lib.cmakeBool "WITH_GUI_TESTS" true)
(lib.cmakeBool "WITH_XC_UPDATECHECK" false)
(lib.cmakeBool "WITH_XC_X11" withKeePassX11)
(lib.cmakeBool "WITH_XC_BROWSER" withKeePassBrowser)
(lib.cmakeBool "WITH_XC_BROWSER_PASSKEYS" withKeePassBrowserPasskeys)
(lib.cmakeBool "WITH_XC_KEESHARE" withKeePassKeeShare)
(lib.cmakeBool "WITH_XC_NETWORKING" withKeePassNetworking)
(lib.cmakeBool "WITH_XC_SSHAGENT" withKeePassSSHAgent)
(lib.cmakeBool "WITH_XC_FDOSECRETS" withKeePassFDOSecrets)
(lib.cmakeBool "WITH_XC_YUBIKEY" withKeePassYubiKey)
];
doCheck = true;
checkPhase = ''
runHook preCheck
checkPhase =
let
disabledTests = lib.concatStringsSep "|" (
[
# flaky
"testcli"
"testgui"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# QWidget: Cannot create a QWidget without QApplication
"testautotype"
export LC_ALL="en_US.UTF-8"
export QT_QPA_PLATFORM=offscreen
export QT_PLUGIN_PATH="${qtbase.bin}/${qtbase.qtPluginPrefix}"
# testcli, testgui and testkdbx4 are flaky - skip them all
# testautotype on darwin throws "QWidget: Cannot create a QWidget without QApplication"
make test ARGS+="-E 'testcli|testgui${lib.optionalString stdenv.hostPlatform.isDarwin "|testautotype|testkdbx4"}' --output-on-failure"
# FAIL! : TestDatabase::testExternallyModified() Compared values are not the same
# Actual (((spyFileChanged.count()))): 0
# Expected (1) : 1
# Loc: [/tmp/nix-build-keepassxc-2.7.10.drv-2/source/tests/TestDatabase.cpp(288)]
"testdatabase"
]
);
in
''
runHook preCheck
runHook postCheck
'';
export LC_ALL="en_US.UTF-8"
export QT_QPA_PLATFORM=offscreen
export QT_PLUGIN_PATH="${libsForQt5.qtbase.bin}/${libsForQt5.qtbase.qtPluginPrefix}"
make test ARGS+="-E '${disabledTests}' --output-on-failure"
runHook postCheck
'';
nativeBuildInputs = [
asciidoctor
cmake
wrapQtAppsHook
qttools
libsForQt5.wrapQtAppsHook
libsForQt5.qttools
pkg-config
] ++ lib.optional (!stdenv.hostPlatform.isDarwin) wrapGAppsHook3;
@@ -127,35 +137,43 @@ stdenv.mkDerivation rec {
buildInputs =
[
curl
botan3
kio
curl
libXi
libXtst
libargon2
libsForQt5.kio
libsForQt5.qtbase
libsForQt5.qtsvg
minizip
pcsclite
qrencode
qtbase
qtsvg
readline
zlib
]
++ lib.optional (stdenv.hostPlatform.isDarwin && withKeePassTouchID) LocalAuthentication
++ lib.optionals stdenv.hostPlatform.isDarwin [
qtmacextras
libsForQt5.qtmacextras
apple-sdk_15
# ScreenCaptureKit, required by livekit, is only available on 12.3 and up:
# https://developer.apple.com/documentation/screencapturekit
(darwinMinVersionHook "12.3")
]
++ lib.optional stdenv.hostPlatform.isLinux libusb1
++ lib.optional withKeePassX11 qtx11extras;
++ lib.optionals stdenv.hostPlatform.isLinux [
libusb1
]
++ lib.optionals withKeePassX11 [
libsForQt5.qtx11extras
];
passthru.tests = nixosTests.keepassxc;
passthru = {
tests = {
inherit (nixosTests) keepassxc;
};
updateScript = nix-update-script { };
};
meta = with lib; {
meta = {
description = "Offline password manager with many features";
longDescription = ''
A community fork of KeePassX, which is itself a port of KeePass Password Safe.
@@ -165,12 +183,13 @@ stdenv.mkDerivation rec {
using the KeePassXC Browser Extension (https://github.com/keepassxreboot/keepassxc-browser)
'';
homepage = "https://keepassxc.org/";
license = licenses.gpl2Plus;
changelog = "https://github.com/keepassxreboot/keepassxc/blob/${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.gpl2Plus;
mainProgram = "keepassxc";
maintainers = with maintainers; [
maintainers = with lib.maintainers; [
blankparticle
sigmasquadron
];
platforms = platforms.linux ++ platforms.darwin;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}
})
-4
View File
@@ -14197,10 +14197,6 @@ with pkgs;
avahi = avahi.override { withLibdnssdCompat = true; };
};
keepassxc = libsForQt5.callPackage ../applications/misc/keepassxc {
inherit (darwin.apple_sdk_11_0.frameworks) LocalAuthentication;
};
evolution-data-server-gtk4 = evolution-data-server.override {
withGtk3 = false;
withGtk4 = true;