aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix424
1 files changed, 231 insertions, 193 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
index 9fe40cb60f7..d502d049ace 100644
--- a/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
@@ -5,9 +5,9 @@
, fetchpatch
, substituteAll
, gtk-doc
-, pkgconfig
+, pkg-config
, gobject-introspection
-, intltool
+, gettext
, libgudev
, polkit
, libxmlb
@@ -23,13 +23,12 @@
, libsmbios
, efivar
, gnu-efi
-, libyaml
, valgrind
, meson
, libuuid
, colord
, docbook_xml_dtd_43
-, docbook_xsl
+, docbook-xsl-nons
, ninja
, gcab
, python3
@@ -51,6 +50,7 @@
, flashrom
, tpm2-tools
, nixosTests
+, runCommand
}:
let
@@ -66,10 +66,6 @@ let
requests
]);
- fontsConf = makeFontsConf {
- fontDirectories = [ freefont_ttf ];
- };
-
isx86 = stdenv.isx86_64 || stdenv.isi686;
# Dell isn't supported on Aarch64
@@ -83,202 +79,244 @@ let
# Experimental
haveFlashrom = false;
-in
+ runPythonCommand = name: buildCommandPython: runCommand name {
+ nativeBuildInputs = [ python3 ];
+ inherit buildCommandPython;
+ } ''
+ exec python3 -c "$buildCommandPython"
+ '';
-stdenv.mkDerivation rec {
- pname = "fwupd";
- version = "1.4.2";
+ self = stdenv.mkDerivation rec {
+ pname = "fwupd";
+ version = "1.4.6";
- src = fetchurl {
- url = "https://people.freedesktop.org/~hughsient/releases/fwupd-${version}.tar.xz";
- sha256 = "1wch1n0z89ymfxx7ganiab4h64rdxr54rcg37n5nshw35bc3f390";
- };
+ # libfwupd goes to lib
+ # daemon, plug-ins and libfwupdplugin go to out
+ # CLI programs go to out
+ outputs = [ "out" "lib" "dev" "devdoc" "man" "installedTests" ];
- # libfwupd goes to lib
- # daemon, plug-ins and libfwupdplugin go to out
- # CLI programs go to out
- outputs = [ "out" "lib" "dev" "devdoc" "man" "installedTests" ];
-
- nativeBuildInputs = [
- meson
- ninja
- gtk-doc
- pkgconfig
- gobject-introspection
- intltool
- shared-mime-info
- valgrind
- gcab
- docbook_xml_dtd_43
- docbook_xsl
- help2man
- libxslt
- python
- wrapGAppsHook
- vala
- ];
-
- buildInputs = [
- polkit
- libxmlb
- gusb
- sqlite
- libarchive
- libsoup
- elfutils
- gnu-efi
- libyaml
- libgudev
- colord
- libjcat
- libuuid
- glib-networking
- json-glib
- umockdev
- bash-completion
- cairo
- freetype
- fontconfig
- pango
- tpm2-tss
- efivar
- ] ++ stdenv.lib.optionals haveDell [
- libsmbios
- ];
-
- patches = [
- ./fix-paths.patch
- ./add-option-for-installation-sysconfdir.patch
-
- # Install plug-ins and libfwupdplugin to out,
- # they are not really part of the library.
- ./install-fwupdplugin-to-out.patch
-
- # Installed tests are installed to different output
- # we also cannot have fwupd-tests.conf in $out/etc since it would form a cycle.
- (substituteAll {
- src = ./installed-tests-path.patch;
- # Needs a different set of modules than po/make-images.
- inherit installedTestsPython;
- })
- ];
-
- postPatch = ''
- patchShebangs \
- contrib/get-version.py \
- contrib/generate-version-script.py \
- meson_post_install.sh \
- po/make-images \
- po/make-images.sh \
- po/test-deps
- '';
+ src = fetchurl {
+ url = "https://people.freedesktop.org/~hughsient/releases/fwupd-${version}.tar.xz";
+ sha256 = "AKG5stioIveQc7ooYb/2UoOaBzbPUFzYk8tZK0rzvK0=";
+ };
- # /etc/os-release not available in sandbox
- # doCheck = true;
-
- preFixup = let
- binPath = [
- efibootmgr
- bubblewrap
- tpm2-tools
- ] ++ stdenv.lib.optional haveFlashrom flashrom;
- in ''
- gappsWrapperArgs+=(
- --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
- # See programs reached with fu_common_find_program_in_path in source
- --prefix PATH : "${stdenv.lib.makeBinPath binPath}"
- )
- '';
+ patches = [
+ # Do not try to create useless paths in /var.
+ ./fix-paths.patch
- mesonFlags = [
- "-Dgtkdoc=true"
- "-Dplugin_dummy=true"
- "-Dudevdir=lib/udev"
- "-Dsystemd_root_prefix=${placeholder "out"}"
- "-Dinstalled_test_prefix=${placeholder "installedTests"}"
- "-Defi-libdir=${gnu-efi}/lib"
- "-Defi-ldsdir=${gnu-efi}/lib"
- "-Defi-includedir=${gnu-efi}/include/efi"
- "--localstatedir=/var"
- "--sysconfdir=/etc"
- "-Dsysconfdir_install=${placeholder "out"}/etc"
-
- # We do not want to place the daemon into lib (cyclic reference)
- "--libexecdir=${placeholder "out"}/libexec"
- # Our builder only adds $lib/lib to rpath but some things link
- # against libfwupdplugin which is in $out/lib.
- "-Dc_link_args=-Wl,-rpath,${placeholder "out"}/lib"
- ] ++ stdenv.lib.optionals (!haveDell) [
- "-Dplugin_dell=false"
- "-Dplugin_synaptics=false"
- ] ++ stdenv.lib.optionals (!haveRedfish) [
- "-Dplugin_redfish=false"
- ] ++ stdenv.lib.optionals haveFlashrom [
- "-Dplugin_flashrom=true"
- ];
-
- FONTCONFIG_FILE = fontsConf; # Fontconfig error: Cannot load default config file
-
- # error: “PolicyKit files are missing”
- # https://github.com/NixOS/nixpkgs/pull/67625#issuecomment-525788428
- PKG_CONFIG_POLKIT_GOBJECT_1_ACTIONDIR = "/run/current-system/sw/share/polkit-1/actions";
-
- # TODO: wrapGAppsHook wraps efi capsule even though it is not elf
- dontWrapGApps = true;
-
- preCheck = ''
- addToSearchPath XDG_DATA_DIRS "${shared-mime-info}/share"
- '';
+ # Allow installing
+ ./add-option-for-installation-sysconfdir.patch
- # so we need to wrap the executables manually
- postFixup = ''
- find -L "$out/bin" "$out/libexec" -type f -executable -print0 \
- | while IFS= read -r -d ''' file; do
- if [[ "$file" != *.efi ]]; then
- echo "Wrapping program $file"
- wrapGApp "$file"
- fi
- done
- '';
+ # Install plug-ins and libfwupdplugin to out,
+ # they are not really part of the library.
+ ./install-fwupdplugin-to-out.patch
- # /etc/fwupd/uefi.conf is created by the services.hardware.fwupd NixOS module
- passthru = {
- filesInstalledToEtc = [
- "fwupd/ata.conf"
- # "fwupd/daemon.conf" # already created by the module
- "fwupd/redfish.conf"
- "fwupd/remotes.d/dell-esrt.conf"
- "fwupd/remotes.d/lvfs-testing.conf"
- "fwupd/remotes.d/lvfs.conf"
- "fwupd/remotes.d/vendor.conf"
- "fwupd/remotes.d/vendor-directory.conf"
- "fwupd/thunderbolt.conf"
- "fwupd/upower.conf"
- # "fwupd/uefi.conf" # already created by the module
- "pki/fwupd/GPG-KEY-Hughski-Limited"
- "pki/fwupd/GPG-KEY-Linux-Foundation-Firmware"
- "pki/fwupd/GPG-KEY-Linux-Vendor-Firmware-Service"
- "pki/fwupd/LVFS-CA.pem"
- "pki/fwupd-metadata/GPG-KEY-Linux-Foundation-Metadata"
- "pki/fwupd-metadata/GPG-KEY-Linux-Vendor-Firmware-Service"
- "pki/fwupd-metadata/LVFS-CA.pem"
+ # Installed tests are installed to different output
+ # we also cannot have fwupd-tests.conf in $out/etc since it would form a cycle.
+ (substituteAll {
+ src = ./installed-tests-path.patch;
+ # Needs a different set of modules than po/make-images.
+ inherit installedTestsPython;
+ })
];
- # BlacklistPlugins key in fwupd/daemon.conf
- defaultBlacklistedPlugins = [
- "test"
- "invalid"
+ nativeBuildInputs = [
+ meson
+ ninja
+ gtk-doc
+ pkg-config
+ gobject-introspection
+ gettext
+ shared-mime-info
+ valgrind
+ gcab
+ docbook_xml_dtd_43
+ docbook-xsl-nons
+ help2man
+ libxslt
+ python
+ wrapGAppsHook
+ vala
];
- tests = {
- installedTests = nixosTests.installed-tests.fwupd;
+ buildInputs = [
+ polkit
+ libxmlb
+ gusb
+ sqlite
+ libarchive
+ libsoup
+ elfutils
+ gnu-efi
+ libgudev
+ colord
+ libjcat
+ libuuid
+ glib-networking
+ json-glib
+ umockdev
+ bash-completion
+ cairo
+ freetype
+ fontconfig
+ pango
+ tpm2-tss
+ efivar
+ ] ++ stdenv.lib.optionals haveDell [
+ libsmbios
+ ];
+
+ mesonFlags = [
+ "-Dgtkdoc=true"
+ "-Dplugin_dummy=true"
+ "-Dudevdir=lib/udev"
+ "-Dsystemd_root_prefix=${placeholder "out"}"
+ "-Dinstalled_test_prefix=${placeholder "installedTests"}"
+ "-Defi-libdir=${gnu-efi}/lib"
+ "-Defi-ldsdir=${gnu-efi}/lib"
+ "-Defi-includedir=${gnu-efi}/include/efi"
+ "--localstatedir=/var"
+ "--sysconfdir=/etc"
+ "-Dsysconfdir_install=${placeholder "out"}/etc"
+
+ # We do not want to place the daemon into lib (cyclic reference)
+ "--libexecdir=${placeholder "out"}/libexec"
+ # Our builder only adds $lib/lib to rpath but some things link
+ # against libfwupdplugin which is in $out/lib.
+ "-Dc_link_args=-Wl,-rpath,${placeholder "out"}/lib"
+ ] ++ stdenv.lib.optionals (!haveDell) [
+ "-Dplugin_dell=false"
+ "-Dplugin_synaptics=false"
+ ] ++ stdenv.lib.optionals (!haveRedfish) [
+ "-Dplugin_redfish=false"
+ ] ++ stdenv.lib.optionals haveFlashrom [
+ "-Dplugin_flashrom=true"
+ ];
+
+ # TODO: wrapGAppsHook wraps efi capsule even though it is not ELF
+ dontWrapGApps = true;
+
+ # /etc/os-release not available in sandbox
+ # doCheck = true;
+
+ # Environment variables
+
+ # Fontconfig error: Cannot load default config file
+ FONTCONFIG_FILE =
+ let
+ fontsConf = makeFontsConf {
+ fontDirectories = [ freefont_ttf ];
+ };
+ in fontsConf;
+
+ # error: “PolicyKit files are missing”
+ # https://github.com/NixOS/nixpkgs/pull/67625#issuecomment-525788428
+ PKG_CONFIG_POLKIT_GOBJECT_1_ACTIONDIR = "/run/current-system/sw/share/polkit-1/actions";
+
+ # Phase hooks
+
+ postPatch = ''
+ patchShebangs \
+ contrib/get-version.py \
+ contrib/generate-version-script.py \
+ meson_post_install.sh \
+ po/make-images \
+ po/make-images.sh \
+ po/test-deps
+ '';
+
+ preCheck = ''
+ addToSearchPath XDG_DATA_DIRS "${shared-mime-info}/share"
+ '';
+
+ preFixup = let
+ binPath = [
+ efibootmgr
+ bubblewrap
+ tpm2-tools
+ ] ++ stdenv.lib.optional haveFlashrom flashrom;
+ in ''
+ gappsWrapperArgs+=(
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ # See programs reached with fu_common_find_program_in_path in source
+ --prefix PATH : "${stdenv.lib.makeBinPath binPath}"
+ )
+ '';
+
+ # Since we had to disable wrapGAppsHook, we need to wrap the executables manually.
+ postFixup = ''
+ find -L "$out/bin" "$out/libexec" -type f -executable -print0 \
+ | while IFS= read -r -d ''' file; do
+ if [[ "$file" != *.efi ]]; then
+ echo "Wrapping program $file"
+ wrapGApp "$file"
+ fi
+ done
+ '';
+
+ passthru = {
+ filesInstalledToEtc = [
+ "fwupd/ata.conf"
+ "fwupd/daemon.conf"
+ "fwupd/redfish.conf"
+ "fwupd/remotes.d/lvfs-testing.conf"
+ "fwupd/remotes.d/lvfs.conf"
+ "fwupd/remotes.d/vendor.conf"
+ "fwupd/remotes.d/vendor-directory.conf"
+ "fwupd/thunderbolt.conf"
+ "fwupd/upower.conf"
+ "fwupd/uefi.conf"
+ "pki/fwupd/GPG-KEY-Hughski-Limited"
+ "pki/fwupd/GPG-KEY-Linux-Foundation-Firmware"
+ "pki/fwupd/GPG-KEY-Linux-Vendor-Firmware-Service"
+ "pki/fwupd/LVFS-CA.pem"
+ "pki/fwupd-metadata/GPG-KEY-Linux-Foundation-Metadata"
+ "pki/fwupd-metadata/GPG-KEY-Linux-Vendor-Firmware-Service"
+ "pki/fwupd-metadata/LVFS-CA.pem"
+ ] ++ stdenv.lib.optionals haveDell [
+ "fwupd/remotes.d/dell-esrt.conf"
+ ];
+
+ # BlacklistPlugins key in fwupd/daemon.conf
+ defaultBlacklistedPlugins = [
+ "test"
+ "invalid"
+ ];
+
+ tests = let
+ listToPy = list: "[${stdenv.lib.concatMapStringsSep ", " (f: "'${f}'") list}]";
+ in {
+ installedTests = nixosTests.installed-tests.fwupd;
+
+ passthruMatches = runPythonCommand "fwupd-test-passthru-matches" ''
+ import itertools
+ import configparser
+ import os
+ import pathlib
+
+ etc = '${self}/etc'
+ package_etc = set(itertools.chain.from_iterable([[os.path.relpath(os.path.join(prefix, file), etc) for file in files] for (prefix, dirs, files) in os.walk(etc)]))
+ passthru_etc = set(${listToPy passthru.filesInstalledToEtc})
+ assert len(package_etc - passthru_etc) == 0, f'fwupd package contains the following paths in /etc that are not listed in passthru.filesInstalledToEtc: {package_etc - passthru_etc}'
+ assert len(passthru_etc - package_etc) == 0, f'fwupd package lists the following paths in passthru.filesInstalledToEtc that are not contained in /etc: {passthru_etc - package_etc}'
+
+ config = configparser.RawConfigParser()
+ config.read('${self}/etc/fwupd/daemon.conf')
+ package_blacklisted_plugins = config.get('fwupd', 'BlacklistPlugins').rstrip(';').split(';')
+ passthru_blacklisted_plugins = ${listToPy passthru.defaultBlacklistedPlugins}
+ assert package_blacklisted_plugins == passthru_blacklisted_plugins, f'Default blacklisted plug-ins in the package {package_blacklisted_plugins} do not match those listed in passthru.defaultBlacklistedPlugins {passthru_blacklisted_plugins}'
+
+ pathlib.Path(os.getenv('out')).touch()
+ '';
+ };
};
- };
- meta = with stdenv.lib; {
- homepage = "https://fwupd.org/";
- maintainers = with maintainers; [ jtojnar ];
- license = [ licenses.gpl2 ];
- platforms = platforms.linux;
+ meta = with stdenv.lib; {
+ homepage = "https://fwupd.org/";
+ maintainers = with maintainers; [ jtojnar ];
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ };
};
-}
+
+in self