Makethird 12 KB

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