nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix

123 lines
4.3 KiB
Nix
Raw Normal View History

{ stdenv, fetchurl, gtk-doc, pkgconfig, gobject-introspection, intltool
, libgudev, polkit, libxmlb, gusb, sqlite, libarchive, glib-networking
2018-02-14 16:39:07 +01:00
, libsoup, help2man, gpgme, libxslt, elfutils, libsmbios, efivar, glibcLocales
, gnu-efi, libyaml, valgrind, meson, libuuid, colord, docbook_xml_dtd_43, docbook_xsl
, ninja, gcab, gnutls, python3, wrapGAppsHook, json-glib, bash-completion
, shared-mime-info, umockdev, vala, makeFontsConf, freefont_ttf
, cairo, freetype, fontconfig, pango
2017-02-27 14:38:49 +01:00
}:
2017-09-18 15:14:21 +02:00
let
# Updating? Keep $out/etc synchronized with passthru.filesInstalledToEtc
version = "1.2.1";
2018-02-14 05:03:20 +01:00
python = python3.withPackages (p: with p; [ pygobject3 pycairo pillow ]);
installedTestsPython = python3.withPackages (p: with p; [ pygobject3 requests ]);
fontsConf = makeFontsConf {
fontDirectories = [ freefont_ttf ];
};
2017-09-18 15:14:21 +02:00
in stdenv.mkDerivation {
name = "fwupd-${version}";
src = fetchurl {
url = "https://people.freedesktop.org/~hughsient/releases/fwupd-${version}.tar.xz";
sha256 = "126b3lsh4gkyajsqm2c8l6wqr4dd7m26krz2527khmlps0lxdhg1";
2017-09-18 15:14:21 +02:00
};
outputs = [ "out" "lib" "dev" "devdoc" "man" "installedTests" ];
2018-02-14 03:06:38 +01:00
2017-09-18 15:14:21 +02:00
nativeBuildInputs = [
meson ninja gtk-doc pkgconfig gobject-introspection intltool glibcLocales shared-mime-info
valgrind gcab docbook_xml_dtd_43 docbook_xsl help2man libxslt python wrapGAppsHook vala
2017-09-18 15:14:21 +02:00
];
buildInputs = [
polkit libxmlb gusb sqlite libarchive libsoup elfutils libsmbios gnu-efi libyaml
libgudev colord gpgme libuuid gnutls glib-networking efivar json-glib umockdev
bash-completion cairo freetype fontconfig pango
2017-09-18 15:14:21 +02:00
];
LC_ALL = "en_US.UTF-8"; # For po/make-images
patches = [
./fix-paths.patch
./add-option-for-installation-sysconfdir.patch
2017-09-18 15:14:21 +02:00
];
2018-02-14 05:03:20 +01:00
2017-09-18 15:14:21 +02:00
postPatch = ''
2018-02-14 05:03:20 +01:00
# needs a different set of modules than po/make-images
escapedInterpreterLine=$(echo "${installedTestsPython}/bin/python3" | sed 's|\\|\\\\|g')
sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" data/installed-tests/hardware.py
2017-09-18 15:14:21 +02:00
patchShebangs .
2018-02-14 03:06:38 +01:00
substituteInPlace data/installed-tests/fwupdmgr.test.in --subst-var-by installedtestsdir "$installedTests/share/installed-tests/fwupd"
2017-09-18 15:14:21 +02:00
'';
# /etc/os-release not available in sandbox
# doCheck = true;
2018-02-14 03:06:38 +01:00
2018-02-10 05:23:17 +01:00
preFixup = ''
gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share")
2018-02-10 05:23:17 +01:00
'';
2017-09-18 15:14:21 +02:00
mesonFlags = [
2018-02-14 05:03:20 +01:00
"-Dplugin_dummy=true"
2017-12-17 09:16:38 +01:00
"-Dudevdir=lib/udev"
"-Dsystemdunitdir=lib/systemd/system"
"-Defi-libdir=${gnu-efi}/lib"
"-Defi-ldsdir=${gnu-efi}/lib"
"-Defi-includedir=${gnu-efi}/include/efi"
2017-09-18 15:14:21 +02:00
"--localstatedir=/var"
"--sysconfdir=/etc"
"-Dsysconfdir_install=${placeholder "out"}/etc"
2017-09-18 15:14:21 +02:00
];
# TODO: We need to be able to override the directory flags from meson setup hook
# better declaring them multiple times might become an error.
preConfigure = ''
mesonFlagsArray+=("--libexecdir=$out/libexec")
'';
2018-02-14 03:06:38 +01:00
postInstall = ''
moveToOutput share/installed-tests "$installedTests"
2018-02-14 05:03:20 +01:00
wrapProgram $installedTests/share/installed-tests/fwupd/hardware.py \
--prefix GI_TYPELIB_PATH : "$out/lib/girepository-1.0:${libsoup}/lib/girepository-1.0"
2018-02-14 03:06:38 +01:00
'';
FONTCONFIG_FILE = fontsConf; # Fontconfig error: Cannot load default config file
# TODO: wrapGAppsHook wraps efi capsule even though it is not elf
dontWrapGApps = true;
# 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}"
wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
fi
done
'';
# /etc/fwupd/uefi.conf is created by the services.hardware.fwupd NixOS module
passthru = {
filesInstalledToEtc = [
"fwupd/remotes.d/fwupd.conf"
"fwupd/remotes.d/lvfs-testing.conf"
"fwupd/remotes.d/lvfs.conf"
"fwupd/remotes.d/vendor.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"
];
};
2018-02-14 03:06:38 +01:00
meta = with stdenv.lib; {
2017-09-18 15:14:21 +02:00
homepage = https://fwupd.org/;
2018-02-14 03:06:38 +01:00
maintainers = with maintainers; [];
license = [ licenses.gpl2 ];
platforms = platforms.linux;
2017-09-18 15:14:21 +02:00
};
}