Changeset View
Changeset View
Standalone View
Standalone View
build_files/cmake/Modules/FindOpenEXR.cmake
| Show All 27 Lines | |||||
| # If OPENEXR_ROOT_DIR was defined in the environment, use it. | # If OPENEXR_ROOT_DIR was defined in the environment, use it. | ||||
| IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "") | IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "") | ||||
| SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR}) | SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR}) | ||||
| ENDIF() | ENDIF() | ||||
| # Old versions (before 2.0?) do not have any version string, just assuming this should be fine though. | # Old versions (before 2.0?) do not have any version string, just assuming this should be fine though. | ||||
| SET(_openexr_libs_ver_init "2.0") | SET(_openexr_libs_ver_init "2.0") | ||||
| SET(_openexr_FIND_COMPONENTS | |||||
| Half | |||||
| Iex | |||||
| IlmImf | |||||
| IlmThread | |||||
| Imath | |||||
| ) | |||||
| SET(_openexr_SEARCH_DIRS | SET(_openexr_SEARCH_DIRS | ||||
| ${OPENEXR_ROOT_DIR} | ${OPENEXR_ROOT_DIR} | ||||
| /opt/lib/openexr | /opt/lib/openexr | ||||
| ) | ) | ||||
| FIND_PATH(OPENEXR_INCLUDE_DIR | FIND_PATH(OPENEXR_INCLUDE_DIR | ||||
| NAMES | NAMES | ||||
| OpenEXR/ImfXdr.h | OpenEXR/ImfXdr.h | ||||
| Show All 36 Lines | IF(OPENEXR_INCLUDE_DIR) | ||||
| ENDIF() | ENDIF() | ||||
| ENDIF() | ENDIF() | ||||
| SET("OPENEXR_VERSION" ${_openexr_libs_ver_init} CACHE STRING "Version of OpenEXR lib") | SET("OPENEXR_VERSION" ${_openexr_libs_ver_init} CACHE STRING "Version of OpenEXR lib") | ||||
| UNSET(_openexr_libs_ver_init) | UNSET(_openexr_libs_ver_init) | ||||
| STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENEXR_VERSION}) | STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENEXR_VERSION}) | ||||
| # Different library names in 3.0, and Imath and Half moved out. | |||||
| IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0") | |||||
| SET(_openexr_FIND_COMPONENTS | |||||
| Iex | |||||
| IlmThread | |||||
| OpenEXR | |||||
| OpenEXRCore | |||||
| ) | |||||
| ELSE() | |||||
| SET(_openexr_FIND_COMPONENTS | |||||
| Half | |||||
| Iex | |||||
| IlmImf | |||||
| IlmThread | |||||
| Imath | |||||
| ) | |||||
| ENDIF() | |||||
| SET(_openexr_LIBRARIES) | SET(_openexr_LIBRARIES) | ||||
| FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) | FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) | ||||
| STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) | STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) | ||||
| FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY | FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY | ||||
| NAMES | NAMES | ||||
| ${COMPONENT}-${_openexr_libs_ver} ${COMPONENT} | ${COMPONENT}-${_openexr_libs_ver} ${COMPONENT} | ||||
| NAMES_PER_DIR | NAMES_PER_DIR | ||||
| HINTS | HINTS | ||||
| ${_openexr_SEARCH_DIRS} | ${_openexr_SEARCH_DIRS} | ||||
| PATH_SUFFIXES | PATH_SUFFIXES | ||||
| lib64 lib | lib64 lib | ||||
| ) | ) | ||||
| LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}") | LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}") | ||||
| ENDFOREACH() | ENDFOREACH() | ||||
| UNSET(_openexr_libs_ver) | UNSET(_openexr_libs_ver) | ||||
| IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0") | |||||
| # For OpenEXR 3.x, we also need to find the now separate Imath library. | |||||
| # For simplicity we add it to the OpenEXR includes and libraries, as we | |||||
| # have no direct dependency on Imath and it's simpler to support both | |||||
| # 2.x and 3.x this way. | |||||
| # Find include directory | |||||
| FIND_PATH(IMATH_INCLUDE_DIR | |||||
| NAMES | |||||
| Imath/ImathMath.h | |||||
| HINTS | |||||
| ${_openexr_SEARCH_DIRS} | |||||
| PATH_SUFFIXES | |||||
| include | |||||
| ) | |||||
| # Find version | |||||
| FIND_FILE(_imath_config | |||||
| NAMES | |||||
| ImathConfig.h | |||||
| PATHS | |||||
| ${IMATH_INCLUDE_DIR}/Imath | |||||
| NO_DEFAULT_PATH | |||||
| ) | |||||
| # Find line with version, extract string, and format for library suffix. | |||||
| FILE(STRINGS "${_imath_config}" _imath_build_specification | |||||
| REGEX "^[ \t]*#define[ \t]+IMATH_VERSION_STRING[ \t]+\"[.0-9]+\".*$") | |||||
| STRING(REGEX REPLACE ".*#define[ \t]+IMATH_VERSION_STRING[ \t]+\"([.0-9]+)\".*" | |||||
| "\\1" _imath_libs_ver ${_imath_build_specification}) | |||||
| STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _imath_libs_ver ${_imath_libs_ver}) | |||||
| # Find library, with or without version number. | |||||
| FIND_LIBRARY(IMATH_LIBRARY | |||||
| NAMES | |||||
| Imath-${_imath_libs_ver} Imath | |||||
| NAMES_PER_DIR | |||||
| HINTS | |||||
| ${_openexr_SEARCH_DIRS} | |||||
| PATH_SUFFIXES | |||||
| lib64 lib | |||||
| ) | |||||
| LIST(APPEND _openexr_LIBRARIES "${IMATH_LIBRARY}") | |||||
| # 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(_imath_config CACHE) | |||||
| UNSET(_imath_libs_ver) | |||||
| UNSET(_imath_build_specification) | |||||
| ELSE() | |||||
| set(IMATH_INCLUDE_DIR ${OPENEXR_INCLUDE_DIR}) | |||||
| ENDIF() | |||||
| # handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if | # handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if | ||||
| # all listed variables are TRUE | # all listed variables are TRUE | ||||
| INCLUDE(FindPackageHandleStandardArgs) | INCLUDE(FindPackageHandleStandardArgs) | ||||
| FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR DEFAULT_MSG | FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR DEFAULT_MSG | ||||
| _openexr_LIBRARIES OPENEXR_INCLUDE_DIR) | _openexr_LIBRARIES OPENEXR_INCLUDE_DIR) | ||||
| IF(OPENEXR_FOUND) | IF(OPENEXR_FOUND) | ||||
| SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES}) | SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES}) | ||||
| # Both include paths are needed because of dummy OSL headers mixing #include <OpenEXR/foo.h> and #include <foo.h> :( | # Both include paths are needed because of dummy OSL headers mixing | ||||
| SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR_INCLUDE_DIR}/OpenEXR) | # #include <OpenEXR/foo.h> and #include <foo.h>, as well as Alembic | ||||
| # include <half.h> directly. | |||||
| SET(OPENEXR_INCLUDE_DIRS | |||||
| ${OPENEXR_INCLUDE_DIR} | |||||
| ${OPENEXR_INCLUDE_DIR}/OpenEXR | |||||
| ${IMATH_INCLUDE_DIR} | |||||
| ${IMATH_INCLUDE_DIR}/Imath) | |||||
| ENDIF() | ENDIF() | ||||
| MARK_AS_ADVANCED( | MARK_AS_ADVANCED( | ||||
| OPENEXR_INCLUDE_DIR | OPENEXR_INCLUDE_DIR | ||||
| OPENEXR_VERSION | OPENEXR_VERSION | ||||
| IMATH_INCLUDE_DIR | |||||
| IMATH_LIBRARY | |||||
| ) | ) | ||||
| FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) | FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) | ||||
| STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) | STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) | ||||
| MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY) | MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY) | ||||
| ENDFOREACH() | ENDFOREACH() | ||||
| UNSET(COMPONENT) | UNSET(COMPONENT) | ||||
| UNSET(UPPERCOMPONENT) | UNSET(UPPERCOMPONENT) | ||||
| UNSET(_openexr_FIND_COMPONENTS) | UNSET(_openexr_FIND_COMPONENTS) | ||||
| UNSET(_openexr_LIBRARIES) | UNSET(_openexr_LIBRARIES) | ||||
| UNSET(_openexr_SEARCH_DIRS) | UNSET(_openexr_SEARCH_DIRS) | ||||