summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2015-05-20 12:46:14 -0700
committerWilliam A. Kennington III <william@wkennington.com>2015-05-20 18:30:22 -0700
commit19c259161b987fcb5e1c3b7a87c746372ce017ee (patch)
treebcec38e87cb3e8c2fec94a9264070444fc07cb5a
parentd6c6253be0e1cc785733c5d5f4a198e797bc9362 (diff)
qemu: 2.2.2 -> 2.3.0
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix266
-rw-r--r--pkgs/development/libraries/attr/default.nix3
-rw-r--r--pkgs/development/libraries/mesa/default.nix6
-rw-r--r--pkgs/development/libraries/nspr/default.nix3
-rw-r--r--pkgs/development/libraries/nss/default.nix3
-rw-r--r--pkgs/tools/networking/vde2/default.nix3
-rw-r--r--pkgs/top-level/all-packages.nix11
7 files changed, 238 insertions, 57 deletions
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index 69888e22a0196..5b23e36af83a3 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -1,70 +1,240 @@
-{ stdenv, fetchurl, python, zlib, pkgconfig, glib, ncurses, perl, pixman
-, attr, libcap, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
-, libseccomp, libaio, libcap_ng, gnutls
-, makeWrapper
-, pulseSupport ? true, pulseaudio
-, sdlSupport ? true, SDL
-, vncSupport ? true, libjpeg, libpng
-, spiceSupport ? true, spice, spice_protocol, usbredir
-, x86Only ? false
+{ stdenv, fetchurl, pkgconfig, libtool, python, perl, texinfo, flex, bison
+, gettext, makeWrapper, glib, zlib, pixman
+
+# Optional Arguments
+, SDL2 ? null, gtk ? null, gnutls ? null, cyrus_sasl ? null, libjpeg ? null
+, libpng ? null, ncurses ? null, curl ? null, libcap ? null, attr ? null
+, bluez ? null, libibverbs ? null, librdmacm ? null, libuuid ? null, vde2 ? null
+, libaio ? null, libcap_ng ? null, spice ? null, spice_protocol ? null
+, libceph ? null, libxfs ? null, nss ? null, nspr ? null, libusb ? null
+, usbredir ? null, mesa ? null, lzo ? null, snappy ? null, bzip2 ? null
+, libseccomp ? null, glusterfs ? null, libssh2 ? null, numactl ? null
+
+# Audio libraries
+, libpulseaudio ? null, alsaLib ? null
+
+#, pixman ? null
+#, python, zlib, glib, ncurses, perl
+#, attr, libcap, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
+#, libseccomp, libaio, libcap_ng, gnutls
+#, makeWrapper
+#, pulseSupport ? true, pulseaudio
+#, sdlSupport ? true, SDL
+#, vncSupport ? true, libjpeg, libpng
+#, spiceSupport ? true, spice, spice_protocol, usbredir
+
+# Extra options
+, type ? ""
 }:
 
 with stdenv.lib;
 let
-  n = "qemu-2.2.1";
-  audio = optionalString (hasSuffix "linux" stdenv.system) "alsa,"
-    + optionalString pulseSupport "pa,"
-    + optionalString sdlSupport "sdl,";
+  n = "qemu-2.3.0";
+
+  mkFlag = trueStr: falseStr: cond: name: val:
+    if cond == null then null else
+      "--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}";
+  mkEnable = mkFlag "enable-" "disable-";
+  mkWith = mkFlag "with-" "without-";
+  mkOther = mkFlag "" "" true;
+
+  shouldUsePkg = pkg: if pkg != null && stdenv.lib.any (x: x == stdenv.system) pkg.meta.platforms then pkg else null;
+
+  optSDL2 = if type == "nix" then null else shouldUsePkg SDL2;
+  optGtk = if type == "nix" then null else shouldUsePkg gtk;
+  optLibcap = if type == "nix" then null else shouldUsePkg libcap;
+  optAttr = if type == "nix" then null else shouldUsePkg attr;
+  optGnutls = if type == "nix" then null else shouldUsePkg gnutls;
+  optCyrus_sasl = if type == "nix" then null else shouldUsePkg cyrus_sasl;
+  optLibjpeg = if type == "nix" then null else shouldUsePkg libjpeg;
+  optLibpng = if type == "nix" then null else shouldUsePkg libpng;
+  optNcurses = if type == "nix" then null else shouldUsePkg ncurses;
+  optCurl = if type == "nix" then null else shouldUsePkg curl;
+  optBluez = if type == "nix" then null else shouldUsePkg bluez;
+  optLibibverbs = if type == "nix" then null else shouldUsePkg libibverbs;
+  optLibrdmacm = if type == "nix" then null else shouldUsePkg librdmacm;
+  optLibuuid = if type == "nix" then null else shouldUsePkg libuuid;
+  optVde2 = if type == "nix" then null else shouldUsePkg vde2;
+  optLibaio = shouldUsePkg libaio;
+  optLibcap_ng = shouldUsePkg libcap_ng;
+  optSpice = if type == "nix" then null else shouldUsePkg spice;
+  optSpice_protocol = if type == "nix" then null else shouldUsePkg spice_protocol;
+  optLibceph = if type == "nix" then null else shouldUsePkg libceph;
+  optLibxfs = if type == "nix" then null else shouldUsePkg libxfs;
+  optNss = if type == "nix" then null else shouldUsePkg nss;
+  optNspr = if type == "nix" then null else shouldUsePkg nspr;
+  optLibusb = if type == "nix" then null else shouldUsePkg libusb;
+  optUsbredir = if type == "nix" then null else shouldUsePkg usbredir;
+  optMesa = if type == "nix" then null else shouldUsePkg mesa;
+  optLzo = if type == "nix" then null else shouldUsePkg lzo;
+  optSnappy = if type == "nix" then null else shouldUsePkg snappy;
+  optBzip2 = if type == "nix" then null else shouldUsePkg bzip2;
+  optLibseccomp = if type == "nix" then null else shouldUsePkg libseccomp;
+  optGlusterfs = if type == "nix" then null else shouldUsePkg glusterfs;
+  optLibssh2 = if type == "nix" then null else shouldUsePkg libssh2;
+  optNumactl = if type == "nix" then null else shouldUsePkg numactl;
+
+  hasSDLAbi = if optSDL2 != null then true else null;
+
+  hasVirtfs = stdenv.isLinux && optLibcap != null && optAttr != null;
+
+  hasVnc = type != "nix";
+  hasVncTls = hasVnc && optGnutls != null;
+  hasVncSasl = hasVnc && optCyrus_sasl != null;
+  hasVncJpeg = hasVnc && optLibjpeg != null;
+  hasVncPng = hasVnc && optLibpng != null;
+  hasVncWs = hasVnc && optGnutls != null;
+
+  hasFdt = type != "nix";
+
+  hasRdma = optLibibverbs != null && optLibrdmacm != null;
+
+  hasLinuxAio = stdenv.isLinux && optLibaio != null;
+
+  hasSpice = optSpice != null && optSpice_protocol != null;
+
+  hasNss = optNss != null && optNspr != null;
+
+  optLibpulseaudio = if type == "nix" then null else shouldUsePkg libpulseaudio;
+  optAlsaLib = if type == "nix" then null else shouldUsePkg alsaLib;
+  audio = concatStringsSep "," (
+       optional (optSDL2 != null) "sdl"
+    ++ optional (optLibpulseaudio != null) "pa"
+    ++ optional (optAlsaLib != null) "alsa"
+  );
+
+  systemBinary = if stdenv.system == "x86_64-linux" then "x86_64"
+    else if stdenv.system == "i686-linux" then "i386"
+    else null;
+
+  targetList = if stdenv.system == "x86_64-linux" then "x86_64-softmmu,i386-softmmu"
+    else if stdenv.system == "i686-linux" then "i386-softmmu"
+    else null;
 in
 
 stdenv.mkDerivation rec {
-  name = n + (if x86Only then "-x86-only" else "");
+  name = "${n}${optionalString (type != null && type != "") "-${type}"}";
 
   src = fetchurl {
     url = "http://wiki.qemu.org/download/${n}.tar.bz2";
-    sha256 = "181m2ddsg3adw8y5dmimsi8x678imn9f6i5p20zbhi7pdr61a5s6";
+    sha256 = "120m53c3p28qxmfzllicjzr8syjv6v4d9rsyrgkp7gnmcgvvgfmn";
   };
 
-  buildInputs =
-    [ python zlib pkgconfig glib ncurses perl pixman attr libcap
-      vde2 texinfo libuuid flex bison makeWrapper lzo snappy libseccomp
-      libcap_ng gnutls
-    ]
-    ++ optionals pulseSupport [ pulseaudio ]
-    ++ optionals sdlSupport [ SDL ]
-    ++ optionals vncSupport [ libjpeg libpng ]
-    ++ optionals spiceSupport [ spice_protocol spice usbredir ]
-    ++ optionals (hasSuffix "linux" stdenv.system) [ alsaLib libaio ];
+  nativeBuildInputs = [ pkgconfig libtool perl texinfo flex bison gettext makeWrapper ];
+
+  buildInputs = [
+    python glib zlib pixman optSDL2 optGtk optNcurses optCurl optBluez optVde2
+    optLibcap_ng optAttr optLibuuid optLibceph optLibxfs optLibusb optUsbredir
+    optMesa optLzo optSnappy optBzip2 optLibseccomp optGlusterfs optLibssh2
+    optNumactl optLibpulseaudio optAlsaLib
+  ] ++ optionals (hasVncTls || hasVncWs) [
+    optGnutls
+  ] ++ optionals hasVncSasl [
+    optCyrus_sasl
+  ] ++ optionals hasVncJpeg [
+    optLibjpeg
+  ] ++ optionals hasVncPng [
+    optLibpng
+  ] ++ optionals hasVirtfs [
+    optLibcap
+  ] ++ optionals hasRdma [
+    optLibibverbs optLibrdmacm
+  ] ++ optionals hasLinuxAio [
+    optLibaio
+  ] ++ optionals hasSpice [
+    optSpice optSpice_protocol
+  ] ++ optionals hasNss [
+    optNss optNspr
+  ];
 
   enableParallelBuilding = true;
 
-  patches = [ ./no-etc-install.patch ];
-
-  configureFlags =
-    [ "--enable-seccomp"
-      "--smbd=smbd" # use `smbd' from $PATH
-      "--audio-drv-list=${audio}"
-      "--sysconfdir=/etc"
-      "--localstatedir=/var"
-    ]
-    ++ optional spiceSupport "--enable-spice"
-    ++ optional x86Only "--target-list=i386-softmmu,x86_64-softmmu"
-    ++ optional (hasSuffix "linux" stdenv.system) "--enable-linux-aio";
-
-  postInstall =
-    ''
-      # Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
-      p="$out/bin/qemu-system-${if stdenv.system == "x86_64-linux" then "x86_64" else "i386"}"
-      if [ -e "$p" ]; then
-        makeWrapper "$p" $out/bin/qemu-kvm --add-flags "\$([ -e /dev/kvm ] && echo -enable-kvm)"
-      fi
-    '';
+  configureFlags = [
+    (mkOther                          "smbd"                "smbd")
+    (mkOther                          "sysconfdir"          "/etc")
+    (mkOther                          "localstatedir"       "/var")
+    (mkEnable true                    "modules"             null)
+    (mkEnable false                   "debug-tcg"           null)
+    (mkEnable false                   "debug-info"          null)
+    (mkEnable false                   "sparse"              null)
+    (mkEnable false                   "werror"              null)
+    (mkEnable (optSDL2 != null)       "sdl"                 null)
+    (mkWith   hasSDLAbi               "sdlabi"              "2.0")
+    (mkEnable (optGtk != null)        "gtk"                 null)
+    (mkEnable hasVirtfs               "virtfs"              null)
+    (mkEnable hasVnc                  "vnc"                 null)
+    (mkEnable stdenv.isDarwin         "cocoa"               null)
+    (mkOther                          "audio-drv-list"      audio)
+    (mkEnable false                   "xen"                 null)
+    (mkEnable false                   "xen-pci-passthrough" null)
+    (mkEnable false                   "brlapi"              null)
+    (mkEnable hasVncTls               "vnc-tls"             null)
+    (mkEnable hasVncSasl              "vnc-sasl"            null)
+    (mkEnable hasVncJpeg              "vnc-jpeg"            null)
+    (mkEnable hasVncPng               "vnc-png"             null)
+    (mkEnable hasVncWs                "vnc-ws"              null)
+    (mkEnable (optNcurses != null)    "curses"              null)
+    (mkEnable (optCurl != null)       "curl"                null)
+    (mkEnable hasFdt                  "fdt"                 null)
+    (mkEnable (optBluez != null)      "bluez"               null)
+    (mkEnable stdenv.isLinux          "kvm"                 null)
+    (mkEnable hasRdma                 "rdma"                null)
+    (mkEnable (type != "nix")         "system"              null)
+    (mkEnable (type != "kvm-only")    "user"                null)
+    (mkEnable (type != "kvm-only")    "guest-base"          null)
+    (mkEnable true                    "pie"                 null)
+    (mkEnable (optLibuuid != null)    "uuid"                null)
+    (mkEnable (optVde2 != null)       "vde"                 null)
+    (mkEnable false                   "netmap"              null)  # TODO(wkennington): Add Support
+    (mkEnable hasLinuxAio             "linux-aio"           null)
+    (mkEnable (optLibcap_ng != null)  "cap-ng"              null)
+    (mkEnable (optAttr != null)       "attr"                null)
+    (mkEnable (type != "nix")         "docs"                null)
+    (mkEnable stdenv.isLinux          "vhost-net"           null)
+    (mkEnable hasSpice                "spice"               null)
+    (mkEnable (optLibceph != null)    "rbd"                 null)
+    (mkEnable false                   "libiscsi"            null)  # TODO(wkennington): Add support
+    (mkEnable false                   "libnfs"              null)  # TODO(wkennington): Add support
+    (mkEnable (optLibxfs != null)     "xfsctl"              null)
+    (mkEnable hasNss                  "smartcard-nss"       null)
+    (mkEnable (optLibusb != null)     "libusb"              null)
+    (mkEnable (optUsbredir != null)   "usb-redir"           null)
+    (mkEnable (optMesa != null)       "opengl"              null)
+    (mkEnable (optLzo != null)        "lzo"                 null)
+    (mkEnable (optSnappy != null)     "snappy"              null)
+    (mkEnable (optBzip2 != null)      "bzip2"               null)
+    (mkEnable true                    "guest-agent"         null)
+    (mkEnable (optLibseccomp != null) "seccomp"             null)
+    (mkEnable (optGlusterfs != null)  "glusterfs"           null)
+    (mkEnable false                   "archipelago"         null)
+    (mkEnable true                    "tpm"                 null)
+    (mkEnable (optLibssh2 != null)    "libssh2"             null)
+    (mkEnable (optLibuuid != null)    "vhdx"                null)
+    (mkEnable (optGnutls != null)     "quorum"              null)
+    (mkEnable (optNumactl != null)    "numa"                null)
+  ] ++ optionals (type == "kvm-only") [
+    (mkOther                          "target-list"         targetList)
+  ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "qemu_confdir=\${out}/etc/qemu"
+    "qemu_localstatedir=\${TMPDIR}"
+  ];
+
+  postInstall = optionalString (systemBinary != null) ''
+    # Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
+    p="$out/bin/qemu-system-${systemBinary}"
+    if [ -e "$p" ]; then
+      makeWrapper "$p" $out/bin/qemu-kvm --add-flags "\$([ -e /dev/kvm ] && echo -enable-kvm)"
+    fi
+  '';
 
   meta = with stdenv.lib; {
     homepage = http://www.qemu.org/;
     description = "A generic and open source machine emulator and virtualizer";
     license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ viric shlevy eelco ];
-    platforms = platforms.linux;
+    maintainers = with maintainers; [ viric shlevy eelco wkennington ];
+    platforms = if type == "kvm-only" then platforms.linux else platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix
index 8d87e2ee50dd1..75dd10d8caa52 100644
--- a/pkgs/development/libraries/attr/default.nix
+++ b/pkgs/development/libraries/attr/default.nix
@@ -14,8 +14,9 @@ stdenv.mkDerivation rec {
 
   installTargets = "install install-lib install-dev";
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://savannah.nongnu.org/projects/attr/;
     description = "Library and tools for manipulating extended attributes";
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix
index 2e94626411e31..1e84276ec00d5 100644
--- a/pkgs/development/libraries/mesa/default.nix
+++ b/pkgs/development/libraries/mesa/default.nix
@@ -182,11 +182,11 @@ stdenv.mkDerivation {
 
   passthru = { inherit libdrm version driverLink; };
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "An open source implementation of OpenGL";
     homepage = http://www.mesa3d.org/;
     license = "bsd";
-    platforms = stdenv.lib.platforms.mesaPlatforms;
-    maintainers = with stdenv.lib.maintainers; [ eduarrrd simons vcunat ];
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ eduarrrd simons vcunat ];
   };
 }
diff --git a/pkgs/development/libraries/nspr/default.nix b/pkgs/development/libraries/nspr/default.nix
index 1494092fc47da..dd508d6874890 100644
--- a/pkgs/development/libraries/nspr/default.nix
+++ b/pkgs/development/libraries/nspr/default.nix
@@ -21,8 +21,9 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://www.mozilla.org/projects/nspr/;
     description = "Netscape Portable Runtime, a platform-neutral API for system-level and libc-like functions";
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/nss/default.nix b/pkgs/development/libraries/nss/default.nix
index 5b1675584866d..1b889c472f31a 100644
--- a/pkgs/development/libraries/nss/default.nix
+++ b/pkgs/development/libraries/nss/default.nix
@@ -79,8 +79,9 @@ in stdenv.mkDerivation rec {
     find $out/bin -type f \( -name nss-config -o -delete \)
   '';
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = https://developer.mozilla.org/en-US/docs/NSS;
     description = "A set of libraries for development of security-enabled client and server applications";
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/vde2/default.nix b/pkgs/tools/networking/vde2/default.nix
index 72a31262e26fc..282b6666aa455 100644
--- a/pkgs/tools/networking/vde2/default.nix
+++ b/pkgs/tools/networking/vde2/default.nix
@@ -10,8 +10,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ openssl libpcap python ];
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://vde.sourceforge.net/;
     description = "Virtual Distributed Ethernet, an Ethernet compliant virtual network";
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 8975493f7399f..711b86479d263 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9749,7 +9749,7 @@ let
 
   watch = callPackage ../os-specific/linux/procps/watch.nix { };
 
-  qemu_kvm = lowPrio (qemu.override { x86Only = true; });
+  qemu_kvm = lowPrio (qemu.override { type = "kvm-only"; });
 
   firmwareLinuxNonfree = callPackage ../os-specific/linux/firmware/firmware-linux-nonfree { };
 
@@ -11962,7 +11962,14 @@ let
 
   eiskaltdcpp = callPackage ../applications/networking/p2p/eiskaltdcpp { lua5 = lua5_1; };
 
-  qemu = callPackage ../applications/virtualization/qemu { };
+  qemu = callPackage ../applications/virtualization/qemu {
+    gtk = gtk3;
+    bluez = bluez5;
+    libusb = libusb1;
+    mesa = mesa_noglu;
+  };
+
+  qemu-nix = qemu.override { type = "nix"; };
 
   qmmp = callPackage ../applications/audio/qmmp { };