mirror of
https://github.com/opencv/opencv.git
synced 2024-12-13 07:59:27 +08:00
971dacaf41
Support building with OpenEXR 3.x * Support OpenEXR 3.0 Try to find OpenEXR 3.0 using the upstream cmake config, and fallback to the previous algorithm if not found * Add explicit ImfFrameBuffer.h include This was transitively included with OpenEXR 2.x, but that's no longer the case with OpenEXR 3.x
154 lines
5.2 KiB
CMake
154 lines
5.2 KiB
CMake
# The script is taken from http://code.google.com/p/nvidia-texture-tools/
|
|
|
|
#
|
|
# Try to find OpenEXR's libraries, and include path.
|
|
# Once done this will define:
|
|
#
|
|
# OPENEXR_FOUND = OpenEXR found.
|
|
# OPENEXR_INCLUDE_PATHS = OpenEXR include directories.
|
|
# OPENEXR_LIBRARIES = libraries that are needed to use OpenEXR.
|
|
#
|
|
|
|
find_package(OpenEXR 3.0 CONFIG QUIET)
|
|
if(TARGET OpenEXR::OpenEXR)
|
|
SET(OPENEXR_FOUND TRUE)
|
|
SET(OPENEXR_LIBRARIES OpenEXR::OpenEXR)
|
|
SET(OPENEXR_VERSION ${OpenEXR_VERSION})
|
|
return()
|
|
endif()
|
|
|
|
SET(OPENEXR_LIBRARIES "")
|
|
SET(OPENEXR_LIBSEARCH_SUFFIXES "")
|
|
file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH)
|
|
|
|
if(WIN32)
|
|
SET(OPENEXR_ROOT "C:/Deploy" CACHE STRING "Path to the OpenEXR \"Deploy\" folder")
|
|
if(X86_64)
|
|
SET(OPENEXR_LIBSEARCH_SUFFIXES x64/Release x64 x64/Debug)
|
|
elseif(MSVC)
|
|
SET(OPENEXR_LIBSEARCH_SUFFIXES Win32/Release Win32 Win32/Debug)
|
|
endif()
|
|
elseif(UNIX)
|
|
SET(OPENEXR_LIBSEARCH_SUFFIXES ${CMAKE_LIBRARY_ARCHITECTURE})
|
|
endif()
|
|
|
|
SET(SEARCH_PATHS
|
|
"${OPENEXR_ROOT}"
|
|
/usr
|
|
/usr/local
|
|
/sw
|
|
/opt
|
|
"${ProgramFiles_ENV_PATH}/OpenEXR")
|
|
|
|
MACRO(FIND_OPENEXR_LIBRARY LIBRARY_NAME LIBRARY_SUFFIX)
|
|
string(TOUPPER "${LIBRARY_NAME}" LIBRARY_NAME_UPPER)
|
|
FIND_LIBRARY(OPENEXR_${LIBRARY_NAME_UPPER}_LIBRARY
|
|
NAMES ${LIBRARY_NAME}${LIBRARY_SUFFIX}
|
|
PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES}
|
|
NO_DEFAULT_PATH
|
|
PATHS "${SEARCH_PATH}/lib" "${SEARCH_PATH}/lib/static")
|
|
ENDMACRO()
|
|
|
|
MACRO(ocv_find_openexr LIBRARY_SUFFIX)
|
|
IF(NOT OPENEXR_FOUND)
|
|
FIND_OPENEXR_LIBRARY("Half" "${LIBRARY_SUFFIX}")
|
|
FIND_OPENEXR_LIBRARY("Iex" "${LIBRARY_SUFFIX}")
|
|
FIND_OPENEXR_LIBRARY("Imath" "${LIBRARY_SUFFIX}")
|
|
FIND_OPENEXR_LIBRARY("IlmImf" "${LIBRARY_SUFFIX}")
|
|
FIND_OPENEXR_LIBRARY("IlmThread" "${LIBRARY_SUFFIX}")
|
|
IF (OPENEXR_INCLUDE_PATH AND OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY AND OPENEXR_ILMTHREAD_LIBRARY)
|
|
SET(OPENEXR_FOUND TRUE)
|
|
ELSE()
|
|
UNSET(OPENEXR_IMATH_LIBRARY)
|
|
UNSET(OPENEXR_ILMIMF_LIBRARY)
|
|
UNSET(OPENEXR_IEX_LIBRARY)
|
|
UNSET(OPENEXR_ILMTHREAD_LIBRARY)
|
|
UNSET(OPENEXR_HALF_LIBRARY)
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
FOREACH(SEARCH_PATH ${SEARCH_PATHS})
|
|
FIND_PATH(OPENEXR_INCLUDE_PATH ImfRgbaFile.h
|
|
PATH_SUFFIXES OpenEXR
|
|
NO_DEFAULT_PATH
|
|
PATHS
|
|
"${SEARCH_PATH}/include")
|
|
|
|
IF (OPENEXR_INCLUDE_PATH)
|
|
SET(OPENEXR_VERSION_FILE "${OPENEXR_INCLUDE_PATH}/OpenEXRConfig.h")
|
|
IF (EXISTS ${OPENEXR_VERSION_FILE})
|
|
FILE (STRINGS ${OPENEXR_VERSION_FILE} contents REGEX "#define OPENEXR_VERSION_MAJOR ")
|
|
IF (${contents} MATCHES "#define OPENEXR_VERSION_MAJOR ([0-9]+)")
|
|
SET(OPENEXR_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
ENDIF ()
|
|
FILE (STRINGS ${OPENEXR_VERSION_FILE} contents REGEX "#define OPENEXR_VERSION_MINOR ")
|
|
IF (${contents} MATCHES "#define OPENEXR_VERSION_MINOR ([0-9]+)")
|
|
SET(OPENEXR_VERSION_MINOR "${CMAKE_MATCH_1}")
|
|
ENDIF ()
|
|
ENDIF ()
|
|
ENDIF ()
|
|
|
|
IF (OPENEXR_VERSION_MAJOR AND OPENEXR_VERSION_MINOR)
|
|
set(OPENEXR_VERSION "${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}")
|
|
ENDIF ()
|
|
|
|
ocv_find_openexr("-${OPENEXR_VERSION}")
|
|
ocv_find_openexr("-${OPENEXR_VERSION}_s")
|
|
ocv_find_openexr("-${OPENEXR_VERSION}_d")
|
|
ocv_find_openexr("-${OPENEXR_VERSION}_s_d")
|
|
ocv_find_openexr("")
|
|
ocv_find_openexr("_s")
|
|
ocv_find_openexr("_d")
|
|
ocv_find_openexr("_s_d")
|
|
|
|
IF (OPENEXR_FOUND)
|
|
BREAK()
|
|
ENDIF()
|
|
|
|
UNSET(OPENEXR_INCLUDE_PATH)
|
|
UNSET(OPENEXR_VERSION_FILE)
|
|
UNSET(OPENEXR_VERSION_MAJOR)
|
|
UNSET(OPENEXR_VERSION_MINOR)
|
|
UNSET(OPENEXR_VERSION)
|
|
ENDFOREACH()
|
|
|
|
IF (OPENEXR_FOUND)
|
|
SET(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATH} CACHE PATH "The include paths needed to use OpenEXR")
|
|
SET(OPENEXR_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} CACHE STRING "The libraries needed to use OpenEXR" FORCE)
|
|
ENDIF ()
|
|
|
|
IF(OPENEXR_FOUND)
|
|
IF(NOT OPENEXR_FIND_QUIETLY)
|
|
MESSAGE(STATUS "Found OpenEXR: ${OPENEXR_ILMIMF_LIBRARY}")
|
|
ENDIF()
|
|
if(PKG_CONFIG_FOUND AND NOT OPENEXR_VERSION)
|
|
get_filename_component(OPENEXR_LIB_PATH "${OPENEXR_ILMIMF_LIBRARY}" PATH)
|
|
if(EXISTS "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc")
|
|
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --modversion "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc"
|
|
RESULT_VARIABLE PKG_CONFIG_PROCESS
|
|
OUTPUT_VARIABLE OPENEXR_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
|
if(NOT PKG_CONFIG_PROCESS EQUAL 0)
|
|
SET(OPENEXR_VERSION "Unknown")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
if(NOT OPENEXR_VERSION)
|
|
SET(OPENEXR_VERSION "Unknown")
|
|
endif()
|
|
ELSE()
|
|
IF(OPENEXR_FIND_REQUIRED)
|
|
MESSAGE(FATAL_ERROR "Could not find OpenEXR library")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
MARK_AS_ADVANCED(
|
|
OPENEXR_INCLUDE_PATHS
|
|
OPENEXR_LIBRARIES
|
|
OPENEXR_ILMIMF_LIBRARY
|
|
OPENEXR_IMATH_LIBRARY
|
|
OPENEXR_IEX_LIBRARY
|
|
OPENEXR_HALF_LIBRARY
|
|
OPENEXR_ILMTHREAD_LIBRARY)
|