1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 stdenv,
6 zlib,
7 xz,
8 gzip,
9 bzip2,
10 gnutar,
11 p7zip,
12 cabextract,
13 cramfsprogs,
14 cramfsswap,
15 sasquatch,
16 setuptools,
17 squashfsTools,
18 matplotlib,
19 pycrypto,
20 pyqtgraph,
21 pyqt5,
22 pytestCheckHook,
23 visualizationSupport ? false,
24}:
25
26buildPythonPackage rec {
27 pname = "binwalk${lib.optionalString visualizationSupport "-full"}";
28 version = "2.4.1";
29 pyproject = true;
30
31 src = fetchFromGitHub {
32 owner = "OSPG";
33 repo = "binwalk";
34 rev = "v${version}";
35 hash = "sha256-VApqQrVBV7w15Bpwc6Fd/cA1Ikqu7Ds8qu0TH68YVog=";
36 };
37
38 build-system = [ setuptools ];
39
40 propagatedBuildInputs =
41 [
42 zlib
43 xz
44 gzip
45 bzip2
46 gnutar
47 p7zip
48 cabextract
49 squashfsTools
50 xz
51 pycrypto
52 ]
53 ++ lib.optionals visualizationSupport [
54 matplotlib
55 pyqtgraph
56 pyqt5
57 ]
58 ++ lib.optionals (!stdenv.isDarwin) [
59 cramfsprogs
60 cramfsswap
61 sasquatch
62 ];
63
64 # setup.py only installs version.py during install, not test
65 postPatch = ''
66 echo '__version__ = "${version}"' > src/binwalk/core/version.py
67 '';
68
69 # binwalk wants to access ~/.config/binwalk/magic
70 preCheck = ''
71 HOME=$(mktemp -d)
72 '';
73
74 nativeCheckInputs = [ pytestCheckHook ];
75
76 pythonImportsCheck = [ "binwalk" ];
77
78 meta = with lib; {
79 homepage = "https://github.com/OSPG/binwalk";
80 description = "Tool for searching a given binary image for embedded files";
81 mainProgram = "binwalk";
82 maintainers = [ maintainers.koral ];
83 license = licenses.mit;
84 };
85}