diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/misc/parallel')
-rw-r--r-- | nixpkgs/pkgs/tools/misc/parallel/default.nix | 55 | ||||
-rw-r--r-- | nixpkgs/pkgs/tools/misc/parallel/fix-max-line-length-allowed.diff | 17 | ||||
-rw-r--r-- | nixpkgs/pkgs/tools/misc/parallel/wrapper.nix | 13 |
3 files changed, 85 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/misc/parallel/default.nix b/nixpkgs/pkgs/tools/misc/parallel/default.nix new file mode 100644 index 000000000000..45439afe3d11 --- /dev/null +++ b/nixpkgs/pkgs/tools/misc/parallel/default.nix @@ -0,0 +1,55 @@ +{ fetchurl, stdenv, perl, makeWrapper, procps, coreutils }: + +stdenv.mkDerivation rec { + name = "parallel-20200922"; + + src = fetchurl { + url = "mirror://gnu/parallel/${name}.tar.bz2"; + sha256 = "0wj19kwjk0hwm8bk9yfcf3rpr0314lmjy5xxlvvdqnbbc4ml2418"; + }; + + patches = [ + ./fix-max-line-length-allowed.diff + ]; + + postPatch = '' + substituteInPlace src/parallel --subst-var-by coreutils ${coreutils} + ''; + + outputs = [ "out" "man" ]; + + nativeBuildInputs = [ makeWrapper ]; + buildInputs = [ perl procps ]; + + postInstall = '' + wrapProgram $out/bin/parallel \ + --prefix PATH : "${stdenv.lib.makeBinPath [ procps perl ]}" + ''; + + doCheck = true; + + meta = with stdenv.lib; { + description = "Shell tool for executing jobs in parallel"; + longDescription = + '' GNU Parallel is a shell tool for executing jobs in parallel. A job + is typically a single command or a small script that has to be run + for each of the lines in the input. The typical input is a list of + files, a list of hosts, a list of users, or a list of tables. + + If you use xargs today you will find GNU Parallel very easy to use. + If you write loops in shell, you will find GNU Parallel may be able + to replace most of the loops and make them run faster by running + jobs in parallel. If you use ppss or pexec you will find GNU + Parallel will often make the command easier to read. + + GNU Parallel makes sure output from the commands is the same output + as you would get had you run the commands sequentially. This makes + it possible to use output from GNU Parallel as input for other + programs. + ''; + homepage = "https://www.gnu.org/software/parallel/"; + license = licenses.gpl3Plus; + platforms = platforms.all; + maintainers = with maintainers; [ pSub vrthra tomberek ]; + }; +} diff --git a/nixpkgs/pkgs/tools/misc/parallel/fix-max-line-length-allowed.diff b/nixpkgs/pkgs/tools/misc/parallel/fix-max-line-length-allowed.diff new file mode 100644 index 000000000000..c6d501ecb22a --- /dev/null +++ b/nixpkgs/pkgs/tools/misc/parallel/fix-max-line-length-allowed.diff @@ -0,0 +1,17 @@ +Correct path to coreutils echo to fix parallel --max-line-length-allowed. + +Author: Bjørn Forsman + +diff --git a/src/parallel b/src/parallel +index a047fd94..9fc5f671 100755 +--- a/src/parallel ++++ b/src/parallel +@@ -11580,7 +11580,7 @@ sub is_acceptable_command_line_length($$) { + $len += length $Global::parallel_env; + } + # Force using non-built-in command +- ::qqx("/bin/echo ".${string}x(($len-length "/bin/echo ")/length $string)); ++ ::qqx("@coreutils@/bin/echo ".${string}x(($len-length "@coreutils@/bin/echo ")/length $string)); + ::debug("init", "$len=$? "); + return not $?; + } diff --git a/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix new file mode 100644 index 000000000000..b85dfc56f3d6 --- /dev/null +++ b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix @@ -0,0 +1,13 @@ +{ parallel, makeWrapper , runCommand +, perlPackages +, extraPerlPackages ? + with perlPackages; [ DBI DBDPg DBDSQLite DBDCSV TextCSV ] +}: + +runCommand "parallel-full" { + nativeBuildInputs = [ makeWrapper ]; + } '' + mkdir -p $out/bin + makeWrapper ${parallel}/bin/parallel $out/bin/parallel \ + --set PERL5LIB "${perlPackages.makeFullPerlPath extraPerlPackages}" + '' |