Merge pull request #307098 from r-ryantm/auto-update/cilium-cli
[NixPkgs.git] / pkgs / development / python-modules / pymupdf / default.nix
blobf225524e7e18b449e89815459bf572d79cb72e70
1 { lib
2 , stdenv
3 , buildPythonPackage
4 , pythonOlder
5 , fetchFromGitHub
6 , python
8 # build-system
9 , libclang
10 , psutil
11 , setuptools
12 , swig
14 # native dependencies
15 , freetype
16 , harfbuzz
17 , openjpeg
18 , jbig2dec
19 , libjpeg_turbo
20 , gumbo
21 , memstreamHook
23 # dependencies
24 , mupdf
26 # tests
27 , fonttools
28 , pytestCheckHook
31 let
32   # PyMuPDF needs the C++ bindings generated
33   mupdf-cxx = mupdf.override {
34     enableOcr = true;
35     enableCxx = true;
36     enablePython = true;
37     python3 = python;
38   };
39 in buildPythonPackage rec {
40   pname = "pymupdf";
41   version = "1.23.26";
42   pyproject = true;
44   disabled = pythonOlder "3.7";
46   src = fetchFromGitHub {
47     owner = "pymupdf";
48     repo = "PyMuPDF";
49     rev = "refs/tags/${version}";
50     hash = "sha256-m2zq04+PDnlzFuqeSt27UhdHXTHxpHdMPIg5RQl/5bQ=";
51   };
53   # swig is not wrapped as Python package
54   # libclang calls itself just clang in wheel metadata
55   postPatch = ''
56     substituteInPlace pyproject.toml \
57       --replace-fail '"swig",' "" \
58       --replace-fail "libclang" "clang"
59   '';
61   nativeBuildInputs = [
62     libclang
63     swig
64     psutil
65     setuptools
66   ];
68   buildInputs = [
69     freetype
70     harfbuzz
71     openjpeg
72     jbig2dec
73     libjpeg_turbo
74     gumbo
75   ] ++ lib.optionals (stdenv.system == "x86_64-darwin") [
76     memstreamHook
77   ];
79   propagatedBuildInputs = [
80     mupdf-cxx
81   ];
83   env = {
84     # force using system MuPDF (must be defined in environment and empty)
85     PYMUPDF_SETUP_MUPDF_BUILD = "";
86     # provide MuPDF paths
87     PYMUPDF_MUPDF_LIB = "${lib.getLib mupdf-cxx}/lib";
88     PYMUPDF_MUPDF_INCLUDE = "${lib.getDev mupdf-cxx}/include";
89   };
91   # TODO: manually add mupdf rpath until upstream fixes it
92   postInstall = lib.optionalString stdenv.isDarwin ''
93     for lib in */*.so $out/${python.sitePackages}/*/*.so; do
94       install_name_tool -add_rpath ${lib.getLib mupdf-cxx}/lib "$lib"
95     done
96   '';
98   nativeCheckInputs = [
99     pytestCheckHook
100     fonttools
101   ];
103   preCheck = ''
104     export PATH="$PATH:$out/bin";
105   '';
107   disabledTests = [
108     # fails for indeterminate reasons
109     "test_2548"
110     "test_2753"
111     "test_3020"
112     "test_3050"
113     "test_3058"
114     "test_3177"
115     "test_3186"
116     "test_color_count"
117     "test_pilsave"
118     "test_fz_write_pixmap_as_jpeg"
119     # NotImplementedError
120     "test_1824"
121     "test_2093"
122     "test_2093"
123     "test_2108"
124     "test_2182"
125     "test_2182"
126     "test_2246"
127     "test_2270"
128     "test_2270"
129     "test_2391"
130     "test_2788"
131     "test_2861"
132     "test_2871"
133     "test_2886"
134     "test_2904"
135     "test_2922"
136     "test_2934"
137     "test_2957"
138     "test_2969"
139     "test_3070"
140     "test_3131"
141     "test_3140"
142     "test_3209"
143     "test_3209"
144     "test_caret"
145     "test_deletion"
146     "test_file_info"
147     "test_line"
148     "test_page_links_generator"
149     "test_polyline"
150     "test_redact"
151     "test_techwriter_append"
152     "test_text2"
153     # Issue with FzArchive
154     "test_htmlbox"
155     "test_2246"
156     "test_3140"
157     "test_fit_springer"
158     "test_write_stabilized_with_links"
159     "test_textbox"
160     "test_delete_image"
161     # Fonts not available
162     "test_fontarchive"
163     "test_subset_fonts"
164     # Exclude lint tests
165     "test_flake8"
166   ] ++ lib.optionals stdenv.isDarwin [
167     # darwin does not support OCR right now
168     "test_tesseract"
169   ];
171   disabledTestPaths = [
172     # Issue with FzArchive
173     "tests/test_docs_samples.py"
174   ];
176   pythonImportsCheck = [
177     "fitz"
178     "fitz_old"
179   ];
181   meta = with lib; {
182     description = "Python bindings for MuPDF's rendering library";
183     homepage = "https://github.com/pymupdf/PyMuPDF";
184     changelog = "https://github.com/pymupdf/PyMuPDF/releases/tag/${version}";
185     license = licenses.agpl3Only;
186     maintainers = with maintainers; [ teto ];
187     platforms = platforms.unix;
188   };