Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/Makefile @ 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 | |
| 2 | |
| 3 -include user.make | |
| 4 | |
| 5 ifndef build | |
| 6 build := release | |
| 7 endif | |
| 8 | |
| 9 default: apps libs | |
| 10 | |
| 11 include Makerules | |
| 12 | |
| 13 ifndef OUT | |
| 14 OUT := build/$(build_prefix)$(build)$(build_suffix) | |
| 15 endif | |
| 16 | |
| 17 include Makethird | |
| 18 | |
| 19 # --- Configuration --- | |
| 20 | |
| 21 # Do not specify CFLAGS, LDFLAGS, LIB_LDFLAGS, EXE_LDFLAGS or LIBS on the make | |
| 22 # invocation line - specify XCFLAGS, XLDFLAGS, XLIB_LDFLAGS, XEXE_LDFLAGS or | |
| 23 # XLIBS instead. Make ignores any lines in the makefile that set a variable | |
| 24 # that was set on the command line. | |
| 25 CFLAGS += $(XCFLAGS) -Iinclude | |
| 26 LIBS += $(XLIBS) -lm | |
| 27 | |
| 28 LDFLAGS += $(XLDFLAGS) | |
| 29 LIB_LDFLAGS += $(XLIB_LDFLAGS) | |
| 30 EXE_LDFLAGS += $(XEXE_LDFLAGS) | |
| 31 | |
| 32 ifneq ($(threading),no) | |
| 33 ifeq ($(HAVE_PTHREAD),yes) | |
| 34 THREADING_CFLAGS := $(PTHREAD_CFLAGS) -DHAVE_PTHREAD | |
| 35 THREADING_LIBS := $(PTHREAD_LIBS) | |
| 36 endif | |
| 37 endif | |
| 38 | |
| 39 VERSION_MAJOR = $(shell grep "define FZ_VERSION_MAJOR" include/mupdf/fitz/version.h | cut -d ' ' -f 3) | |
| 40 VERSION_MINOR = $(shell grep "define FZ_VERSION_MINOR" include/mupdf/fitz/version.h | cut -d ' ' -f 3) | |
| 41 VERSION_PATCH = $(shell grep "define FZ_VERSION_PATCH" include/mupdf/fitz/version.h | cut -d ' ' -f 3) | |
| 42 | |
| 43 ifneq ($(OS),Darwin) | |
| 44 ifneq ($(USE_SONAME),no) | |
| 45 SO_VERSION_MAJOR = .$(VERSION_MINOR) | |
| 46 SO_VERSION = .$(VERSION_MINOR).$(VERSION_PATCH) | |
| 47 endif | |
| 48 endif | |
| 49 | |
| 50 # workaround argument list too long errors | |
| 51 ifeq (4.0,$(firstword $(sort $(MAKE_VERSION) 4.0))) | |
| 52 USE_ARGUMENT_FILE=yes | |
| 53 else | |
| 54 USE_ARGUMENT_FILE=no | |
| 55 endif | |
| 56 | |
| 57 # --- Commands --- | |
| 58 | |
| 59 ifneq ($(verbose),yes) | |
| 60 QUIET_AR = @ echo " AR $@" ; | |
| 61 QUIET_RANLIB = @ echo " RANLIB $@" ; | |
| 62 QUIET_CC = @ echo " CC $@" ; | |
| 63 QUIET_CXX = @ echo " CXX $@" ; | |
| 64 QUIET_GEN = @ echo " GEN $@" ; | |
| 65 QUIET_LINK = @ echo " LINK $@" ; | |
| 66 QUIET_LINK_SO = @ echo " LINK_SO $@" ; | |
| 67 QUIET_RM = @ echo " RM $@" ; | |
| 68 QUIET_TAGS = @ echo " TAGS $@" ; | |
| 69 QUIET_OBJCOPY = @ echo " OBJCOPY $@" ; | |
| 70 QUIET_SYMLINK = @ echo " SYMLINK $@" ; | |
| 71 endif | |
| 72 | |
| 73 MKTGTDIR = mkdir -p $(dir $@) | |
| 74 CC_CMD = $(QUIET_CC) $(MKTGTDIR) ; $(CC) $(CFLAGS) -MMD -MP -o $@ -c $< | |
| 75 CXX_CMD = $(QUIET_CXX) $(MKTGTDIR) ; $(CXX) $(CFLAGS) $(XCXXFLAGS) -MMD -MP -o $@ -c $< | |
| 76 ifeq ($(USE_ARGUMENT_FILE),yes) | |
| 77 AR_CMD = $(QUIET_AR) $(MKTGTDIR) ; $(AR) cr $@ $(file > $@.in,$^) @$@.in | |
| 78 else | |
| 79 AR_CMD = $(QUIET_AR) $(MKTGTDIR) ; $(AR) cr $@ $^ | |
| 80 endif | |
| 81 ifdef RANLIB | |
| 82 RANLIB_CMD = $(QUIET_RANLIB) $(RANLIB) $@ | |
| 83 endif | |
| 84 LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(EXE_LDFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) | |
| 85 TAGS_CMD = $(QUIET_TAGS) ctags | |
| 86 OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $< | |
| 87 SYMLINK_CMD = $(QUIET_SYMLINK) $(MKTGTDIR) ; ln -sf | |
| 88 | |
| 89 ifeq ($(shared),yes) | |
| 90 ifeq ($(USE_ARGUMENT_FILE),yes) | |
| 91 LINK_SO_CMD = $(QUIET_LINK_SO) $(MKTGTDIR) ; $(CC) $(LIB_LDFLAGS) $(LDFLAGS) -o $@ $(file > $@.in,$^) @$@.in | |
| 92 else | |
| 93 LINK_SO_CMD = $(QUIET_LINK_SO) $(MKTGTDIR) ; $(CC) $(LIB_LDFLAGS) $(LDFLAGS) -o $@ $^ | |
| 94 endif | |
| 95 ifeq ($(OS),OpenBSD) | |
| 96 # OpenBSD linker magic doesn't use soname; so fake it by using -L$(OUT) and -lmupdf. | |
| 97 LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(EXE_LDFLAGS) $(LDFLAGS) -o $@ -L$(OUT) \ | |
| 98 $(subst $(OUT)/libmupdf.$(SO)$(SO_VERSION),-lmupdf,$^) \ | |
| 99 $(LIBS) | |
| 100 endif | |
| 101 endif | |
| 102 | |
| 103 # --- Rules --- | |
| 104 | |
| 105 $(OUT)/%.a : | |
| 106 $(AR_CMD) | |
| 107 $(RANLIB_CMD) | |
| 108 | |
| 109 $(OUT)/source/helpers/mu-threads/%.o : source/helpers/mu-threads/%.c | |
| 110 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THREADING_CFLAGS) | |
| 111 | |
| 112 $(OUT)/source/helpers/pkcs7/%.o : source/helpers/pkcs7/%.c | |
| 113 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(LIBCRYPTO_CFLAGS) | |
| 114 | |
| 115 $(OUT)/source/tools/%.o : source/tools/%.c | |
| 116 $(CC_CMD) $(LIB_CFLAGS) $(WARNING_CFLAGS) $(THIRD_CFLAGS) $(THREADING_CFLAGS) | |
| 117 | |
| 118 $(OUT)/generated/%.o : generated/%.c | |
| 119 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) -O0 | |
| 120 | |
| 121 $(OUT)/platform/x11/%.o : platform/x11/%.c | |
| 122 $(CC_CMD) $(WARNING_CFLAGS) $(X11_CFLAGS) | |
| 123 | |
| 124 $(OUT)/platform/x11/curl/%.o : platform/x11/%.c | |
| 125 $(CC_CMD) $(WARNING_CFLAGS) $(X11_CFLAGS) $(CURL_CFLAGS) | |
| 126 | |
| 127 $(OUT)/platform/gl/%.o : platform/gl/%.c | |
| 128 $(CC_CMD) $(WARNING_CFLAGS) $(THIRD_CFLAGS) $(THIRD_GLUT_CFLAGS) | |
| 129 | |
| 130 ifeq ($(HAVE_OBJCOPY),yes) | |
| 131 $(OUT)/source/fitz/noto.o : source/fitz/noto.c | |
| 132 $(CC_CMD) $(WARNING_CFLAGS) -Wdeclaration-after-statement -DHAVE_OBJCOPY $(LIB_CFLAGS) $(THIRD_CFLAGS) | |
| 133 endif | |
| 134 | |
| 135 $(OUT)/source/fitz/memento.o : source/fitz/memento.c | |
| 136 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THIRD_CFLAGS) -DMEMENTO_MUPDF_HACKS | |
| 137 | |
| 138 $(OUT)/source/%.o : source/%.c | |
| 139 $(CC_CMD) $(WARNING_CFLAGS) -Wdeclaration-after-statement $(LIB_CFLAGS) $(THIRD_CFLAGS) | |
| 140 | |
| 141 $(OUT)/thirdparty/so/source/%.o : thirdparty/so/source/%.c | |
| 142 $(CC_CMD) $(WARNING_CFLAGS) -Wdeclaration-after-statement $(LIB_CFLAGS) $(THIRD_CFLAGS) | |
| 143 | |
| 144 $(OUT)/source/%.o : source/%.cpp | |
| 145 $(CXX_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THIRD_CFLAGS) | |
| 146 | |
| 147 ifeq ($(HAVE_TESSERACT),yes) | |
| 148 $(OUT)/source/fitz/tessocr.o : source/fitz/tessocr.cpp | |
| 149 $(CXX_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THIRD_CFLAGS) $(TESSERACT_CFLAGS) $(TESSERACT_DEFINES) $(TESSERACT_LANGFLAGS) $(LEPTONICA_CFLAGS) | |
| 150 endif | |
| 151 | |
| 152 ifeq ($(HAVE_LEPTONICA),yes) | |
| 153 $(OUT)/source/fitz/leptonica-wrap.o : source/fitz/leptonica-wrap.c | |
| 154 $(CC_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THIRD_CFLAGS) $(LEPTONICA_CFLAGS) $(LEPTONICA_DEFINES) | |
| 155 endif | |
| 156 | |
| 157 $(OUT)/source/fitz/barcode.o : source/fitz/barcode.cpp | |
| 158 $(CXX_CMD) $(WARNING_CFLAGS) $(LIB_CFLAGS) $(THIRD_CFLAGS) $(ZXINGCPP_CFLAGS) $(ZXINGCPP_LANGFLAGS) | |
| 159 | |
| 160 $(OUT)/platform/%.o : platform/%.c | |
| 161 $(CC_CMD) $(WARNING_CFLAGS) | |
| 162 | |
| 163 .PRECIOUS : $(OUT)/%.o # Keep intermediates from chained rules | |
| 164 | |
| 165 # --- File lists --- | |
| 166 | |
| 167 THIRD_OBJ := $(THIRD_SRC:%.c=$(OUT)/%.o) | |
| 168 THIRD_OBJ := $(THIRD_OBJ:%.cc=$(OUT)/%.o) | |
| 169 THIRD_OBJ := $(THIRD_OBJ:%.cpp=$(OUT)/%.o) | |
| 170 | |
| 171 THIRD_GLUT_OBJ := $(THIRD_GLUT_SRC:%.c=$(OUT)/%.o) | |
| 172 | |
| 173 MUPDF_SRC := $(sort $(wildcard source/fitz/*.c)) | |
| 174 MUPDF_SRC += $(sort $(wildcard source/fitz/*.cpp)) | |
| 175 MUPDF_SRC += $(sort $(wildcard source/pdf/*.c)) | |
| 176 ifneq ($(xps),no) | |
| 177 MUPDF_SRC += $(sort $(wildcard source/xps/*.c)) | |
| 178 endif | |
| 179 ifneq ($(svg),no) | |
| 180 MUPDF_SRC += $(sort $(wildcard source/svg/*.c)) | |
| 181 endif | |
| 182 ifneq ($(html),no) | |
| 183 MUPDF_SRC += $(sort $(wildcard source/html/*.c)) | |
| 184 endif | |
| 185 MUPDF_SRC += $(sort $(wildcard source/reflow/*.c)) | |
| 186 MUPDF_SRC += $(sort $(wildcard source/cbz/*.c)) | |
| 187 | |
| 188 MUPDF_OBJ := $(MUPDF_SRC:%.c=$(OUT)/%.o) | |
| 189 MUPDF_OBJ := $(MUPDF_OBJ:%.cpp=$(OUT)/%.o) | |
| 190 | |
| 191 THREAD_SRC := source/helpers/mu-threads/mu-threads.c | |
| 192 THREAD_OBJ := $(THREAD_SRC:%.c=$(OUT)/%.o) | |
| 193 | |
| 194 PKCS7_SRC += source/helpers/pkcs7/pkcs7-openssl.c | |
| 195 PKCS7_OBJ := $(PKCS7_SRC:%.c=$(OUT)/%.o) | |
| 196 | |
| 197 # --- Generated embedded font files --- | |
| 198 | |
| 199 HEXDUMP_SH := scripts/hexdump.sh | |
| 200 | |
| 201 FONT_BIN := $(sort $(wildcard resources/fonts/urw/*.cff)) | |
| 202 FONT_BIN += $(sort $(wildcard resources/fonts/han/*.ttc)) | |
| 203 FONT_BIN += $(sort $(wildcard resources/fonts/droid/DroidSansFallbackFull.ttf)) | |
| 204 FONT_BIN += $(sort $(wildcard resources/fonts/droid/DroidSansFallback.ttf)) | |
| 205 FONT_BIN += $(sort $(wildcard resources/fonts/noto/*.otf)) | |
| 206 FONT_BIN += $(sort $(wildcard resources/fonts/noto/*.ttf)) | |
| 207 FONT_BIN += $(sort $(wildcard resources/fonts/sil/*.cff)) | |
| 208 | |
| 209 # Note: The tests here must match the equivalent tests in noto.c | |
| 210 | |
| 211 ifneq ($(filter -DTOFU_CJK,$(CFLAGS)),) | |
| 212 FONT_BIN := $(filter-out resources/fonts/han/%.ttc, $(FONT_BIN)) | |
| 213 FONT_BIN := $(filter-out resources/fonts/droid/DroidSansFallbackFull.ttf, $(FONT_BIN)) | |
| 214 FONT_BIN := $(filter-out resources/fonts/droid/DroidSansFallback.ttf, $(FONT_BIN)) | |
| 215 endif | |
| 216 | |
| 217 ifneq ($(filter -DTOFU_CJK_EXT,$(CFLAGS)),) | |
| 218 FONT_BIN := $(filter-out resources/fonts/han/%.ttc, $(FONT_BIN)) | |
| 219 FONT_BIN := $(filter-out resources/fonts/droid/DroidSansFallbackFull.ttf, $(FONT_BIN)) | |
| 220 endif | |
| 221 | |
| 222 ifneq ($(filter -DTOFU_CJK_LANG,$(CFLAGS)),) | |
| 223 FONT_BIN := $(filter-out resources/fonts/han/%.ttc, $(FONT_BIN)) | |
| 224 endif | |
| 225 | |
| 226 ifneq ($(filter -DTOFU,$(CFLAGS)),) | |
| 227 FONT_BIN := $(filter-out resources/fonts/noto/%.otf,$(FONT_BIN)) | |
| 228 FONT_BIN := $(filter-out resources/fonts/noto/%.ttf,$(FONT_BIN)) | |
| 229 FONT_BIN := $(filter-out resources/fonts/sil/%.cff,$(FONT_BIN)) | |
| 230 endif | |
| 231 | |
| 232 ifneq ($(filter -DTOFU_NOTO,$(CFLAGS)),) | |
| 233 FONT_BIN := $(filter-out resources/fonts/noto/%.otf,$(FONT_BIN)) | |
| 234 FONT_BIN := $(filter-out resources/fonts/noto/%.ttf,$(FONT_BIN)) | |
| 235 endif | |
| 236 | |
| 237 ifneq ($(filter -DTOFU_SIL,$(CFLAGS)),) | |
| 238 FONT_BIN := $(filter-out resources/fonts/sil/%.cff,$(FONT_BIN)) | |
| 239 endif | |
| 240 | |
| 241 FONT_GEN := $(FONT_BIN:%=generated/%.c) | |
| 242 | |
| 243 generated/%.cff.c : %.cff $(HEXDUMP_SH) ; $(QUIET_GEN) $(MKTGTDIR) ; bash $(HEXDUMP_SH) > $@ $< | |
| 244 generated/%.otf.c : %.otf $(HEXDUMP_SH) ; $(QUIET_GEN) $(MKTGTDIR) ; bash $(HEXDUMP_SH) > $@ $< | |
| 245 generated/%.ttf.c : %.ttf $(HEXDUMP_SH) ; $(QUIET_GEN) $(MKTGTDIR) ; bash $(HEXDUMP_SH) > $@ $< | |
| 246 generated/%.ttc.c : %.ttc $(HEXDUMP_SH) ; $(QUIET_GEN) $(MKTGTDIR) ; bash $(HEXDUMP_SH) > $@ $< | |
| 247 | |
| 248 ifeq ($(HAVE_OBJCOPY),yes) | |
| 249 MUPDF_OBJ += $(FONT_BIN:%=$(OUT)/%.o) | |
| 250 $(OUT)/%.cff.o : %.cff ; $(OBJCOPY_CMD) | |
| 251 $(OUT)/%.otf.o : %.otf ; $(OBJCOPY_CMD) | |
| 252 $(OUT)/%.ttf.o : %.ttf ; $(OBJCOPY_CMD) | |
| 253 $(OUT)/%.ttc.o : %.ttc ; $(OBJCOPY_CMD) | |
| 254 else | |
| 255 MUPDF_OBJ += $(FONT_GEN:%.c=$(OUT)/%.o) | |
| 256 endif | |
| 257 | |
| 258 generate: $(FONT_GEN) | |
| 259 | |
| 260 # --- Generated ICC profiles --- | |
| 261 | |
| 262 source/fitz/icc/%.icc.h: resources/icc/%.icc | |
| 263 $(QUIET_GEN) xxd -i $< | \ | |
| 264 sed 's/unsigned/static const unsigned/' | \ | |
| 265 sed '1i// This is an automatically generated file. Do not edit.' \ | |
| 266 > $@ | |
| 267 | |
| 268 generate: source/fitz/icc/gray.icc.h | |
| 269 generate: source/fitz/icc/rgb.icc.h | |
| 270 generate: source/fitz/icc/cmyk.icc.h | |
| 271 generate: source/fitz/icc/lab.icc.h | |
| 272 | |
| 273 # --- Generated CMap files --- | |
| 274 | |
| 275 CMAP_GEN := $(notdir $(sort $(wildcard resources/cmaps/*))) | |
| 276 CMAP_GEN := $(CMAP_GEN:%=source/pdf/cmaps/%.h) | |
| 277 | |
| 278 source/pdf/cmaps/%.h: resources/cmaps/% scripts/cmapdump.py | |
| 279 $(QUIET_GEN) python3 scripts/cmapdump.py > $@ $< | |
| 280 | |
| 281 generate: $(CMAP_GEN) | |
| 282 | |
| 283 # --- Generated embedded javascript files --- | |
| 284 | |
| 285 source/pdf/js/%.js.h: source/pdf/js/%.js scripts/jsdump.sed | |
| 286 $(QUIET_GEN) sed -f scripts/jsdump.sed < $< > $@ | |
| 287 | |
| 288 generate: source/pdf/js/util.js.h | |
| 289 | |
| 290 # --- Generated perfect hash source files --- | |
| 291 | |
| 292 source/html/css-properties.h: source/html/css-properties.gperf | |
| 293 $(QUIET_GEN) gperf > $@ $< | |
| 294 | |
| 295 generate: source/html/css-properties.h | |
| 296 | |
| 297 # --- Library --- | |
| 298 | |
| 299 ifeq ($(shared),yes) | |
| 300 $(OUT)/libmupdf.$(SO)$(SO_VERSION): $(MUPDF_OBJ) $(THIRD_OBJ) | |
| 301 $(LINK_SO_CMD) $(THIRD_LIBS) $(LIBCRYPTO_LIBS) $(LIBS) | |
| 302 ifeq ($(OS),OpenBSD) | |
| 303 # should never create symlink | |
| 304 MUPDF_LIB = $(OUT)/libmupdf.$(SO)$(SO_VERSION) | |
| 305 else | |
| 306 MUPDF_LIB = $(OUT)/libmupdf.$(SO) | |
| 307 ifneq ($(SO_VERSION),) | |
| 308 # create symlink with soname if needed | |
| 309 $(OUT)/libmupdf.$(SO): $(OUT)/libmupdf.$(SO)$(SO_VERSION) | |
| 310 $(SYMLINK_CMD) $(notdir $<) $@ | |
| 311 endif | |
| 312 endif | |
| 313 else | |
| 314 MUPDF_LIB = $(OUT)/libmupdf.a | |
| 315 THIRD_LIB = $(OUT)/libmupdf-third.a | |
| 316 $(MUPDF_LIB) : $(MUPDF_OBJ) | |
| 317 $(THIRD_LIB) : $(THIRD_OBJ) | |
| 318 endif | |
| 319 | |
| 320 ifneq ($(USE_SYSTEM_GLUT),yes) | |
| 321 THIRD_GLUT_LIB = $(OUT)/libmupdf-glut.a | |
| 322 $(THIRD_GLUT_LIB) : $(THIRD_GLUT_OBJ) | |
| 323 endif | |
| 324 | |
| 325 THREAD_LIB = $(OUT)/libmupdf-threads.a | |
| 326 $(THREAD_LIB) : $(THREAD_OBJ) | |
| 327 | |
| 328 PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a | |
| 329 $(PKCS7_LIB) : $(PKCS7_OBJ) | |
| 330 | |
| 331 # --- Main tools and viewers --- | |
| 332 | |
| 333 MUTOOL_SRC := source/tools/mutool.c | |
| 334 MUTOOL_SRC += source/tools/muconvert.c | |
| 335 MUTOOL_SRC += source/tools/mudraw.c | |
| 336 MUTOOL_SRC += source/tools/murun.c | |
| 337 MUTOOL_SRC += source/tools/mutrace.c | |
| 338 MUTOOL_SRC += source/tools/mubar.c | |
| 339 MUTOOL_SRC += source/tools/cmapdump.c | |
| 340 MUTOOL_SRC += $(sort $(wildcard source/tools/pdf*.c)) | |
| 341 MUTOOL_OBJ := $(MUTOOL_SRC:%.c=$(OUT)/%.o) | |
| 342 MUTOOL_EXE := $(OUT)/mutool | |
| 343 $(MUTOOL_EXE) : $(MUTOOL_OBJ) $(MUPDF_LIB) $(THIRD_LIB) $(PKCS7_LIB) $(THREAD_LIB) | |
| 344 $(LINK_CMD) $(THIRD_LIBS) $(THREADING_LIBS) $(LIBCRYPTO_LIBS) | |
| 345 TOOL_APPS += $(MUTOOL_EXE) | |
| 346 | |
| 347 MURASTER_OBJ := $(OUT)/source/tools/muraster.o | |
| 348 MURASTER_EXE := $(OUT)/muraster | |
| 349 $(MURASTER_EXE) : $(MURASTER_OBJ) $(MUPDF_LIB) $(THIRD_LIB) $(PKCS7_LIB) $(THREAD_LIB) | |
| 350 $(LINK_CMD) $(THIRD_LIBS) $(THREADING_LIBS) $(LIBCRYPTO_LIBS) | |
| 351 EXTRA_TOOL_APPS += $(MURASTER_EXE) | |
| 352 | |
| 353 ifeq ($(HAVE_GLUT),yes) | |
| 354 MUVIEW_GLUT_SRC += $(sort $(wildcard platform/gl/*.c)) | |
| 355 MUVIEW_GLUT_OBJ := $(MUVIEW_GLUT_SRC:%.c=$(OUT)/%.o) | |
| 356 MUVIEW_GLUT_EXE := $(OUT)/mupdf-gl | |
| 357 $(MUVIEW_GLUT_EXE) : $(MUVIEW_GLUT_OBJ) $(MUPDF_LIB) $(THIRD_LIB) $(THIRD_GLUT_LIB) $(PKCS7_LIB) | |
| 358 $(LINK_CMD) $(THIRD_LIBS) $(LIBCRYPTO_LIBS) $(THIRD_GLUT_LIBS) | |
| 359 VIEW_APPS += $(MUVIEW_GLUT_EXE) | |
| 360 endif | |
| 361 | |
| 362 ifeq ($(HAVE_X11),yes) | |
| 363 MUVIEW_X11_EXE := $(OUT)/mupdf-x11 | |
| 364 MUVIEW_X11_OBJ += $(OUT)/platform/x11/pdfapp.o | |
| 365 MUVIEW_X11_OBJ += $(OUT)/platform/x11/x11_main.o | |
| 366 MUVIEW_X11_OBJ += $(OUT)/platform/x11/x11_image.o | |
| 367 $(MUVIEW_X11_EXE) : $(MUVIEW_X11_OBJ) $(MUPDF_LIB) $(THIRD_LIB) $(PKCS7_LIB) | |
| 368 $(LINK_CMD) $(THIRD_LIBS) $(X11_LIBS) $(LIBCRYPTO_LIBS) | |
| 369 VIEW_APPS += $(MUVIEW_X11_EXE) | |
| 370 endif | |
| 371 | |
| 372 ifeq ($(HAVE_X11),yes) | |
| 373 ifeq ($(HAVE_CURL),yes) | |
| 374 ifeq ($(HAVE_PTHREAD),yes) | |
| 375 MUVIEW_X11_CURL_EXE := $(OUT)/mupdf-x11-curl | |
| 376 MUVIEW_X11_CURL_OBJ += $(OUT)/platform/x11/curl/pdfapp.o | |
| 377 MUVIEW_X11_CURL_OBJ += $(OUT)/platform/x11/curl/x11_main.o | |
| 378 MUVIEW_X11_CURL_OBJ += $(OUT)/platform/x11/curl/x11_image.o | |
| 379 MUVIEW_X11_CURL_OBJ += $(OUT)/platform/x11/curl/curl_stream.o | |
| 380 MUVIEW_X11_CURL_OBJ += $(OUT)/platform/x11/curl/prog_stream.o | |
| 381 $(MUVIEW_X11_CURL_EXE) : $(MUVIEW_X11_CURL_OBJ) $(MUPDF_LIB) $(THIRD_LIB) $(PKCS7_LIB) $(CURL_LIB) | |
| 382 $(LINK_CMD) $(THIRD_LIBS) $(X11_LIBS) $(LIBCRYPTO_LIBS) $(CURL_LIBS) $(PTHREAD_LIBS) | |
| 383 EXTRA_VIEW_APPS += $(MUVIEW_X11_CURL_EXE) | |
| 384 endif | |
| 385 endif | |
| 386 endif | |
| 387 | |
| 388 # --- Generated dependencies --- | |
| 389 | |
| 390 -include $(MUPDF_OBJ:%.o=%.d) | |
| 391 -include $(PKCS7_OBJ:%.o=%.d) | |
| 392 -include $(THREAD_OBJ:%.o=%.d) | |
| 393 -include $(THIRD_OBJ:%.o=%.d) | |
| 394 -include $(THIRD_GLUT_OBJ:%.o=%.d) | |
| 395 | |
| 396 -include $(MUTOOL_OBJ:%.o=%.d) | |
| 397 -include $(MUVIEW_GLUT_OBJ:%.o=%.d) | |
| 398 -include $(MUVIEW_X11_OBJ:%.o=%.d) | |
| 399 | |
| 400 -include $(MURASTER_OBJ:%.o=%.d) | |
| 401 -include $(MUVIEW_X11_CURL_OBJ:%.o=%.d) | |
| 402 | |
| 403 # --- Examples --- | |
| 404 | |
| 405 examples: $(OUT)/example $(OUT)/multi-threaded $(OUT)/storytest | |
| 406 | |
| 407 $(OUT)/example: docs/examples/example.c $(MUPDF_LIB) $(THIRD_LIB) | |
| 408 $(LINK_CMD) $(CFLAGS) $(THIRD_LIBS) | |
| 409 $(OUT)/multi-threaded: docs/examples/multi-threaded.c $(MUPDF_LIB) $(THIRD_LIB) | |
| 410 $(LINK_CMD) $(CFLAGS) $(THIRD_LIBS) -lpthread | |
| 411 $(OUT)/storytest: docs/examples/storytest.c $(MUPDF_LIB) $(THIRD_LIB) | |
| 412 $(LINK_CMD) $(CFLAGS) $(THIRD_LIBS) | |
| 413 | |
| 414 # --- Format man pages --- | |
| 415 | |
| 416 %.txt: %.1 | |
| 417 nroff -man $< | col -b | expand > $@ | |
| 418 | |
| 419 MAN_FILES := $(sort $(wildcard docs/man/*.1)) | |
| 420 TXT_FILES := $(MAN_FILES:%.1=%.txt) | |
| 421 | |
| 422 catman: $(TXT_FILES) | |
| 423 | |
| 424 # --- Install --- | |
| 425 | |
| 426 prefix ?= /usr/local | |
| 427 bindir ?= $(prefix)/bin | |
| 428 libdir ?= $(prefix)/lib | |
| 429 incdir ?= $(prefix)/include | |
| 430 mandir ?= $(prefix)/share/man | |
| 431 docdir ?= $(prefix)/share/doc/mupdf | |
| 432 pydir ?= $(shell python3 -c "import sysconfig; print(sysconfig.get_path('platlib'))") | |
| 433 SO_INSTALL_MODE ?= 644 | |
| 434 | |
| 435 third: $(THIRD_LIB) | |
| 436 extra-libs: $(THIRD_GLUT_LIB) | |
| 437 libs: $(MUPDF_LIB) $(THIRD_LIB) $(COMMERCIAL_LIBS) | |
| 438 commercial-libs: $(COMMERCIAL_LIBS) | |
| 439 tools: $(TOOL_APPS) | |
| 440 apps: $(TOOL_APPS) $(VIEW_APPS) | |
| 441 extra-apps: $(EXTRA_TOOL_APPS) $(EXTRA_VIEW_APPS) | |
| 442 libmupdf-threads: $(THREAD_LIB) | |
| 443 | |
| 444 install-headers: | |
| 445 install -d $(DESTDIR)$(incdir)/mupdf | |
| 446 install -d $(DESTDIR)$(incdir)/mupdf/fitz | |
| 447 install -d $(DESTDIR)$(incdir)/mupdf/pdf | |
| 448 install -m 644 include/mupdf/*.h $(DESTDIR)$(incdir)/mupdf | |
| 449 install -m 644 include/mupdf/fitz/*.h $(DESTDIR)$(incdir)/mupdf/fitz | |
| 450 install -m 644 include/mupdf/pdf/*.h $(DESTDIR)$(incdir)/mupdf/pdf | |
| 451 | |
| 452 install-libs: libs install-headers | |
| 453 install -d $(DESTDIR)$(libdir) | |
| 454 ifeq ($(shared),yes) | |
| 455 install -m $(SO_INSTALL_MODE) $(OUT)/libmupdf.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/libmupdf.$(SO)$(SO_VERSION) | |
| 456 ifneq ($(OS),OpenBSD) | |
| 457 ln -sf libmupdf.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/libmupdf.$(SO)$(SO_VERSION_MAJOR) | |
| 458 ln -sf libmupdf.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/libmupdf.$(SO) | |
| 459 endif | |
| 460 else | |
| 461 install -m 644 $(MUPDF_LIB) $(DESTDIR)$(libdir) | |
| 462 install -m 644 $(THIRD_LIB) $(DESTDIR)$(libdir) | |
| 463 endif | |
| 464 | |
| 465 install-tools: tools | |
| 466 install -d $(DESTDIR)$(bindir) | |
| 467 install -m 755 $(TOOL_APPS) $(DESTDIR)$(bindir) | |
| 468 | |
| 469 install-apps: apps | |
| 470 install -d $(DESTDIR)$(bindir) | |
| 471 install -m 755 $(TOOL_APPS) $(VIEW_APPS) $(DESTDIR)$(bindir) | |
| 472 | |
| 473 install-extra-apps: install-apps extra-apps | |
| 474 install -d $(DESTDIR)$(bindir) | |
| 475 install -m 755 $(EXTRA_TOOL_APPS) $(EXTRA_VIEW_APPS) $(DESTDIR)$(bindir) | |
| 476 | |
| 477 install-docs: | |
| 478 install -d $(DESTDIR)$(mandir)/man1 | |
| 479 install -m 644 docs/man/*.1 $(DESTDIR)$(mandir)/man1 | |
| 480 install -d $(DESTDIR)$(docdir) | |
| 481 install -d $(DESTDIR)$(docdir)/examples | |
| 482 install -m 644 README CHANGES $(DESTDIR)$(docdir) | |
| 483 install -m 644 $(wildcard COPYING LICENSE) $(DESTDIR)$(docdir) | |
| 484 install -m 644 docs/examples/* $(DESTDIR)$(docdir)/examples | |
| 485 | |
| 486 install: install-libs install-apps install-docs | |
| 487 | |
| 488 docs: | |
| 489 bash scripts/build-docs.sh | |
| 490 | |
| 491 docs-live: | |
| 492 bash scripts/build-docs-live.sh | |
| 493 | |
| 494 docs-markdown: | |
| 495 bash scripts/build-docs-markdown.sh | |
| 496 | |
| 497 docs-clean: | |
| 498 rm -rf build/docs | |
| 499 rm -rf build/venv-docs | |
| 500 rm -rf build/.doctrees | |
| 501 | |
| 502 install-docs-html: docs | |
| 503 mkdir -p $(DESTDIR)$(docdir) | |
| 504 cp -r build/docs/* $(DESTDIR)$(docdir) | |
| 505 | |
| 506 tarball: | |
| 507 bash scripts/archive.sh | |
| 508 | |
| 509 # --- Clean and Default --- | |
| 510 | |
| 511 WATCH_SRCS = $(shell find include source platform -type f -name '*.[ch]') | |
| 512 watch: | |
| 513 @ inotifywait -q -e modify $(WATCH_SRCS) | |
| 514 | |
| 515 watch-recompile: | |
| 516 @ while ! inotifywait -q -e modify $(WATCH_SRCS) ; do time -p $(MAKE) ; done | |
| 517 | |
| 518 java: | |
| 519 $(MAKE) -C platform/java build=$(build) | |
| 520 | |
| 521 java-clean: | |
| 522 $(MAKE) -C platform/java build=$(build) clean | |
| 523 | |
| 524 wasm: | |
| 525 $(MAKE) -C platform/wasm | |
| 526 | |
| 527 wasm-clean: | |
| 528 $(MAKE) -C platform/wasm clean | |
| 529 | |
| 530 extract-test: | |
| 531 $(MAKE) debug | |
| 532 $(MAKE) -C thirdparty/extract mutool=../../build/debug/mutool test-mutool | |
| 533 | |
| 534 TAG_HDR_FILES=$(shell git ls-files | grep -v '^\(docs\|scripts\|generated\)' | grep '\.h$$') | |
| 535 TAG_SRC_FILES=$(shell git ls-files | grep -v '^\(docs\|scripts\|generated\)' | grep -v '\.h$$') | |
| 536 | |
| 537 tags: | |
| 538 $(TAGS_CMD) --sort=no --c-kinds=+p-t $(TAG_SRC_FILES) | |
| 539 $(TAGS_CMD) -a --sort=no --c-kinds=+p-t $(TAG_HDR_FILES) | |
| 540 $(TAGS_CMD) -a --sort=no --c-kinds=t $(TAG_SRC_FILES) $(TAG_HDR_FILES) | |
| 541 | |
| 542 find-try-return: | |
| 543 @ bash scripts/find-try-return.sh | |
| 544 | |
| 545 cscope.files: $(shell find include source platform -name '*.[ch]') | |
| 546 @ echo $^ | tr ' ' '\n' > $@ | |
| 547 | |
| 548 cscope.out: cscope.files | |
| 549 cscope -b | |
| 550 | |
| 551 all: libs apps extra-apps | |
| 552 | |
| 553 clean: | |
| 554 rm -rf $(OUT) | |
| 555 nuke: | |
| 556 rm -rf build/* | |
| 557 rm -rf generated/resources/fonts/droid | |
| 558 rm -rf generated/resources/fonts/han | |
| 559 rm -rf generated/resources/fonts/noto | |
| 560 rm -rf generated/resources/fonts/sil | |
| 561 | |
| 562 release: | |
| 563 $(MAKE) build=release | |
| 564 debug: | |
| 565 $(MAKE) build=debug | |
| 566 sanitize: | |
| 567 $(MAKE) build=sanitize | |
| 568 | |
| 569 shared: shared-$(build) | |
| 570 | |
| 571 shared-release: | |
| 572 $(MAKE) shared=yes build=release | |
| 573 shared-debug: | |
| 574 $(MAKE) shared=yes build=debug | |
| 575 shared-clean: | |
| 576 rm -rf build/shared-* | |
| 577 | |
| 578 android: generate | |
| 579 ndk-build -j8 \ | |
| 580 APP_BUILD_SCRIPT=platform/java/Android.mk \ | |
| 581 APP_PROJECT_PATH=build/android \ | |
| 582 APP_PLATFORM=android-16 \ | |
| 583 APP_OPTIM=$(build) | |
| 584 | |
| 585 # --- C++, Python and C#, and system installation --- | |
| 586 | |
| 587 c++: c++-$(build) | |
| 588 python: python-$(build) | |
| 589 csharp: csharp-$(build) | |
| 590 | |
| 591 c++-clean: | |
| 592 rm -rf platform/c++ | |
| 593 python-clean: | |
| 594 rm -rf platform/python | |
| 595 csharp-clean: | |
| 596 rm -rf platform/csharp | |
| 597 | |
| 598 # $(OUT) only contains the `shared-` infix if shared=yes and targets that | |
| 599 # require shared-libraries only work if shared=yes. So if this is not the case, | |
| 600 # we re-run ourselves with `$(MAKE) shared=yes $@`. | |
| 601 | |
| 602 ifeq ($(shared),yes) | |
| 603 | |
| 604 # We can build targets that require shared libraries and use $(OUT). | |
| 605 | |
| 606 # Assert that $(OUT) contains `shared`. | |
| 607 ifeq ($(findstring shared, $(OUT)),) | |
| 608 $(error OUT=$(OUT) does not contain shared) | |
| 609 endif | |
| 610 | |
| 611 # C++, Python and C# shared libraries. | |
| 612 # | |
| 613 # To disable automatic use of a venv, use `make VENV_FLAG= ...` or `VENV_FLAG= | |
| 614 # make ...`. | |
| 615 # | |
| 616 VENV_FLAG ?= --venv | |
| 617 c++-%: shared-% | |
| 618 ./scripts/mupdfwrap.py $(VENV_FLAG) -d $(OUT) -b 01 | |
| 619 python-%: c++-% | |
| 620 ./scripts/mupdfwrap.py $(VENV_FLAG) -d $(OUT) -b 23 | |
| 621 csharp-%: c++-% | |
| 622 ./scripts/mupdfwrap.py $(VENV_FLAG) -d $(OUT) -b --csharp 23 | |
| 623 | |
| 624 # Installs of C, C++, Python and C# shared libraries | |
| 625 # | |
| 626 # We only allow install of shared libraries if we are not using any libraries | |
| 627 # in thirdparty/. | |
| 628 install-shared-check: | |
| 629 ifneq ($(shared),yes) | |
| 630 @ echo "install-shared-* requires that shared=yes." | |
| 631 @ false | |
| 632 endif | |
| 633 ifneq ($(USE_SYSTEM_LIBS),yes) | |
| 634 @ echo "install-shared-* requires that USE_SYSTEM_LIBS=yes." | |
| 635 @ false | |
| 636 endif | |
| 637 | |
| 638 install-shared-c: install-shared-check install-libs install-headers | |
| 639 | |
| 640 install-shared-c++: install-shared-c c++ | |
| 641 install -m 644 platform/c++/include/mupdf/*.h $(DESTDIR)$(incdir)/mupdf | |
| 642 install -m $(SO_INSTALL_MODE) $(OUT)/libmupdfcpp.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/ | |
| 643 ifneq ($(OS),OpenBSD) | |
| 644 ln -sf libmupdfcpp.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/libmupdfcpp.$(SO) | |
| 645 ln -sf libmupdfcpp.$(SO)$(SO_VERSION) $(DESTDIR)$(libdir)/libmupdfcpp.$(SO)$(SO_VERSION_MAJOR) | |
| 646 endif | |
| 647 | |
| 648 install-shared-python: install-shared-c++ python | |
| 649 install -d $(DESTDIR)$(pydir)/mupdf | |
| 650 install -m $(SO_INSTALL_MODE) $(OUT)/_mupdf.$(SO) $(DESTDIR)$(pydir)/mupdf | |
| 651 install -m 644 $(OUT)/mupdf.py $(DESTDIR)$(pydir)/mupdf/__init__.py | |
| 652 | |
| 653 else | |
| 654 | |
| 655 # $(shared) != yes. For all targets that require a shared-library build and use | |
| 656 # $(OUT), we need to re-run ourselves with shared=yes. | |
| 657 install-% c++-% python-% csharp-%: | |
| 658 # Running: $(MAKE) shared=yes $@ | |
| 659 $(MAKE) shared=yes $@ | |
| 660 | |
| 661 endif | |
| 662 | |
| 663 .PHONY: all clean nuke install third libs apps generate tags docs | |
| 664 .PHONY: shared shared-debug shared-clean | |
| 665 .PHONY: c++-% python-% csharp-% | |
| 666 .PHONY: c++-clean python-clean csharp-clean |
