diff --git a/cmake/OpenEXR.pc.in b/cmake/OpenEXR.pc.in index bce35c2b1f..68d71c3c84 100644 --- a/cmake/OpenEXR.pc.in +++ b/cmake/OpenEXR.pc.in @@ -14,7 +14,8 @@ Name: OpenEXR Description: OpenEXR image library Version: @OPENEXR_VERSION@ -Libs: @exr_pthread_libs@ -L${libdir} -lOpenEXR${libsuffix} -lOpenEXRUtil${libsuffix} -lOpenEXRCore${libsuffix} -lIex${libsuffix} -lIlmThread${libsuffix} @EXR_DEFLATE_LDFLAGS@ +Libs: @exr_pthread_libs@ -L${libdir} -lOpenEXR${libsuffix} -lOpenEXRUtil${libsuffix} -lOpenEXRCore${libsuffix} -lIex${libsuffix} -lIlmThread${libsuffix} Cflags: -I${includedir} -I${OpenEXR_includedir} @exr_pthread_cflags@ Requires: Imath +Requires.private: @EXR_DEFLATE_PKGCONFIG_REQUIRES@ diff --git a/cmake/OpenEXRSetup.cmake b/cmake/OpenEXRSetup.cmake index 7d01362c84..a70f86d2f4 100644 --- a/cmake/OpenEXRSetup.cmake +++ b/cmake/OpenEXRSetup.cmake @@ -160,15 +160,40 @@ 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 QUIET) + if(libdeflate_FOUND) + if(TARGET libdeflate::libdeflate_shared) + set(EXR_DEFLATE_LIB libdeflate::libdeflate_shared) + else() + set(EXR_DEFLATE_LIB libdeflate::libdeflate_static) + endif() + set(EXR_DEFLATE_VERSION ${libdeflate_VERSION}) + 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_LIB PkgConfig::deflate) + set(EXR_DEFLATE_VERSION ${deflate_VERSION}) + 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(EXR_DEFLATE_LIB) + # Using external library + set(EXR_DEFLATE_SOURCES) + set(EXR_DEFLATE_INCLUDE_DIR) + # For OpenEXR.pc.in for static build + set(EXR_DEFLATE_PKGCONFIG_REQUIRES "libdeflate >= ${EXR_DEFLATE_VERSION}") +else() + # Using internal deflate if(OPENEXR_FORCE_INTERNAL_DEFLATE) message(STATUS "libdeflate forced internal, installing from ${OPENEXR_DEFLATE_REPO} (${OPENEXR_DEFLATE_TAG})") else() @@ -213,16 +238,6 @@ if(NOT TARGET PkgConfig::deflate AND NOT deflate_FOUND) 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) endif() #######################################