toxic: 0.15.1 -> 0.16.0
[NixPkgs.git] / pkgs / tools / compression / zstd / default.nix
blob27f66232b7adf03cac3d72f248aa7314f71d1fb4
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   cmake,
6   bash,
7   gnugrep,
8   fixDarwinDylibNames,
9   file,
10   legacySupport ? false,
11   static ? stdenv.hostPlatform.isStatic, # generates static libraries *only*
12   enableStatic ? static,
13   # these need to be ran on the host, thus disable when cross-compiling
14   buildContrib ? stdenv.hostPlatform == stdenv.buildPlatform,
15   doCheck ? stdenv.hostPlatform == stdenv.buildPlatform,
16   nix-update-script,
18   # for passthru.tests
19   libarchive,
20   rocksdb,
21   arrow-cpp,
22   libzip,
23   curl,
24   python3Packages,
25   haskellPackages,
28 stdenv.mkDerivation rec {
29   pname = "zstd";
30   version = "1.5.6";
32   src = fetchFromGitHub {
33     owner = "facebook";
34     repo = "zstd";
35     rev = "v${version}";
36     hash = "sha256-qcd92hQqVBjMT3hyntjcgk29o9wGQsg5Hg7HE5C0UNc=";
37   };
39   nativeBuildInputs = [ cmake ] ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
40   buildInputs = lib.optional stdenv.hostPlatform.isUnix bash;
42   patches = [
43     # This patches makes sure we do not attempt to use the MD5 implementation
44     # of the host platform when running the tests
45     ./playtests-darwin.patch
46   ];
48   postPatch = lib.optionalString (!static) ''
49     substituteInPlace build/cmake/CMakeLists.txt \
50       --replace 'message(SEND_ERROR "You need to build static library to build tests")' ""
51     substituteInPlace build/cmake/tests/CMakeLists.txt \
52       --replace 'libzstd_static' 'libzstd_shared'
53     sed -i \
54       "1aexport ${lib.optionalString stdenv.hostPlatform.isDarwin "DY"}LD_LIBRARY_PATH=$PWD/build_/lib" \
55       tests/playTests.sh
56   '';
58   cmakeFlags =
59     lib.attrsets.mapAttrsToList (name: value: "-DZSTD_${name}:BOOL=${if value then "ON" else "OFF"}")
60       {
61         BUILD_SHARED = !static;
62         BUILD_STATIC = enableStatic;
63         BUILD_CONTRIB = buildContrib;
64         PROGRAMS_LINK_SHARED = !static;
65         LEGACY_SUPPORT = legacySupport;
66         BUILD_TESTS = doCheck;
67       };
69   cmakeDir = "../build/cmake";
70   dontUseCmakeBuildDir = true;
71   preConfigure = ''
72     mkdir -p build_ && cd $_
73   '';
75   nativeCheckInputs = [ file ];
76   inherit doCheck;
77   checkPhase = ''
78     runHook preCheck
79     # Patch shebangs for playTests
80     patchShebangs ../programs/zstdgrep
81     ctest -R playTests # The only relatively fast test.
82     runHook postCheck
83   '';
85   preInstall =
86     ''
87       mkdir -p $bin/bin
88       substituteInPlace ../programs/zstdgrep \
89         --replace ":-grep" ":-${gnugrep}/bin/grep" \
90         --replace ":-zstdcat" ":-$bin/bin/zstdcat"
92       substituteInPlace ../programs/zstdless \
93         --replace "zstdcat" "$bin/bin/zstdcat"
94     ''
95     + lib.optionalString buildContrib (
96       ''
97         cp contrib/pzstd/pzstd $bin/bin/pzstd
98       ''
99       + lib.optionalString stdenv.hostPlatform.isDarwin ''
100         install_name_tool -change @rpath/libzstd.1.dylib $out/lib/libzstd.1.dylib $bin/bin/pzstd
101       ''
102     );
104   outputs =
105     [
106       "bin"
107       "dev"
108     ]
109     ++ lib.optional stdenv.hostPlatform.isUnix "man"
110     ++ [ "out" ];
112   passthru = {
113     updateScript = nix-update-script { };
114     tests = {
115       inherit libarchive rocksdb arrow-cpp;
116       libzip = libzip.override { withZstd = true; };
117       curl = curl.override { zstdSupport = true; };
118       python-zstd = python3Packages.zstd;
119       haskell-zstd = haskellPackages.zstd;
120       haskell-hs-zstd = haskellPackages.hs-zstd;
121     };
122   };
124   meta = with lib; {
125     description = "Zstandard real-time compression algorithm";
126     longDescription = ''
127       Zstd, short for Zstandard, is a fast lossless compression algorithm,
128       targeting real-time compression scenarios at zlib-level compression
129       ratio. Zstd can also offer stronger compression ratio at the cost of
130       compression speed. Speed/ratio trade-off is configurable by small
131       increment, to fit different situations. Note however that decompression
132       speed is preserved and remain roughly the same at all settings, a
133       property shared by most LZ compression algorithms, such as zlib.
134     '';
135     homepage = "https://facebook.github.io/zstd/";
136     changelog = "https://github.com/facebook/zstd/blob/v${version}/CHANGELOG";
137     license = with licenses; [ bsd3 ]; # Or, at your opinion, GPL-2.0-only.
138     mainProgram = "zstd";
139     platforms = platforms.all;
140     maintainers = with maintainers; [ orivej ];
141   };