comparison mupdf-source/Makethird @ 3:2c135c81b16c

MERGE: upstream PyMuPDF 1.26.4 with MuPDF 1.26.7
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:44:09 +0200
parents b50eed0cc0ef
children
comparison
equal deleted inserted replaced
0:6015a75abc2d 3:2c135c81b16c
1 # GNU Makefile for third party libraries used by MuPDF
2
3 ifeq ($(USE_SYSTEM_LIBS),yes)
4 USE_SYSTEM_FREETYPE ?= yes
5 USE_SYSTEM_GUMBO ?= yes
6 USE_SYSTEM_HARFBUZZ ?= yes
7 USE_SYSTEM_JBIG2DEC ?= yes
8 USE_SYSTEM_JPEGXR ?= no # not available
9 USE_SYSTEM_LCMS2 ?= no # lcms2mt is strongly preferred
10 USE_SYSTEM_LIBJPEG ?= yes
11 USE_SYSTEM_MUJS ?= no # not available
12 USE_SYSTEM_OPENJPEG ?= yes
13 USE_SYSTEM_ZLIB ?= yes
14 USE_SYSTEM_GLUT ?= yes
15 USE_SYSTEM_CURL ?= yes
16 USE_SYSTEM_LEPTONICA ?= yes
17 USE_SYSTEM_TESSERACT ?= yes
18 USE_SYSTEM_ZXINGCPP ?= yes
19 USE_SYSTEM_BROTLI ?= yes
20 endif
21
22 ifeq ($(OS),MACOS)
23 USE_SYSTEM_GLUT := yes
24 endif
25
26 ifeq ($(OS),Linux)
27 USE_SYSTEM_CURL ?= yes
28 endif
29
30 # Use of Tesseract is optional:
31 ifeq ($(USE_TESSERACT),yes)
32 USE_LEPTONICA := yes
33 ifeq ($(USE_SYSTEM_TESSERACT),yes)
34 HAVE_TESSERACT := $(HAVE_SYS_TESSERACT)
35 else
36 ifneq ($(wildcard thirdparty/tesseract/src/*),)
37 HAVE_TESSERACT := yes
38 endif
39 endif
40 ifneq ($(HAVE_TESSERACT),yes)
41 $(error USE_TESSERACT set but tesseract not found)
42 endif
43 endif
44
45 ifeq ($(USE_LEPTONICA),yes)
46 ifeq ($(USE_SYSTEM_LEPTONICA),yes)
47 HAVE_LEPTONICA := $(HAVE_SYS_LEPTONICA)
48 else
49 ifneq ($(wildcard thirdparty/leptonica/src/*),)
50 HAVE_LEPTONICA := yes
51 endif
52 endif
53 ifneq ($(HAVE_LEPTONICA),yes)
54 $(error USE_LEPTONICA set but leptonica not found)
55 endif
56 endif
57
58 ifeq ($(USE_TESSERACT),yes)
59 ifneq ($(HAVE_LEPTONICA),yes)
60 $(error USE_TESSERACT requires USE_LEPTONICA)
61 endif
62 endif
63
64 # Use of ZXing is optional:
65 ifeq ($(USE_ZXINGCPP),yes)
66 ifeq ($(USE_SYSTEM_ZXINGCPP),yes)
67 HAVE_ZXINGCPP := $(HAVE_SYS_ZXINGCPP)
68 else
69 ifneq ($(wildcard thirdparty/zxing-cpp/core/src/*),)
70 HAVE_ZXINGCPP := yes
71 endif
72 endif
73 ifneq ($(HAVE_ZXINGCPP),yes)
74 $(error USE_ZXINGCPP set but zxing not found)
75 endif
76 endif
77
78 # Use of libarchive is optional:
79 ifeq ($(USE_LIBARCHIVE),yes)
80 HAVE_LIBARCHIVE := $(HAVE_SYS_LIBARCHIVE)
81 ifneq ($(HAVE_LIBARCHIVE),yes)
82 $(error USE_LIBARCHIVE set but libarchive not found)
83 endif
84 endif
85
86 # --- Include source file lists ---
87
88 include Makelists
89
90 # --- BROTLI ---
91
92 ifeq ($(USE_BROTLI),yes)
93 ifeq ($(USE_SYSTEM_BROTLI),yes)
94 THIRD_CFLAGS += $(SYS_BROTLI_CFLAGS)
95 THIRD_LIBS += $(SYS_BROTLI_LIBS)
96 else
97 THIRD_CFLAGS += $(BROTLI_CFLAGS)
98 THIRD_LIBS += $(BROTLI_LIBS)
99 THIRD_SRC += $(BROTLI_SRC)
100 $(OUT)/thirdparty/brotli/c/common/%.o: thirdparty/brotli/c/common/%.c
101 $(CC_CMD) $(LIB_CFLAGS) $(BROTLI_CFLAGS) $(BROTLI_BUILD_CFLAGS)
102 $(OUT)/thirdparty/brotli/c/dec/%.o: thirdparty/brotli/c/dec/%.c
103 $(CC_CMD) $(LIB_CFLAGS) $(BROTLI_CFLAGS) $(BROTLI_BUILD_CFLAGS)
104 $(OUT)/thirdparty/brotli/c/enc/%.o: thirdparty/brotli/c/enc/%.c
105 $(CC_CMD) $(LIB_CFLAGS) $(BROTLI_CFLAGS) $(BROTLI_BUILD_CFLAGS)
106 endif
107 endif
108
109 # --- FREETYPE 2 ---
110
111 ifeq ($(USE_SYSTEM_FREETYPE),yes)
112 THIRD_CFLAGS += $(SYS_FREETYPE_CFLAGS)
113 THIRD_LIBS += $(SYS_FREETYPE_LIBS)
114 else
115 THIRD_CFLAGS += $(FREETYPE_CFLAGS)
116 THIRD_LIBS += $(FREETYPE_LIBS)
117 THIRD_SRC += $(FREETYPE_SRC)
118 $(OUT)/thirdparty/freetype/%.o: thirdparty/freetype/%.c
119 $(CC_CMD) $(LIB_CFLAGS) $(FREETYPE_CFLAGS) $(FREETYPE_BUILD_CFLAGS)
120 endif
121
122 # --- GUMBO (HTML5 parser) ---
123
124 ifeq ($(USE_GUMBO),yes)
125 ifeq ($(USE_SYSTEM_GUMBO),yes)
126 THIRD_CFLAGS += $(SYS_GUMBO_CFLAGS)
127 THIRD_LIBS += $(SYS_GUMBO_LIBS)
128 else
129 THIRD_CFLAGS += $(GUMBO_CFLAGS)
130 THIRD_LIBS += $(GUMBO_LIBS)
131 THIRD_SRC += $(GUMBO_SRC)
132 $(OUT)/thirdparty/gumbo-parser/%.o: thirdparty/gumbo-parser/%.c
133 $(CC_CMD) $(LIB_CFLAGS) $(GUMBO_CFLAGS) $(GUMBO_BUILD_CFLAGS)
134 endif
135 endif
136
137 # --- HARFBUZZ ---
138
139 ifeq ($(USE_HARFBUZZ),yes)
140 ifeq ($(USE_SYSTEM_HARFBUZZ),yes)
141 THIRD_CFLAGS += $(SYS_HARFBUZZ_CFLAGS)
142 THIRD_LIBS += $(SYS_HARFBUZZ_LIBS)
143 else
144 THIRD_CFLAGS += $(HARFBUZZ_CFLAGS)
145 THIRD_LIBS += $(HARFBUZZ_LIBS)
146 THIRD_SRC += $(HARFBUZZ_SRC)
147 $(OUT)/thirdparty/harfbuzz/%.o: thirdparty/harfbuzz/%.cc
148 $(CXX_CMD) $(LIB_CFLAGS) $(HARFBUZZ_CFLAGS) $(HARFBUZZ_BUILD_CFLAGS)
149 endif
150 endif
151
152 # --- JPEG-XR ---
153
154 ifeq ($(HAVE_JPEGXR),yes)
155 THIRD_CFLAGS += -DHAVE_JPEGXR
156 ifeq ($(USE_SYSTEM_JPEGXR),yes)
157 THIRD_CFLAGS += $(SYS_JPEGXR_CFLAGS)
158 THIRD_LIBS += $(SYS_JPEGXR_LIBS)
159 else
160 THIRD_CFLAGS += $(JPEGXR_CFLAGS)
161 THIRD_LIBS += $(JPEGXR_LIBS)
162 THIRD_SRC += $(JPEGXR_SRC)
163 $(OUT)/thirdparty/jpegxr/%.o: thirdparty/jpegxr/%.c
164 $(CC_CMD) $(LIB_CFLAGS) $(JPEGXR_CFLAGS) $(JPEGXR_BUILD_CFLAGS)
165 endif
166 endif
167
168 # --- LIBJPEG ---
169
170 ifeq ($(USE_SYSTEM_LIBJPEG),yes)
171 THIRD_CFLAGS += $(SYS_LIBJPEG_CFLAGS) -DSHARE_JPEG
172 THIRD_LIBS += $(SYS_LIBJPEG_LIBS)
173 else
174 THIRD_CFLAGS += $(LIBJPEG_CFLAGS)
175 THIRD_LIBS += $(LIBJPEG_LIBS)
176 THIRD_SRC += $(LIBJPEG_SRC)
177 $(OUT)/thirdparty/libjpeg/%.o: thirdparty/libjpeg/%.c
178 $(CC_CMD) $(LIB_CFLAGS) $(LIBJPEG_CFLAGS) $(LIBJPEG_BUILD_CFLAGS)
179 endif
180
181 # --- LCMS2 ---
182
183 ifeq ($(USE_SYSTEM_LCMS2),yes)
184 THIRD_CFLAGS += $(SYS_LCMS2_CFLAGS)
185 THIRD_LIBS += $(SYS_LCMS2_LIBS)
186 else
187 THIRD_CFLAGS += $(LCMS2_CFLAGS)
188 THIRD_LIBS += $(LCMS2_LIBS)
189 THIRD_SRC += $(LCMS2_SRC)
190 $(OUT)/thirdparty/lcms2/%.o: thirdparty/lcms2/%.c
191 $(CC_CMD) $(LIB_CFLAGS) $(LCMS2_CFLAGS) $(LCMS2_BUILD_CFLAGS)
192 endif
193
194 # --- MuJS ---
195
196 ifeq ($(USE_MUJS),yes)
197 ifeq ($(USE_SYSTEM_MUJS),yes)
198 THIRD_CFLAGS += $(SYS_MUJS_CFLAGS)
199 THIRD_LIBS += $(SYS_MUJS_LIBS)
200 else
201 THIRD_CFLAGS += $(MUJS_CFLAGS)
202 THIRD_LIBS += $(MUJS_LIBS)
203 THIRD_SRC += $(MUJS_SRC)
204 $(OUT)/thirdparty/mujs/%.o: thirdparty/mujs/%.c
205 $(CC_CMD) $(LIB_CFLAGS) $(MUJS_CFLAGS) $(MUJS_BUILD_CFLAGS)
206 endif
207 endif
208
209 # --- ZLIB ---
210
211 ifeq ($(USE_SYSTEM_ZLIB),yes)
212 THIRD_CFLAGS += $(SYS_ZLIB_CFLAGS)
213 THIRD_LIBS += $(SYS_ZLIB_LIBS)
214 else
215 THIRD_CFLAGS += $(ZLIB_CFLAGS)
216 THIRD_LIBS += $(ZLIB_LIBS)
217 THIRD_SRC += $(ZLIB_SRC)
218 $(OUT)/thirdparty/zlib/%.o: thirdparty/zlib/%.c
219 $(CC_CMD) $(LIB_CFLAGS) $(ZLIB_CFLAGS) $(ZLIB_BUILD_CFLAGS)
220 endif
221
222 # --- JBIG2DEC ---
223
224 ifeq ($(USE_SYSTEM_JBIG2DEC),yes)
225 THIRD_CFLAGS += $(SYS_JBIG2DEC_CFLAGS)
226 THIRD_LIBS += $(SYS_JBIG2DEC_LIBS)
227 else
228 THIRD_CFLAGS += $(JBIG2DEC_CFLAGS)
229 THIRD_LIBS += $(JBIG2DEC_LIBS)
230 THIRD_SRC += $(JBIG2DEC_SRC)
231 $(OUT)/thirdparty/jbig2dec/%.o: thirdparty/jbig2dec/%.c
232 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(JBIG2DEC_CFLAGS) $(JBIG2DEC_BUILD_CFLAGS)
233 endif
234
235 # --- OPENJPEG ---
236
237 ifeq ($(USE_SYSTEM_OPENJPEG),yes)
238 THIRD_CFLAGS += $(SYS_OPENJPEG_CFLAGS)
239 THIRD_LIBS += $(SYS_OPENJPEG_LIBS)
240 else
241 THIRD_CFLAGS += $(OPENJPEG_CFLAGS)
242 THIRD_LIBS += $(OPENJPEG_LIBS)
243 THIRD_SRC += $(OPENJPEG_SRC)
244 $(OUT)/thirdparty/openjpeg/%.o: thirdparty/openjpeg/%.c
245 $(CC_CMD) $(LIB_CFLAGS) $(OPENJPEG_CFLAGS) $(OPENJPEG_BUILD_CFLAGS)
246 endif
247
248 # --- FreeGLUT ---
249
250 ifeq ($(USE_SYSTEM_GLUT),yes)
251 THIRD_GLUT_CFLAGS += $(SYS_GLUT_CFLAGS) $(SYS_GL_CFLAGS)
252 THIRD_GLUT_LIBS += $(SYS_GLUT_LIBS) $(SYS_GL_LIBS)
253 else
254 THIRD_GLUT_CFLAGS += $(GLUT_CFLAGS) $(SYS_GL_CFLAGS)
255 THIRD_GLUT_LIBS += $(GLUT_LIBS) $(SYS_GL_LIBS)
256 THIRD_GLUT_SRC += $(GLUT_SRC)
257 $(OUT)/thirdparty/freeglut/%.o: thirdparty/freeglut/%.c
258 $(CC_CMD) $(LIB_CFLAGS) $(GLUT_CFLAGS) $(GLUT_BUILD_CFLAGS)
259 endif
260
261 # --- cURL ---
262
263 ifeq ($(USE_SYSTEM_CURL),yes)
264 ifeq ($(HAVE_SYS_CURL),yes)
265 HAVE_CURL := yes
266 CURL_CFLAGS := $(SYS_CURL_CFLAGS) -DHAVE_CURL
267 CURL_LIBS := $(SYS_CURL_LIBS)
268 endif
269 endif
270
271 # --- LEPTONICA ---
272
273 ifeq ($(HAVE_LEPTONICA),yes)
274 THIRD_CFLAGS += -DHAVE_LEPTONICA
275 ifeq ($(USE_SYSTEM_LEPTONICA),yes)
276 THIRD_LIBS += $(SYS_LEPTONICA_LIBS)
277 LEPTONICA_CFLAGS += $(SYS_LEPTONICA_CFLAGS)
278 else
279 THIRD_LIBS += $(LEPTONICA_LIBS)
280 THIRD_SRC += $(LEPTONICA_SRC)
281 $(OUT)/thirdparty/leptonica/%.o: thirdparty/leptonica/%.c
282 $(CC_CMD) $(LIB_CFLAGS) $(LEPTONICA_CFLAGS) $(LEPTONICA_BUILD_CFLAGS)
283 endif
284 endif
285
286 # --- TESSERACT ---
287
288 ifeq ($(HAVE_TESSERACT),yes)
289 THIRD_CFLAGS += -DHAVE_TESSERACT
290 ifeq ($(USE_SYSTEM_TESSERACT),yes)
291 THIRD_LIBS += $(SYS_TESSERACT_LIBS) -lstdc++
292 TESSERACT_CFLAGS += $(SYS_TESSERACT_CFLAGS)
293 else
294 THIRD_LIBS += $(TESSERACT_LIBS)
295 THIRD_SRC += $(TESSERACT_SRC)
296 $(OUT)/thirdparty/tesseract/%.o: thirdparty/tesseract/%.cpp
297 $(CXX_CMD) $(LIB_CFLAGS) $(TESSERACT_CFLAGS) $(TESSERACT_BUILD_CFLAGS)
298 endif
299 endif
300
301 # --- ZXING-CPP ---
302
303 ifeq ($(HAVE_ZXINGCPP),yes)
304 THIRD_CFLAGS += -DHAVE_ZXINGCPP
305 ifeq ($(USE_SYSTEM_ZXINGCPP),yes)
306 THIRD_CFLAGS += -DUSE_SYSTEM_ZXINGCPP $(SYS_ZXINGCPP_CFLAGS)
307 THIRD_LIBS += $(SYS_ZXINGCPP_LIBS) -lstdc++
308 else
309 THIRD_CFLAGS += $(ZXINGCPP_CFLAGS)
310 THIRD_LIBS += $(ZXINGCPP_LIBS)
311 THIRD_SRC += $(ZXINGCPP_SRC)
312 $(OUT)/thirdparty/zxing-cpp/core/src/%.o: thirdparty/zxing-cpp/core/src/%.cpp
313 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
314 $(OUT)/thirdparty/zxing-cpp/core/src/aztec/%.o: thirdparty/zxing-cpp/core/src/aztec/%.cpp
315 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
316 $(OUT)/thirdparty/zxing-cpp/core/src/datamatrix/%.o: thirdparty/zxing-cpp/core/src/datamatrix/%.cpp
317 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
318 $(OUT)/thirdparty/zxing-cpp/core/src/libzueci/%.o: thirdparty/zxing-cpp/core/src/libzueci/%.c
319 $(CC_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS)
320 $(OUT)/thirdparty/zxing-cpp/core/src/maxicode/%.o: thirdparty/zxing-cpp/core/src/maxicode/%.cpp
321 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
322 $(OUT)/thirdparty/zxing-cpp/core/src/oned/%.o: thirdparty/zxing-cpp/core/src/oned/%.cpp
323 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
324 $(OUT)/thirdparty/zxing-cpp/core/src/pdf147/%.o: thirdparty/zxing-cpp/core/src/pdf147/%.cpp
325 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
326 $(OUT)/thirdparty/zxing-cpp/core/src/qrcode/%.o: thirdparty/zxing-cpp/core/src/qrcode/%.cpp
327 $(CXX_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS) $(ZXINGCPP_LANGFLAGS)
328 $(OUT)/thirdparty/zint/backend/%.o: thirdparty/zint/backend/%.c
329 $(CC_CMD) $(LIB_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_BUILD_CFLAGS)
330 endif
331 endif
332
333 # --- EXTRACT ---
334
335 ifeq ($(USE_EXTRACT),yes)
336
337 THIRD_CFLAGS += $(EXTRACT_CFLAGS)
338 THIRD_LIBS += $(EXTRACT_LIBS)
339 THIRD_SRC += $(EXTRACT_SRC)
340 $(OUT)/thirdparty/extract/%.o: thirdparty/extract/%.c
341 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(EXTRACT_CFLAGS) $(ZLIB_CFLAGS) $(EXTRACT_BUILD_CFLAGS)
342
343 # The first python3 command in the next two rules returns 0 (success) iff
344 # python3 exists and is version 3.6 or later.
345
346 thirdparty/extract/src/docx_template.c: thirdparty/extract/src/template.docx thirdparty/extract/src/docx_template_build.py
347 $(QUIET_GEN) if python3 -c 'import sys; sys.exit(sys.version_info < (3,6))'; \
348 then python3 thirdparty/extract/src/docx_template_build.py \
349 -i thirdparty/extract/src/template.docx \
350 -n docx \
351 -o thirdparty/extract/src/docx_template ; \
352 else echo python3 is older than 3.6 so not running docx_template_build.py; \
353 fi
354 @touch $@
355
356 thirdparty/extract/src/odt_template.c: thirdparty/extract/src/template.odt thirdparty/extract/src/docx_template_build.py
357 $(QUIET_GEN) if python3 -c 'import sys; sys.exit(sys.version_info < (3,6))'; \
358 then python3 thirdparty/extract/src/docx_template_build.py \
359 -i thirdparty/extract/src/template.odt \
360 -n odt \
361 -o thirdparty/extract/src/odt_template ; \
362 else echo python3 is older than 3.6 so not running docx_template_build.py; \
363 fi
364 @touch $@
365
366 generate: thirdparty/extract/src/docx_template.c
367
368 endif
369
370 # --- LIBARCHIVE ---
371
372 ifeq ($(HAVE_LIBARCHIVE),yes)
373 THIRD_CFLAGS += -DHAVE_LIBARCHIVE
374 THIRD_CFLAGS += $(SYS_LIBARCHIVE_CFLAGS)
375 THIRD_LIBS += $(SYS_LIBARCHIVE_LIBS) -lstdc++
376 endif
377
378 # --- HAVE_SMARTOFFICE ---
379
380 ifeq ($(HAVE_SMARTOFFICE),yes)
381 THIRD_CFLAGS += -DHAVE_SMARTOFFICE -Ithirdparty/so/include
382 SODOCHANDLER_LIB = $(OUT)/libsodochandler.a
383 COMMERCIAL_LIBS = $(SODOCHANDLER_LIB)
384 SOLIB_PATH ?= thirdparty/so/lib/linux/x64/
385 THIRD_LIBS += -L$(OUT) -L$(SOLIB_PATH) -lsodochandler -l:smart-office-lib.a
386 endif
387
388 SODOCHANDLER_SRC := $(sort $(wildcard thirdparty/so/source/*.c))
389 SODOCHANDLER_OBJ := $(SODOCHANDLER_SRC:%.c=$(OUT)/%.o)
390 $(SODOCHANDLER_LIB) : $(SODOCHANDLER_OBJ)