Merge pull request #16122 from alalek:cmake_update_cpu_compiler_detection
[platform/upstream/opencv.git] / cmake / OpenCVFindOpenEXR.cmake
1 # The script is taken from http://code.google.com/p/nvidia-texture-tools/
2
3 #
4 # Try to find OpenEXR's libraries, and include path.
5 # Once done this will define:
6 #
7 # OPENEXR_FOUND = OpenEXR found.
8 # OPENEXR_INCLUDE_PATHS = OpenEXR include directories.
9 # OPENEXR_LIBRARIES = libraries that are needed to use OpenEXR.
10 #
11
12 SET(OPENEXR_LIBRARIES "")
13 SET(OPENEXR_LIBSEARCH_SUFFIXES "")
14 file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH)
15
16 if(WIN32)
17     SET(OPENEXR_ROOT "C:/Deploy" CACHE STRING "Path to the OpenEXR \"Deploy\" folder")
18     if(X86_64)
19         SET(OPENEXR_LIBSEARCH_SUFFIXES x64/Release x64 x64/Debug)
20     elseif(MSVC)
21         SET(OPENEXR_LIBSEARCH_SUFFIXES Win32/Release Win32 Win32/Debug)
22     endif()
23 endif()
24
25 SET(SEARCH_PATHS
26     "${OPENEXR_ROOT}"
27     /usr
28     /usr/local
29     /sw
30     /opt
31     "${ProgramFiles_ENV_PATH}/OpenEXR")
32
33 MACRO(FIND_OPENEXR_LIBRARY LIBRARY_NAME LIBRARY_SUFFIX)
34     string(TOUPPER "${LIBRARY_NAME}" LIBRARY_NAME_UPPER)
35     FIND_LIBRARY(OPENEXR_${LIBRARY_NAME_UPPER}_LIBRARY
36         NAMES ${LIBRARY_NAME}${LIBRARY_SUFFIX}
37         PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES}
38         NO_DEFAULT_PATH
39         PATHS "${SEARCH_PATH}/lib" "${SEARCH_PATH}/lib/static")
40 ENDMACRO()
41
42 FOREACH(SEARCH_PATH ${SEARCH_PATHS})
43     FIND_PATH(OPENEXR_INCLUDE_PATH ImfRgbaFile.h
44         PATH_SUFFIXES OpenEXR
45         NO_DEFAULT_PATH
46         PATHS
47         "${SEARCH_PATH}/include")
48
49     IF (OPENEXR_INCLUDE_PATH)
50         SET(OPENEXR_VERSION_FILE "${OPENEXR_INCLUDE_PATH}/OpenEXRConfig.h")
51         IF (EXISTS ${OPENEXR_VERSION_FILE})
52             FILE (STRINGS ${OPENEXR_VERSION_FILE} contents REGEX "#define OPENEXR_VERSION_MAJOR ")
53             IF (${contents} MATCHES "#define OPENEXR_VERSION_MAJOR ([0-9]+)")
54                 SET(OPENEXR_VERSION_MAJOR "${CMAKE_MATCH_1}")
55             ENDIF ()
56             FILE (STRINGS ${OPENEXR_VERSION_FILE} contents REGEX "#define OPENEXR_VERSION_MINOR ")
57             IF (${contents} MATCHES "#define OPENEXR_VERSION_MINOR ([0-9]+)")
58                 SET(OPENEXR_VERSION_MINOR "${CMAKE_MATCH_1}")
59             ENDIF ()
60         ENDIF ()
61     ENDIF ()
62
63     IF (OPENEXR_VERSION_MAJOR AND OPENEXR_VERSION_MINOR)
64         set(OPENEXR_VERSION "${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}")
65     ENDIF ()
66
67     SET(LIBRARY_SUFFIXES
68         "-${OPENEXR_VERSION}"
69         "-${OPENEXR_VERSION}_s"
70         "-${OPENEXR_VERSION}_d"
71         "-${OPEXEXR_VERSION}_s_d"
72         ""
73         "_s"
74         "_d"
75         "_s_d")
76
77     FOREACH(LIBRARY_SUFFIX ${LIBRARY_SUFFIXES})
78         FIND_OPENEXR_LIBRARY("Half" ${LIBRARY_SUFFIX})
79         FIND_OPENEXR_LIBRARY("Iex" ${LIBRARY_SUFFIX})
80         FIND_OPENEXR_LIBRARY("Imath" ${LIBRARY_SUFFIX})
81         FIND_OPENEXR_LIBRARY("IlmImf" ${LIBRARY_SUFFIX})
82         FIND_OPENEXR_LIBRARY("IlmThread" ${LIBRARY_SUFFIX})
83         IF (OPENEXR_INCLUDE_PATH AND OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY)
84             SET(OPENEXR_FOUND TRUE)
85             BREAK()
86         ENDIF()
87         UNSET(OPENEXR_IMATH_LIBRARY)
88         UNSET(OPENEXR_ILMIMF_LIBRARY)
89         UNSET(OPENEXR_IEX_LIBRARY)
90         UNSET(OPENEXR_ILMTHREAD_LIBRARY)
91         UNSET(OPENEXR_HALF_LIBRARY)
92     ENDFOREACH()
93
94     IF (OPENEXR_FOUND)
95         BREAK()
96     ENDIF()
97
98     UNSET(OPENEXR_INCLUDE_PATH)
99     UNSET(OPENEXR_VERSION_FILE)
100     UNSET(OPENEXR_VERSION_MAJOR)
101     UNSET(OPENEXR_VERSION_MINOR)
102     UNSET(OPENEXR_VERSION)
103 ENDFOREACH()
104
105 IF (OPENEXR_FOUND)
106     SET(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATH} CACHE PATH "The include paths needed to use OpenEXR")
107     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)
108 ENDIF ()
109
110 IF(OPENEXR_FOUND)
111   IF(NOT OPENEXR_FIND_QUIETLY)
112     MESSAGE(STATUS "Found OpenEXR: ${OPENEXR_ILMIMF_LIBRARY}")
113   ENDIF()
114   if(PKG_CONFIG_FOUND AND NOT OPENEXR_VERSION)
115     get_filename_component(OPENEXR_LIB_PATH "${OPENEXR_ILMIMF_LIBRARY}" PATH)
116     if(EXISTS "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc")
117       execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --modversion "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc"
118                       RESULT_VARIABLE PKG_CONFIG_PROCESS
119                       OUTPUT_VARIABLE OPENEXR_VERSION
120                       OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
121       if(NOT PKG_CONFIG_PROCESS EQUAL 0)
122         SET(OPENEXR_VERSION "Unknown")
123       endif()
124     endif()
125   endif()
126   if(NOT OPENEXR_VERSION)
127     SET(OPENEXR_VERSION "Unknown")
128   endif()
129 ELSE()
130   IF(OPENEXR_FIND_REQUIRED)
131     MESSAGE(FATAL_ERROR "Could not find OpenEXR library")
132   ENDIF()
133 ENDIF()
134
135 MARK_AS_ADVANCED(
136     OPENEXR_INCLUDE_PATHS
137     OPENEXR_LIBRARIES
138     OPENEXR_ILMIMF_LIBRARY
139     OPENEXR_IMATH_LIBRARY
140     OPENEXR_IEX_LIBRARY
141     OPENEXR_HALF_LIBRARY
142     OPENEXR_ILMTHREAD_LIBRARY)