summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2023-10-21 18:42:57 +0200
committerRobert Hensing <robert@roberthensing.nl>2023-10-29 11:33:11 +0100
commit0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe (patch)
treea4a1d328a23404fe6cf14cc9ae3d73d609fc1aa5
parent2caca43de3d3e678a0d2873fa12abdb845eae585 (diff)
downloadnixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar.gz
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar.bz2
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar.lz
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar.xz
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.tar.zst
nixpkgs-0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe.zip
qemu-utils: Rework as an emulatorless qemu build
Benefits

  - Reduce the derivation closure.
      - This reduces rebuilds and makes derivations that use
        qemu-utils less susceptible to build errors.
  - Includes extra qemu tools that weren't included before.
  - Removes fragile binary copying (old qemu-utils impl).
      - Can't forget to copy somethat that a binary needs.
      - Less custom packaging is better.

Cost

  - Adds an 80 second build, but the time is offset by rebuilding
    its dependents less.

  - The output of qemu-utils goes from ~7 MB to ~40 MB, but it
    provides more functionality.
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix54
-rw-r--r--pkgs/applications/virtualization/qemu/utils.nix24
-rw-r--r--pkgs/top-level/all-packages.nix4
3 files changed, 35 insertions, 47 deletions
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index 58221279e33..3c6b9fdc7c8 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -4,38 +4,41 @@
 , makeWrapper, removeReferencesTo
 , attr, libcap, libcap_ng, socat, libslirp
 , CoreServices, Cocoa, Hypervisor, rez, setfile, vmnet
-, guestAgentSupport ? with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows
-, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
-, seccompSupport ? stdenv.isLinux, libseccomp
-, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner
-, pulseSupport ? !stdenv.isDarwin && !nixosTestRunner, libpulseaudio
-, pipewireSupport ? !stdenv.isDarwin && !nixosTestRunner, pipewire
-, sdlSupport ? !stdenv.isDarwin && !nixosTestRunner, SDL2, SDL2_image
-, jackSupport ? !stdenv.isDarwin && !nixosTestRunner, libjack2
-, gtkSupport ? !stdenv.isDarwin && !xenSupport && !nixosTestRunner, gtk3, gettext, vte, wrapGAppsHook
-, vncSupport ? !nixosTestRunner, libjpeg, libpng
-, smartcardSupport ? !nixosTestRunner, libcacard
-, spiceSupport ? true && !nixosTestRunner, spice, spice-protocol
-, ncursesSupport ? !nixosTestRunner, ncurses
+, guestAgentSupport ? (with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows) && !toolsOnly
+, numaSupport ? stdenv.isLinux && !stdenv.isAarch32 && !toolsOnly, numactl
+, seccompSupport ? stdenv.isLinux && !toolsOnly, libseccomp
+, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner && !toolsOnly
+, pulseSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libpulseaudio
+, pipewireSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, pipewire
+, sdlSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, SDL2, SDL2_image
+, jackSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libjack2
+, gtkSupport ? !stdenv.isDarwin && !xenSupport && !nixosTestRunner && !toolsOnly, gtk3, gettext, vte, wrapGAppsHook
+, vncSupport ? !nixosTestRunner && !toolsOnly, libjpeg, libpng
+, smartcardSupport ? !nixosTestRunner && !toolsOnly, libcacard
+, spiceSupport ? true && !nixosTestRunner && !toolsOnly, spice, spice-protocol
+, ncursesSupport ? !nixosTestRunner && !toolsOnly, ncurses
 , usbredirSupport ? spiceSupport, usbredir
 , xenSupport ? false, xen
 , cephSupport ? false, ceph
 , glusterfsSupport ? false, glusterfs, libuuid
 , openGLSupport ? sdlSupport, mesa, libepoxy, libdrm
 , virglSupport ? openGLSupport, virglrenderer
-, libiscsiSupport ? true, libiscsi
+, libiscsiSupport ? !toolsOnly, libiscsi
 , smbdSupport ? false, samba
-, tpmSupport ? true
+, tpmSupport ? !toolsOnly
 , uringSupport ? stdenv.isLinux, liburing
 , canokeySupport ? false, canokey-qemu
