update for openexr 3.x
This commit is contained in:
@@ -79,12 +79,6 @@ list(APPEND OLIVE_INCLUDE_DIRS ${OIIO_INCLUDE_DIRS})
|
|||||||
find_package(OpenEXR REQUIRED)
|
find_package(OpenEXR REQUIRED)
|
||||||
list(APPEND OLIVE_LIBRARIES ${OPENEXR_LIBRARIES})
|
list(APPEND OLIVE_LIBRARIES ${OPENEXR_LIBRARIES})
|
||||||
list(APPEND OLIVE_INCLUDE_DIRS ${OPENEXR_INCLUDES})
|
list(APPEND OLIVE_INCLUDE_DIRS ${OPENEXR_INCLUDES})
|
||||||
if (APPLE)
|
|
||||||
# HACK: Brew on macOS separates OpenEXR and IlmBase into two folders even though they seem to
|
|
||||||
# expect to be in one. This includes the IlmBase files as if they were in the same folders
|
|
||||||
# as the OpenEXR headers. This would be better rolled into FindOpenEXR.cmake.
|
|
||||||
list(APPEND OLIVE_INCLUDE_DIRS ${ILMBASE_INCLUDES}/OpenEXR)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Link Qt 5
|
# Link Qt 5
|
||||||
find_package(Qt5 5.6 REQUIRED
|
find_package(Qt5 5.6 REQUIRED
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
#include "framehashcache.h"
|
#include "framehashcache.h"
|
||||||
|
|
||||||
#include <OpenEXR/ImfFloatAttribute.h>
|
#include <OpenEXR/ImfFloatAttribute.h>
|
||||||
|
#include <OpenEXR/ImfFrameBuffer.h>
|
||||||
|
#include <OpenEXR/ImfHeader.h>
|
||||||
#include <OpenEXR/ImfInputFile.h>
|
#include <OpenEXR/ImfInputFile.h>
|
||||||
#include <OpenEXR/ImfIntAttribute.h>
|
#include <OpenEXR/ImfIntAttribute.h>
|
||||||
#include <OpenEXR/ImfOutputFile.h>
|
#include <OpenEXR/ImfOutputFile.h>
|
||||||
|
|||||||
+126
-37
@@ -1,15 +1,118 @@
|
|||||||
# Module to find OpenEXR.
|
# Module to find OpenEXR and Imath.
|
||||||
|
#
|
||||||
|
# I'm afraid this is a mess, due to needing to support a wide range of
|
||||||
|
# OpenEXR versions.
|
||||||
|
#
|
||||||
|
# For OpenEXR & Imath 3.0, this will establish the following imported
|
||||||
|
# targets:
|
||||||
|
#
|
||||||
|
# Imath::Imath
|
||||||
|
# Imath::Half
|
||||||
|
# OpenEXR::OpenEXR
|
||||||
|
# OpenEXR::Iex
|
||||||
|
# OpenEXR::IlmThread
|
||||||
|
#
|
||||||
|
# For OpenEXR 2.4 & 2.5, it will establish the following imported targets:
|
||||||
|
#
|
||||||
|
# IlmBase::Imath
|
||||||
|
# IlmBase::Half
|
||||||
|
# IlmBase::Iex
|
||||||
|
# IlmBase::IlmThread
|
||||||
|
# OpenEXR::IlmImf
|
||||||
|
#
|
||||||
|
# For all versions -- but for OpenEXR < 2.4 the only thing this sets --
|
||||||
|
# are the following CMake variables:
|
||||||
#
|
#
|
||||||
# This module will set
|
|
||||||
# OPENEXR_FOUND true, if found
|
# OPENEXR_FOUND true, if found
|
||||||
# OPENEXR_INCLUDES directory where headers are found
|
# OPENEXR_INCLUDES directory where OpenEXR headers are found
|
||||||
# OPENEXR_LIBRARIES libraries for OpenEXR + IlmBase
|
# OPENEXR_LIBRARIES libraries for OpenEXR + IlmBase
|
||||||
# ILMBASE_LIBRARIES libraries just IlmBase
|
|
||||||
# OPENEXR_VERSION OpenEXR version (accurate for >= 2.0.0,
|
# OPENEXR_VERSION OpenEXR version (accurate for >= 2.0.0,
|
||||||
# otherwise will just guess 1.6.1)
|
# otherwise will just guess 1.6.1)
|
||||||
|
# IMATH_INCLUDES directory where Imath headers are found
|
||||||
|
# ILMBASE_INCLUDES directory where IlmBase headers are found
|
||||||
|
# ILMBASE_LIBRARIES libraries just IlmBase
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# First, try to fine just the right config files
|
||||||
|
find_package(Imath CONFIG)
|
||||||
|
if (NOT TARGET Imath::Imath)
|
||||||
|
# Couldn't find Imath::Imath, maybe it's older and has IlmBase?
|
||||||
|
find_package(IlmBase CONFIG)
|
||||||
|
endif ()
|
||||||
|
find_package(OpenEXR CONFIG)
|
||||||
|
|
||||||
|
if (TARGET OpenEXR::OpenEXR AND TARGET Imath::Imath)
|
||||||
|
# OpenEXR 3.x if both of these targets are found
|
||||||
|
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||||
|
if (NOT OpenEXR_FIND_QUIETLY)
|
||||||
|
message (STATUS "Found CONFIG for OpenEXR 3 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Mimic old style variables
|
||||||
|
set (OPENEXR_VERSION ${OpenEXR_VERSION})
|
||||||
|
get_target_property(IMATH_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(ILMBASE_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(ILMBASE_IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(OPENEXR_IEX_LIBRARY OpenEXR::Iex INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(OPENEXR_ILMTHREAD_LIBRARY OpenEXR::IlmThread INTERFACE_LINK_LIBRARIES)
|
||||||
|
set (ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY})
|
||||||
|
set (ILMBASE_FOUND true)
|
||||||
|
|
||||||
|
get_target_property(OPENEXR_INCLUDES OpenEXR::OpenEXR INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(OPENEXR_ILMIMF_LIBRARY OpenEXR::OpenEXR INTERFACE_LINK_LIBRARIES)
|
||||||
|
set (OPENEXR_LIBRARIES OpenEXR::OpenEXR ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_LIBRARIES})
|
||||||
|
set (OPENEXR_FOUND true)
|
||||||
|
|
||||||
|
# Link with pthreads if required
|
||||||
|
find_package (Threads)
|
||||||
|
if (CMAKE_USE_PTHREADS_INIT)
|
||||||
|
list (APPEND ILMBASE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
elseif (TARGET OpenEXR::IlmImf AND TARGET IlmBase::Imath AND
|
||||||
|
(OPENEXR_VERSION VERSION_GREATER_EQUAL 2.4 OR OpenEXR_VERSION VERSION_GREATER_EQUAL 2.4))
|
||||||
|
# OpenEXR 2.4 or 2.5 with exported config
|
||||||
|
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||||
|
if (NOT OpenEXR_FIND_QUIETLY)
|
||||||
|
message (STATUS "Found CONFIG for OpenEXR 2 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Mimic old style variables
|
||||||
|
get_target_property(ILMBASE_INCLUDES IlmBase::IlmBaseConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(IMATH_INCLUDES IlmBase::IlmBaseConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(ILMBASE_Imath_LIBRARY IlmBase::Imath INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(ILMBASE_IMATH_LIBRARY IlmBase::Imath INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(ILMBASE_HALF_LIBRARY IlmBase::Half INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(OPENEXR_IEX_LIBRARY IlmBase::Iex INTERFACE_LINK_LIBRARIES)
|
||||||
|
get_target_property(OPENEXR_ILMTHREAD_LIBRARY IlmBase::IlmThread INTERFACE_LINK_LIBRARIES)
|
||||||
|
set (ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY} ${ILMBASE_HALF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY})
|
||||||
|
set (ILMBASE_FOUND true)
|
||||||
|
|
||||||
|
get_target_property(OPENEXR_INCLUDES OpenEXR::IlmImfConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
get_target_property(OPENEXR_ILMIMF_LIBRARY OpenEXR::IlmImf INTERFACE_LINK_LIBRARIES)
|
||||||
|
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES})
|
||||||
|
set (OPENEXR_FOUND true)
|
||||||
|
|
||||||
|
# Link with pthreads if required
|
||||||
|
find_package (Threads)
|
||||||
|
if (CMAKE_USE_PTHREADS_INIT)
|
||||||
|
list (APPEND ILMBASE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Correct for how old OpenEXR config exports set the directory one
|
||||||
|
# level lower than we prefer it.
|
||||||
|
string(REGEX REPLACE "include/OpenEXR$" "include" ILMBASE_INCLUDES "${ILMBASE_INCLUDES}")
|
||||||
|
string(REGEX REPLACE "include/OpenEXR$" "include" IMATH_INCLUDES "${IMATH_INCLUDES}")
|
||||||
|
string(REGEX REPLACE "include/OpenEXR$" "include" OPENEXR_INCLUDES "${OPENEXR_INCLUDES}")
|
||||||
|
|
||||||
|
else ()
|
||||||
|
# OpenEXR 2.x older versions without a config or whose configs we don't
|
||||||
|
# trust.
|
||||||
|
|
||||||
|
set (FOUND_OPENEXR_WITH_CONFIG 0)
|
||||||
|
|
||||||
# Other standard issue macros
|
# Other standard issue macros
|
||||||
include (FindPackageHandleStandardArgs)
|
include (FindPackageHandleStandardArgs)
|
||||||
include (SelectLibraryConfigurations)
|
include (SelectLibraryConfigurations)
|
||||||
@@ -23,19 +126,17 @@ if (CMAKE_USE_PTHREADS_INIT)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Attempt to find OpenEXR with pkgconfig
|
# Attempt to find OpenEXR with pkgconfig
|
||||||
if (NOT WIN32)
|
find_package(PkgConfig)
|
||||||
find_package(PkgConfig)
|
if (PKG_CONFIG_FOUND)
|
||||||
if (PKG_CONFIG_FOUND)
|
if (NOT Ilmbase_ROOT AND NOT ILMBASE_ROOT
|
||||||
if (NOT Ilmbase_ROOT AND NOT ILMBASE_ROOT
|
AND NOT DEFINED ENV{Ilmbase_ROOT} AND NOT DEFINED ENV{ILMBASE_ROOT})
|
||||||
AND NOT DEFINED ENV{Ilmbase_ROOT} AND NOT DEFINED ENV{ILMBASE_ROOT})
|
pkg_check_modules(_ILMBASE QUIET IlmBase>=2.0.0)
|
||||||
pkg_check_modules(_ILMBASE QUIET IlmBase>=2.0.0)
|
endif ()
|
||||||
endif ()
|
if (NOT OpenEXR_ROOT AND NOT OPENEXR_ROOT
|
||||||
if (NOT OpenEXR_ROOT AND NOT OPENEXR_ROOT
|
AND NOT DEFINED ENV{OpenEXR_ROOT} AND NOT DEFINED ENV{OPENEXR_ROOT})
|
||||||
AND NOT DEFINED ENV{OpenEXR_ROOT} AND NOT DEFINED ENV{OPENEXR_ROOT})
|
pkg_check_modules(_OPENEXR QUIET OpenEXR>=2.0.0)
|
||||||
pkg_check_modules(_OPENEXR QUIET OpenEXR>=2.0.0)
|
endif ()
|
||||||
endif ()
|
endif (PKG_CONFIG_FOUND)
|
||||||
endif (PKG_CONFIG_FOUND)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# List of likely places to find the headers -- note priority override of
|
# List of likely places to find the headers -- note priority override of
|
||||||
# ${OPENEXR_ROOT}/include.
|
# ${OPENEXR_ROOT}/include.
|
||||||
@@ -120,47 +221,33 @@ set (_openexr_components IlmThread IlmImf Imath Iex Half)
|
|||||||
foreach (COMPONENT ${_openexr_components})
|
foreach (COMPONENT ${_openexr_components})
|
||||||
string (TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
string (TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||||
# First try with the version embedded
|
# First try with the version embedded
|
||||||
find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY_RELEASE
|
find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
||||||
NAMES ${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}
|
NAMES ${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}
|
||||||
${COMPONENT}
|
${COMPONENT}
|
||||||
HINTS ${OPENEXR_LIBRARY_DIR} $ENV{OPENEXR_LIBRARY_DIR}
|
${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}_d
|
||||||
${GENERIC_LIBRARY_PATHS} )
|
|
||||||
|
|
||||||
find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY_DEBUG
|
|
||||||
NAMES ${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}_d
|
|
||||||
${COMPONENT}_d
|
${COMPONENT}_d
|
||||||
HINTS ${OPENEXR_LIBRARY_DIR} $ENV{OPENEXR_LIBRARY_DIR}
|
HINTS ${OPENEXR_LIBRARY_DIR} $ENV{OPENEXR_LIBRARY_DIR}
|
||||||
${GENERIC_LIBRARY_PATHS} )
|
${GENERIC_LIBRARY_PATHS} )
|
||||||
|
|
||||||
if (OPENEXR_${UPPERCOMPONENT}_LIBRARY_RELEASE AND OPENEXR_${UPPERCOMPONENT}_LIBRARY_DEBUG)
|
|
||||||
set(OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
|
||||||
optimized ${OPENEXR_${UPPERCOMPONENT}_LIBRARY_RELEASE}
|
|
||||||
debug ${OPENEXR_${UPPERCOMPONENT}_LIBRARY_DEBUG})
|
|
||||||
elseif(OPENEXR_${UPPERCOMPONENT}_LIBRARY_RELEASE)
|
|
||||||
set(OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
|
||||||
${OPENEXR_${UPPERCOMPONENT}_LIBRARY_RELEASE})
|
|
||||||
else()
|
|
||||||
set(OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
|
||||||
${OPENEXR_${UPPERCOMPONENT}_LIBRARY_DEBUG})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
find_package_handle_standard_args (OpenEXR
|
find_package_handle_standard_args (OpenEXR
|
||||||
REQUIRED_VARS ILMBASE_INCLUDE_PATH OPENEXR_INCLUDE_PATH
|
REQUIRED_VARS ILMBASE_INCLUDE_PATH OPENEXR_INCLUDE_PATH
|
||||||
OPENEXR_IMATH_LIBRARY OPENEXR_ILMIMF_LIBRARY
|
OPENEXR_IMATH_LIBRARY OPENEXR_ILMIMF_LIBRARY
|
||||||
OPENEXR_IEX_LIBRARY OPENEXR_HALF_LIBRARY
|
OPENEXR_IEX_LIBRARY OPENEXR_HALF_LIBRARY
|
||||||
VERSION_VAR OPENEXR_VERSION
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (OPENEXR_FOUND)
|
if (OPENEXR_FOUND)
|
||||||
|
set (OpenEXR_VERSION ${OPENEXR_VERSION})
|
||||||
set (ILMBASE_FOUND TRUE)
|
set (ILMBASE_FOUND TRUE)
|
||||||
set (ILMBASE_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
set (ILMBASE_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||||
|
set (IMATH_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||||
set (OPENEXR_INCLUDES ${OPENEXR_INCLUDE_PATH})
|
set (OPENEXR_INCLUDES ${OPENEXR_INCLUDE_PATH})
|
||||||
set (ILMBASE_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
set (ILMBASE_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||||
|
set (IMATH_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||||
set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_PATH})
|
set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_PATH})
|
||||||
set (ILMBASE_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_PTHREADS} CACHE STRING "The libraries needed to use IlmBase")
|
set (ILMBASE_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_PTHREADS} CACHE STRING "The libraries needed to use IlmBase")
|
||||||
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES} ${ZLIB_LIBRARIES} CACHE STRING "The libraries needed to use OpenEXR")
|
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES} ${ZLIB_LIBRARIES} CACHE STRING "The libraries needed to use OpenEXR")
|
||||||
|
set (FINDOPENEXR_FALLBACK TRUE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
mark_as_advanced(
|
mark_as_advanced(
|
||||||
@@ -172,3 +259,5 @@ mark_as_advanced(
|
|||||||
|
|
||||||
# Restore the original CMAKE_FIND_LIBRARY_SUFFIXES
|
# Restore the original CMAKE_FIND_LIBRARY_SUFFIXES
|
||||||
set (CMAKE_FIND_LIBRARY_SUFFIXES ${_openexr_orig_suffixes})
|
set (CMAKE_FIND_LIBRARY_SUFFIXES ${_openexr_orig_suffixes})
|
||||||
|
|
||||||
|
endif ()
|
||||||
|
|||||||
Reference in New Issue
Block a user