diff options
Diffstat (limited to 'leptonica/CMakeLists.txt')
-rw-r--r-- | leptonica/CMakeLists.txt | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/leptonica/CMakeLists.txt b/leptonica/CMakeLists.txt new file mode 100644 index 00000000..919b3c33 --- /dev/null +++ b/leptonica/CMakeLists.txt @@ -0,0 +1,294 @@ +# +# leptonica +# + +############################################################################### +# +# cmake settings +# +############################################################################### + +cmake_minimum_required(VERSION 3.1.3) +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 C CXX) + +set(VERSION_MAJOR 1) +set(VERSION_MINOR 81) +set(VERSION_PATCH 0) +set(VERSION_PLAIN ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) +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) + option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) +endif() + +if(NOT SW_BUILD) + find_package(GIF) + find_package(JPEG) + find_package(PNG) + find_package(TIFF) + 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) + 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() +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 + -DLIBJP2K_HEADER="openjpeg.h" + ) +endif() + +############################################################################### +# +# compiler and linker +# +############################################################################### + +if(CMAKE_CXX_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) +include(CheckCXXCompilerFlag) + +macro(CHECK_CCXX_COMPILER_FLAG _FLAG _RESULT) + check_c_compiler_flag(${_FLAG} C_HAS${_RESULT}) + check_cxx_compiler_flag(${_FLAG} CXX_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_CXX_FLAGS "${CMAKE_CXX_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() + if(CXX_HAS${flag_var}) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_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 JP2K library: ${JP2K_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_VERSION leptonica VERSION) +get_target_property(leptonica_OUTPUT_NAME leptonica OUTPUT_NAME) + +configure_file(lept.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lept.pc @ONLY) +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.pc DESTINATION lib/pkgconfig) +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake + DESTINATION lib/cmake) + +######################################## +# 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() + +############################################################################### |