diff options
30 files changed, 473 insertions, 80 deletions
diff --git a/lib/platforms.nix b/lib/platforms.nix index 0cd9485d4cc..6b56e1734ad 100644 --- a/lib/platforms.nix +++ b/lib/platforms.nix @@ -20,5 +20,5 @@ rec { openbsd = ["i686-openbsd" "x86_64-openbsd"]; unix = linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos; - mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux"]; + mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux"]; } diff --git a/maintainers/scripts/hydra-eval-failures.py b/maintainers/scripts/hydra-eval-failures.py new file mode 100755 index 00000000000..1b5df32c452 --- /dev/null +++ b/maintainers/scripts/hydra-eval-failures.py @@ -0,0 +1,89 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i python -p pythonFull pythonPackages.requests pythonPackages.pyquery pythonPackages.click + +# To use, just execute this script with --help to display help. + +import subprocess +import json + +import click +import requests +from pyquery import PyQuery as pq + + +maintainers_json = subprocess.check_output([ + 'nix-instantiate', + 'lib/maintainers.nix', + '--eval', + '--json']) +maintainers = json.loads(maintainers_json) +MAINTAINERS = {v: k for k, v in maintainers.iteritems()} + + +def get_response_text(url): + return pq(requests.get(url).text) # IO + +EVAL_FILE = { + 'nixos': 'nixos/release.nix', + 'nixpkgs': 'pkgs/top-level/release.nix', +} + + +def get_maintainers(attr_name): + nixname = attr_name.split('.') + meta_json = subprocess.check_output([ + 'nix-instantiate', + '--eval', + '--strict', + '-A', + '.'.join(nixname[1:]) + '.meta', + EVAL_FILE[nixname[0]], + '--json']) + meta = json.loads(meta_json) + if meta.get('maintainers'): + return [MAINTAINERS[name] for name in meta['maintainers'] if MAINTAINERS.get(name)] + + +@click.command() +@click.option( + '--jobset', + default="nixos/release-16.09", + help='Hydra project like nixos/release-16.09') +def cli(jobset): + """ + Given a Hydra project, inspect latest evaluation + and print a summary of failed builds + """ + + url = "http://hydra.nixos.org/jobset/{}".format(jobset) + + # get the last evaluation + click.echo(click.style( + 'Getting latest evaluation for {}'.format(url), fg='green')) + d = get_response_text(url) + evaluations = d('#tabs-evaluations').find('a[class="row-link"]') + latest_eval_url = evaluations[0].get('href') + + # parse last evaluation page + click.echo(click.style( + 'Parsing evaluation {}'.format(latest_eval_url), fg='green')) + d = get_response_text(latest_eval_url + '?full=1') + + # TODO: aborted evaluations + # TODO: dependency failed without propagated builds + for tr in d('img[alt="Failed"]').parents('tr'): + a = pq(tr)('a')[1] + print "- [ ] [{}]({})".format(a.text, a.get('href')) + + maintainers = get_maintainers(a.text) + if maintainers: + print " - maintainers: {}".format(", ".join(map(lambda u: '@' + u, maintainers))) + # TODO: print last three persons that touched this file + # TODO: pinpoint the diff that broke this build, or maybe it's transient or maybe it never worked? + + +if __name__ == "__main__": + try: + cli() + except: + import pdb;pdb.post_mortem() diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 5cdcca29c89..ca61916173b 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -328,6 +328,7 @@ ./services/monitoring/scollector.nix ./services/monitoring/smartd.nix ./services/monitoring/statsd.nix + ./services/monitoring/sysstat.nix ./services/monitoring/systemhealth.nix ./services/monitoring/teamviewer.nix ./services/monitoring/telegraf.nix diff --git a/nixos/modules/services/monitoring/arbtt.nix b/nixos/modules/services/monitoring/arbtt.nix index 27d59e367d5..1135c2c441c 100644 --- a/nixos/modules/services/monitoring/arbtt.nix +++ b/nixos/modules/services/monitoring/arbtt.nix @@ -49,7 +49,7 @@ in { config = mkIf cfg.enable { systemd.user.services.arbtt = { description = "arbtt statistics capture service"; - wantedBy = [ "multi-user.target" ]; + wantedBy = [ "default.target" ]; serviceConfig = { Type = "simple"; diff --git a/pkgs/applications/graphics/scantailor/default.nix b/pkgs/applications/graphics/scantailor/default.nix index 36f7545a053..ec7af882907 100644 --- a/pkgs/applications/graphics/scantailor/default.nix +++ b/pkgs/applications/graphics/scantailor/default.nix @@ -1,15 +1,17 @@ {stdenv, fetchurl, qt4, cmake, libjpeg, libtiff, boost }: stdenv.mkDerivation rec { - name = "scantailor-0.9.11.1"; + name = "scantailor-0.9.12.1"; src = fetchurl { - url = "https://github.com/scantailor/scantailor/archive/RELEASE_0_9_11_1.tar.gz"; - sha256 = "1z06yg228r317m8ab3mywg0wbpj0x2llqj187bh4g3k4xc2fcm8m"; + url = "https://github.com/scantailor/scantailor/archive/RELEASE_0_9_12_1.tar.gz"; + sha256 = "1pjx3a6hs16az6rki59bchy3biy7jndjx8r125q01aq7lbf5npgg"; }; buildInputs = [ qt4 cmake libjpeg libtiff boost ]; + enableParallelBuilding = true; + meta = { homepage = http://scantailor.org/; description = "Interactive post-processing tool for scanned pages"; diff --git a/pkgs/applications/video/cinelerra/default.nix b/pkgs/applications/video/cinelerra/default.nix index b250f9496d6..e3d1e1b1bfd 100644 --- a/pkgs/applications/video/cinelerra/default.nix +++ b/pkgs/applications/video/cinelerra/default.nix @@ -2,8 +2,9 @@ , pkgconfig, faad2, faac, a52dec, alsaLib, fftw, lame, libavc1394 , libiec61883, libraw1394, libsndfile, libvorbis, libogg, libjpeg , libtiff, freetype, mjpegtools, x264, gettext, openexr -, libXext, libXxf86vm, libXv, libXi, libX11, xextproto, libtheora, libpng -, libdv, libuuid, file, nasm, perl }: +, libXext, libXxf86vm, libXv, libXi, libX11, libXft, xextproto, libtheora, libpng +, libdv, libuuid, file, nasm, perl +, fontconfig, intltool }: stdenv.mkDerivation { name = "cinelerra-git"; @@ -15,8 +16,16 @@ stdenv.mkDerivation { src = fetchgit { url = "git://git.cinelerra-cv.org/j6t/cinelerra.git"; - rev = "01dc4375a0fb65d10dd95151473d0e195239175f"; - sha256 = "0grz644vrnajhxn96x05a3rlwrbd20yq40sw3y5yg7bvi96900gf"; + # 2.3 + #rev = "58ef118e63bf2fac8c99add372c584e93b008bae"; + #sha256 = "1wx8c9rvh4y7fgg39lb02cy3sanms8a4fayr70jbhcb4rp691lph"; + # master 22 nov 2016 + #rev = "dbc22e0f35a9e8c274b06d4075b51dc9bace34aa"; + #sha256 = "0c76j98ws1x2s5hzcdlykxm2bi7987d9nanka428xj62id0grla5"; + + # j6t/cinelerra.git + rev = "454be60e201c18c1fc3f1f253a6d2184fcfc94c4"; + sha256 = "1n4kshqhgnr7aivsi8dgx48phyd2nzvv4szbc82mndklvs9jfb7r"; }; # touch config.rpath: work around bug in automake 1.10 ? @@ -34,12 +43,15 @@ stdenv.mkDerivation { a52dec alsaLib fftw lame libavc1394 libiec61883 libraw1394 libsndfile libvorbis libogg libjpeg libtiff freetype mjpegtools x264 gettext openexr - libXext libXxf86vm libXv libXi libX11 xextproto + libXext libXxf86vm libXv libXi libX11 libXft xextproto libtheora libpng libdv libuuid nasm perl + fontconfig intltool ]; + enableParallelBuilding = true; + meta = { description = "Video Editor"; homepage = http://www.cinelerra.org; diff --git a/pkgs/applications/video/shotcut/default.nix b/pkgs/applications/video/shotcut/default.nix index 34c5650e9f7..03d597cac58 100644 --- a/pkgs/applications/video/shotcut/default.nix +++ b/pkgs/applications/video/shotcut/default.nix @@ -5,11 +5,11 @@ qmakeHook, makeQtWrapper }: stdenv.mkDerivation rec { name = "shotcut-${version}"; - version = "16.10"; + version = "17.01"; src = fetchurl { url = "https://github.com/mltframework/shotcut/archive/v${version}.tar.gz"; - sha256 = "0brskci86bwdj2ahjfvv3v254ligjn97bm0f6c8yg46r0jb8q5xw"; + sha256 = "1f3276q58rvw1brxfnm9z3v99fx63wml6j02sgmpzazw3172lnpg"; }; buildInputs = [ SDL frei0r gettext mlt pkgconfig qtbase qtmultimedia qtwebkit @@ -17,10 +17,17 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; + prePatch = '' + sed 's_shotcutPath, "qmelt"_"${mlt}/bin/melt"_' -i src/jobs/meltjob.cpp + sed 's_shotcutPath, "ffmpeg"_"${mlt.ffmpeg}/bin/ffmpeg"_' -i src/jobs/ffmpegjob.cpp + NICE=$(type -P nice) + sed "s_/usr/bin/nice_''${NICE}_" -i src/jobs/meltjob.cpp src/jobs/ffmpegjob.cpp + ''; + postInstall = '' mkdir -p $out/share/shotcut cp -r src/qml $out/share/shotcut/ - wrapQtProgram $out/bin/shotcut --prefix FREI0R_PATH : ${frei0r}/lib/frei0r-1 --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ jack1 SDL ]} + wrapQtProgram $out/bin/shotcut --prefix FREI0R_PATH : ${frei0r}/lib/frei0r-1 --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ jack1 SDL ]} --prefix PATH : ${mlt}/bin ''; meta = with stdenv.lib; { diff --git a/pkgs/development/compilers/rust/nightlyBin.nix b/pkgs/development/compilers/rust/nightlyBin.nix index bac35c790d0..5f92e5c6d92 100644 --- a/pkgs/development/compilers/rust/nightlyBin.nix +++ b/pkgs/development/compilers/rust/nightlyBin.nix @@ -9,7 +9,7 @@ let bootstrapHash = if stdenv.system == "x86_64-linux" - then "05bppmc6hqgv2g4x76rj95xf40x2aikqmcnql5li27rqwliyxznj" + then "1v7jvwigb29m15wilzcrk5jmlpaccpzbkhlzf7z5qw08320gvc91" else throw "missing boostrap hash for platform ${stdenv.system}"; needsPatchelf = stdenv.isLinux; @@ -19,7 +19,7 @@ let sha256 = bootstrapHash; }; - version = "2016-12-29"; + version = "2017-01-26"; in rec { diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index a3082989855..5b8df262877 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -1190,6 +1190,9 @@ self: super: { optparse-applicative = self.optparse-applicative_0_13_0_0; }); + # No upstream issue tracker + hspec-expectations-pretty-diff = dontCheck super.hspec-expectations-pretty-diff; + lentil = super.lentil.overrideScope (self: super: { pipes = self.pipes_4_3_2; optparse-applicative = self.optparse-applicative_0_13_0_0; diff --git a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml index 23e452baa78..bd4b212b52b 100644 --- a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml +++ b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml @@ -3060,7 +3060,6 @@ dont-distribute-packages: crypto-enigma: [ i686-linux, x86_64-linux, x86_64-darwin ] crypto-multihash: [ i686-linux, x86_64-linux, x86_64-darwin ] crypto-random-effect: [ i686-linux, x86_64-linux, x86_64-darwin ] - cryptonite-openssl: [ i686-linux, x86_64-linux, x86_64-darwin ] cryptsy-api: [ i686-linux, x86_64-linux, x86_64-darwin ] crystalfontz: [ i686-linux, x86_64-linux, x86_64-darwin ] cse-ghc-plugin: [ i686-linux, x86_64-linux, x86_64-darwin ] @@ -4731,7 +4730,6 @@ dont-distribute-packages: hsparql: [ i686-linux, x86_64-linux, x86_64-darwin ] hspear: [ i686-linux, x86_64-linux, x86_64-darwin ] hspec-expectations-lifted: [ i686-linux, x86_64-linux, x86_64-darwin ] - hspec-expectations-pretty-diff: [ i686-linux, x86_64-linux, x86_64-darwin ] hspec-expectations-pretty: [ i686-linux, x86_64-linux, x86_64-darwin ] hspec-experimental: [ i686-linux, x86_64-linux, x86_64-darwin ] hspec-golden-aeson: [ i686-linux, x86_64-linux, x86_64-darwin ] diff --git a/pkgs/development/interpreters/spidermonkey/17.nix b/pkgs/development/interpreters/spidermonkey/17.nix index 1b6eb98b49d..33acb792f76 100644 --- a/pkgs/development/interpreters/spidermonkey/17.nix +++ b/pkgs/development/interpreters/spidermonkey/17.nix @@ -22,6 +22,7 @@ stdenv.mkDerivation rec { sed -i 's/(defined\((@TEMPLATE_FILE)\))/\1/' config/milestone.pl '' + stdenv.lib.optionalString stdenv.isAarch64 '' patch -p1 -d ../.. < ${./aarch64-double-conversion.patch} + patch -p1 -d ../.. < ${./aarch64-48bit-va-fix.patch} ''; preConfigure = '' diff --git a/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch b/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch new file mode 100644 index 00000000000..8258a46b174 --- /dev/null +++ b/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch @@ -0,0 +1,106 @@ +From a0c0f32299419359b44ac0f880c1ea9073ae51e1 Mon Sep 17 00:00:00 2001 +From: Zheng Xu <zheng.xu@linaro.org> +Date: Fri, 02 Sep 2016 17:40:05 +0800 +Subject: [PATCH] Bug 1143022 - Manually mmap on arm64 to ensure high 17 bits are clear. r=ehoogeveen + +There might be 48-bit VA on arm64 depending on kernel configuration. +Manually mmap heap memory to align with the assumption made by JS engine. + +Change-Id: Ic5d2b2fe4b758b3c87cc0688348af7e71a991146 +--- + +diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp +index 5b386a2..38101cf 100644 +--- a/js/src/gc/Memory.cpp ++++ b/js/src/gc/Memory.cpp +@@ -309,6 +309,75 @@ + #endif + } + ++static inline void * ++MapMemory(size_t length, int prot, int flags, int fd, off_t offset) ++{ ++#if defined(__ia64__) ++ /* ++ * The JS engine assumes that all allocated pointers have their high 17 bits clear, ++ * which ia64's mmap doesn't support directly. However, we can emulate it by passing ++ * mmap an "addr" parameter with those bits clear. The mmap will return that address, ++ * or the nearest available memory above that address, providing a near-guarantee ++ * that those bits are clear. If they are not, we return NULL below to indicate ++ * out-of-memory. ++ * ++ * The addr is chosen as 0x0000070000000000, which still allows about 120TB of virtual ++ * address space. ++ * ++ * See Bug 589735 for more information. ++ */ ++ void *region = mmap((void*)0x0000070000000000, length, prot, flags, fd, offset); ++ if (region == MAP_FAILED) ++ return MAP_FAILED; ++ /* ++ * If the allocated memory doesn't have its upper 17 bits clear, consider it ++ * as out of memory. ++ */ ++ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { ++ JS_ALWAYS_TRUE(0 == munmap(region, length)); ++ return MAP_FAILED; ++ } ++ return region; ++#elif defined(__aarch64__) ++ /* ++ * There might be similar virtual address issue on arm64 which depends on ++ * hardware and kernel configurations. But the work around is slightly ++ * different due to the different mmap behavior. ++ * ++ * TODO: Merge with the above code block if this implementation works for ++ * ia64 and sparc64. ++ */ ++ const uintptr_t start = (uintptr_t)(0x0000070000000000UL); ++ const uintptr_t end = (uintptr_t)(0x0000800000000000UL); ++ const uintptr_t step = ChunkSize; ++ /* ++ * Optimization options if there are too many retries in practice: ++ * 1. Examine /proc/self/maps to find an available address. This file is ++ * not always available, however. In addition, even if we examine ++ * /proc/self/maps, we may still need to retry several times due to ++ * racing with other threads. ++ * 2. Use a global/static variable with lock to track the addresses we have ++ * allocated or tried. ++ */ ++ uintptr_t hint; ++ void* region = MAP_FAILED; ++ for (hint = start; region == MAP_FAILED && hint + length <= end; hint += step) { ++ region = mmap((void*)hint, length, prot, flags, fd, offset); ++ if (region != MAP_FAILED) { ++ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { ++ if (munmap(region, length)) { ++ MOZ_ASSERT(errno == ENOMEM); ++ } ++ region = MAP_FAILED; ++ } ++ } ++ } ++ return region == MAP_FAILED ? NULL : region; ++#else ++ return mmap(NULL, length, prot, flags, fd, offset); ++#endif ++} ++ + void * + MapAlignedPages(size_t size, size_t alignment) + { +@@ -322,12 +391,12 @@ + + /* Special case: If we want page alignment, no further work is needed. */ + if (alignment == PageSize) { +- return mmap(NULL, size, prot, flags, -1, 0); ++ return MapMemory(size, prot, flags, -1, 0); + } + + /* Overallocate and unmap the region's edges. */ + size_t reqSize = Min(size + 2 * alignment, 2 * size); +- void *region = mmap(NULL, reqSize, prot, flags, -1, 0); ++ void *region = MapMemory(reqSize, prot, flags, -1, 0); + if (region == MAP_FAILED) + return NULL; + diff --git a/pkgs/development/libraries/libdrm/default.nix b/pkgs/development/libraries/libdrm/default.nix index 38d072bc450..3dddd138438 100644 --- a/pkgs/development/libraries/libdrm/default.nix +++ b/pkgs/development/libraries/libdrm/default.nix @@ -19,7 +19,8 @@ stdenv.mkDerivation rec { preConfigure = stdenv.lib.optionalString stdenv.isDarwin "echo : \\\${ac_cv_func_clock_gettime=\'yes\'} > config.cache"; - configureFlags = [ "--enable-freedreno" "--disable-valgrind" ] + configureFlags = [ "--disable-valgrind" ] + ++ stdenv.lib.optionals (stdenv.isArm || stdenv.isAarch64) [ "--enable-tegra-experimental-api" "--enable-etnaviv-experimental-api" ] ++ stdenv.lib.optional stdenv.isDarwin "-C"; crossAttrs.configureFlags = configureFlags ++ [ "--disable-intel" ]; diff --git a/pkgs/development/libraries/libmsgpack/1.4.nix b/pkgs/development/libraries/libmsgpack/1.4.nix new file mode 100644 index 00000000000..2779162feb8 --- /dev/null +++ b/pkgs/development/libraries/libmsgpack/1.4.nix @@ -0,0 +1,12 @@ +{ callPackage, fetchFromGitHub, ... } @ args: + +callPackage ./generic.nix (args // rec { + version = "1.4.2"; + + src = fetchFromGitHub { + owner = "msgpack"; + repo = "msgpack-c"; + rev = "cpp-${version}"; + sha256 = "0zlanifi5hmm303pzykpidq5jbapl891zwkwhkllfn8ab1jvzbaa"; + }; +}) diff --git a/pkgs/development/libraries/libvpx/default.nix b/pkgs/development/libraries/libvpx/default.nix index 7d37393d433..53feba1d191 100644 --- a/pkgs/development/libraries/libvpx/default.nix +++ b/pkgs/development/libraries/libvpx/default.nix @@ -44,8 +44,6 @@ let inherit (stdenv.lib) enableFeature optional optionals; in -assert isi686 || isx86_64 || isArm || isMips; # Requires ARM with floating point support - assert vp8DecoderSupport || vp8EncoderSupport || vp9DecoderSupport || vp9EncoderSupport; assert internalStatsSupport && (vp9DecoderSupport || vp9EncoderSupport) -> postprocSupport; /* If spatialResamplingSupport not enabled, build will fail with undeclared variable errors. diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 2fc1bfea084..e5cbe8977f0 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -67,13 +67,14 @@ stdenv.mkDerivation { "--with-dri-driverdir=$(drivers)/lib/dri" "--with-dri-searchpath=${driverLink}/lib/dri" "--with-egl-platforms=x11,wayland,drm" - ] - ++ optionals (stdenv.system != "armv7l-linux") [ - "--with-gallium-drivers=svga,i915,ilo,r300,r600,radeonsi,nouveau,freedreno,swrast" + ] ++ (if stdenv.isArm || stdenv.isAarch64 then [ + "--with-gallium-drivers=nouveau,freedreno,vc4,swrast" + "--with-dri-drivers=nouveau,swrast" + ] else [ + "--with-gallium-drivers=svga,i915,ilo,r300,r600,radeonsi,nouveau,swrast" "--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast" "--with-vulkan-drivers=intel" - ] - ++ [ + ]) ++ [ (enableFeature enableTextureFloats "texture-float") (enableFeature grsecEnabled "glx-rts") (enableFeature stdenv.isLinux "dri3") @@ -134,14 +135,6 @@ stdenv.mkDerivation { $out/lib/libxatracker* \ $out/lib/libvulkan_* - # move share/vulkan/icd.d/ - mv $out/share/ $drivers/ - # Update search path used by Vulkan (it's pointing to $out but - # drivers are in $drivers) - for js in $drivers/share/vulkan/icd.d/*.json; do - substituteInPlace "$js" --replace "$out" "$drivers" - done - mv $out/lib/dri/* $drivers/lib/dri # */ rmdir "$out/lib/dri" @@ -154,6 +147,14 @@ stdenv.mkDerivation { # set the default search path for DRI drivers; used e.g. by X server substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${driverLink}" + '' + optionalString (!(stdenv.isArm || stdenv.isAarch64)) '' + # move share/vulkan/icd.d/ + mv $out/share/ $drivers/ + # Update search path used by Vulkan (it's pointing to $out but + # drivers are in $drivers) + for js in $drivers/share/vulkan/icd.d/*.json; do + substituteInPlace "$js" --replace "$out" "$drivers" + done ''; # TODO: diff --git a/pkgs/development/libraries/mlt/qt-5.nix b/pkgs/development/libraries/mlt/qt-5.nix index 7633008b4be..5b255bd2d2b 100644 --- a/pkgs/development/libraries/mlt/qt-5.nix +++ b/pkgs/development/libraries/mlt/qt-5.nix @@ -1,19 +1,21 @@ { stdenv, fetchurl, SDL, ffmpeg, frei0r, libjack2, libdv, libsamplerate , libvorbis, libxml2, makeWrapper, movit, pkgconfig, sox, qtbase, qtsvg +, fftw, vid-stab, opencv3, ladspa-sdk }: stdenv.mkDerivation rec { name = "mlt-${version}"; - version = "6.2.0"; + version = "6.4.1"; src = fetchurl { url = "https://github.com/mltframework/mlt/archive/v${version}.tar.gz"; - sha256 = "1zwzfgxrcbwkxnkiwv0a1rzxdnnaly90yyarl9wdw84nx11ffbnx"; + sha256 = "10m3ry0b2pvqx3bk34qh5dq337nn8pkc2gzfyhsj4nv9abskln47"; }; buildInputs = [ SDL ffmpeg frei0r libjack2 libdv libsamplerate libvorbis libxml2 - makeWrapper movit pkgconfig qtbase qtsvg sox + makeWrapper movit pkgconfig qtbase qtsvg sox fftw vid-stab opencv3 + ladspa-sdk ]; # Mostly taken from: @@ -31,6 +33,10 @@ stdenv.mkDerivation rec { wrapProgram $out/bin/melt --prefix FREI0R_PATH : ${frei0r}/lib/frei0r-1 ''; + passthru = { + inherit ffmpeg; + }; + meta = with stdenv.lib; { description = "Open source multimedia framework, designed for television broadcasting"; homepage = http://www.mltframework.org/; diff --git a/pkgs/development/libraries/speexdsp/default.nix b/pkgs/development/libraries/speexdsp/default.nix index dc87c939278..9ec7d651ccb 100644 --- a/pkgs/development/libraries/speexdsp/default.nix +++ b/pkgs/development/libraries/speexdsp/default.nix @@ -18,7 +18,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--with-fft=gpl-fftw3" - ]; + ] ++ stdenv.lib.optional stdenv.isAarch64 "--disable-neon"; meta = with stdenv.lib; { hompage = http://www.speex.org/; diff --git a/pkgs/development/ocaml-modules/dolmen/default.nix b/pkgs/development/ocaml-modules/dolmen/default.nix new file mode 100644 index 00000000000..26876cad8c8 --- /dev/null +++ b/pkgs/development/ocaml-modules/dolmen/default.nix @@ -0,0 +1,27 @@ +{ stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild, menhir }: + +stdenv.mkDerivation rec { + name = "ocaml${ocaml.version}-dolmen-${version}"; + version = "0.2"; + src = fetchFromGitHub { + owner = "Gbury"; + repo = "dolmen"; + rev = "v${version}"; + sha256 = "1b9mf8p6mic0n76acx8x82hhgm2n40sdv0jri95im65l52223saf"; + }; + + buildInputs = [ ocaml findlib ocamlbuild ]; + propagatedBuildInputs = [ menhir ]; + + makeFlags = "-C src"; + + createFindlibDestdir = true; + + meta = { + description = "An OCaml library providing clean and flexible parsers for input languages"; + license = stdenv.lib.licenses.bsd2; + maintainers = [ stdenv.lib.maintainers.vbgl ]; + inherit (src.meta) homepage; + inherit (ocaml.meta) platforms; + }; +} diff --git a/pkgs/os-specific/linux/kmscube/default.nix b/pkgs/os-specific/linux/kmscube/default.nix new file mode 100644 index 00000000000..0b707ef7239 --- /dev/null +++ b/pkgs/os-specific/linux/kmscube/default.nix @@ -0,0 +1,23 @@ +{ stdenv, fetchFromGitHub, autoreconfHook, libdrm, libX11, mesa_noglu, pkgconfig }: + +stdenv.mkDerivation rec { + name = "kmscube-2016-09-19"; + + src = fetchFromGitHub { + owner = "robclark"; + repo = "kmscube"; + rev = "8c6a20901f95e1b465bbca127f9d47fcfb8762e6"; + sha256 = "045pf4q3g5b54cdbxppn1dxpcn81h630vmhrixz1d5bcl822nhwj"; + }; + + nativeBuildInputs = [ autoreconfHook pkgconfig ]; + buildInputs = [ libdrm libX11 mesa_noglu ]; + + meta = with stdenv.lib; { + description = "Example OpenGL app using KMS/GBM"; + homepage = "https://github.com/robclark/kmscube"; + license = licenses.mit; + maintainers = with maintainers; [ dezgeg ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/servers/felix/default.nix b/pkgs/servers/felix/default.nix index 17a50506fa9..5ce680e3646 100644 --- a/pkgs/servers/felix/default.nix +++ b/pkgs/servers/felix/default.nix @@ -1,10 +1,11 @@ {stdenv, fetchurl}: -stdenv.mkDerivation { - name = "apache-felix-2.0.5"; +stdenv.mkDerivation rec { + name = "apache-felix-${version}"; + version = "5.6.1"; src = fetchurl { - url = http://apache.xl-mirror.nl/felix/org.apache.felix.main.distribution-2.0.5.tar.gz; - sha256 = "14nva0q1b45kmmalcls5yx97syd4vn3vcp8gywck1098qhidi66g"; + url = "mirror://apache/felix/org.apache.felix.main.distribution-${version}.tar.gz"; + sha256 = "0kis26iajzdid162j4i7g558q09x4hn9z7pqqys6ipb0fj84hz1x"; }; buildCommand = '' @@ -15,7 +16,7 @@ stdenv.mkDerivation { ''; meta = with stdenv.lib; { description = "An OSGi gateway"; - homepage = http://felix.apache.org; + homepage = https://felix.apache.org; license = licenses.asl20; maintainers = [ maintainers.sander ]; }; diff --git a/pkgs/stdenv/linux/bootstrap-files/aarch64.nix b/pkgs/stdenv/linux/bootstrap-files/aarch64.nix index 7f1acc83433..4e9c17da2d9 100644 --- a/pkgs/stdenv/linux/bootstrap-files/aarch64.nix +++ b/pkgs/stdenv/linux/bootstrap-files/aarch64.nix @@ -1,11 +1,11 @@ { busybox = import <nix/fetchurl.nix> { - url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-for-merge/busybox; + url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-2017-01-27-264d42b9c/busybox; sha256 = "12qcml1l67skpjhfjwy7gr10nc86gqcwjmz9ggp7knss8gq8pv7f"; executable = true; }; bootstrapTools = import <nix/fetchurl.nix> { - url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-for-merge/bootstrap-tools.tar.xz; - sha256 = "10sqgh0dchp1906h06jznxh8gfflnzbpfy27hng2mmc1l0c7irjr"; + url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-2017-01-27-264d42b9c/bootstrap-tools.tar.xz; + sha256 = "13h7lgkjyxrmfkx5k1w6rj3j4iqrk28pqagiwqcg8izrydy318bi"; }; } diff --git a/pkgs/tools/networking/nuttcp/default.nix b/pkgs/tools/networking/nuttcp/default.nix new file mode 100644 index 00000000000..70f3d7e9c70 --- /dev/null +++ b/pkgs/tools/networking/nuttcp/default.nix @@ -0,0 +1,51 @@ +{ stdenv, fetchurl }: + +stdenv.mkDerivation rec { + name = "nuttcp-${version}"; + version = "8.1.4"; + + src = fetchurl { + urls = [ + "http://nuttcp.net/nuttcp/latest/${name}.c" + "http://nuttcp.net/nuttcp/${name}/${name}.c" + "http://nuttcp.net/nuttcp/beta/${name}.c" + ]; + sha256 = "1mygfhwxfi6xg0iycivx98ckak2abc3vwndq74278kpd8g0yyqyh"; + }; + + man = fetchurl { + url = "http://nuttcp.net/nuttcp/${name}/nuttcp.8"; + sha256 = "1yang94mcdqg362qbi85b63746hk6gczxrk619hyj91v5763n4vx"; + }; + + unpackPhase = ":"; + + buildPhase = '' + gcc -O2 -o nuttcp $src + ''; + + installPhase = '' + mkdir -p $out/bin + cp nuttcp $out/bin + ''; + + meta = with stdenv.lib; { + description = "Network performance measurement tool"; + longDescription = '' + nuttcp is a network performance measurement tool intended for use by + network and system managers. Its most basic usage is to determine the raw + TCP (or UDP) network layer throughput by transferring memory buffers from + a source system across an interconnecting network to a destination + system, either transferring data for a specified time interval, or + alternatively transferring a specified number of bytes. In addition to + reporting the achieved network throughput in Mbps, nuttcp also provides + additional useful information related to the data transfer such as user, + system, and wall-clock time, transmitter and receiver CPU utilization, + and loss percentage (for UDP transfers). + ''; + license = licenses.gpl2; + homepage = http://nuttcp.net/; + maintainers = with maintainers; [ viric ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/tools/networking/openconnect.nix b/pkgs/tools/networking/openconnect/default.nix index 2160bdda9e1..d9e3063f5c1 100644 --- a/pkgs/tools/networking/openconnect.nix +++ b/pkgs/tools/networking/openconnect/default.nix @@ -7,13 +7,13 @@ in assert xor (openssl != null) (gnutls != null); stdenv.mkDerivation rec { - name = "openconnect-7.06"; + name = "openconnect-7.08"; src = fetchurl { urls = [ "ftp://ftp.infradead.org/pub/openconnect/${name}.tar.gz" ]; - sha256 = "1wkhmgfxkdkhy2p9w9idrgipxmxij2z4f88flfk3fifwd19nkkzs"; + sha256 = "00wacb79l2c45f94gxs63b9z25wlciarasvjrb8jb8566wgyqi0w"; }; preConfigure = '' @@ -32,6 +32,10 @@ stdenv.mkDerivation rec { propagatedBuildInputs = [ vpnc openssl gnutls libxml2 zlib ]; meta = { + description = "VPN Client for Cisco's AnyConnect SSL VPN"; + homepage = http://www.infradead.org/openconnect/; + license = stdenv.lib.licenses.lgpl21; + maintainers = with stdenv.lib.maintainers; [ pradeepchhetri ]; platforms = stdenv.lib.platforms.linux; }; } diff --git a/pkgs/tools/security/tor/torbrowser.nix b/pkgs/tools/security/tor/torbrowser.nix index 7661d42a5d6..490864ee2d5 100644 --- a/pkgs/tools/security/tor/torbrowser.nix +++ b/pkgs/tools/security/tor/torbrowser.nix @@ -3,16 +3,19 @@ , atk, pango, freetype, fontconfig, gdk_pixbuf, cairo, zlib , gstreamer, gst_plugins_base, gst_plugins_good, gst_ffmpeg, gmp, ffmpeg , libpulseaudio +, mediaSupport ? false }: let - libPath = stdenv.lib.makeLibraryPath [ + libPath = stdenv.lib.makeLibraryPath ([ stdenv.cc.cc zlib glib alsaLib dbus dbus_glib gtk2 atk pango freetype fontconfig gdk_pixbuf cairo libXrender libX11 libXext libXt + ] ++ stdenv.lib.optionals mediaSupport [ gstreamer gst_plugins_base gmp ffmpeg libpulseaudio - ] ; + ]); + # Ignored if !mediaSupport gstPlugins = [ gstreamer gst_plugins_base gst_plugins_good gst_ffmpeg ]; gstPluginsPath = stdenv.lib.concatMapStringsSep ":" (x: @@ -77,7 +80,9 @@ stdenv.mkDerivation rec { fi export FONTCONFIG_PATH=\$HOME/Data/fontconfig export LD_LIBRARY_PATH=${libPath}:$out/share/tor-browser/Browser/TorBrowser/Tor - export GST_PLUGIN_SYSTEM_PATH=${gstPluginsPath} + ${stdenv.lib.optionalString mediaSupport '' + export GST_PLUGIN_SYSTEM_PATH=${gstPluginsPath} + ''} exec $out/share/tor-browser/Browser/firefox --class "Tor Browser" -no-remote -profile ~/Data/Browser/profile.default "\$@" EOF chmod +x $out/bin/tor-browser diff --git a/pkgs/tools/security/vault/default.nix b/pkgs/tools/security/vault/default.nix index 96bb4cd482e..1eea59b71f3 100644 --- a/pkgs/tools/security/vault/default.nix +++ b/pkgs/tools/security/vault/default.nix @@ -4,12 +4,12 @@ let vaultBashCompletions = fetchFromGitHub { owner = "iljaweis"; repo = "vault-bash-completion"; - rev = "62c142e20929f930c893ebe3366350d735e81fbd"; - sha256 = "0nfv10ykjq9751ijdyq728gjlgldm1lxvrar8kf6nz6rdfnnl2n5"; + rev = "e2f59b64be1fa5430fa05c91b6274284de4ea77c"; + sha256 = "10m75rp3hy71wlmnd88grmpjhqy0pwb9m8wm19l0f463xla54frd"; }; in buildGoPackage rec { name = "vault-${version}"; - version = "0.6.3"; + version = "0.6.4"; goPackagePath = "github.com/hashicorp/vault"; @@ -17,7 +17,7 @@ in buildGoPackage rec { owner = "hashicorp"; repo = "vault"; rev = "v${version}"; - sha256 = "0cbaws106v5dxqjii1s9rmk55pm6y34jls35iggpx0pp1dd433xy"; + sha256 = "0rrrzkza12zbbfc24q4q7ygfczq1j8ljsjagsa8vpp3375dflzdy"; }; buildFlagsArray = '' @@ -26,7 +26,7 @@ in buildGoPackage rec { ''; postInstall = '' - mkdir -p $bin/share/bash-completion/completions/ + mkdir -p $bin/share/bash-completion/completions/ cp ${vaultBashCompletions}/vault-bash-completion.sh $bin/share/bash-completion/completions/vault ''; @@ -34,6 +34,6 @@ in buildGoPackage rec { homepage = https://www.vaultproject.io; description = "A tool for managing secrets"; license = licenses.mpl20; - maintainers = with maintainers; [ rushmorem offline ]; + maintainers = with maintainers; [ rushmorem offline pradeepchhetri ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e08c8bd8849..86b45daecb2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3080,6 +3080,8 @@ with pkgs; numlockx = callPackage ../tools/X11/numlockx { }; + nuttcp = callPackage ../tools/networking/nuttcp { }; + nssmdns = callPackage ../tools/networking/nss-mdns { }; nwdiag = pythonPackages.nwdiag; @@ -4202,11 +4204,11 @@ with pkgs; openconnect = openconnect_gnutls; - openconnect_openssl = callPackage ../tools/networking/openconnect.nix { + openconnect_openssl = callPackage ../tools/networking/openconnect { gnutls = null; }; - openconnect_gnutls = callPackage ../tools/networking/openconnect.nix { + openconnect_gnutls = callPackage ../tools/networking/openconnect { openssl = null; }; @@ -8191,6 +8193,7 @@ with pkgs; libmtp = callPackage ../development/libraries/libmtp { }; libmsgpack = callPackage ../development/libraries/libmsgpack { }; + libmsgpack_1_4 = callPackage ../development/libraries/libmsgpack/1.4.nix { }; libmysqlconnectorcpp = callPackage ../development/libraries/libmysqlconnectorcpp { mysql = mysql57; @@ -11090,6 +11093,8 @@ with pkgs; kmscon = callPackage ../os-specific/linux/kmscon { }; + kmscube = callPackage ../os-specific/linux/kmscube { }; + latencytop = callPackage ../os-specific/linux/latencytop { }; ldm = callPackage ../os-specific/linux/ldm { }; diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index 40f4ba85745..4f2a635e6ff 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -146,6 +146,8 @@ let ctypes = callPackage ../development/ocaml-modules/ctypes { }; + dolmen = callPackage ../development/ocaml-modules/dolmen { }; + dolog = callPackage ../development/ocaml-modules/dolog { }; easy-format = callPackage ../development/ocaml-modules/easy-format { }; diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index 9d8bf693078..70d01fbc143 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -386,11 +386,17 @@ let self = _self // overrides; _self = with self; { buildInputs = [ TestNoWarnings Moo TypeTiny ]; }; - ListCompare = buildPerlPackage { - name = "List-Compare-1.18"; + ListCompare = buildPerlPackage rec { + name = "List-Compare-0.53"; src = fetchurl { - url = mirror://cpan/authors/id/J/JK/JKEENAN/List-Compare-0.39.tar.gz; - sha256 = "1v4gn176faanzf1kr9axdp1220da7nkvz0d66mnk34nd0skjjxcl"; + url = "mirror://cpan/authors/id/J/JK/JKEENAN/${name}.tar.gz"; + sha256 = "fdbf4ff67b3135d44475fef7fcac0cd4706407d5720d26dca914860eb10f8550"; + }; + buildInputs = [ IOCaptureOutput ]; + meta = { + homepage = http://thenceforward.net/perl/modules/List-Compare/; + description = "Compare elements of two or more lists"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; }; }; @@ -6257,7 +6263,11 @@ let self = _self // overrides; _self = with self; { name = "HTML-Tiny-1.05"; src = fetchurl { url = "mirror://cpan/authors/id/A/AN/ANDYA/${name}.tar.gz"; - sha256 = "18zxg7z51f5daidnwl9vxsrs3lz0y6n5ddqhpb748bjyk3awkkfp"; + sha256 = "d7cdc9d5985e2e44ceba10b756acf1e0d3a1b3ee3b516e5b54adb850fe79fda3"; + }; + meta = { + description = "Lightweight, dependency free HTML/XML generation"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; }; }; @@ -6591,10 +6601,15 @@ let self = _self // overrides; _self = with self; { }; IOCaptureOutput = buildPerlPackage rec { - name = "IO-CaptureOutput-1.1103"; + name = "IO-CaptureOutput-1.1104"; src = fetchurl { url = "mirror://cpan/authors/id/D/DA/DAGOLDEN/${name}.tar.gz"; - sha256 = "1bcl7p87ysbzab6hssq19xn3djzc0yk9l4hk0a2mqbqb8hv6p0m5"; + sha256 = "fcc732fcb438f97a72b30e8c7796484bef2562e374553b207028e2fbf73f8330"; + }; + meta = { + homepage = https://github.com/dagolden/IO-CaptureOutput; + description = "Capture STDOUT and STDERR from Perl code, subprocesses or XS"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; }; }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8d54eef393a..aee320cea1f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3891,11 +3891,11 @@ in { cloudpickle = buildPythonPackage rec { name = "cloudpickle-${version}"; - version = "0.2.1"; + version = "0.2.2"; src = pkgs.fetchurl { url = "mirror://pypi/c/cloudpickle/${name}.tar.gz"; - sha256 = "0fsw28nmzrpk0g02y84d7pigkqr64a3x2jhhkfixplxfwravd97f"; + sha256 = "0x4fbycipkhfax7lydaxcnc14g42g274qba17j51shr5gbq6m8lx"; }; buildInputs = with self; [ pytest mock ]; @@ -5430,11 +5430,11 @@ in { dask = buildPythonPackage rec { name = "dask-${version}"; - version = "0.11.0"; + version = "0.13.0"; src = pkgs.fetchurl { url = "mirror://pypi/d/dask/${name}.tar.gz"; - sha256 = "ef32490c0b156584a71576dccec4dfe550a0cd81a9c131a4ee2e43c241b601c3"; + sha256 = "1f8r6jj9666cnvx3f8bilcx0017smmlw4i4v2p1nwxshs0k514hs"; }; buildInputs = with self; [ pytest ]; @@ -5493,13 +5493,14 @@ in { zict = buildPythonPackage rec { name = "zict-${version}"; - version = "0.0.3"; + version = "0.1.1"; src = pkgs.fetchurl { url = "mirror://pypi/z/zict/${name}.tar.gz"; - sha256 = "1xsrlzrih0qmxvxqhk2c5vhzxirf509fppzdfyardl50jpsllni6"; + sha256 = "12h95vbkbar1hc6cr1kpr6zr486grj3mpx4lznvmnai0iy6pbqp4"; }; + buildInputs = with self; [ pytest ]; propagatedBuildInputs = with self; [ heapdict ]; meta = { @@ -5513,17 +5514,17 @@ in { distributed = buildPythonPackage rec { name = "distributed-${version}"; - version = "1.13.3"; + version = "1.15.1"; src = pkgs.fetchurl { url = "mirror://pypi/d/distributed/${name}.tar.gz"; - sha256 = "0nka6hqz986j1fhvfmxffgvmnxh66giq9a3ml58jsaf0riq9mjrc"; + sha256 = "037a07sdf2ch1d360nqwqz3b4ld8msydng7mw4i5s902v7xr05l6"; }; buildInputs = with self; [ pytest docutils ]; propagatedBuildInputs = with self; [ dask six boto3 s3fs tblib locket msgpack click cloudpickle tornado - psutil botocore zict lz4 + psutil botocore zict lz4 sortedcollections sortedcontainers ] ++ (if !isPy3k then [ singledispatch ] else []); # py.test not picking up local config file, even when running @@ -5624,11 +5625,11 @@ in { s3fs = buildPythonPackage rec { name = "s3fs-${version}"; - version = "0.0.4"; + version = "0.0.8"; src = pkgs.fetchurl { url = "mirror://pypi/s/s3fs/${name}.tar.gz"; - sha256 = "0gxs9zf0j97liby038i89k5njfrpvdgw0jw34ghzvlp1nzbwxwzl"; + sha256 = "0zbdzqrim0zig94fk1hswg4vfdjplw6jpx3pdi42qc830h0nscn8"; }; buildInputs = with self; [ docutils ]; @@ -14610,6 +14611,26 @@ in { }; }; + sortedcollections = buildPythonPackage rec { + name = "sortedcollections-${version}"; + version = "0.4.2"; + + src = pkgs.fetchurl { + url = "mirror://pypi/s/sortedcollections/${name}.tar.gz"; + sha256 = "12dlzln9gyv8smsy2k6d6dmr0ywrpwyrr1cjy649ia5h1g7xdvwa"; + }; + buildInputs = [ self.sortedcontainers ]; + + # wants to test all python versions with tox: + doCheck = false; + + meta = { + description = "Python Sorted Collections"; + homepage = http://www.grantjenks.com/docs/sortedcollections/; + license = licenses.asl20; + }; + }; + hyperframe = buildPythonPackage rec { name = "hyperframe-${version}"; version = "4.0.1"; @@ -18063,11 +18084,11 @@ in { partd = buildPythonPackage rec { name = "partd-${version}"; - version = "0.3.6"; + version = "0.3.7"; src = pkgs.fetchurl { url = "mirror://pypi/p/partd/${name}.tar.gz"; - sha256 = "1wl8kifdljnpbz0ls7mbbc9j23fc5xzm639im7h88spyg02w68hm"; + sha256 = "066d254d2dh9xcanffgkjgwxpz5v0059b063bij10fvzl2y49hzx"; }; buildInputs = with self; [ pytest ]; @@ -25636,16 +25657,18 @@ in { toolz = buildPythonPackage rec{ name = "toolz-${version}"; - version = "0.8.0"; + version = "0.8.2"; src = pkgs.fetchurl{ url = "mirror://pypi/t/toolz/toolz-${version}.tar.gz"; - sha256 = "e8451af61face57b7c5d09e71c0d27b8005f001ead56e9fdf470417e5cc6d479"; + sha256 = "0l3czks4xy37i8099waxk2fdz5g0k1dwys2mkhlxc0b0886cj4sa"; }; buildInputs = with self; [ nose ]; checkPhase = '' + # https://github.com/pytoolz/toolz/issues/357 + rm toolz/tests/test_serialization.py nosetests toolz/tests ''; |