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 # ##############################################################################