From e5100ca3ad17b1b9a40ffd8a8edccb6cb553e558 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 16 Feb 2022 17:40:20 +0100 Subject: Build: update CMake to support OpenImageIO 2.3.4 FindOpenImageIO was updated to link to separate OpenImageIO_Util for new versions, where it is required. For older versions, we can not link to it because there will be duplicated symbols. Ref D14128 --- build_files/cmake/Modules/FindOpenImageIO.cmake | 41 +++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'build_files') diff --git a/build_files/cmake/Modules/FindOpenImageIO.cmake b/build_files/cmake/Modules/FindOpenImageIO.cmake index aac5b5ce0a8..54b6d95e809 100644 --- a/build_files/cmake/Modules/FindOpenImageIO.cmake +++ b/build_files/cmake/Modules/FindOpenImageIO.cmake @@ -48,6 +48,8 @@ FIND_LIBRARY(OPENIMAGEIO_LIBRARY lib64 lib ) +set(_openimageio_LIBRARIES ${OPENIMAGEIO_LIBRARY}) + FIND_FILE(OPENIMAGEIO_IDIFF NAMES idiff @@ -57,14 +59,47 @@ FIND_FILE(OPENIMAGEIO_IDIFF bin ) +# Additionally find util library if needed. In old versions this library was +# included in libOpenImageIO and linking to both would duplicate symbols. In +# new versions we need to link to both. +FIND_FILE(_openimageio_export + NAMES + export.h + PATHS + ${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO + NO_DEFAULT_PATH +) + +# Use existence of OIIO_UTIL_API to check if it's a separate lib. +FILE(STRINGS "${_openimageio_export}" _openimageio_util_define + REGEX "^[ \t]*#[ \t]*define[ \t]+OIIO_UTIL_API.*$") + +IF(_openimageio_util_define) + FIND_LIBRARY(OPENIMAGEIO_UTIL_LIBRARY + NAMES + OpenImageIO_Util + HINTS + ${_openimageio_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + + LIST(APPEND _openimageio_LIBRARIES ${OPENIMAGEIO_UTIL_LIBRARY}) +ENDIF() + +# In cmake version 3.21 and up, we can instead use the NO_CACHE option for +# FIND_FILE so we don't need to clear it from the cache here. +UNSET(_openimageio_export CACHE) +UNSET(_openimageio_util_define) + # handle the QUIETLY and REQUIRED arguments and set OPENIMAGEIO_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenImageIO DEFAULT_MSG - OPENIMAGEIO_LIBRARY OPENIMAGEIO_INCLUDE_DIR) + _openimageio_LIBRARIES OPENIMAGEIO_INCLUDE_DIR) IF(OPENIMAGEIO_FOUND) - SET(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARY}) + SET(OPENIMAGEIO_LIBRARIES ${_openimageio_LIBRARIES}) SET(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO_INCLUDE_DIR}) IF(EXISTS ${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO/pugixml.hpp) SET(OPENIMAGEIO_PUGIXML_FOUND TRUE) @@ -78,7 +113,9 @@ ENDIF() MARK_AS_ADVANCED( OPENIMAGEIO_INCLUDE_DIR OPENIMAGEIO_LIBRARY + OPENIMAGEIO_UTIL_LIBRARY OPENIMAGEIO_IDIFF ) UNSET(_openimageio_SEARCH_DIRS) +UNSET(_openimageio_LIBRARIES) -- cgit v1.2.3