summary refs log tree commit diff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-11-01 19:08:08 +0300
committerIgor Pashev <pashev.igor@gmail.com>2014-11-01 18:59:20 +0100
commitce5cc9d803c88da4062703645aaea0fc9ea6924a (patch)
tree1b52cf1729facb6f7115a820be1018c2823244a3
parentccfc8b8ca1fc71d1ff2e259b5792205e9b7f53e0 (diff)
downloadnixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar.gz
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar.bz2
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar.lz
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar.xz
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.tar.zst
nixpkgs-ce5cc9d803c88da4062703645aaea0fc9ea6924a.zip
Added pxz
-rw-r--r--pkgs/tools/compression/pxz/_SC_ARG_MAX.patch36
-rw-r--r--pkgs/tools/compression/pxz/default.nix43
-rw-r--r--pkgs/top-level/all-packages.nix2
3 files changed, 81 insertions, 0 deletions
diff --git a/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch b/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
new file mode 100644
index 00000000000..fac8f1fc147
--- /dev/null
+++ b/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
@@ -0,0 +1,36 @@
+From b8f9827fc4de9296c7a6f5e6fdac46e070cd6cb4 Mon Sep 17 00:00:00 2001
+From: Igor Pashev <pashev.igor@gmail.com>
+Date: Sat, 1 Nov 2014 18:10:05 +0300
+Subject: [PATCH] Fixed crash on Linux when stack size is unlimited
+
+---
+ pxz.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/pxz.c b/pxz.c
+index 9cb843e..52713e2 100644
+--- a/pxz.c
++++ b/pxz.c
+@@ -65,7 +65,7 @@ FILE **ftemp;
+ char str[0x100];
+ char buf[BUFFSIZE];
+ char *xzcmd;
+-size_t xzcmd_max;
++const size_t xzcmd_max = 10240;
+ 
+ unsigned opt_complevel = 6, opt_stdout, opt_keep, opt_threads, opt_verbose;
+ unsigned opt_force, opt_stdout;
+@@ -243,9 +243,12 @@ int main( int argc, char **argv ) {
+ 	lzma_filter filters[LZMA_FILTERS_MAX + 1];
+ 	lzma_options_lzma lzma_options;
+ 	
+-	xzcmd_max = sysconf(_SC_ARG_MAX);
+ 	page_size = sysconf(_SC_PAGE_SIZE);
+ 	xzcmd = malloc(xzcmd_max);
++	if (!xzcmd) {
++		fprintf(stderr, "Failed to allocate %lu bytes for xz command.\n", xzcmd_max);
++		return -1;
++	}
+ 	snprintf(xzcmd, xzcmd_max, XZ_BINARY);
+ 	
+ 	parse_args(argc, argv);
diff --git a/pkgs/tools/compression/pxz/default.nix b/pkgs/tools/compression/pxz/default.nix
new file mode 100644
index 00000000000..07c3e205a98
--- /dev/null
+++ b/pkgs/tools/compression/pxz/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchgit, xz, lzma }:
+
+let name = "pxz";
+    version = "4.999.9beta+git";
+in
+stdenv.mkDerivation {
+  name = name + "-" + version;
+
+  src = fetchgit {
+    url = "https://github.com/jnovy/pxz.git";
+    rev = "ae808463c2950edfdedb8fb49f95006db0a18667";
+    sha256 = "0na2kw8cf0qd8l1aywlv9m3xrxnqlcwxfdwp3f7x9vxwqx3k32kc";
+  };
+
+  buildInputs = [ lzma ];
+
+  patches = [ ./_SC_ARG_MAX.patch ];
+
+  buildPhase = ''
+    gcc -o pxz pxz.c -llzma \
+        -fopenmp -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2 \
+        -DPXZ_BUILD_DATE=\"nixpkgs\" \
+        -DXZ_BINARY=\"${xz}/bin/xz\" \
+        -DPXZ_VERSION=\"${version}\"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp pxz $out/bin
+    cp pxz.1 $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = "https://jnovy.fedorapeople.org/pxz/";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [pashev];
+    description = ''Parallel XZ is a compression utility that takes advantage of
+      running LZMA compression of different parts of an input file on multiple
+      cores and processors simultaneously. Its primary goal is to utilize all
+      resources to speed up compression time with minimal possible influence
+      on compression ratio'';
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 7e93964838d..2c9aa00f135 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1381,6 +1381,8 @@ let
 
   pigz = callPackage ../tools/compression/pigz { };
 
+  pxz = callPackage ../tools/compression/pxz { };
+
   haproxy = callPackage ../tools/networking/haproxy { };
 
   haveged = callPackage ../tools/security/haveged { };