diff options
-rw-r--r-- | pkgs/applications/virtualization/qemu/default.nix | 266 | ||||
-rw-r--r-- | pkgs/development/libraries/attr/default.nix | 3 | ||||
-rw-r--r-- | pkgs/development/libraries/mesa/default.nix | 6 | ||||
-rw-r--r-- | pkgs/development/libraries/nspr/default.nix | 3 | ||||
-rw-r--r-- | pkgs/development/libraries/nss/default.nix | 3 | ||||
-rw-r--r-- | pkgs/tools/networking/vde2/default.nix | 3 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 11 |
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 { }; |