Mercurial > hgrepos > Python2 > PyMuPDF
diff mupdf-source/thirdparty/leptonica/CMakeLists.txt @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mupdf-source/thirdparty/leptonica/CMakeLists.txt Mon Sep 15 11:43:07 2025 +0200 @@ -0,0 +1,406 @@ +# +# leptonica +# + +# ############################################################################## +# +# cmake settings +# +# ############################################################################## + +cmake_minimum_required(VERSION 3.5) +cmake_policy(SET CMP0054 NEW) + +# In-source builds are disabled. +if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + message( + FATAL_ERROR + "CMake generation is not possible within the source directory!" + "\n Remove the CMakeCache.txt file and try again from another folder" + ", e.g.:\n " + "\n rm CMakeCache.txt" + "\n mkdir build" + "\n cd build" + "\n cmake ..") +endif() + +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/bin") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}") + +# Use solution folders. +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake Targets") + +# ############################################################################## +# +# project settings +# +# ############################################################################## + +project( + leptonica + LANGUAGES C + VERSION 1.85.0) +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) + +# Standard installation paths +include(GNUInstallDirs) + +set(MINIMUM_WEBPMUX_VERSION 0.5.0) + +option(BUILD_PROG "Build utility programs" OFF) +if(WIN32) + option(SW_BUILD "Build with sw" ON) +else() + option(SW_BUILD "Build with sw" OFF) +endif() +if(UNIX OR MINGW) + option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) +endif() +option(STRICT_CONF + "Strict configuration - fail when the optional library is not found" OFF) +option(ENABLE_ZLIB "Enable ZLIB support" ON) +option(ENABLE_PNG "Enable PNG support" ON) +option(ENABLE_GIF "Enable GIF support" ON) +option(ENABLE_JPEG "Enable JPEG support" ON) +option(ENABLE_TIFF "Enable TIFF support" ON) +option(ENABLE_WEBP "Enable WebP support" ON) +option(ENABLE_OPENJPEG "Enable OpenJPEG support" ON) + +set(leptonica_INSTALL_CMAKE_DIR + "lib/cmake/leptonica" + CACHE STRING "Install destination for CMake package files") + +if(NOT SW_BUILD) + find_package(PkgConfig QUIET) + if(ENABLE_ZLIB) + find_package(ZLIB) + if(ZLIB_FOUND) + set(pkgs_private "${pkgs_private} zlib") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find ZLIB libs.\n Use -DENABLE_ZLIB=OFF to disable ZLIB support." + ) + endif(STRICT_CONF) + endif(ZLIB_FOUND) + endif(ENABLE_ZLIB) + if(ENABLE_PNG) + find_package(PNG) + if(PNG_FOUND) + set(pkgs_private "${pkgs_private} libpng") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find PNG libs.\n Use -DENABLE_PNG=OFF to disable PNG support." + ) + endif(STRICT_CONF) + endif(PNG_FOUND) + endif(ENABLE_PNG) + if(ENABLE_GIF) + find_package(GIF 5) + if(GIF_FOUND) + set(libs_private "${libs_private} -lgif") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find GIF 5 libs.\n Use -DENABLE_GIF=OFF to disable GIF support." + ) + endif(STRICT_CONF) + endif(GIF_FOUND) + endif(ENABLE_GIF) + if(ENABLE_JPEG) + find_package(JPEG) + if(JPEG_FOUND) + set(pkgs_private "${pkgs_private} libjpeg") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find JPEG libs.\n Use -DENABLE_JPEG=OFF to disable JPEG support." + ) + endif(STRICT_CONF) + endif(JPEG_FOUND) + endif(ENABLE_JPEG) + if(ENABLE_TIFF) + find_package(TIFF) + if(TIFF_FOUND) + set(pkgs_private "${pkgs_private} libtiff-4") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find TIFF libs.\n Use -DENABLE_TIFF=OFF to disable TIFF support." + ) + endif(STRICT_CONF) + endif(TIFF_FOUND) + endif(ENABLE_TIFF) + if(ENABLE_WEBP) + find_package(WebP ${MINIMUM_WEBPMUX_VERSION} CONFIG) + set(pkgs_private "${pkgs_private} libwebp libwebpmux") + if(NOT TARGET WebP::webp) + find_path(WebP_INCLUDE_DIR NAMES webp/decode.h) + find_path(WebP_MUX_INCLUDE_DIR NAMES webp/mux.h) + find_library(WebP_LIBRARY NAMES webp) + find_library(WebP_MUX_LIBRARY NAMES webpmux) + if(WebP_INCLUDE_DIR + AND WebP_MUX_INCLUDE_DIR + AND WebP_LIBRARY) + message(STATUS "Found non-cmake WebP: ${WebP_LIBRARY}") + set(WebP_INCLUDE_DIR S "${WebP_INCLUDE_DIR};${WebP_MUX_INCLUDE_DIR}") + set(WebP_LIBRARIES "${WebP_LIBRARY}") + if(WebP_MUX_LIBRARY) + list(APPEND WebP_LIBRARIES "${WebP_MUX_LIBRARY}") + else() + message(STATUS "Library webpmux not found!") + endif(WebP_MUX_LIBRARY) + set(WebP_FOUND 1) + endif() # WebP_INCLUDE_DIR + endif(NOT TARGET WebP::webp) + if(WebP_FOUND) + set(HAVE_LIBWEBP 1) + set(HAVE_LIBWEBP_ANIM 1) + include_directories(${WebP_INCLUDE_DIR}) + include_directories(${WebP_MUX_INCLUDE_DIR}) + message(STATUS "Found WebP: ${WebP_LIBRARIES} (${WebP_VERSION})") + else() + message( + STATUS + "WebP_INCLUDE_DIR : ${WebP_INCLUDE_DIR}\nWebP_MUX_INCLUDE_DIR: ${WebP_MUX_INCLUDE_DIR}\nWebP_LIBRARY: ${WebP_LIBRARY}\nWebP_MUX_LIBRARY: ${WebP_MUX_LIBRARY}" + ) + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find WebP libs.\n Use -DENABLE_WEBP=OFF to disable WebP support." + ) + endif(STRICT_CONF) + endif(WebP_FOUND) + endif(ENABLE_WEBP) + if(ENABLE_OPENJPEG) + find_package(OpenJPEG CONFIG) + if(OpenJPEG_FOUND) + set(OPENJPEG_VERSION ${OPENJPEG_MAJOR_VERSION}.${OPENJPEG_MINOR_VERSION}) + if(${OPENJPEG_VERSION} LESS "2.1") + message (STATUS "Your libopenjp version is too old ${OPENJPEG_VERSION}") + set(HAVE_LIBJP2K 0) + else(${OPENJPEG_VERSION} LESS "2.1") + set(pkgs_private "${pkgs_private} libopenjp2") + set(HAVE_LIBJP2K 1) + include_directories(${OPENJPEG_INCLUDE_DIRS}) + if(WIN32) + if(BUILD_SHARED_LIBS) + add_definitions(-DOPJ_EXPORTS) + else() + add_definitions(-DOPJ_STATIC) + endif() + endif(WIN32) + message(STATUS + "Found OpenJPEG: ${OPENJPEG_LIBRARIES} (${OPENJPEG_VERSION}.${OPENJPEG_BUILD_VERSION})") + endif(${OPENJPEG_VERSION} LESS "2.1") + else() + if(STRICT_CONF) + message( + FATAL_ERROR + "Could not find OpenJPEG libs.\n Use -DENABLE_OPENJPEG=OFF to disable OpenJPEG support." + ) + endif(STRICT_CONF) + endif(OpenJPEG_FOUND) + endif(ENABLE_OPENJPEG) +else() # SW_BUILD=ON + find_package(SW REQUIRED) + sw_add_package( + org.sw.demo.gif org.sw.demo.jpeg org.sw.demo.glennrp.png org.sw.demo.tiff + org.sw.demo.webmproject.webp org.sw.demo.uclouvain.openjpeg.openjp2) + sw_execute() + + add_definitions( + -DHAVE_LIBGIF=1 + -DHAVE_LIBJPEG=1 + -DHAVE_LIBPNG=1 + -DHAVE_LIBTIFF=1 + -DHAVE_LIBWEBP=1 + -DHAVE_LIBWEBP_ANIM=1 + -DHAVE_LIBZ=1 + -DHAVE_LIBJP2K=1) +endif() + +include(CheckLibraryExists) + +check_library_exists(m sin "" HAVE_LIBM) +if(HAVE_LIBM) + set(libs_private "${libs_private} -lm") +endif(HAVE_LIBM) + +if(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") + set(FREEBSD ON) +endif(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") + +# ############################################################################## +# +# compiler and linker +# +# ############################################################################## + +if(CMAKE_C_COMPILER_ID MATCHES "Clang") + set(CLANG 1) +endif() + +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE + Release + CACHE STRING "Choose the type of build." FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") +else() + message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") +endif() + +include(CheckCCompilerFlag) + +# Check for valid compiler flags +macro(CHECK_CCXX_COMPILER_FLAG flag_ result_) + check_c_compiler_flag(${flag_} C_HAS${result_}) +endmacro() + +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + add_compile_options("$<$<CONFIG:Release>:/W1;/Ox>") + add_compile_options("$<$<CONFIG:Debug>:/W4;/DDEBUG>") + if(NOT CLANG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + endif() +else() + if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") + # Enable warnings and Optimize for Debugging + foreach( + flag_ + -Wall + -Wextra + -Werror=format-security + -pedantic + -Og + -g3 + "-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.") + string(REGEX REPLACE "[^A-Za-z0-9]" "_" flag_var "${flag_}") + check_ccxx_compiler_flag(${flag_} ${flag_var}) + if(C_HAS${flag_var}) + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${flag_}") + endif() + endforeach() + add_definitions(-DDEBUG) + endif() +endif() + +# ############################################################################## +# +# configure +# +# ############################################################################## + +set(AUTOCONFIG_SRC ${CMAKE_CURRENT_BINARY_DIR}/config_auto.h.in) +set(AUTOCONFIG ${CMAKE_CURRENT_BINARY_DIR}/src/config_auto.h) +if(HAVE_LIBJP2K) + set(ADDITIONAL_INCLUDE_DIRS "${JP2K_INCLUDE_DIR}") +endif() +set(CMAKE_REQUIRED_INCLUDES + ${CMAKE_REQUIRED_INCLUDES} "${CMAKE_PREFIX_PATH}/include" + "${CMAKE_INSTALL_PREFIX}/include" "${ADDITIONAL_INCLUDE_DIRS}") + +include(Configure) + +configure_file(${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY) + +set(INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" + "${CMAKE_INSTALL_PREFIX}/include/leptonica") + +# ############################################################################## +# +# Show summary +# +# ############################################################################## +message(STATUS) +message(STATUS "General configuration for Leptonica ${VERSION_PLAIN}") +message(STATUS "--------------------------------------------------------") +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") +message(STATUS "Compiler: ${CMAKE_C_COMPILER_ID}") +message(STATUS "C compiler options: + ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UP}} ${CMAKE_C_FLAGS}") +message(STATUS "Linker options: ${CMAKE_EXE_LINKER_FLAGS} + ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UP}}") +message(STATUS "Install directory: ${CMAKE_INSTALL_PREFIX}") +message(STATUS) +message(STATUS "Build with sw [SW_BUILD]: ${SW_BUILD}") +message(STATUS "Build utility programs [BUILD_PROG]: ${BUILD_PROG}") +if(NOT SW_BUILD) + message(STATUS "Used ZLIB library: ${ZLIB_LIBRARIES}") + message(STATUS "Used PNG library: ${PNG_LIBRARIES}") + message(STATUS "Used JPEG library: ${JPEG_LIBRARIES}") + message(STATUS "Used OpenJPEG library: ${OPENJPEG_LIBRARIES}") + message(STATUS "Used TIFF library: ${TIFF_LIBRARIES}") + message(STATUS "Used GIF library: ${GIF_LIBRARIES}") + message(STATUS "Used WebP library: ${WebP_LIBRARIES}") +endif() +message(STATUS "--------------------------------------------------------") +message(STATUS) + +# ############################################################################## +# +# build +# +# ############################################################################## + +add_definitions(-DHAVE_CONFIG_H) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) + +if(BUILD_PROG) + add_subdirectory(prog) +endif() + +add_subdirectory(src) + +get_target_property(leptonica_NAME leptonica NAME) +get_target_property(leptonica_OUTPUT_NAME leptonica OUTPUT_NAME) + +configure_file(lept.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in @ONLY) +# to resolve generator expression in OUTPUT_NAME +file( + GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lept_$<CONFIG>.pc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig-version.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake @ONLY) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lept_$<CONFIG>.pc + DESTINATION lib/pkgconfig) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake + DESTINATION ${leptonica_INSTALL_CMAKE_DIR}) + +# ############################################################################## +# uninstall target +# ############################################################################## +if(NOT TARGET uninstall) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) + + add_custom_target( + uninstall COMMAND ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) +endif() + +# ##############################################################################
