cmake_minimum_required(VERSION 3.10) project(libmupdf) # configuration set(BIN2COFF_EXECUTABLE "bin2coff" CACHE STRING "Host executable for converter (Windows only)") option(ENABLE_OCR "Build with OCR" OFF) # dependencies find_package(freetype CONFIG REQUIRED) find_package(harfbuzz CONFIG REQUIRED) find_package(JPEG REQUIRED) find_package(OpenJPEG CONFIG REQUIRED) find_package(unofficial-gumbo CONFIG REQUIRED) find_package(ZLIB REQUIRED) find_path(JBIG2DEC_INCLUDE_DIR NAMES jbig2.h REQUIRED) find_library(JBIG2DEC_LIBRARY NAMES jbig2decd jbig2dec NAMES_PER_DIR REQUIRED) if (ENABLE_OCR) find_package(Leptonica CONFIG REQUIRED) find_package(Tesseract CONFIG REQUIRED) endif() # generation of font resources if (CMAKE_HOST_WIN32 AND WIN32) if(BIN2COFF_EXECUTABLE STREQUAL "bin2coff") # cf. scripts/fontdump.nmake add_executable(bin2coff EXCLUDE_FROM_ALL scripts/bin2coff.c) install(TARGETS bin2coff DESTINATION manual-tools/libmupdf) endif() # cf. scripts/bin2coff.c if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") set(coff_arch "Win32") elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") set(coff_arch "aarch64") else() set(coff_arch "x64") endif() endif() # cf. FONT_BIN in Makefile # Legal notices should be picked by the portfile. file(GLOB fonts "${PROJECT_SOURCE_DIR}/resources/fonts/urw/*.cff" "${PROJECT_SOURCE_DIR}/resources/fonts/han/*.ttc" "${PROJECT_SOURCE_DIR}/resources/fonts/droid/DroidSansFallbackFull.ttf" "${PROJECT_SOURCE_DIR}/resources/fonts/droid/DroidSansFallback.ttf" "${PROJECT_SOURCE_DIR}/resources/fonts/noto/*.otf" "${PROJECT_SOURCE_DIR}/resources/fonts/noto/*.ttf" "${PROJECT_SOURCE_DIR}/resources/fonts/sil/*.cff" ) set(FONT_SOURCES "") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/resources") foreach(font IN LISTS fonts) cmake_path(GET font FILENAME name) if (CMAKE_HOST_WIN32 AND WIN32) string(REGEX REPLACE "[-.]" "_" identifier "_binary_${name}") set(font_object "${CMAKE_CURRENT_BINARY_DIR}/resources/${name}.obj") set_source_files_properties("${font_object}" PROPERTIES EXTERNAL_OBJECT 1) add_custom_command(OUTPUT "${font_object}" COMMAND "${BIN2COFF_EXECUTABLE}" "${font}" "${font_object}" "${identifier}" ${coff_arch} VERBATIM ) list(APPEND FONT_SOURCES "${font_object}") else() set(font_c_source "${CMAKE_CURRENT_BINARY_DIR}/resources/${name}.c") add_custom_command(OUTPUT "${font_c_source}" COMMAND bash -c "bash ${PROJECT_SOURCE_DIR}/scripts/hexdump.sh '${font}' > '${font_c_source}'" VERBATIM ) list(APPEND FONT_SOURCES "${font_c_source}") endif() endforeach() # libmupdf # cf. Makefile, libmupdf.vcxproj file(GLOB_RECURSE SOURCES "source/fitz/*.c" # omitting unused *.cpp "source/pdf/*.c" "source/xps/*.c" "source/svg/*.c" "source/html/*.c" "source/reflow/*.c" "source/cbz/*.c" ) if (ENABLE_OCR) list(APPEND SOURCES "source/fitz/tessocr.cpp") endif() add_library(libmupdf ${SOURCES} ${FONT_SOURCES}) set_target_properties(libmupdf PROPERTIES PREFIX "") target_include_directories(libmupdf PUBLIC $ $ PRIVATE ${JBIG2DEC_INCLUDE_DIR} ${Leptonica_INCLUDE_DIRS} ) target_compile_definitions(libmupdf INTERFACE $<$:FZ_DLL_CLIENT> PRIVATE $<$:FZ_DLL> FZ_ENABLE_BROTLI=0 # needs brotli FZ_ENABLE_DOCX_OUTPUT=0 # needs https://github.com/ArtifexSoftware/extract FZ_ENABLE_ICC=0 # needs lcsm2 FZ_ENABLE_JS=0 # needs mujs FZ_ENABLE_ODT_OUTPUT=0 # needs FZ_ENABLE_DOCX_OUTPUT MEMENTO_MUPDF_HACKS SHARE_JPEG $<$>:OCR_DISABLED> $<$:HAVE_TESSERACT> $<$:HAVE_LEPTONICA> ) target_link_libraries(libmupdf PRIVATE freetype harfbuzz::harfbuzz ${JBIG2DEC_LIBRARY} JPEG::JPEG openjp2 unofficial::gumbo::gumbo ZLIB::ZLIB $<$:leptonica> $<$:Tesseract::libtesseract> $<$:log> ) # installation install(DIRECTORY include/mupdf DESTINATION include ) install(TARGETS libmupdf EXPORT unofficial-libmupdf-targets RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(EXPORT unofficial-libmupdf-targets NAMESPACE unofficial::libmupdf:: DESTINATION share/unofficial-libmupdf ) configure_file(unofficial-libmupdf-config.cmake.in unofficial-libmupdf-config.cmake @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/unofficial-libmupdf-config.cmake" DESTINATION share/unofficial-libmupdf )