From d162b691768543e5a9be5b9daedd08e6e0df9870 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Sat, 4 Dec 2021 09:45:11 +0100 Subject: [PATCH 1/7] CMake: Make (lib)WebP and OpenJPEG support optional Other depdenencies can be handled by using the generic CMAKE_DISABLE_FIND_PACKAGE_ switch but these uses a different logic Signed-off-by: Daniel Engberg --- CMakeLists.txt | 106 ++++++++++++++++++++++++++----------------------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d506b984..2fc14a18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,8 @@ else() endif() if(UNIX) option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) + option(LIBWEBP_SUPPORT "Build with WebP support" OFF) + option(OPENJPEG_SUPPORT "Build with OpenJPEG support" OFF) endif() set(leptonica_INSTALL_CMAKE_DIR "lib/cmake/leptonica" @@ -68,57 +70,61 @@ if(NOT SW_BUILD) find_package(ZLIB) find_package(PkgConfig) if (PKG_CONFIG_FOUND) - pkg_check_modules(WEBP libwebp QUIET) - pkg_check_modules(WEBPMUX libwebpmux>=${MINIMUM_WEBPMUX_VERSION} QUIET) - pkg_check_modules(JP2K libopenjp2>=2.0 QUIET) - endif() - if(NOT WEBP) - find_path(WEBP_INCLUDE_DIR /webp/decode.h) - find_library(WEBP_LIBRARY NAMES webp) - if (WEBP_INCLUDE_DIR AND WEBP_LIBRARY) - set(WEBP 1) - set(WEBP_FOUND TRUE) - set(WEBP_LIBRARIES ${WEBP_LIBRARY}) - set(WEBP_INCLUDE_DIRS ${WEBP_INCLUDE_DIR}) - endif() - endif() - if(NOT WEBPMUX) - find_path(WEBPMUX_INCLUDE_DIR /webp/mux.h) - #TODO: check minimal required version - if(NOT WEBPMUX_INCLUDE_DIR) - message(STATUS "Can not find: /webp/mux.h") - endif() - if(NOT "${WEBPMUX_INCLUDE_DIR}" STREQUAL "${WEBP_INCLUDE_DIR}") - set(WEBP_INCLUDE_DIRS ${WEBP_INCLUDE_DIRS} ${WEBPMUX_INCLUDE_DIR}) - endif() - find_library(WEBPMUX_LIBRARY NAMES webpmux) - if (WEBPMUX_INCLUDE_DIR AND WEBPMUX_LIBRARY) - set(WEBPMUX 1) - set(HAVE_LIBWEBP_ANIM 1) - set(WEBPMUX_FOUND TRUE) - set(WEBP_LIBRARIES ${WEBP_LIBRARIES} ${WEBPMUX_LIBRARY}) - endif() - endif() - if(NOT JP2K) - find_path(JP2K_INCLUDE_DIR /openjpeg-2.3/openjpeg.h) - find_library(JP2K_LIBRARY NAMES openjp2) - if (JP2K_INCLUDE_DIR AND JP2K_LIBRARY) - set(JP2K 1) - set(JP2K_FOUND TRUE) - set(JP2K_LIBRARIES ${JP2K_LIBRARY}) - set(JP2K_INCLUDE_DIRS ${JP2K_INCLUDE_DIR}) - set(HAVE_LIBJP2K 1) + if(LIBWEBP_SUPPORT) + pkg_check_modules(WEBP libwebp QUIET) + pkg_check_modules(WEBPMUX libwebpmux>=${MINIMUM_WEBPMUX_VERSION} QUIET) + if(NOT WEBP) + find_path(WEBP_INCLUDE_DIR /webp/decode.h) + find_library(WEBP_LIBRARY NAMES webp) + if (WEBP_INCLUDE_DIR AND WEBP_LIBRARY) + set(WEBP 1) + set(WEBP_FOUND TRUE) + set(WEBP_LIBRARIES ${WEBP_LIBRARY}) + set(WEBP_INCLUDE_DIRS ${WEBP_INCLUDE_DIR}) + endif() + endif() + if(NOT WEBPMUX) + find_path(WEBPMUX_INCLUDE_DIR /webp/mux.h) + #TODO: check minimal required version + if(NOT WEBPMUX_INCLUDE_DIR) + message(STATUS "Can not find: /webp/mux.h") + endif() + if(NOT "${WEBPMUX_INCLUDE_DIR}" STREQUAL "${WEBP_INCLUDE_DIR}") + set(WEBP_INCLUDE_DIRS ${WEBP_INCLUDE_DIRS} ${WEBPMUX_INCLUDE_DIR}) + endif() + find_library(WEBPMUX_LIBRARY NAMES webpmux) + if (WEBPMUX_INCLUDE_DIR AND WEBPMUX_LIBRARY) + set(WEBPMUX 1) + set(HAVE_LIBWEBP_ANIM 1) + set(WEBPMUX_FOUND TRUE) + set(WEBP_LIBRARIES ${WEBP_LIBRARIES} ${WEBPMUX_LIBRARY}) + endif() + endif() endif() - endif() - if(NOT JP2K) - find_path(JP2K_INCLUDE_DIR /openjpeg-2.4/openjpeg.h) - find_library(JP2K_LIBRARY NAMES openjp2) - if (JP2K_INCLUDE_DIR AND JP2K_LIBRARY) - set(JP2K 1) - set(JP2K_FOUND TRUE) - set(JP2K_LIBRARIES ${JP2K_LIBRARY}) - set(JP2K_INCLUDE_DIRS ${JP2K_INCLUDE_DIR}) - set(HAVE_LIBJP2K 1) + if(OPENJPEG_SUPPORT) + pkg_check_modules(JP2K libopenjp2>=2.0 QUIET) + if(NOT JP2K) + find_path(JP2K_INCLUDE_DIR /openjpeg-2.3/openjpeg.h) + find_library(JP2K_LIBRARY NAMES openjp2) + if (JP2K_INCLUDE_DIR AND JP2K_LIBRARY) + set(JP2K 1) + set(JP2K_FOUND TRUE) + set(JP2K_LIBRARIES ${JP2K_LIBRARY}) + set(JP2K_INCLUDE_DIRS ${JP2K_INCLUDE_DIR}) + set(HAVE_LIBJP2K 1) + endif() + endif() + if(NOT JP2K) + find_path(JP2K_INCLUDE_DIR /openjpeg-2.4/openjpeg.h) + find_library(JP2K_LIBRARY NAMES openjp2) + if (JP2K_INCLUDE_DIR AND JP2K_LIBRARY) + set(JP2K 1) + set(JP2K_FOUND TRUE) + set(JP2K_LIBRARIES ${JP2K_LIBRARY}) + set(JP2K_INCLUDE_DIRS ${JP2K_INCLUDE_DIR}) + set(HAVE_LIBJP2K 1) + endif() + endif() endif() endif() else() # SW_BUILD=ON From c1138eb59e3f6ca1750404653db90eadc5d30247 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Sat, 4 Dec 2021 09:48:57 +0100 Subject: [PATCH 2/7] CMake: Report correct version in .pc file --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fc14a18..633bca64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -270,7 +270,7 @@ endif() add_subdirectory(src) get_target_property(leptonica_NAME leptonica NAME) -get_target_property(leptonica_VERSION leptonica VERSION) +set(leptonica_VERSION ${VERSION_PLAIN}) get_target_property(leptonica_OUTPUT_NAME leptonica OUTPUT_NAME) configure_file(lept.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lept.pc @ONLY) From 5132922ffc39d15daf1577d4ef9c8cc833ed6dbf Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Sat, 4 Dec 2021 15:33:16 +0100 Subject: [PATCH 3/7] CMake: Populate Libs.private in .pc file --- CMakeLists.txt | 21 ++++++++++++++++++++- lept.pc.cmake | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 633bca64..c3b00321 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,10 +64,25 @@ set(leptonica_INSTALL_CMAKE_DIR "lib/cmake/leptonica" if(NOT SW_BUILD) find_package(GIF) + if(GIF_FOUND) + set(libs_private "-lgif") + endif() find_package(JPEG) + if(JPEG_FOUND) + set(libs_private "${libs_private} -ljpeg") + endif() find_package(PNG) + if(PNG_FOUND) + set(libs_private "${libs_private} -lpng") + endif() find_package(TIFF) + if(TIFF_FOUND) + set(libs_private "${libs_private} -ltiff") + endif() find_package(ZLIB) + if(ZLIB_FOUND) + set(libs_private "${libs_private} -lz") + endif() find_package(PkgConfig) if (PKG_CONFIG_FOUND) if(LIBWEBP_SUPPORT) @@ -100,6 +115,7 @@ if(NOT SW_BUILD) set(WEBP_LIBRARIES ${WEBP_LIBRARIES} ${WEBPMUX_LIBRARY}) endif() endif() + set(libs_private "${libs_private} -lwebp -lwebpmux") endif() if(OPENJPEG_SUPPORT) pkg_check_modules(JP2K libopenjp2>=2.0 QUIET) @@ -124,7 +140,8 @@ if(NOT SW_BUILD) set(JP2K_INCLUDE_DIRS ${JP2K_INCLUDE_DIR}) set(HAVE_LIBJP2K 1) endif() - endif() + endif() + set(libs_private "${libs_private} -lopenjp2") endif() endif() else() # SW_BUILD=ON @@ -153,6 +170,8 @@ else() # SW_BUILD=ON ) endif() +set(libs_private "${libs_private} -lm") + ############################################################################### # # compiler and linker diff --git a/lept.pc.cmake b/lept.pc.cmake index e420a756..9140d504 100644 --- a/lept.pc.cmake +++ b/lept.pc.cmake @@ -7,5 +7,5 @@ Name: @leptonica_NAME@ Description: An open source C library for efficient image processing and image analysis operations Version: @leptonica_VERSION@ Libs: -L${libdir} -l@leptonica_OUTPUT_NAME@ -Libs.private: +Libs.private: @libs_private@ Cflags: -I${includedir} -I${includedir}/leptonica From 69fa24b14ba655dc86764c00c2fd6dba99be2983 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Sat, 4 Dec 2021 19:23:28 +0100 Subject: [PATCH 4/7] CMake: Properly define library version This change makes CMake generate the following files: libleptonica.so, libleptonica.so.5 and libleptonica.so.5.4.0 Signed-off-by: Daniel Engberg --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1797d788..b8f12db8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,8 +17,8 @@ endif() string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") add_library (leptonica ${src} ${hdr}) -set_target_properties (leptonica PROPERTIES VERSION ${VERSION_PLAIN}) -set_target_properties (leptonica PROPERTIES SOVERSION 5.4.0) +set_target_properties (leptonica PROPERTIES VERSION 5.4.0) +set_target_properties (leptonica PROPERTIES SOVERSION 5) if (WIN32) set_target_properties (leptonica PROPERTIES OUTPUT_NAME leptonica-${VERSION_PLAIN}) set_target_properties (leptonica PROPERTIES DEBUG_OUTPUT_NAME leptonica-${VERSION_PLAIN}d) From e9051d3333907af4a91b8711faa854ff9bfa7ae6 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Sun, 5 Dec 2021 01:27:44 +0100 Subject: [PATCH 5/7] CMake: Add imagetops to INSTALL_PROGS For consistency install the same applications as when using autotools build. Signed-off-by: Daniel Engberg --- prog/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prog/CMakeLists.txt b/prog/CMakeLists.txt index 5f1057b1..d2efdb9f 100644 --- a/prog/CMakeLists.txt +++ b/prog/CMakeLists.txt @@ -315,7 +315,7 @@ add_prog_target(yuvtest yuvtest.c) set (INSTALL_PROGS convertfilestopdf convertfilestops convertformat convertsegfilestopdf convertsegfilestops - converttopdf converttops fileinfo xtractprotos + converttopdf converttops fileinfo imagetops xtractprotos ) foreach(make_install ${INSTALL_PROGS}) From 67b019374afc6a9193ff313f6fc32b5741ff22e4 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Wed, 8 Dec 2021 21:39:04 +0100 Subject: [PATCH 6/7] CMake: Adjust indentation and population of libs_private Change indentation of find_package section Adjust entry for (lib)GIF for consistency, CMake ignores empty/non-existent variables so no need to initialize. Signed-off-by: Daniel Engberg --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c3b00321..46a71b8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,25 +64,25 @@ set(leptonica_INSTALL_CMAKE_DIR "lib/cmake/leptonica" if(NOT SW_BUILD) find_package(GIF) - if(GIF_FOUND) - set(libs_private "-lgif") - endif() + if(GIF_FOUND) + set(libs_private "${libs_private} -lgif") + endif() find_package(JPEG) - if(JPEG_FOUND) - set(libs_private "${libs_private} -ljpeg") - endif() + if(JPEG_FOUND) + set(libs_private "${libs_private} -ljpeg") + endif() find_package(PNG) - if(PNG_FOUND) - set(libs_private "${libs_private} -lpng") - endif() + if(PNG_FOUND) + set(libs_private "${libs_private} -lpng") + endif() find_package(TIFF) - if(TIFF_FOUND) - set(libs_private "${libs_private} -ltiff") - endif() + if(TIFF_FOUND) + set(libs_private "${libs_private} -ltiff") + endif() find_package(ZLIB) - if(ZLIB_FOUND) - set(libs_private "${libs_private} -lz") - endif() + if(ZLIB_FOUND) + set(libs_private "${libs_private} -lz") + endif() find_package(PkgConfig) if (PKG_CONFIG_FOUND) if(LIBWEBP_SUPPORT) From ca0de66a3dafd240986e26646d99a327916d1b86 Mon Sep 17 00:00:00 2001 From: Daniel Engberg Date: Wed, 8 Dec 2021 21:46:17 +0100 Subject: [PATCH 7/7] CMake: Enable (lib)WebP and OpenJPEG support by default --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46a71b8d..d835ac24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,8 +55,8 @@ else() endif() if(UNIX) option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) - option(LIBWEBP_SUPPORT "Build with WebP support" OFF) - option(OPENJPEG_SUPPORT "Build with OpenJPEG support" OFF) + option(LIBWEBP_SUPPORT "Build with WebP support" ON) + option(OPENJPEG_SUPPORT "Build with OpenJPEG support" ON) endif() set(leptonica_INSTALL_CMAKE_DIR "lib/cmake/leptonica"