annotate setup.py @ 26:a78c22e89a53

Use long Mercurial options mostly
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 19 Sep 2025 18:52:43 +0200
parents 575f70dbc259
children 28f7eb8e96ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 #! /usr/bin/env python3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 Overview:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 Build script for PyMuPDF, supporting PEP-517 and simple command-line usage.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 We hard-code the URL of the MuPDF .tar.gz file that we require. This
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 generally points to a particular source release on mupdf.com.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 Default behaviour:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 Building an sdist:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 As of 2024-002-28 we no longer download the MuPDF .tar.gz file and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15 embed it within the sdist. Instead it will be downloaded at build
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 time.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 Building PyMuPDF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 We first download the hard-coded mupdf .tar.gz file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 Then we extract and build MuPDF locally, before building PyMuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 itself. So PyMuPDF will always be built with the exact MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 release that we require.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 Environmental variables:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 If building with system MuPDF (PYMUPDF_SETUP_MUPDF_BUILD is empty string):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 CFLAGS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 CXXFLAGS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 LDFLAGS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 Added to c, c++, and link commands.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 PYMUPDF_INCLUDES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 Colon-separated extra include paths.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 PYMUPDF_MUPDF_LIB
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 Directory containing MuPDF libraries, (libmupdf.so,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 libmupdfcpp.so).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 PYMUPDF_SETUP_DEVENV
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 Location of devenv.com on Windows. If unset we search for it - see
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 wdev.py. if that fails we use just 'devenv.com'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 PYMUPDF_SETUP_DUMMY
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 If 1, we build dummy sdist and wheel with no files.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 PYMUPDF_SETUP_FLAVOUR
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 Control building of separate wheels for PyMuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 Must be unset or a combination of 'p', 'b' and 'd'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 Default is 'pbd'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 'p':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 Generated wheel contains PyMuPDF code.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58 'b':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 Generated wheel contains MuPDF libraries; these are independent of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 the Python version.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 'd':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 Generated wheel contains includes and libraries for MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 If 'p' is included, the generated wheel is called PyMuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 Otherwise if 'b' is included the generated wheel is called PyMuPDFb.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 Otherwise if 'd' is included the generated wheel is called PyMuPDFd.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 For example:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 'pb': a `PyMuPDF` wheel with PyMuPDF runtime files and MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 runtime shared libraries.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 'b': a `PyMuPDFb` wheel containing MuPDF runtime shared libraries.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 'pbd' a `PyMuPDF` wheel with PyMuPDF runtime files and MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 runtime shared libraries, plus MuPDF build-time files (includes,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 *.lib files on Windows).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 'd': a `PyMuPDFd` wheel containing MuPDF build-time files
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 (includes, *.lib files on Windows).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 PYMUPDF_SETUP_LIBCLANG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 For internal testing.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 PYMUPDF_SETUP_MUPDF_BUILD
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 If unset or '-', use internal hard-coded default MuPDF location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 Otherwise overrides location of MuPDF when building PyMuPDF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 Empty string:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 Build PyMuPDF with the system MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 A string starting with 'git:':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 Use `git clone` to get a MuPDF checkout. We use the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 string in the git clone command; it must contain the git
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 URL from which to clone, and can also contain other `git
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 clone` args, for example:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 PYMUPDF_SETUP_MUPDF_BUILD="git:--branch master https://github.com/ArtifexSoftware/mupdf.git"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 Otherwise:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 Location of mupdf directory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 PYMUPDF_SETUP_MUPDF_BSYMBOLIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 If '0' we do not link libmupdf.so with -Bsymbolic.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 PYMUPDF_SETUP_MUPDF_TESSERACT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 If '0' we build MuPDF without Tesseract.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 PYMUPDF_SETUP_MUPDF_BUILD_TYPE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 Unix only. Controls build type of MuPDF. Supported values are:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 debug
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 memento
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 release (default)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 PYMUPDF_SETUP_MUPDF_CLEAN
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 Unix only. If '1', we do a clean MuPDF build.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 PYMUPDF_SETUP_MUPDF_REFCHECK_IF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 Should be preprocessor statement to enable MuPDF reference count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 checking.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 As of 2024-09-27, MuPDF default is `#ifndef NDEBUG`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 PYMUPDF_SETUP_MUPDF_TRACE_IF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 Should be preprocessor statement to enable MuPDF runtime diagnostics in
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122 response to environment variables such as MUPDF_trace.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 As of 2024-09-27, MuPDF default is `#ifndef NDEBUG`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 PYMUPDF_SETUP_MUPDF_THIRD
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 If '0' and we are building on Linux with the system MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 (i.e. PYMUPDF_SETUP_MUPDF_BUILD=''), then don't link with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 `-lmupdf-third`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 PYMUPDF_SETUP_MUPDF_VS_UPGRADE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 If '1' we run mupdf `scripts/mupdfwrap.py` with `--vs-upgrade 1` to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 help Windows builds work with Visual Studio versions newer than 2019.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 PYMUPDF_SETUP_MUPDF_TGZ
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 If set, overrides location of MuPDF .tar.gz file:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 Empty string:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 Do not download MuPDF .tar.gz file. Sdist's will not contain
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 A string containing '://':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 The URL from which to download the MuPDF .tar.gz file. Leaf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 must match mupdf-*.tar.gz.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 Otherwise:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 The path of local mupdf git checkout. We put all files in this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 checkout known to git into a local tar archive.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 PYMUPDF_SETUP_MUPDF_OVERWRITE_CONFIG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 If '0' we do not overwrite MuPDF's include/mupdf/fitz/config.h with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 PyMuPDF's own configuration file, before building MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 PYMUPDF_SETUP_MUPDF_REBUILD
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 If 0 we do not (re)build mupdf.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156 PYMUPDF_SETUP_PY_LIMITED_API
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 If not '0', we build for current Python's stable ABI.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 However if unset and we are on Python-3.13 or later, we do
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 not build for the stable ABI because as of 2025-03-04 SWIG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 generates incorrect stable ABI code with Python-3.13 - see:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162 https://github.com/swig/swig/issues/3059
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 PYMUPDF_SETUP_URL_WHEEL
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 If set, we use an existing wheel instead of building a new wheel.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 If starts with `http://` or `https://`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 If ends with '/', we append our wheel name and download. Otherwise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 we download directly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171 If starts with `file://`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 If ends with '/' we look for a matching wheel name, `using
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 pipcl.wheel_name_match()` to cope with differing platform tags,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 for example our `manylinux2014_x86_64` will match with an existing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 wheel with `manylinux2014_x86_64.manylinux_2_17_x86_64`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 Any other prefix is an error.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 PYMUPDF_SETUP_SWIG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 If set, we use this instead of `swig`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 WDEV_VS_YEAR
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 If set, we use as Visual Studio year, for example '2019' or '2022'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 WDEV_VS_GRADE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 If set, we use as Visual Studio grade, for example 'Community' or
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187 'Professional' or 'Enterprise'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190 import glob
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 import io
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 import os
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 import textwrap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 import time
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195 import platform
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 import re
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 import shlex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 import shutil
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 import stat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 import subprocess
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 import sys
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 import tarfile
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 import traceback
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 import urllib.request
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 import zipfile
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207 import pipcl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 log = pipcl.log0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 run = pipcl.run
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 # For debugging.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 log(f'### Starting.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 pipcl.show_system()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 PYMUPDF_SETUP_FLAVOUR = os.environ.get( 'PYMUPDF_SETUP_FLAVOUR', 'pbd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222 for i in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 assert i in 'pbd', f'Unrecognised flag "{i} in {PYMUPDF_SETUP_FLAVOUR=}. Should be one of "p", "b", "d"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 g_root = os.path.abspath( f'{__file__}/..')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 # Name of file that identifies that we are in a PyMuPDF sdist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 g_pymupdfb_sdist_marker = 'pymupdfb_sdist'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230 python_version_tuple = tuple(int(x) for x in platform.python_version_tuple()[:2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232 PYMUPDF_SETUP_PY_LIMITED_API = os.environ.get('PYMUPDF_SETUP_PY_LIMITED_API')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 assert PYMUPDF_SETUP_PY_LIMITED_API in (None, '', '0', '1'), \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 f'Should be "", "0", "1" or undefined: {PYMUPDF_SETUP_PY_LIMITED_API=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 if PYMUPDF_SETUP_PY_LIMITED_API is None and python_version_tuple >= (3, 13):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 log(f'Not defaulting to Python limited api because {platform.python_version_tuple()=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 g_py_limited_api = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 g_py_limited_api = (PYMUPDF_SETUP_PY_LIMITED_API != '0')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 PYMUPDF_SETUP_URL_WHEEL = os.environ.get('PYMUPDF_SETUP_URL_WHEEL')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 log(f'{PYMUPDF_SETUP_URL_WHEEL=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 PYMUPDF_SETUP_DUMMY = os.environ.get('PYMUPDF_SETUP_DUMMY')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245 log(f'{PYMUPDF_SETUP_DUMMY=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 PYMUPDF_SETUP_SWIG = os.environ.get('PYMUPDF_SETUP_SWIG')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 def _fs_remove(path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 Removes file or directory, without raising exception if it doesn't exist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 We assert-fail if the path still exists when we return, in case of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 permission problems etc.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 # First try deleting `path` as a file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 os.remove( path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 if os.path.exists(path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 # Try deleting `path` as a directory. Need to use
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 # shutil.rmtree() callback to handle permission problems; see:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265 # https://docs.python.org/3/library/shutil.html#rmtree-example
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 def error_fn(fn, path, excinfo):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 # Clear the readonly bit and reattempt the removal.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 os.chmod(path, stat.S_IWRITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 fn(path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 shutil.rmtree( path, onerror=error_fn)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273 assert not os.path.exists( path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276 def _git_get_branch( directory):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 command = f'cd {directory} && git branch --show-current'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 log( f'Running: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279 p = subprocess.run(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280 command,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
281 shell=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282 check=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 text=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284 stdout=subprocess.PIPE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 ret = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287 if p.returncode == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 ret = p.stdout.strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
289 log( f'Have found MuPDF git branch: ret={ret!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
290 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
292
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
293 def tar_check(path, mode='r:gz', prefix=None, remove=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
294 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 Checks items in tar file have same <top-directory>, or <prefix> if not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
297 We fail if items in tar file have different top-level directory names.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299 path:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 The tar file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301 mode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302 As tarfile.open().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 prefix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 If not None, we fail if tar file's <top-directory> is not <prefix>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 Returns the directory name (which will be <prefix> if not None).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 with tarfile.open( path, mode) as t:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 items = t.getnames()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
310 assert items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311 item = items[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 assert not item.startswith('./') and not item.startswith('../')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313 s = item.find('/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 if s == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 prefix_actual = item + '/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 prefix_actual = item[:s+1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 if prefix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 assert prefix == prefix_actual, f'{path=} {prefix=} {prefix_actual=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 for item in items[1:]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 assert item.startswith( prefix_actual), f'prefix_actual={prefix_actual!r} != item={item!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 return prefix_actual
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325 def tar_extract(path, mode='r:gz', prefix=None, exists='raise'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 Extracts tar file into single local directory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 We fail if items in tar file have different <top-directory>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 path:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 The tar file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 mode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334 As tarfile.open().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335 prefix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336 If not None, we fail if tar file's <top-directory> is not <prefix>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
337 exists:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338 What to do if <top-directory> already exists:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
339 'raise': raise exception.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
340 'remove': remove existing file/directory before extracting.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
341 'return': return without extracting.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
342
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
343 Returns the directory name (which will be <prefix> if not None, with '/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
344 appended if not already present).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
345 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
346 prefix_actual = tar_check( path, mode, prefix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
347 if os.path.exists( prefix_actual):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
348 if exists == 'raise':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
349 raise Exception( f'Path already exists: {prefix_actual!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
350 elif exists == 'remove':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
351 remove( prefix_actual)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
352 elif exists == 'return':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
353 log( f'Not extracting {path} because already exists: {prefix_actual}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354 return prefix_actual
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
356 assert 0, f'Unrecognised exists={exists!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
357 assert not os.path.exists( prefix_actual), f'Path already exists: {prefix_actual}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
358 log( f'Extracting {path}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
359 with tarfile.open( path, mode) as t:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 t.extractall()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 return prefix_actual
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
362
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
363
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364 def git_info( directory):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 Returns `(sha, comment, diff, branch)`, all items are str or None if not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
367 available.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368
24
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
369 Also handles Mercurial repository information.
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
370
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
371 directory:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372 Root of git checkout.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
374 sha, comment, diff, branch = '', '', '', ''
24
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
375 if os.path.isdir(os.path.join(directory, '.hg')):
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
376 cp = subprocess.run(
26
a78c22e89a53 Use long Mercurial options mostly
Franz Glasner <fzglas.hg@dom66.de>
parents: 25
diff changeset
377 f'hg -R {directory} id --id',
24
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
378 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
379 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
380 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
381 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
382 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
383 sha = cp.stdout.strip()
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
384 cp = subprocess.run(
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
385 f'hg -R {directory} diff --git',
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
386 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
387 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
388 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
389 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
390 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
391 diff = cp.stdout
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
392 cp = subprocess.run(
26
a78c22e89a53 Use long Mercurial options mostly
Franz Glasner <fzglas.hg@dom66.de>
parents: 25
diff changeset
393 f'hg -R {directory} log --rev . --template "{{branch}}"',
24
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
394 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
395 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
396 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
397 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
398 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
399 branch = cp.stdout.strip()
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
400 fp = subprocess.run(
26
a78c22e89a53 Use long Mercurial options mostly
Franz Glasner <fzglas.hg@dom66.de>
parents: 25
diff changeset
401 f'hg -R {directory} log --rev . --template "{{desc|firstline}}"',
24
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
402 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
403 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
404 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
405 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
406 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
407 comment = cp.stdout.strip()
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
408 else:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
409 cp = subprocess.run(
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
410 f'cd {directory} && (PAGER= git show --pretty=oneline|head -n 1 && git diff)',
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
411 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
412 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
413 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
414 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
415 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
416 sha, _ = cp.stdout.split(' ', 1)
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
417 comment, diff = _.split('\n', 1)
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
418 cp = subprocess.run(
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
419 f'cd {directory} && git rev-parse --abbrev-ref HEAD',
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
420 capture_output=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
421 shell=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
422 text=1,
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
423 )
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
424 if cp.returncode == 0:
21c6080bc183 When building "_build.py": also handle Mercurial repositories.
Franz Glasner <fzglas.hg@dom66.de>
parents: 23
diff changeset
425 branch = cp.stdout.strip()
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
426 log(f'git_info(): directory={directory!r} returning branch={branch!r} sha={sha!r} comment={comment!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
427 return sha, comment, diff, branch
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
429
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
430 def git_patch(directory, patch, hard=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
431 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
432 Applies string <patch> with `git patch` in <directory>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
433
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
434 If <hard> is true we clean the tree with `git checkout .` and then apply
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
435 the patch.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
437 Otherwise we apply patch only if it is not already applied; this might fail
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
438 if there are conflicting changes in the tree.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
439 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
440 log(f'Applying patch in {directory}:\n{textwrap.indent(patch, " ")}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
441 if not patch:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
442 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
443 # Carriage returns break `git apply` so we use `newline='\n'` in open().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
444 path = os.path.abspath(f'{directory}/pymupdf_patch.txt')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
445 with open(path, 'w', newline='\n') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
446 f.write(patch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
447 log(f'Using patch file: {path}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
448 if hard:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
449 run(f'cd {directory} && git checkout .')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
450 run(f'cd {directory} && git apply {path}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
451 log(f'Have applied patch in {directory}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
452 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
453 e = run( f'cd {directory} && git apply --check --reverse {path}', check=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
454 if e == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
455 log(f'Not patching {directory} because already patched.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
456 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
457 run(f'cd {directory} && git apply {path}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
458 log(f'Have applied patch in {directory}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
459 run(f'cd {directory} && git diff')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
460
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
462 mupdf_tgz = os.path.abspath( f'{__file__}/../mupdf.tgz')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
463
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
464 def get_mupdf_internal(out, location=None, sha=None, local_tgz=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
465 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
466 Gets MuPDF as either a .tgz or a local directory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
468 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
469 out:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
470 Either 'dir' (we return name of local directory containing mupdf) or 'tgz' (we return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
471 name of local .tgz file containing mupdf).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
472 location:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
473 First, if None we set to hard-coded default URL or git location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
474 If starts with 'git:', should be remote git location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
475 Otherwise if containing '://' should be URL for .tgz.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
476 Otherwise should path of local mupdf checkout.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
477 sha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
478 If not None and we use git clone, we checkout this sha.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
479 local_tgz:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
480 If not None, must be local .tgz file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
481 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
482 (path, location):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
483 `path` is absolute path of local directory or .tgz containing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
484 MuPDF, or None if we are to use system MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
485
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
486 `location_out` is `location` if not None, else the hard-coded
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
487 default location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
488
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
489 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
490 log(f'get_mupdf_internal(): {out=} {location=} {sha=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
491 assert out in ('dir', 'tgz')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
492 if location is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
493 location = f'https://mupdf.com/downloads/archive/mupdf-{version_mupdf}-source.tar.gz'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
494 #location = 'git:--branch master https://github.com/ArtifexSoftware/mupdf.git'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
495
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
496 if location == '':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
497 # Use system mupdf.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
498 return None, location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
499
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
500 local_dir = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
501 if local_tgz:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
502 assert os.path.isfile(local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
503 elif location.startswith( 'git:'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
504 location_git = location[4:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
505 local_dir = 'mupdf-git'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
507 # Try to update existing checkout.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
508 e = run(f'cd {local_dir} && git pull && git submodule update --init', check=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
509 if e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
510 # No existing git checkout, so do a fresh clone.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
511 _fs_remove(local_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
512 gitargs = location[4:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
513 run(f'git clone --recursive --depth 1 --shallow-submodules {gitargs} {local_dir}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
514
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
515 # Show sha of checkout.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
516 run( f'cd {local_dir} && git show --pretty=oneline|head -n 1', check=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
517 if sha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
518 run( f'cd {local_dir} && git checkout {sha}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
519 elif '://' in location:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
520 # Download .tgz.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
521 local_tgz = os.path.basename( location)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
522 suffix = '.tar.gz'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
523 assert location.endswith(suffix), f'Unrecognised suffix in remote URL {location=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
524 name = local_tgz[:-len(suffix)]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
525 log( f'Download {location=} {local_tgz=} {name=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
526 if os.path.exists(local_tgz):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
527 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
528 tar_check(local_tgz, 'r:gz', prefix=f'{name}/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
529 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
530 log(f'Not using existing file {local_tgz} because invalid tar data: {e}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
531 _fs_remove( local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
532 if os.path.exists(local_tgz):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
533 log(f'Not downloading from {location} because already present: {local_tgz!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
534 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
535 log(f'Downloading from {location=} to {local_tgz=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
536 urllib.request.urlretrieve( location, local_tgz + '-')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
537 os.rename(local_tgz + '-', local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
538 assert os.path.exists( local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
539 tar_check( local_tgz, 'r:gz', prefix=f'{name}/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
540 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
541 assert os.path.isdir(location), f'Local MuPDF does not exist: {location=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
542 local_dir = location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
543
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
544 assert bool(local_dir) != bool(local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
545 if out == 'dir':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
546 if not local_dir:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
547 assert local_tgz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
548 local_dir = tar_extract( local_tgz, exists='return')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
549 return os.path.abspath( local_dir), location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
550 elif out == 'tgz':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
551 if not local_tgz:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
552 # Create .tgz containing git files in `local_dir`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
553 assert local_dir
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
554 if local_dir.endswith( '/'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
555 local_dir = local_dir[:-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
556 top = os.path.basename(local_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
557 local_tgz = f'{local_dir}.tgz'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
558 log( f'Creating .tgz from git files. {top=} {local_dir=} {local_tgz=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
559 _fs_remove( local_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
560 with tarfile.open( local_tgz, 'w:gz') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
561 for name in pipcl.git_items( local_dir, submodules=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
562 path = os.path.join( local_dir, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
563 if os.path.isfile( path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
564 path2 = f'{top}/{name}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
565 log(f'Adding {path=} {path2=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
566 f.add( path, path2, recursive=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
567 return os.path.abspath( local_tgz), location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
568 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
569 assert 0, f'Unrecognised {out=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
570
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
571
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
572
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
573 def get_mupdf_tgz():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
574 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
575 Creates .tgz file called containing MuPDF source, for inclusion in an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
576 sdist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
577
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
578 What we do depends on environmental variable PYMUPDF_SETUP_MUPDF_TGZ; see
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
579 docs at start of this file for details.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
580
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
581 Returns name of top-level directory within the .tgz file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
582 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
583 name, location = get_mupdf_internal( 'tgz', os.environ.get('PYMUPDF_SETUP_MUPDF_TGZ'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
584 return name, location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
585
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
586
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
587 def get_mupdf(path=None, sha=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
588 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
589 Downloads and/or extracts mupdf and returns (path, location) where `path`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
590 is the local mupdf directory and `location` is where it came from.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
591
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
592 Exact behaviour depends on environmental variable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
593 PYMUPDF_SETUP_MUPDF_BUILD; see docs at start of this file for details.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
594 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
595 m = os.environ.get('PYMUPDF_SETUP_MUPDF_BUILD')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
596 if m == '-':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
597 # This allows easy specification in Github actions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
598 m = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
599 if m is None and os.path.isfile(mupdf_tgz):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
600 # This makes us use tgz inside sdist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
601 log(f'Using local tgz: {mupdf_tgz=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
602 return get_mupdf_internal('dir', local_tgz=mupdf_tgz)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
603 return get_mupdf_internal('dir', m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
604
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
605
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
606 linux = sys.platform.startswith( 'linux') or 'gnu' in sys.platform
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
607 openbsd = sys.platform.startswith( 'openbsd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
608 freebsd = sys.platform.startswith( 'freebsd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
609 darwin = sys.platform.startswith( 'darwin')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
610 windows = platform.system() == 'Windows' or platform.system().startswith('CYGWIN')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
611 msys2 = platform.system().startswith('MSYS_NT-')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
612
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
613 pyodide_flags = '-fwasm-exceptions'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
614
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
615 if os.environ.get('PYODIDE') == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
616 if os.environ.get('OS') != 'pyodide':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
617 log('PYODIDE=1, setting OS=pyodide.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
618 os.environ['OS'] = 'pyodide'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
619 os.environ['XCFLAGS'] = pyodide_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
620 os.environ['XCXXFLAGS'] = pyodide_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
621
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
622 pyodide = os.environ.get('OS') == 'pyodide'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
623
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
624 def build():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
625 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
626 pipcl.py `build_fn()` callback.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
627 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
628 #pipcl.show_sysconfig()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
629
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
630 if PYMUPDF_SETUP_DUMMY == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
631 log(f'{PYMUPDF_SETUP_DUMMY=} Building dummy wheel with no files.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
632 return list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
633
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
634 # Download MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
635 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
636 mupdf_local, mupdf_location = get_mupdf()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
637 if mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
638 mupdf_version_tuple = get_mupdf_version(mupdf_local)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
639 # else we cannot determine version this way and do not use it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
640
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
641 build_type = os.environ.get( 'PYMUPDF_SETUP_MUPDF_BUILD_TYPE', 'release')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
642 assert build_type in ('debug', 'memento', 'release'), \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
643 f'Unrecognised build_type={build_type!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
644
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
645 overwrite_config = os.environ.get('PYMUPDF_SETUP_MUPDF_OVERWRITE_CONFIG', '1') == '1'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
646
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
647 PYMUPDF_SETUP_MUPDF_REFCHECK_IF = os.environ.get('PYMUPDF_SETUP_MUPDF_REFCHECK_IF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
648 PYMUPDF_SETUP_MUPDF_TRACE_IF = os.environ.get('PYMUPDF_SETUP_MUPDF_TRACE_IF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
649
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
650 # Build MuPDF shared libraries.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
651 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
652 if windows:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
653 mupdf_build_dir = build_mupdf_windows(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
654 mupdf_local,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
655 build_type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
656 overwrite_config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
657 g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
658 PYMUPDF_SETUP_MUPDF_REFCHECK_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
659 PYMUPDF_SETUP_MUPDF_TRACE_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
660 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
661 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
662 if 'p' not in PYMUPDF_SETUP_FLAVOUR and 'b' not in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
663 # We only need MuPDF headers, so no point building MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
664 log(f'Not building MuPDF because not Windows and {PYMUPDF_SETUP_FLAVOUR=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
665 mupdf_build_dir = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
666 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
667 mupdf_build_dir = build_mupdf_unix(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
668 mupdf_local,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
669 build_type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
670 overwrite_config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
671 g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
672 PYMUPDF_SETUP_MUPDF_REFCHECK_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
673 PYMUPDF_SETUP_MUPDF_TRACE_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
674 PYMUPDF_SETUP_SWIG,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
675 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
676 log( f'build(): mupdf_build_dir={mupdf_build_dir!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
677
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
678 # Build rebased `extra` module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
679 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
680 if 'p' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
681 path_so_leaf = _build_extension(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
682 mupdf_local,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
683 mupdf_build_dir,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
684 build_type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
685 g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
686 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
687 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
688 log(f'Not building extension.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
689 path_so_leaf = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
690
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
691 # Generate list of (from, to) items to return to pipcl. What we add depends
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
692 # on PYMUPDF_SETUP_FLAVOUR.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
693 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
694 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
695 def add(flavour, from_, to_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
696 assert flavour in 'pbd'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
697 if flavour in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
698 ret.append((from_, to_))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
699
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
700 to_dir = 'pymupdf/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
701 to_dir_d = f'{to_dir}/mupdf-devel'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
703 # Add implementation files.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
704 add('p', f'{g_root}/src/__init__.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
705 add('p', f'{g_root}/src/__main__.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
706 add('p', f'{g_root}/src/pymupdf.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
707 add('p', f'{g_root}/src/table.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
708 add('p', f'{g_root}/src/utils.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
709 add('p', f'{g_root}/src/_wxcolors.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
710 add('p', f'{g_root}/src/_apply_pages.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
711 add('p', f'{g_root}/src/build/extra.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
712 if path_so_leaf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
713 add('p', f'{g_root}/src/build/{path_so_leaf}', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
714
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
715 # Add support for `fitz` backwards compatibility.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
716 add('p', f'{g_root}/src/fitz___init__.py', 'fitz/__init__.py')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
717 add('p', f'{g_root}/src/fitz_table.py', 'fitz/table.py')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
718 add('p', f'{g_root}/src/fitz_utils.py', 'fitz/utils.py')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
719
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
720 if mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
721 # Add MuPDF Python API.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
722 add('p', f'{mupdf_build_dir}/mupdf.py', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
723
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
724 # Add MuPDF shared libraries.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
725 if windows:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
726 wp = pipcl.wdev.WindowsPython()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
727 add('p', f'{mupdf_build_dir}/_mupdf.pyd', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
728 add('b', f'{mupdf_build_dir}/mupdfcpp{wp.cpu.windows_suffix}.dll', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
729
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
730 # Add Windows .lib files.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
731 mupdf_build_dir2 = _windows_lib_directory(mupdf_local, build_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
732 add('d', f'{mupdf_build_dir2}/mupdfcpp{wp.cpu.windows_suffix}.lib', f'{to_dir_d}/lib/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
733 if mupdf_version_tuple >= (1, 26):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
734 # MuPDF-1.25+ language bindings build also builds libmuthreads.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
735 add('d', f'{mupdf_build_dir2}/libmuthreads.lib', f'{to_dir_d}/lib/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
736 elif darwin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
737 add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
738 add('b', f'{mupdf_build_dir}/libmupdfcpp.so', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
739 add('b', f'{mupdf_build_dir}/libmupdf.dylib', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
740 add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
741 elif pyodide:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
742 add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
743 add('b', f'{mupdf_build_dir}/libmupdfcpp.so', 'PyMuPDF.libs/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
744 add('b', f'{mupdf_build_dir}/libmupdf.so', 'PyMuPDF.libs/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
745 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
746 add('p', f'{mupdf_build_dir}/_mupdf.so', to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
747 add('b', pipcl.get_soname(f'{mupdf_build_dir}/libmupdfcpp.so'), to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
748 add('b', pipcl.get_soname(f'{mupdf_build_dir}/libmupdf.so'), to_dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
749 add('d', f'{mupdf_build_dir}/libmupdf-threads.a', f'{to_dir_d}/lib/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
750
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
751 if 'd' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
752 # Add MuPDF C and C++ headers to `ret_d`. Would prefer to use
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
753 # pipcl.git_items() but hard-coded mupdf tree is not a git
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
754 # checkout.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
755 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
756 for root in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
757 f'{mupdf_local}/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
758 f'{mupdf_local}/platform/c++/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
759 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
760 for dirpath, dirnames, filenames in os.walk(root):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
761 for filename in filenames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
762 if not filename.endswith('.h'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
763 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
764 header_abs = os.path.join(dirpath, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
765 assert header_abs.startswith(root)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
766 header_rel = header_abs[len(root)+1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
767 add('d', f'{header_abs}', f'{to_dir_d}/include/{header_rel}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
768
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
769 # Add a .py file containing location of MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
770 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
771 sha, comment, diff, branch = git_info(g_root)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
772 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
773 log(f'Failed to get git information: {e}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
774 sha, comment, diff, branch = (None, None, None, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
775 swig = PYMUPDF_SETUP_SWIG or 'swig'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
776 swig_version_text = run(f'{swig} --version', capture=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
777 m = re.search('\nSWIG Version ([^\n]+)', swig_version_text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
778 log(f'{swig_version_text=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
779 assert m, f'Unrecognised {swig_version_text=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
780 swig_version = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
781 def int_or_0(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
782 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
783 return int(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
784 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
785 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
786 swig_version_tuple = tuple(int_or_0(i) for i in swig_version.split('.'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
787 log(f'{swig_version=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
788 text = ''
25
575f70dbc259 Do not expose local directory names in mupdf_location in _build.py.
Franz Glasner <fzglas.hg@dom66.de>
parents: 24
diff changeset
789 if os.path.isdir(mupdf_location):
575f70dbc259 Do not expose local directory names in mupdf_location in _build.py.
Franz Glasner <fzglas.hg@dom66.de>
parents: 24
diff changeset
790 mupdf_location = mupdf_location.rstrip('/')
575f70dbc259 Do not expose local directory names in mupdf_location in _build.py.
Franz Glasner <fzglas.hg@dom66.de>
parents: 24
diff changeset
791 text += 'mupdf_location = ' + repr(os.path.basename(mupdf_location)) + '\n'
575f70dbc259 Do not expose local directory names in mupdf_location in _build.py.
Franz Glasner <fzglas.hg@dom66.de>
parents: 24
diff changeset
792 else:
575f70dbc259 Do not expose local directory names in mupdf_location in _build.py.
Franz Glasner <fzglas.hg@dom66.de>
parents: 24
diff changeset
793 text += f'mupdf_location = {mupdf_location!r}\n'
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
794 text += f'pymupdf_version = {version_p!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
795 text += f'pymupdf_git_sha = {sha!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
796 text += f'pymupdf_git_diff = {diff!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
797 text += f'pymupdf_git_branch = {branch!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
798 text += f'swig_version = {swig_version!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
799 text += f'swig_version_tuple = {swig_version_tuple!r}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
800 add('p', text.encode(), f'{to_dir}/_build.py')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
801
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
802 # Add single README file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
803 if 'p' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
804 add('p', f'{g_root}/README.md', '$dist-info/README.md')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
805 elif 'b' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
806 add('b', f'{g_root}/READMEb.md', '$dist-info/README.md')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
807 elif 'd' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
808 add('d', f'{g_root}/READMEd.md', '$dist-info/README.md')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
809
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
810 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
811
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
812
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
813 def env_add(env, name, value, sep=' ', prepend=False, verbose=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
814 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
815 Appends/prepends `<value>` to `env[name]`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
816
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
817 If `name` is not in `env`, we use os.environ[name] if it exists.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
818 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
819 v = env.get(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
820 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
821 log(f'Initally: {name}={v!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
822 if v is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
823 v = os.environ.get(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
824 if v is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
825 env[ name] = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
826 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
827 if prepend:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
828 env[ name] = f'{value}{sep}{v}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
829 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
830 env[ name] = f'{v}{sep}{value}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
831 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
832 log(f'Returning with {name}={env[name]!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
833
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
834
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
835 def build_mupdf_windows(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
836 mupdf_local,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
837 build_type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
838 overwrite_config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
839 g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
840 PYMUPDF_SETUP_MUPDF_REFCHECK_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
841 PYMUPDF_SETUP_MUPDF_TRACE_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
842 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
843
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
844 assert mupdf_local
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
845
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
846 if overwrite_config:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
847 mupdf_config_h = f'{mupdf_local}/include/mupdf/fitz/config.h'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
848 prefix = '#define TOFU_CJK_EXT 1 /* PyMuPDF override. */\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
849 with open(mupdf_config_h) as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
850 text = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
851 if text.startswith(prefix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
852 print(f'Not modifying {mupdf_config_h} because already has prefix {prefix!r}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
853 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
854 print(f'Prefixing {mupdf_config_h} with {prefix!r}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
855 text = prefix + text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
856 st = os.stat(mupdf_config_h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
857 with open(mupdf_config_h, 'w') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
858 f.write(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
859 os.utime(mupdf_config_h, (st.st_atime, st.st_mtime))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
860
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
861 wp = pipcl.wdev.WindowsPython()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
862 tesseract = '' if os.environ.get('PYMUPDF_SETUP_MUPDF_TESSERACT') == '0' else 'tesseract-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
863 windows_build_tail = f'build\\shared-{tesseract}{build_type}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
864 if g_py_limited_api:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
865 windows_build_tail += f'-Py_LIMITED_API_{pipcl.current_py_limited_api()}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
866 windows_build_tail += f'-x{wp.cpu.bits}-py{wp.version}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
867 windows_build_dir = f'{mupdf_local}\\{windows_build_tail}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
868 #log( f'Building mupdf.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
869 devenv = os.environ.get('PYMUPDF_SETUP_DEVENV')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
870 if not devenv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
871 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
872 # Prefer VS-2022 as that is what Github provide in windows-2022.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
873 log(f'Looking for Visual Studio 2022.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
874 vs = pipcl.wdev.WindowsVS(year=2022)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
875 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
876 log(f'Failed to find VS-2022:\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
877 f'{textwrap.indent(traceback.format_exc(), " ")}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
878 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
879 log(f'Looking for any Visual Studio.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
880 vs = pipcl.wdev.WindowsVS()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
881 log(f'vs:\n{vs.description_ml(" ")}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
882 devenv = vs.devenv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
883 if not devenv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
884 devenv = 'devenv.com'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
885 log( f'Cannot find devenv.com in default locations, using: {devenv!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
886 command = f'cd "{mupdf_local}" && "{sys.executable}" ./scripts/mupdfwrap.py'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
887 if os.environ.get('PYMUPDF_SETUP_MUPDF_VS_UPGRADE') == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
888 command += ' --vs-upgrade 1'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
889
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
890 # Would like to simply do f'... --devenv {shutil.quote(devenv)}', but
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
891 # it looks like if `devenv` has spaces then `shutil.quote()` puts it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
892 # inside single quotes, which then appear to be ignored when run by
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
893 # subprocess.run().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
894 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
895 # So instead we strip any enclosing quotes and the enclose with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
896 # double-quotes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
897 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
898 if len(devenv) >= 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
899 for q in '"', "'":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
900 if devenv.startswith( q) and devenv.endswith( q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
901 devenv = devenv[1:-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
902 command += f' -d {windows_build_tail}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
903 command += f' -b'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
904 if PYMUPDF_SETUP_MUPDF_REFCHECK_IF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
905 command += f' --refcheck-if "{PYMUPDF_SETUP_MUPDF_REFCHECK_IF}"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
906 if PYMUPDF_SETUP_MUPDF_TRACE_IF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
907 command += f' --trace-if "{PYMUPDF_SETUP_MUPDF_TRACE_IF}"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
908 command += f' --devenv "{devenv}"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
909 command += f' all'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
910 if os.environ.get( 'PYMUPDF_SETUP_MUPDF_REBUILD') == '0':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
911 log( f'PYMUPDF_SETUP_MUPDF_REBUILD is "0" so not building MuPDF; would have run: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
912 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
913 log( f'Building MuPDF by running: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
914 subprocess.run( command, shell=True, check=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
915 log( f'Finished building mupdf.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
917 return windows_build_dir
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
918
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
919
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
920 def _windows_lib_directory(mupdf_local, build_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
921 ret = f'{mupdf_local}/platform/win32/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
922 if _cpu_bits() == 64:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
923 ret += 'x64/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
924 if build_type == 'release':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
925 ret += 'Release/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
926 elif build_type == 'debug':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
927 ret += 'Debug/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
928 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
929 assert 0, f'Unrecognised {build_type=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
930 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
931
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
932
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
933 def _cpu_bits():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
934 if sys.maxsize == 2**31 - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
935 return 32
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
936 return 64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
937
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
938
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
939 def build_mupdf_unix(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
940 mupdf_local,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
941 build_type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
942 overwrite_config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
943 g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
944 PYMUPDF_SETUP_MUPDF_REFCHECK_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
945 PYMUPDF_SETUP_MUPDF_TRACE_IF,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
946 PYMUPDF_SETUP_SWIG,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
947 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
948 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
949 Builds MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
950
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
951 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
952 mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
953 Path of MuPDF directory or None if we are using system MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
954
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
955 Returns the absolute path of build directory within MuPDF, e.g.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
956 `.../mupdf/build/pymupdf-shared-release`, or `None` if we are using the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
957 system MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
958 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
959 if not mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
960 log( f'Using system mupdf.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
961 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
962
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
963 env = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
964 if overwrite_config:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
965 # By predefining TOFU_CJK_EXT here, we don't need to modify
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
966 # MuPDF's include/mupdf/fitz/config.h.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
967 log( f'Setting XCFLAGS and XCXXFLAGS to predefine TOFU_CJK_EXT.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
968 env_add(env, 'XCFLAGS', '-DTOFU_CJK_EXT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
969 env_add(env, 'XCXXFLAGS', '-DTOFU_CJK_EXT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
970
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
971 if openbsd or freebsd:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
972 env_add(env, 'CXX', 'c++', ' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
973
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
974 if darwin and os.environ.get('GITHUB_ACTIONS') == 'true':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
975 if os.environ.get('ImageOS') == 'macos13':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
976 # On Github macos13 we need to use Clang/LLVM (Homebrew) 15.0.7,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
977 # otherwise mupdf:thirdparty/tesseract/src/api/baseapi.cpp fails to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
978 # compile with:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
979 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
980 # thirdparty/tesseract/src/api/baseapi.cpp:150:25: error: 'recursive_directory_iterator' is unavailable: introduced in macOS 10.15
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
981 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
982 # See:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
983 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
984 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
985 log(f'Using llvm@15 clang and clang++')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
986 cl15 = pipcl.run(f'brew --prefix llvm@15', capture=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
987 log(f'{cl15=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
988 cl15 = cl15.strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
989 pipcl.run(f'ls -lL {cl15}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
990 pipcl.run(f'ls -lL {cl15}/bin')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
991 cc = f'{cl15}/bin/clang'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
992 cxx = f'{cl15}/bin/clang++'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
993 env['CC'] = cc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
994 env['CXX'] = cxx
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
995
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
996 # Show compiler versions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
997 cc = env.get('CC', 'cc')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
998 cxx = env.get('CXX', 'c++')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
999 pipcl.run(f'{cc} --version')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1000 pipcl.run(f'{cxx} --version')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1001
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1002 # Add extra flags for MacOS cross-compilation, where ARCHFLAGS can be
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1003 # '-arch arm64'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1004 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1005 archflags = os.environ.get( 'ARCHFLAGS')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1006 if archflags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1007 env_add(env, 'XCFLAGS', archflags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1008 env_add(env, 'XLIBS', archflags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1009
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1010 mupdf_version_tuple = get_mupdf_version(mupdf_local)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1011
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1012 # We specify a build directory path containing 'pymupdf' so that we
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1013 # coexist with non-PyMuPDF builds (because PyMuPDF builds have a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1014 # different config.h).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1015 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1016 # We also append further text to try to allow different builds to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1017 # work if they reuse the mupdf directory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1018 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1019 # Using platform.machine() (e.g. 'amd64') ensures that different
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1020 # builds of mupdf on a shared filesystem can coexist. Using
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1021 # $_PYTHON_HOST_PLATFORM allows cross-compiled cibuildwheel builds
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1022 # to coexist, e.g. on github.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1023 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1024 # Have experimented with looking at getconf_ARG_MAX to decide whether to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1025 # omit `PyMuPDF-` from the build directory, to avoid command-too-long
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1026 # errors with mupdf-1.26. But it seems that `getconf ARG_MAX` returns
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1027 # a system limit, not the actual limit of the current shell, and there
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1028 # doesn't seem to be a way to find the current shell's limit.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1029 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1030 build_prefix = f'PyMuPDF-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1031 if mupdf_version_tuple >= (1, 26):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1032 # Avoid link command length problems seen on musllinux.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1033 build_prefix = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1034 if pyodide:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1035 build_prefix += 'pyodide-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1036 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1037 build_prefix += f'{platform.machine()}-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1038 build_prefix_extra = os.environ.get( '_PYTHON_HOST_PLATFORM')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1039 if build_prefix_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1040 build_prefix += f'{build_prefix_extra}-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1041 build_prefix += 'shared-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1042 if msys2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1043 # Error in mupdf/scripts/tesseract/endianness.h:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1044 # #error "I don't know what architecture this is!"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1045 log(f'msys2: building MuPDF without tesseract.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1046 elif os.environ.get('PYMUPDF_SETUP_MUPDF_TESSERACT') == '0':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1047 log(f'PYMUPDF_SETUP_MUPDF_TESSERACT=0 so building mupdf without tesseract.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1048 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1049 build_prefix += 'tesseract-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1050 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1051 linux
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1052 and os.environ.get('PYMUPDF_SETUP_MUPDF_BSYMBOLIC', '1') == '1'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1053 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1054 log(f'Appending `bsymbolic-` to MuPDF build path.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1055 build_prefix += 'bsymbolic-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1056 log(f'{g_py_limited_api=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1057 if g_py_limited_api:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1058 build_prefix += f'Py_LIMITED_API_{pipcl.current_py_limited_api()}-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1059 unix_build_dir = f'{mupdf_local}/build/{build_prefix}{build_type}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1060 PYMUPDF_SETUP_MUPDF_CLEAN = os.environ.get('PYMUPDF_SETUP_MUPDF_CLEAN')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1061 if PYMUPDF_SETUP_MUPDF_CLEAN == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1062 log(f'{PYMUPDF_SETUP_MUPDF_CLEAN=}, deleting {unix_build_dir=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1063 shutil.rmtree(unix_build_dir, ignore_errors=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1064 # We need MuPDF's Python bindings, so we build MuPDF with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1065 # `mupdf/scripts/mupdfwrap.py` instead of running `make`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1066 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1067 command = f'cd {mupdf_local} &&'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1068 for n, v in env.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1069 command += f' {n}={shlex.quote(v)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1070 command += f' {sys.executable} ./scripts/mupdfwrap.py'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1071 if PYMUPDF_SETUP_SWIG:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1072 command += f' --swig {shlex.quote(PYMUPDF_SETUP_SWIG)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1073 command += f' -d build/{build_prefix}{build_type} -b'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1074 #command += f' --m-target libs'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1075 if PYMUPDF_SETUP_MUPDF_REFCHECK_IF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1076 command += f' --refcheck-if "{PYMUPDF_SETUP_MUPDF_REFCHECK_IF}"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1077 if PYMUPDF_SETUP_MUPDF_TRACE_IF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1078 command += f' --trace-if "{PYMUPDF_SETUP_MUPDF_TRACE_IF}"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1079 if 'p' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1080 command += ' all'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1081 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1082 command += ' m01' # No need for C++/Python bindings.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1083 command += f' && echo {unix_build_dir}:'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1084 command += f' && ls -l {unix_build_dir}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1085
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1086 if os.environ.get( 'PYMUPDF_SETUP_MUPDF_REBUILD') == '0':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1087 log( f'PYMUPDF_SETUP_MUPDF_REBUILD is "0" so not building MuPDF; would have run: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1088 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1089 log( f'Building MuPDF by running: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1090 subprocess.run( command, shell=True, check=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1091 log( f'Finished building mupdf.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1092
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1093 return unix_build_dir
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1094
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1096 def get_mupdf_version(mupdf_dir):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1097 path = f'{mupdf_dir}/include/mupdf/fitz/version.h'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1098 with open(path) as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1099 text = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1100 v0 = re.search('#define FZ_VERSION_MAJOR ([0-9]+)', text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1101 v1 = re.search('#define FZ_VERSION_MINOR ([0-9]+)', text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1102 v2 = re.search('#define FZ_VERSION_PATCH ([0-9]+)', text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1103 assert v0 and v1 and v2, f'Cannot find MuPDF version numbers in {path=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1104 v0 = int(v0.group(1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1105 v1 = int(v1.group(1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1106 v2 = int(v2.group(1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1107 return v0, v1, v2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1108
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1109 def _fs_update(text, path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1110 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1111 with open( path) as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1112 text0 = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1113 except OSError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1114 text0 = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1115 print(f'path={path!r} text==text0={text==text0!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1116 if text != text0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1117 with open( path, 'w') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1118 f.write( text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1119
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1120
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1121 def _build_extension( mupdf_local, mupdf_build_dir, build_type, g_py_limited_api):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1122 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1123 Builds Python extension module `_extra`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1125 Returns leafname of the generated shared libraries within mupdf_build_dir.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1126 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1127 (compiler_extra, linker_extra, includes, defines, optimise, debug, libpaths, libs, libraries) \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1128 = _extension_flags( mupdf_local, mupdf_build_dir, build_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1129 log(f'_build_extension(): {g_py_limited_api=} {defines=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1130 if mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1131 includes = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1132 f'{mupdf_local}/platform/c++/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1133 f'{mupdf_local}/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1134 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1135
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1136 # Build rebased extension module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1137 log('Building PyMuPDF rebased.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1138 compile_extra_cpp = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1139 if darwin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1140 # Avoids `error: cannot pass object of non-POD type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1141 # 'std::nullptr_t' through variadic function; call will abort at
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1142 # runtime` when compiling `mupdf::pdf_dict_getl(..., nullptr)`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1143 compile_extra_cpp += ' -Wno-non-pod-varargs'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1144 # Avoid errors caused by mupdf's C++ bindings' exception classes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1145 # not having `nothrow` to match the base exception class.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1146 compile_extra_cpp += ' -std=c++14'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1147 if windows:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1148 wp = pipcl.wdev.WindowsPython()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1149 libs = f'mupdfcpp{wp.cpu.windows_suffix}.lib'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1150 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1151 libs = ('mupdf', 'mupdfcpp')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1152 libraries = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1153 f'{mupdf_build_dir}/libmupdf.so'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1154 f'{mupdf_build_dir}/libmupdfcpp.so'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1155 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1156
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1157 path_so_leaf = pipcl.build_extension(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1158 name = 'extra',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1159 path_i = f'{g_root}/src/extra.i',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1160 outdir = f'{g_root}/src/build',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1161 includes = includes,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1162 defines = defines,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1163 libpaths = libpaths,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1164 libs = libs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1165 compiler_extra = compiler_extra + compile_extra_cpp,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1166 linker_extra = linker_extra,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1167 optimise = optimise,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1168 debug = debug,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1169 prerequisites_swig = None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1170 prerequisites_compile = f'{mupdf_local}/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1171 prerequisites_link = libraries,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1172 py_limited_api = g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1173 swig = PYMUPDF_SETUP_SWIG,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1174 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1176 return path_so_leaf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1177
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1179 def _extension_flags( mupdf_local, mupdf_build_dir, build_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1180 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1181 Returns various flags to pass to pipcl.build_extension().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1182 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1183 compiler_extra = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1184 linker_extra = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1185 if build_type == 'memento':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1186 compiler_extra += ' -DMEMENTO'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1187 if mupdf_build_dir:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1188 mupdf_build_dir_flags = os.path.basename( mupdf_build_dir).split( '-')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1189 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1190 mupdf_build_dir_flags = [build_type]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1191 optimise = 'release' in mupdf_build_dir_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1192 debug = 'debug' in mupdf_build_dir_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1193 r_extra = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1194 defines = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1195 if windows:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1196 defines.append('FZ_DLL_CLIENT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1197 wp = pipcl.wdev.WindowsPython()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1198 if os.environ.get('PYMUPDF_SETUP_MUPDF_VS_UPGRADE') == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1199 # MuPDF C++ build uses a parallel build tree with updated VS files.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1200 infix = 'win32-vs-upgrade'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1201 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1202 infix = 'win32'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1203 build_type_infix = 'Debug' if debug else 'Release'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1204 libpaths = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1205 f'{mupdf_local}\\platform\\{infix}\\{wp.cpu.windows_subdir}{build_type_infix}',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1206 f'{mupdf_local}\\platform\\{infix}\\{wp.cpu.windows_subdir}{build_type_infix}Tesseract',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1207 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1208 libs = f'mupdfcpp{wp.cpu.windows_suffix}.lib'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1209 libraries = f'{mupdf_local}\\platform\\{infix}\\{wp.cpu.windows_subdir}{build_type_infix}\\{libs}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1210 compiler_extra = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1211 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1212 libs = ['mupdf']
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1213 compiler_extra += (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1214 ' -Wall'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1215 ' -Wno-deprecated-declarations'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1216 ' -Wno-unused-const-variable'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1217 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1218 if mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1219 libpaths = (mupdf_build_dir,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1220 libraries = f'{mupdf_build_dir}/{libs[0]}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1221 if openbsd:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1222 compiler_extra += ' -Wno-deprecated-declarations'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1223 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1224 libpaths = os.environ.get('PYMUPDF_MUPDF_LIB')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1225 libraries = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1226 if libpaths:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1227 libpaths = libpaths.split(':')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1228
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1229 if mupdf_local:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1230 includes = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1231 f'{mupdf_local}/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1232 f'{mupdf_local}/include/mupdf',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1233 f'{mupdf_local}/thirdparty/freetype/include',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1234 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1235 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1236 # Use system MuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1237 includes = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1238 pi = os.environ.get('PYMUPDF_INCLUDES')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1239 if pi:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1240 includes += pi.split(':')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1241 pmi = os.environ.get('PYMUPDF_MUPDF_INCLUDE')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1242 if pmi:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1243 includes.append(pmi)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1244 ldflags = os.environ.get('LDFLAGS')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1245 if ldflags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1246 linker_extra += f' {ldflags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1247 cflags = os.environ.get('CFLAGS')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1248 if cflags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1249 compiler_extra += f' {cflags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1250 cxxflags = os.environ.get('CXXFLAGS')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1251 if cxxflags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1252 compiler_extra += f' {cxxflags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1253
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1254 if pyodide:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1255 compiler_extra += f' {pyodide_flags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1256 linker_extra += f' {pyodide_flags}'
7
5ab937c03c27 Apply full RELRO to all generated binaries.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1257
12
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1258 if not darwin and (platform.system() != 'Windows'):
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1259 # *BSD and Linux
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1260 # Full RELRO
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1261 linker_extra += ' -Wl,-z,relro,-z,now'
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1262 # Strip
fdb709369d57 Do not use -z,relro,-z,now on Systems where it is not supported.
Franz Glasner <fzglas.hg@dom66.de>
parents: 7
diff changeset
1263 linker_extra += ' -Wl,-s'
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1264
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1265 return compiler_extra, linker_extra, includes, defines, optimise, debug, libpaths, libs, libraries,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1266
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1267
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1268 def sdist():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1269 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1270 if PYMUPDF_SETUP_DUMMY == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1271 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1272
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1273 if PYMUPDF_SETUP_FLAVOUR == 'b':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1274 # Create a minimal sdist that will build/install a dummy PyMuPDFb.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1275 for p in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1276 'setup.py',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1277 'pipcl.py',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1278 'wdev.py',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1279 'pyproject.toml',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1280 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1281 ret.append(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1282 ret.append(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1283 (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1284 b'This file indicates that we are a PyMuPDFb sdist and should build/install a dummy PyMuPDFb package.\n',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1285 g_pymupdfb_sdist_marker,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1286 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1287 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1288 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1289
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1290 for p in pipcl.git_items( g_root):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1291 if p.startswith(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1292 (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1293 'docs/',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1294 'signatures/',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1295 '.',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1296 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1297 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1298 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1299 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1300 ret.append(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1301 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1302 tgz, mupdf_location = get_mupdf_tgz()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1303 if tgz:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1304 ret.append((tgz, mupdf_tgz))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1305 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1306 log(f'Not including MuPDF .tgz in sdist.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1307 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1308
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1309
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1310 classifier = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1311 'Development Status :: 5 - Production/Stable',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1312 'Intended Audience :: Developers',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1313 'Intended Audience :: Information Technology',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1314 'Operating System :: MacOS',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1315 'Operating System :: Microsoft :: Windows',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1316 'Operating System :: POSIX :: Linux',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1317 'Programming Language :: C',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1318 'Programming Language :: C++',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1319 'Programming Language :: Python :: 3 :: Only',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1320 'Programming Language :: Python :: Implementation :: CPython',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1321 'Topic :: Utilities',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1322 'Topic :: Multimedia :: Graphics',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1323 'Topic :: Software Development :: Libraries',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1324 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1325
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1326 # We generate different wheels depending on PYMUPDF_SETUP_FLAVOUR.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1327 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1329 # PyMuPDF version.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1330 version_p = '1.26.4'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1331
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1332 version_mupdf = '1.26.7'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1333
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1334 # PyMuPDFb version. This is the PyMuPDF version whose PyMuPDFb wheels we will
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1335 # (re)use if generating separate PyMuPDFb wheels. Though as of PyMuPDF-1.24.11
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1336 # (2024-10-03) we no longer use PyMuPDFb wheels so this is actually unused.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1337 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1338 version_b = '1.26.3'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1339
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1340 if os.path.exists(f'{g_root}/{g_pymupdfb_sdist_marker}'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1341
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1342 # We are in a PyMuPDFb sdist. We specify a dummy package so that pip builds
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1343 # from sdists work - pip's build using PyMuPDF's sdist will already create
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1344 # the required binaries, but pip will still see `requires_dist` set to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1345 # 'PyMuPDFb', so will also download and build PyMuPDFb's sdist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1346 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1347 log(f'Specifying dummy PyMuPDFb wheel.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1348
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1349 def get_requires_for_build_wheel(config_settings=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1350 return list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1351
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1352 p = pipcl.Package(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1353 'PyMuPDFb',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1354 version_b,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1355 summary = 'Dummy PyMuPDFb wheel',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1356 description = '',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1357 author = 'Artifex',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1358 author_email = 'support@artifex.com',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1359 license = 'GNU AFFERO GPL 3.0',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1360 tag_python = 'py3',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1361 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1362
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1363 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1364 # A normal PyMuPDF package.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1365
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1366 with open( f'{g_root}/README.md', encoding='utf-8') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1367 readme_p = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1368
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1369 with open( f'{g_root}/READMEb.md', encoding='utf-8') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1370 readme_b = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1371
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1372 with open( f'{g_root}/READMEd.md', encoding='utf-8') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1373 readme_d = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1375 tag_python = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1376 requires_dist = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1377 entry_points = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1378
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1379 if 'p' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1380 version = version_p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1381 name = 'PyMuPDF'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1382 readme = readme_p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1383 summary = 'A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1384 if 'b' not in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1385 requires_dist.append(f'PyMuPDFb =={version_b}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1386 # Create a `pymupdf` command.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1387 entry_points = textwrap.dedent('''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1388 [console_scripts]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1389 pymupdf = pymupdf.__main__:main
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1390 ''')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1391 elif 'b' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1392 version = version_b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1393 name = 'PyMuPDFb'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1394 readme = readme_b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1395 summary = 'MuPDF shared libraries for PyMuPDF.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1396 tag_python = 'py3'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1397 elif 'd' in PYMUPDF_SETUP_FLAVOUR:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1398 version = version_b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1399 name = 'PyMuPDFd'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1400 readme = readme_d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1401 summary = 'MuPDF build-time files for PyMuPDF.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1402 tag_python = 'py3'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1403 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1404 assert 0, f'Unrecognised {PYMUPDF_SETUP_FLAVOUR=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1405
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1406 if os.environ.get('PYODIDE_ROOT'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1407 # We can't pip install pytest on pyodide, so specify it here.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1408 requires_dist.append('pytest')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1409
23
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1410 #
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1411 # We need packaging because of extended version parsing (including local
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1412 # version specifiers.
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1413 #
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1414 requires_dist.append('packaging')
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 12
diff changeset
1415
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1416 p = pipcl.Package(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1417 name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1418 version,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1419 summary = summary,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1420 description = readme,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1421 description_content_type = 'text/markdown',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1422 classifier = classifier,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1423 author = 'Artifex',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1424 author_email = 'support@artifex.com',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1425 requires_dist = requires_dist,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1426 requires_python = '>=3.9',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1427 license = 'Dual Licensed - GNU AFFERO GPL 3.0 or Artifex Commercial License',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1428 project_url = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1429 ('Documentation, https://pymupdf.readthedocs.io/'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1430 ('Source, https://github.com/pymupdf/pymupdf'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1431 ('Tracker, https://github.com/pymupdf/PyMuPDF/issues'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1432 ('Changelog, https://pymupdf.readthedocs.io/en/latest/changes.html'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1433 ],
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1434
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1435 entry_points = entry_points,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1437 fn_build=build,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1438 fn_sdist=sdist,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1439
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1440 tag_python=tag_python,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1441 py_limited_api=g_py_limited_api,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1442
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1443 # 30MB: 9 ZIP_DEFLATED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1444 # 28MB: 9 ZIP_BZIP2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1445 # 23MB: 9 ZIP_LZMA
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1446 #wheel_compression = zipfile.ZIP_DEFLATED if (darwin or pyodide) else zipfile.ZIP_LZMA,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1447 wheel_compresslevel = 9,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1448 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1449
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1450 def get_requires_for_build_wheel(config_settings=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1451 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1452 Adds to pyproject.toml:[build-system]:requires, allowing programmatic
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1453 control over what packages we require.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1454 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1455 def platform_release_tuple():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1456 r = platform.release()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1457 r = r.split('.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1458 r = tuple(int(i) for i in r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1459 log(f'platform_release_tuple() returning {r=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1460 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1462 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1463 libclang = os.environ.get('PYMUPDF_SETUP_LIBCLANG')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1464 if libclang:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1465 print(f'Overriding to use {libclang=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1466 ret.append(libclang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1467 elif openbsd:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1468 print(f'OpenBSD: libclang not available via pip; assuming `pkg_add py3-llvm`.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1469 elif darwin and platform.machine() == 'arm64':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1470 print(f'MacOS/arm64: forcing use of libclang 16.0.6 because 18.1.1 known to fail with `clang.cindex.TranslationUnitLoadError: Error parsing translation unit.`')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1471 ret.append('libclang==16.0.6')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1472 elif darwin and platform_release_tuple() < (18,):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1473 # There are still of problems when building on old macos.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1474 ret.append('libclang==14.0.6')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1475 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1476 ret.append('libclang')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1477 if msys2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1478 print(f'msys2: pip install of swig does not build; assuming `pacman -S swig`.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1479 elif openbsd:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1480 print(f'OpenBSD: pip install of swig does not build; assuming `pkg_add swig`.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1481 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1482 ret.append( 'swig')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1483 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1484
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1485
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1486 if PYMUPDF_SETUP_URL_WHEEL:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1487 def build_wheel(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1488 wheel_directory,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1489 config_settings=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1490 metadata_directory=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1491 p=p,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1492 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1493 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1494 Instead of building wheel, we look for and copy a wheel from location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1495 specified by PYMUPDF_SETUP_URL_WHEEL.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1496 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1497 log(f'{PYMUPDF_SETUP_URL_WHEEL=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1498 log(f'{p.wheel_name()=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1499 url = PYMUPDF_SETUP_URL_WHEEL
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1500 if url.startswith(('http://', 'https://')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1501 leaf = p.wheel_name()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1502 out_path = f'{wheel_directory}{leaf}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1503 out_path_temp = out_path + '-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1504 if url.endswith('/'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1505 url += leaf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1506 log(f'Downloading from {url=} to {out_path_temp=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1507 urllib.request.urlretrieve(url, out_path_temp)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1508 elif url.startswith(f'file://'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1509 in_path = url[len('file://'):]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1510 log(f'{in_path=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1511 if in_path.endswith('/'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1512 # Look for matching wheel within this directory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1513 wheels = glob.glob(f'{in_path}*.whl')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1514 log(f'{len(wheels)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1515 for in_path in wheels:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1516 log(f'{in_path=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1517 leaf = os.path.basename(in_path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1518 if p.wheel_name_match(leaf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1519 log(f'Match: {in_path=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1520 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1521 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1522 message = f'Cannot find matching for {p.wheel_name()=} in ({len(wheels)=}):\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1523 wheels_text = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1524 for wheel in wheels:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1525 wheels_text += f' {wheel}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1526 assert 0, f'Cannot find matching for {p.wheel_name()=} in:\n{wheels_text}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1527 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1528 leaf = os.path.basename(in_path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1529 out_path = os.path.join(wheel_directory, leaf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1530 out_path_temp = out_path + '-'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1531 log(f'Copying from {in_path=} to {out_path_temp=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1532 shutil.copy2(in_path, out_path_temp)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1533 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1534 assert 0, f'Unrecognised prefix in {PYMUPDF_SETUP_URL_WHEEL=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1535
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1536 log(f'Renaming from:\n {out_path_temp}\nto:\n {out_path}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1537 os.rename(out_path_temp, out_path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1538 return os.path.basename(out_path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1539 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1540 build_wheel = p.build_wheel
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1541
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1542 build_sdist = p.build_sdist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1543
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1544
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1545 if __name__ == '__main__':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1546 p.handle_argv(sys.argv)