1{ lib
2, buildPythonPackage
3, fetchFromGitHub
4, fetchpatch
5, pytestCheckHook
6, p7zip
7, cabextract
8, zip
9, lzip
10, zpaq
11, gnutar
12, gnugrep
13, diffutils
14, file
15, gzip
16, bzip2
17, xz
18}:
19
20# unrar is unfree, as well as 7z with unrar support, not including it (patool doesn't support unar)
21# it will still use unrar if present in the path
22
23let
24 compression-utilities = [
25 p7zip
26 gnutar
27 cabextract
28 zip
29 lzip
30 zpaq
31 gzip
32 gnugrep
33 diffutils
34 bzip2
35 file
36 xz
37 ];
38in
39buildPythonPackage rec {
40 pname = "patool";
41 version = "1.12";
42 format = "setuptools";
43
44 #pypi doesn't have test data
45 src = fetchFromGitHub {
46 owner = "wummel";
47 repo = pname;
48 rev = "upstream/${version}";
49 hash = "sha256-Xv4aCUnLi+b1T29tuKRADTIWwK2dO8iDP/D7UfU5mWw=";
50 };
51
52 patches = [
53 # https://github.com/wummel/patool/pull/63
54 (fetchpatch {
55 name = "apk-sometimes-has-mime-jar.patch";
56 url = "https://github.com/wummel/patool/commit/a9f3ee3d639a1065be024001e89c0b153511b16b.patch";
57 hash = "sha256-a4aWqHHc/cBs5T2QKZ08ky1K1tqKZEgqVmTmV11aTVE=";
58 })
59 # https://github.com/wummel/patool/pull/130
60 (fetchpatch {
61 name = "apk-sometimes-has-mime-android-package.patch";
62 url = "https://github.com/wummel/patool/commit/e8a1eea1d273b278a1b6f5029d2e21cb18bc9ffd.patch";
63 hash = "sha256-AVooVdU4FNIixUfwyrn39N2SDFHNs4CUYzS5Eey+DrU=";
64 })
65 ];
66
67 postPatch = ''
68 substituteInPlace patoolib/util.py \
69 --replace "path = None" 'path = os.environ["PATH"] + ":${lib.makeBinPath compression-utilities}"'
70 '';
71
72 nativeCheckInputs = [ pytestCheckHook ] ++ compression-utilities;
73
74 disabledTests = [
75 "test_unzip"
76 "test_unzip_file"
77 "test_zip"
78 "test_zip_file"
79 ];
80
81 meta = with lib; {
82 description = "portable archive file manager";
83 homepage = "https://wummel.github.io/patool/";
84 license = licenses.gpl3;
85 maintainers = with maintainers; [ marius851000 ];
86 };
87}