diff --git a/cmake/LibraryDefine.cmake b/cmake/LibraryDefine.cmake index a242ec8519..0e2dbf6c17 100644 --- a/cmake/LibraryDefine.cmake +++ b/cmake/LibraryDefine.cmake @@ -27,9 +27,6 @@ function(OPENEXR_DEFINE_LIBRARY libname) PRIVATE cxx_std_${OPENEXR_CXX_STANDARD} INTERFACE cxx_std_11 ) - # we are embedding libdeflate - target_include_directories(${objlib} PRIVATE ${EXR_DEFLATE_INCLUDE_DIR}) - if(OPENEXR_CURLIB_PRIV_EXPORT AND BUILD_SHARED_LIBS) target_compile_definitions(${objlib} PRIVATE ${OPENEXR_CURLIB_PRIV_EXPORT}) if(WIN32) diff --git a/cmake/OpenEXRSetup.cmake b/cmake/OpenEXRSetup.cmake index 7d01362c84..3a446cd157 100644 --- a/cmake/OpenEXRSetup.cmake +++ b/cmake/OpenEXRSetup.cmake @@ -160,15 +160,45 @@ set(OPENEXR_DEFLATE_TAG "v1.18" CACHE STRING "Tag to use for libdeflate source r if(NOT OPENEXR_FORCE_INTERNAL_DEFLATE) #TODO: ^^ Release should not clone from main, this is a place holder set(CMAKE_IGNORE_PATH "${CMAKE_CURRENT_BINARY_DIR}/_deps/deflate-src/config;${CMAKE_CURRENT_BINARY_DIR}/_deps/deflate-build/config") - include(FindPkgConfig) - pkg_check_modules(deflate IMPORTED_TARGET GLOBAL libdeflate) - set(CMAKE_IGNORE_PATH) - if (deflate_FOUND) - message(STATUS "Using libdeflate from ${deflate_LINK_LIBRARIES}") + # First try cmake config + find_package(libdeflate CONFIG) + if(libdeflate_FOUND) + if(TARGET libdeflate::libdeflate_shared) + set(EXR_DEFLATE_TARGET libdeflate::libdeflate_shared) + else() + set(EXR_DEFLATE_TARGET libdeflate::libdeflate_static) + endif() + set(EXR_DEFLATE_SOURCES) + set(EXR_DEFLATE_LDFLAGS) + # Set EXR_DEFATE_LDFLAGS for OpenEXR.pc.in for static build + if(NOT BUILD_SHARED_LIBS) + get_target_property(deflate_LIBRARIES ${EXR_DEFLATE_TARGET} LOCATION) + set(EXR_DEFLATE_LDFLAGS "-l${deflate_LIBRARIES}") + endif() + message(STATUS "Using libdeflate from ${libdeflate_DIR}") + else() + # If not found, try pkgconfig + find_package(PkgConfig) + if(PKG_CONFIG_FOUND) + include(FindPkgConfig) + pkg_check_modules(deflate IMPORTED_TARGET GLOBAL libdeflate) + if(deflate_FOUND) + set(EXR_DEFLATE_TARGET PkgConfig::deflate) + set(EXR_DEFLATE_SOURCES) + set(EXR_DEFLATE_LDFLAGS) + # Set EXR_DEFATE_LDFLAGS for OpenEXR.pc.in for static build + if(NOT BUILD_SHARED_LIBS) + set(EXR_DEFLATE_LDFLAGS "-l${deflate_LIBRARIES}") + endif() + message(STATUS "Using libdeflate from ${deflate_LINK_LIBRARIES}") + endif() + endif() endif() + set(CMAKE_IGNORE_PATH) endif() -if(NOT TARGET PkgConfig::deflate AND NOT deflate_FOUND) +if(NOT EXR_DEFLATE_TARGET) + # Using internal deflate. if(OPENEXR_FORCE_INTERNAL_DEFLATE) message(STATUS "libdeflate forced internal, installing from ${OPENEXR_DEFLATE_REPO} (${OPENEXR_DEFLATE_TAG})") else() @@ -211,18 +241,10 @@ if(NOT TARGET PkgConfig::deflate AND NOT deflate_FOUND) # cmake makes fetch content name lowercase for the properties (to deflate) list(TRANSFORM EXR_DEFLATE_SOURCES PREPEND ${deflate_SOURCE_DIR}/) - set(EXR_DEFLATE_INCLUDE_DIR ${deflate_SOURCE_DIR}) - set(EXR_DEFLATE_LIB) -else() - set(EXR_DEFLATE_INCLUDE_DIR) - set(EXR_DEFLATE_LIB ${deflate_LIBRARIES}) - # set EXR_DEFATE_LDFLAGS for OpenEXR.pc.in for static build - if (BUILD_SHARED_LIBS) - set(EXR_DEFLATE_LDFLAGS "") - else() - set(EXR_DEFLATE_LDFLAGS "-l${deflate_LIBRARIES}") - endif() - set(EXR_DEFLATE_SOURCES) + + add_library(libdeflate_internal_static STATIC IMPORTED) + set_target_properties(libdeflate_internal_static PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${deflate_SOURCE_DIR}") + set(EXR_DEFLATE_TARGET libdeflate_internal_static) endif() ####################################### diff --git a/src/lib/OpenEXRCore/CMakeLists.txt b/src/lib/OpenEXRCore/CMakeLists.txt index f4bd54efb3..3b209a3a63 100644 --- a/src/lib/OpenEXRCore/CMakeLists.txt +++ b/src/lib/OpenEXRCore/CMakeLists.txt @@ -104,10 +104,10 @@ openexr_define_library(OpenEXRCore Imath::Imath ) -if (DEFINED EXR_DEFLATE_LIB) +if (DEFINED EXR_DEFLATE_TARGET) if (BUILD_SHARED_LIBS) - target_link_libraries(OpenEXRCore PRIVATE ${EXR_DEFLATE_LIB}) + target_link_libraries(OpenEXRCore PRIVATE ${EXR_DEFLATE_TARGET}) else() - target_link_libraries(OpenEXRCore PUBLIC ${EXR_DEFLATE_LIB}) + target_link_libraries(OpenEXRCore PUBLIC ${EXR_DEFLATE_TARGET}) endif() endif()