Mercurial > hgrepos > Python2 > PyMuPDF
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 # | |
| 2 # leptonica | |
| 3 # | |
| 4 | |
| 5 # ############################################################################## | |
| 6 # | |
| 7 # cmake settings | |
| 8 # | |
| 9 # ############################################################################## | |
| 10 | |
| 11 cmake_minimum_required(VERSION 3.5) | |
| 12 cmake_policy(SET CMP0054 NEW) | |
| 13 | |
| 14 # In-source builds are disabled. | |
| 15 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") | |
| 16 message( | |
| 17 FATAL_ERROR | |
| 18 "CMake generation is not possible within the source directory!" | |
| 19 "\n Remove the CMakeCache.txt file and try again from another folder" | |
| 20 ", e.g.:\n " | |
| 21 "\n rm CMakeCache.txt" | |
| 22 "\n mkdir build" | |
| 23 "\n cd build" | |
| 24 "\n cmake ..") | |
| 25 endif() | |
| 26 | |
| 27 set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") | |
| 28 | |
| 29 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/bin") | |
| 30 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}") | |
| 31 | |
| 32 # Use solution folders. | |
| 33 set_property(GLOBAL PROPERTY USE_FOLDERS ON) | |
| 34 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake Targets") | |
| 35 | |
| 36 # ############################################################################## | |
| 37 # | |
| 38 # project settings | |
| 39 # | |
| 40 # ############################################################################## | |
| 41 | |
| 42 project( | |
| 43 leptonica | |
| 44 LANGUAGES C | |
| 45 VERSION 1.85.0) | |
| 46 set(CMAKE_C_STANDARD 11) | |
| 47 set(CMAKE_C_STANDARD_REQUIRED ON) | |
| 48 | |
| 49 # Standard installation paths | |
| 50 include(GNUInstallDirs) | |
| 51 | |
| 52 set(MINIMUM_WEBPMUX_VERSION 0.5.0) | |
| 53 | |
| 54 option(BUILD_PROG "Build utility programs" OFF) | |
| 55 if(WIN32) | |
| 56 option(SW_BUILD "Build with sw" ON) | |
| 57 else() | |
| 58 option(SW_BUILD "Build with sw" OFF) | |
| 59 endif() | |
| 60 if(UNIX OR MINGW) | |
| 61 option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) | |
| 62 endif() | |
| 63 option(STRICT_CONF | |
| 64 "Strict configuration - fail when the optional library is not found" OFF) | |
| 65 option(ENABLE_ZLIB "Enable ZLIB support" ON) | |
| 66 option(ENABLE_PNG "Enable PNG support" ON) | |
| 67 option(ENABLE_GIF "Enable GIF support" ON) | |
| 68 option(ENABLE_JPEG "Enable JPEG support" ON) | |
| 69 option(ENABLE_TIFF "Enable TIFF support" ON) | |
| 70 option(ENABLE_WEBP "Enable WebP support" ON) | |
| 71 option(ENABLE_OPENJPEG "Enable OpenJPEG support" ON) | |
| 72 | |
| 73 set(leptonica_INSTALL_CMAKE_DIR | |
| 74 "lib/cmake/leptonica" | |
| 75 CACHE STRING "Install destination for CMake package files") | |
| 76 | |
| 77 if(NOT SW_BUILD) | |
| 78 find_package(PkgConfig QUIET) | |
| 79 if(ENABLE_ZLIB) | |
| 80 find_package(ZLIB) | |
| 81 if(ZLIB_FOUND) | |
| 82 set(pkgs_private "${pkgs_private} zlib") | |
| 83 else() | |
| 84 if(STRICT_CONF) | |
| 85 message( | |
| 86 FATAL_ERROR | |
| 87 "Could not find ZLIB libs.\n Use -DENABLE_ZLIB=OFF to disable ZLIB support." | |
| 88 ) | |
| 89 endif(STRICT_CONF) | |
| 90 endif(ZLIB_FOUND) | |
| 91 endif(ENABLE_ZLIB) | |
| 92 if(ENABLE_PNG) | |
| 93 find_package(PNG) | |
| 94 if(PNG_FOUND) | |
| 95 set(pkgs_private "${pkgs_private} libpng") | |
| 96 else() | |
| 97 if(STRICT_CONF) | |
| 98 message( | |
| 99 FATAL_ERROR | |
| 100 "Could not find PNG libs.\n Use -DENABLE_PNG=OFF to disable PNG support." | |
| 101 ) | |
| 102 endif(STRICT_CONF) | |
| 103 endif(PNG_FOUND) | |
| 104 endif(ENABLE_PNG) | |
| 105 if(ENABLE_GIF) | |
| 106 find_package(GIF 5) | |
| 107 if(GIF_FOUND) | |
| 108 set(libs_private "${libs_private} -lgif") | |
| 109 else() | |
| 110 if(STRICT_CONF) | |
| 111 message( | |
| 112 FATAL_ERROR | |
| 113 "Could not find GIF 5 libs.\n Use -DENABLE_GIF=OFF to disable GIF support." | |
| 114 ) | |
| 115 endif(STRICT_CONF) | |
| 116 endif(GIF_FOUND) | |
| 117 endif(ENABLE_GIF) | |
| 118 if(ENABLE_JPEG) | |
| 119 find_package(JPEG) | |
| 120 if(JPEG_FOUND) | |
| 121 set(pkgs_private "${pkgs_private} libjpeg") | |
| 122 else() | |
| 123 if(STRICT_CONF) | |
| 124 message( | |
| 125 FATAL_ERROR | |
| 126 "Could not find JPEG libs.\n Use -DENABLE_JPEG=OFF to disable JPEG support." | |
| 127 ) | |
| 128 endif(STRICT_CONF) | |
| 129 endif(JPEG_FOUND) | |
| 130 endif(ENABLE_JPEG) | |
| 131 if(ENABLE_TIFF) | |
| 132 find_package(TIFF) | |
| 133 if(TIFF_FOUND) | |
| 134 set(pkgs_private "${pkgs_private} libtiff-4") | |
| 135 else() | |
| 136 if(STRICT_CONF) | |
| 137 message( | |
| 138 FATAL_ERROR | |
| 139 "Could not find TIFF libs.\n Use -DENABLE_TIFF=OFF to disable TIFF support." | |
| 140 ) | |
| 141 endif(STRICT_CONF) | |
| 142 endif(TIFF_FOUND) | |
| 143 endif(ENABLE_TIFF) | |
| 144 if(ENABLE_WEBP) | |
| 145 find_package(WebP ${MINIMUM_WEBPMUX_VERSION} CONFIG) | |
| 146 set(pkgs_private "${pkgs_private} libwebp libwebpmux") | |
| 147 if(NOT TARGET WebP::webp) | |
| 148 find_path(WebP_INCLUDE_DIR NAMES webp/decode.h) | |
| 149 find_path(WebP_MUX_INCLUDE_DIR NAMES webp/mux.h) | |
| 150 find_library(WebP_LIBRARY NAMES webp) | |
| 151 find_library(WebP_MUX_LIBRARY NAMES webpmux) | |
| 152 if(WebP_INCLUDE_DIR | |
| 153 AND WebP_MUX_INCLUDE_DIR | |
| 154 AND WebP_LIBRARY) | |
| 155 message(STATUS "Found non-cmake WebP: ${WebP_LIBRARY}") | |
| 156 set(WebP_INCLUDE_DIR S "${WebP_INCLUDE_DIR};${WebP_MUX_INCLUDE_DIR}") | |
| 157 set(WebP_LIBRARIES "${WebP_LIBRARY}") | |
| 158 if(WebP_MUX_LIBRARY) | |
| 159 list(APPEND WebP_LIBRARIES "${WebP_MUX_LIBRARY}") | |
| 160 else() | |
| 161 message(STATUS "Library webpmux not found!") | |
| 162 endif(WebP_MUX_LIBRARY) | |
| 163 set(WebP_FOUND 1) | |
| 164 endif() # WebP_INCLUDE_DIR | |
| 165 endif(NOT TARGET WebP::webp) | |
| 166 if(WebP_FOUND) | |
| 167 set(HAVE_LIBWEBP 1) | |
| 168 set(HAVE_LIBWEBP_ANIM 1) | |
| 169 include_directories(${WebP_INCLUDE_DIR}) | |
| 170 include_directories(${WebP_MUX_INCLUDE_DIR}) | |
| 171 message(STATUS "Found WebP: ${WebP_LIBRARIES} (${WebP_VERSION})") | |
| 172 else() | |
| 173 message( | |
| 174 STATUS | |
| 175 "WebP_INCLUDE_DIR : ${WebP_INCLUDE_DIR}\nWebP_MUX_INCLUDE_DIR: ${WebP_MUX_INCLUDE_DIR}\nWebP_LIBRARY: ${WebP_LIBRARY}\nWebP_MUX_LIBRARY: ${WebP_MUX_LIBRARY}" | |
| 176 ) | |
| 177 if(STRICT_CONF) | |
| 178 message( | |
| 179 FATAL_ERROR | |
| 180 "Could not find WebP libs.\n Use -DENABLE_WEBP=OFF to disable WebP support." | |
| 181 ) | |
| 182 endif(STRICT_CONF) | |
| 183 endif(WebP_FOUND) | |
| 184 endif(ENABLE_WEBP) | |
| 185 if(ENABLE_OPENJPEG) | |
| 186 find_package(OpenJPEG CONFIG) | |
| 187 if(OpenJPEG_FOUND) | |
| 188 set(OPENJPEG_VERSION ${OPENJPEG_MAJOR_VERSION}.${OPENJPEG_MINOR_VERSION}) | |
| 189 if(${OPENJPEG_VERSION} LESS "2.1") | |
| 190 message (STATUS "Your libopenjp version is too old ${OPENJPEG_VERSION}") | |
| 191 set(HAVE_LIBJP2K 0) | |
| 192 else(${OPENJPEG_VERSION} LESS "2.1") | |
| 193 set(pkgs_private "${pkgs_private} libopenjp2") | |
| 194 set(HAVE_LIBJP2K 1) | |
| 195 include_directories(${OPENJPEG_INCLUDE_DIRS}) | |
| 196 if(WIN32) | |
| 197 if(BUILD_SHARED_LIBS) | |
| 198 add_definitions(-DOPJ_EXPORTS) | |
| 199 else() | |
| 200 add_definitions(-DOPJ_STATIC) | |
| 201 endif() | |
| 202 endif(WIN32) | |
| 203 message(STATUS | |
| 204 "Found OpenJPEG: ${OPENJPEG_LIBRARIES} (${OPENJPEG_VERSION}.${OPENJPEG_BUILD_VERSION})") | |
| 205 endif(${OPENJPEG_VERSION} LESS "2.1") | |
| 206 else() | |
| 207 if(STRICT_CONF) | |
| 208 message( | |
| 209 FATAL_ERROR | |
| 210 "Could not find OpenJPEG libs.\n Use -DENABLE_OPENJPEG=OFF to disable OpenJPEG support." | |
| 211 ) | |
| 212 endif(STRICT_CONF) | |
| 213 endif(OpenJPEG_FOUND) | |
| 214 endif(ENABLE_OPENJPEG) | |
| 215 else() # SW_BUILD=ON | |
| 216 find_package(SW REQUIRED) | |
| 217 sw_add_package( | |
| 218 org.sw.demo.gif org.sw.demo.jpeg org.sw.demo.glennrp.png org.sw.demo.tiff | |
| 219 org.sw.demo.webmproject.webp org.sw.demo.uclouvain.openjpeg.openjp2) | |
| 220 sw_execute() | |
| 221 | |
| 222 add_definitions( | |
| 223 -DHAVE_LIBGIF=1 | |
| 224 -DHAVE_LIBJPEG=1 | |
| 225 -DHAVE_LIBPNG=1 | |
| 226 -DHAVE_LIBTIFF=1 | |
| 227 -DHAVE_LIBWEBP=1 | |
| 228 -DHAVE_LIBWEBP_ANIM=1 | |
| 229 -DHAVE_LIBZ=1 | |
| 230 -DHAVE_LIBJP2K=1) | |
| 231 endif() | |
| 232 | |
| 233 include(CheckLibraryExists) | |
| 234 | |
| 235 check_library_exists(m sin "" HAVE_LIBM) | |
| 236 if(HAVE_LIBM) | |
| 237 set(libs_private "${libs_private} -lm") | |
| 238 endif(HAVE_LIBM) | |
| 239 | |
| 240 if(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") | |
| 241 set(FREEBSD ON) | |
| 242 endif(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") | |
| 243 | |
| 244 # ############################################################################## | |
| 245 # | |
| 246 # compiler and linker | |
| 247 # | |
| 248 # ############################################################################## | |
| 249 | |
| 250 if(CMAKE_C_COMPILER_ID MATCHES "Clang") | |
| 251 set(CLANG 1) | |
| 252 endif() | |
| 253 | |
| 254 # Set a default build type if none was specified | |
| 255 if(NOT CMAKE_BUILD_TYPE) | |
| 256 message(STATUS "Setting build type to 'Release' as none was specified.") | |
| 257 set(CMAKE_BUILD_TYPE | |
| 258 Release | |
| 259 CACHE STRING "Choose the type of build." FORCE) | |
| 260 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") | |
| 261 else() | |
| 262 message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") | |
| 263 endif() | |
| 264 | |
| 265 include(CheckCCompilerFlag) | |
| 266 | |
| 267 # Check for valid compiler flags | |
| 268 macro(CHECK_CCXX_COMPILER_FLAG flag_ result_) | |
| 269 check_c_compiler_flag(${flag_} C_HAS${result_}) | |
| 270 endmacro() | |
| 271 | |
| 272 if(MSVC) | |
| 273 add_definitions(-D_CRT_SECURE_NO_WARNINGS) | |
| 274 add_compile_options("$<$<CONFIG:Release>:/W1;/Ox>") | |
| 275 add_compile_options("$<$<CONFIG:Debug>:/W4;/DDEBUG>") | |
| 276 if(NOT CLANG) | |
| 277 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") | |
| 278 endif() | |
| 279 else() | |
| 280 if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") | |
| 281 # Enable warnings and Optimize for Debugging | |
| 282 foreach( | |
| 283 flag_ | |
| 284 -Wall | |
| 285 -Wextra | |
| 286 -Werror=format-security | |
| 287 -pedantic | |
| 288 -Og | |
| 289 -g3 | |
| 290 "-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.") | |
| 291 string(REGEX REPLACE "[^A-Za-z0-9]" "_" flag_var "${flag_}") | |
| 292 check_ccxx_compiler_flag(${flag_} ${flag_var}) | |
| 293 if(C_HAS${flag_var}) | |
| 294 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${flag_}") | |
| 295 endif() | |
| 296 endforeach() | |
| 297 add_definitions(-DDEBUG) | |
| 298 endif() | |
| 299 endif() | |
| 300 | |
| 301 # ############################################################################## | |
| 302 # | |
| 303 # configure | |
| 304 # | |
| 305 # ############################################################################## | |
| 306 | |
| 307 set(AUTOCONFIG_SRC ${CMAKE_CURRENT_BINARY_DIR}/config_auto.h.in) | |
| 308 set(AUTOCONFIG ${CMAKE_CURRENT_BINARY_DIR}/src/config_auto.h) | |
| 309 if(HAVE_LIBJP2K) | |
| 310 set(ADDITIONAL_INCLUDE_DIRS "${JP2K_INCLUDE_DIR}") | |
| 311 endif() | |
| 312 set(CMAKE_REQUIRED_INCLUDES | |
| 313 ${CMAKE_REQUIRED_INCLUDES} "${CMAKE_PREFIX_PATH}/include" | |
| 314 "${CMAKE_INSTALL_PREFIX}/include" "${ADDITIONAL_INCLUDE_DIRS}") | |
| 315 | |
| 316 include(Configure) | |
| 317 | |
| 318 configure_file(${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY) | |
| 319 | |
| 320 set(INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" | |
| 321 "${CMAKE_INSTALL_PREFIX}/include/leptonica") | |
| 322 | |
| 323 # ############################################################################## | |
| 324 # | |
| 325 # Show summary | |
| 326 # | |
| 327 # ############################################################################## | |
| 328 message(STATUS) | |
| 329 message(STATUS "General configuration for Leptonica ${VERSION_PLAIN}") | |
| 330 message(STATUS "--------------------------------------------------------") | |
| 331 message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") | |
| 332 message(STATUS "Compiler: ${CMAKE_C_COMPILER_ID}") | |
| 333 message(STATUS "C compiler options: | |
| 334 ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UP}} ${CMAKE_C_FLAGS}") | |
| 335 message(STATUS "Linker options: ${CMAKE_EXE_LINKER_FLAGS} | |
| 336 ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UP}}") | |
| 337 message(STATUS "Install directory: ${CMAKE_INSTALL_PREFIX}") | |
| 338 message(STATUS) | |
| 339 message(STATUS "Build with sw [SW_BUILD]: ${SW_BUILD}") | |
| 340 message(STATUS "Build utility programs [BUILD_PROG]: ${BUILD_PROG}") | |
| 341 if(NOT SW_BUILD) | |
| 342 message(STATUS "Used ZLIB library: ${ZLIB_LIBRARIES}") | |
| 343 message(STATUS "Used PNG library: ${PNG_LIBRARIES}") | |
| 344 message(STATUS "Used JPEG library: ${JPEG_LIBRARIES}") | |
| 345 message(STATUS "Used OpenJPEG library: ${OPENJPEG_LIBRARIES}") | |
| 346 message(STATUS "Used TIFF library: ${TIFF_LIBRARIES}") | |
| 347 message(STATUS "Used GIF library: ${GIF_LIBRARIES}") | |
| 348 message(STATUS "Used WebP library: ${WebP_LIBRARIES}") | |
| 349 endif() | |
| 350 message(STATUS "--------------------------------------------------------") | |
| 351 message(STATUS) | |
| 352 | |
| 353 # ############################################################################## | |
| 354 # | |
| 355 # build | |
| 356 # | |
| 357 # ############################################################################## | |
| 358 | |
| 359 add_definitions(-DHAVE_CONFIG_H) | |
| 360 | |
| 361 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) | |
| 362 include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) | |
| 363 | |
| 364 if(BUILD_PROG) | |
| 365 add_subdirectory(prog) | |
| 366 endif() | |
| 367 | |
| 368 add_subdirectory(src) | |
| 369 | |
| 370 get_target_property(leptonica_NAME leptonica NAME) | |
| 371 get_target_property(leptonica_OUTPUT_NAME leptonica OUTPUT_NAME) | |
| 372 | |
| 373 configure_file(lept.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in @ONLY) | |
| 374 # to resolve generator expression in OUTPUT_NAME | |
| 375 file( | |
| 376 GENERATE | |
| 377 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lept_$<CONFIG>.pc | |
| 378 INPUT ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in) | |
| 379 | |
| 380 configure_file( | |
| 381 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig-version.cmake.in | |
| 382 ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake @ONLY) | |
| 383 configure_file( | |
| 384 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig.cmake.in | |
| 385 ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake @ONLY) | |
| 386 | |
| 387 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lept_$<CONFIG>.pc | |
| 388 DESTINATION lib/pkgconfig) | |
| 389 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake | |
| 390 ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake | |
| 391 DESTINATION ${leptonica_INSTALL_CMAKE_DIR}) | |
| 392 | |
| 393 # ############################################################################## | |
| 394 # uninstall target | |
| 395 # ############################################################################## | |
| 396 if(NOT TARGET uninstall) | |
| 397 configure_file( | |
| 398 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" | |
| 399 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) | |
| 400 | |
| 401 add_custom_target( | |
| 402 uninstall COMMAND ${CMAKE_COMMAND} -P | |
| 403 ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) | |
| 404 endif() | |
| 405 | |
| 406 # ############################################################################## |
