| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #!/usr/bin/env python
- """
- Generates a list of all exports from libmupdf.dll from the function lists
- contained in the mupdf/include/* headers (only MuPDF and MuXPS are included)
- and adds exports for the other libraries contained within libmupdf.dll but
- used by SumatraPDF-no-MuPDF.exe (unarr, libdjvu, zlib, lzma, libwebp).
- Python "$(ProjectDir)gen_libmupdf.def.py"
- Python "$(ProjectDir)modify_libmupdf_vcxproj.py"
- """
- import os, re
- import pathlib
- def generateExports(header, exclude, pattern = '/*.h'):
- if os.path.isdir(header):
- return "\r\n".join([generateExports(os.path.join(file), exclude) for file in pathlib.Path().glob(header + pattern)])
- data = open(header, "r").read()
- data = re.sub(r"(?sm)^#ifndef NDEBUG\s.*?^#endif", "", data, 0)
- data = re.sub(r"(?sm)^#ifdef ARCH_ARM\s.*?^#endif", "", data, 0)
- data = re.sub(r"(?sm)^#ifdef FITZ_DEBUG_LOCKING\s.*?^#endif", "", data, 0)
- data = data.replace(" FZ_NORETURN;", ";")
- functions = re.findall(r"(?sm)^\w+ (?:\w+ )?\*?(\w+)\(.*?\);", data)
- return "\r\n".join(["\t" + name for name in functions if name not in exclude])
- def collectFunctions(file):
- data = open(file, "r").read()
- return re.findall(r"(?sm)^\w+(?: \*\n|\n| \*| )((?:fz_|pdf_|xps_|jbig2_)\w+)\(", data)
- LIBMUPDF_DEF = """\
- ; This file is auto-generated by gen_libmupdf.def.py
- LIBRARY MuPDFLib
- EXPORTS
- ; Fitz exports
- %(fitz_exports)s
- ; MuPDF exports
- %(mupdf_exports)s
- ; JBIG2 exports
- %(jbig2_exports)s
- ; Leptonica exports
- %(leptonica_exports)s
- ; Tesseract exports
- %(tesseract_exports)s
- """
- def main():
- os.chdir(os.path.join(os.path.dirname(__file__), "../mupdf"))
- # don't include/export doc_* functions, support for additional input/output formats and form support
- doc_exports = collectFunctions("source/fitz/document-all.c") + ["fz_get_annot_type", "fz_log_dump_store","fz_outline_from_iterator"]
- more_formats = collectFunctions("source/fitz/svg-device.c") + collectFunctions("source/fitz/output-pcl.c") + collectFunctions("source/fitz/output-pwg.c")
- form_exports = collectFunctions("source/pdf/pdf-form.c") + collectFunctions("source/pdf/pdf-event.c") + collectFunctions("source/pdf/pdf-appearance.c") + ["pdf_access_submit_event", "pdf_init_ui_pointer_event"]
- misc_exports = collectFunctions("source/fitz/test-device.c") + ["fz_set_stderr", "fz_set_stdout", "fz_colorspace_name_process_colorants", "fz_getoptw", "fz_valgrind_pixmap", "fz_stderr", "track_usage", "fz_log_errorFL", "fz_log_error_printfFL", "fz_morph_errorFL", "fz_do_catchFL", "fz_rethrowFL", "fz_rethrow_ifFL", "fz_rethrow_unlessFL", "fz_throwFL", "fz_vlog_error_printfFL", "fz_vthrowFL", "fz_vwarnFL", "fz_warnFL", "HEAP_CAT"]
- sign_exports = ["pdf_crypt_buffer", "pdf_read_pfx", "pdf_sign_signature", "pdf_signer_designated_name", "pdf_free_designated_name"]
- jbig2_exclude = collectFunctions("thirdparty/jbig2dec/jbig2_image_rw.h") + ["jbig2_dump_huffman_binary", "jbig2_dump_huffman_state", "jbig2_arith_has_reached_marker"]
- tesseract_exclude = ["TessBaseAPIInitLangMod", "TessBaseAPIClearAdaptiveClassifier", "TessBaseAPIAdaptToWordStr", "TessBaseAPIDetectOrientationScript"]
- fitz_exports = generateExports("include/mupdf/fitz", doc_exports + more_formats + misc_exports)
- mupdf_exports = generateExports("include/mupdf/pdf", form_exports + sign_exports + ["pdf_drop_designated_name", "pdf_print_xref", "pdf_recognize", "pdf_resolve_obj", "pdf_open_compressed_stream", "pdf_finish_edit"])
- jbig2_exports = generateExports("thirdparty/jbig2dec", jbig2_exclude, "/jbig2*.h")
- leptonica_exports = generateExports("thirdparty/leptonica/src", [], "/allheaders.h")
- tesseract_exports = generateExports("thirdparty/tesseract/include/tesseract", tesseract_exclude, "/capi.h")
- list = LIBMUPDF_DEF % locals()
- open("../MuPDFLib/libmupdf.def", "wt").write(list.replace('\r\n', "\n"))
- print("generated libmupdf.def")
- if __name__ == "__main__":
- main()
|