-, capstoneSupport ? true, capstone
+, capstoneSupport ? !toolsOnly, capstone
 , enableDocs ? true
 , hostCpuOnly ? false
-, hostCpuTargets ? (if hostCpuOnly
+, hostCpuTargets ? (if toolsOnly
+                    then [ ]
+                    else if hostCpuOnly
                     then (lib.optional stdenv.isx86_64 "i386-softmmu"
                           ++ ["${stdenv.hostPlatform.qemuArch}-softmmu"])
                     else null)
 , nixosTestRunner ? false
+, toolsOnly ? false
 , gitUpdater
 }:
 
@@ -47,7 +50,8 @@ stdenv.mkDerivation (finalAttrs: {
   pname = "qemu"
     + lib.optionalString xenSupport "-xen"
     + lib.optionalString hostCpuOnly "-host-cpu-only"
-    + lib.optionalString nixosTestRunner "-for-vm-tests";
+    + lib.optionalString nixosTestRunner "-for-vm-tests"
+    + lib.optionalString toolsOnly "-utils";
   version = "8.1.2";
 
   src = fetchurl {
@@ -239,13 +243,13 @@ stdenv.mkDerivation (finalAttrs: {
   '';
 
   # Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
-  postInstall = ''
+  postInstall = lib.optionalString (!toolsOnly) ''
     ln -s $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} $out/bin/qemu-kvm
   '';
 
   passthru = {
     qemu-system-i386 = "bin/qemu-system-i386";
-    tests = {
+    tests = lib.optionalAttrs (!toolsOnly) {
       qemu-tests = finalAttrs.finalPackage.overrideAttrs (_: { doCheck = true; });
     };
     updateScript = gitUpdater {
@@ -261,10 +265,16 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     homepage = "http://www.qemu.org/";
-    description = "A generic and open source machine emulator and virtualizer";
+    description =
+      if toolsOnly
+      then "Support tools for qemu, a machine emulator and virtualizer"
+      else "A generic and open source machine emulator and virtualizer";
     license = licenses.gpl2Plus;
-    mainProgram = "qemu-kvm";
     maintainers = with maintainers; [ eelco qyliss ];
     platforms = platforms.unix;
+  }
+  # toolsOnly: Does not have qemu-kvm and there's no main support tool
+  // lib.optionalAttrs (!toolsOnly) {
+    mainProgram = "qemu-kvm";
   };
 })
diff --git a/pkgs/applications/virtualization/qemu/utils.nix b/pkgs/applications/virtualization/qemu/utils.nix
deleted file mode 100644
index c284934b3f1..00000000000
--- a/pkgs/applications/virtualization/qemu/utils.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ stdenv, installShellFiles, qemu_kvm, removeReferencesTo }:
-
-stdenv.mkDerivation rec {
-  pname = "qemu-utils";
-  inherit (qemu_kvm) version;
-
-  nativeBuildInputs = [ installShellFiles ];
-  buildInputs = [ qemu_kvm ];
-  disallowedRequisites = [ qemu_kvm ];
-  unpackPhase = "true";
-
-  installPhase = ''
-    mkdir -p "$out/bin"
-    cp "${qemu_kvm}/bin/qemu-img" "$out/bin/qemu-img"
-    cp "${qemu_kvm}/bin/qemu-io"  "$out/bin/qemu-io"
-    cp "${qemu_kvm}/bin/qemu-nbd" "$out/bin/qemu-nbd"
-    ${removeReferencesTo}/bin/remove-references-to -t ${qemu_kvm} $out/bin/*
-
-    installManPage ${qemu_kvm}/share/man/man1/qemu-img.1.gz
-    installManPage ${qemu_kvm}/share/man/man8/qemu-nbd.8.gz
-  '';
-
-  inherit (qemu_kvm) meta;
-}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 235d9fe41ed..b7dce584a3e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -34933,7 +34933,9 @@ with pkgs;
     inherit (darwin) sigtool;
   };
 
-  qemu-utils = callPackage ../applications/virtualization/qemu/utils.nix { };
+  qemu-utils = qemu.override {
+    toolsOnly = true;
+  };
 
   canokey-qemu = callPackage ../applications/virtualization/qemu/canokey-qemu.nix { };