# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #.rst: # FindKDU # ----------- # # CMake module to search for KAKADU library # # Copyright (C) 2017-2018, Hiroshi Miura # # If it's found it sets KDU_FOUND to TRUE # and following variables are set: # KDU_INCLUDE_DIRS # KDU_LIBRARIES # and it defines the KDU::KDU target macro(find_kdu_libs_from_makefiles) # first argument = platform # second argument = library extension (without .) file(READ "${KDU_ROOT}/coresys/make/Makefile-${ARGV0}" CORESYS_MAKEFILE_CONTENTS) string(REGEX REPLACE ".*SHARED_LIB_NAME[ \t]*=[ \t]*([^.]*)(\.${ARGV1}).*" "\\1\\2" KDU_SHARED_LIB_NAME ${CORESYS_MAKEFILE_CONTENTS}) file(READ "${KDU_ROOT}/managed/make/Makefile-${ARGV0}" MANAGED_MAKEFILE_CONTENTS) string(REGEX REPLACE ".*AUX_SHARED_LIB_NAME[ \t]*=[ \t]*([^.]*)(\.${ARGV1}).*" "\\1\\2" KDU_AUX_SHARED_LIB_NAME ${MANAGED_MAKEFILE_CONTENTS}) string(REGEX REPLACE "libkdu_v([0-9])([0-9A-F])R\.${ARGV1}" "\\1" KDU_MAJOR_VERSION "${KDU_SHARED_LIB_NAME}") string(REGEX REPLACE "libkdu_v([0-9])([0-9A-F])R\.${ARGV1}" "\\2" KDU_MINOR_VERSION "${KDU_SHARED_LIB_NAME}") if( KDU_MINOR_VERSION STREQUAL "A" ) set(KDU_MINOR_VERSION 10) endif() set(KDU_VERSION_VAR "${KDU_MAJOR_VERSION}.${KDU_MINOR_VERSION}") find_library(KDU_LIBRARY ${KDU_SHARED_LIB_NAME} PATHS ${KDU_ROOT}/lib/${ARGV0}) find_library(KDU_AUX_LIBRARY ${KDU_AUX_SHARED_LIB_NAME} PATHS ${KDU_ROOT}/lib/${ARGV0}) endmacro() set(KDU_VERSION_VAR "") if(KDU_ROOT AND EXISTS "${KDU_ROOT}/coresys") if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") find_kdu_libs_from_makefiles("Linux-x86-64-gcc" "so") elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") find_kdu_libs_from_makefiles("Linux-arm-64-gcc" "so") elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") find_kdu_libs_from_makefiles("Mac-x86-64-gcc" "so") elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") find_kdu_libs_from_makefiles("Mac-arm-64-gcc" "so") elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows" AND MINGW) find_kdu_libs_from_makefiles("Mingw-x86-64-gcc" "dll") elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "AMD64" AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows" AND MSVC) file(READ "${KDU_ROOT}/coresys/coresys_2019.vcxproj" CORESYS_MAKEFILE_CONTENTS) string(REGEX REPLACE [[.*([^l]*)(lib_x64\\)([^R]*R)(\.lib).*]] "\\1\\2\\3\\4" KDU_SHARED_LIB_NAME ${CORESYS_MAKEFILE_CONTENTS}) file(READ "${KDU_ROOT}/managed/kdu_aux/kdu_aux_2019.vcxproj" MANAGED_MAKEFILE_CONTENTS) string(REGEX REPLACE [[.*([^l]*)(lib_x64\\)([^R]*R)(\.lib).*]] "\\1\\2\\3\\4" KDU_AUX_SHARED_LIB_NAME ${MANAGED_MAKEFILE_CONTENTS}) find_library(KDU_LIBRARY ${KDU_SHARED_LIB_NAME} PATHS ${KDU_ROOT}) find_library(KDU_AUX_LIBRARY ${KDU_AUX_SHARED_LIB_NAME} PATHS ${KDU_ROOT}) endif() endif() find_path(KDU_INCLUDE_DIR coresys/common/kdu_elementary.h PATHS ${KDU_ROOT}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(KDU REQUIRED_VARS KDU_INCLUDE_DIR KDU_LIBRARY KDU_AUX_LIBRARY VERSION_VAR KDU_VERSION_VAR) mark_as_advanced(KDU_INCLUDE_DIR KDU_LIBRARY KDU_AUX_LIBRARY) if(KDU_FOUND) set(KDU_INCLUDE_DIRS ${KDU_INCLUDE_DIR}) set(KDU_LIBRARIES ${KDU_LIBRARY} ${KDU_AUX_LIBRARY}) if(NOT TARGET KDU::KDU) add_library(KDU::KDU_MAIN UNKNOWN IMPORTED) set_target_properties(KDU::KDU_MAIN PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${KDU_INCLUDE_DIR}/coresys/common" IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${KDU_LIBRARY}") add_library(KDU::KDU_AUX UNKNOWN IMPORTED) set_target_properties(KDU::KDU_AUX PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${KDU_INCLUDE_DIR}/apps/compressed_io;${KDU_INCLUDE_DIR}/apps/jp2;${KDU_INCLUDE_DIR}/apps/image;${KDU_INCLUDE_DIR}/apps/args;${KDU_INCLUDE_DIR}/apps/support;${KDU_INCLUDE_DIR}/apps/kdu_compress" IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${KDU_AUX_LIBRARY}") add_library(KDU::KDU INTERFACE IMPORTED) set_target_properties(KDU::KDU PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${KDU_INCLUDE_DIR}/coresys/common;${KDU_INCLUDE_DIR}/apps/compressed_io;${KDU_INCLUDE_DIR}/apps/jp2;${KDU_INCLUDE_DIR}/apps/image;${KDU_INCLUDE_DIR}/apps/args;${KDU_INCLUDE_DIR}/apps/support;${KDU_INCLUDE_DIR}/apps/kdu_compress" INTERFACE_LINK_LIBRARIES "KDU::KDU_MAIN;KDU::KDU_AUX") if( DEFINED KDU_MAJOR_VERSION AND ${KDU_MAJOR_VERSION}.${KDU_MINOR_VERSION} VERSION_LESS 7.5 ) set_property(TARGET KDU::KDU APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "KDU_MAJOR_VERSION=${KDU_MAJOR_VERSION};KDU_MINOR_VERSION=${KDU_MINOR_VERSION}") endif() endif() endif()