summarylogtreecommitdiffstats
path: root/openexr3.patch
blob: 01db8801bf10450033c6fa2aaf8f3a8cd47b6c3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
--- AliceVision-2.4.0/src/cmake/openexr/FindOpenEXR.cmake	2021-05-30 08:32:20.810681100 +0200
+++ AliceVision-2.4.0.new/src/cmake/openexr/FindOpenEXR.cmake	2021-05-30 08:30:50.611355400 +0200
@@ -1,178 +1,138 @@
-# Module to find OpenEXR.
+# - Find OpenEXR library
+# Find the native OpenEXR includes and library
+# This module defines
+#  OPENEXR_INCLUDE_DIRS, where to find ImfXdr.h, etc. Set when
+#                        OPENEXR_INCLUDE_DIR is found.
+#  OPENEXR_LIBRARIES, libraries to link against to use OpenEXR.
+#  OPENEXR_ROOT_DIR, The base directory to search for OpenEXR.
+#                    This can also be an environment variable.
+#  OPENEXR_FOUND, If false, do not try to use OpenEXR.
 #
-# This module will set
-#   OPENEXR_FOUND          true, if found
-#   OPENEXR_INCLUDE_DIR    directory where headers are found
-#   OPENEXR_LIBRARIES      libraries for OpenEXR + IlmBase
-#   ILMBASE_LIBRARIES      libraries just IlmBase
-#   OPENEXR_VERSION        OpenEXR version (accurate for >= 2.0.0,
-#                              otherwise will just guess 1.6.1)
+# For individual library access these advanced settings are available
+#  OPENEXR_HALF_LIBRARY, Path to Half library
+#  OPENEXR_IEX_LIBRARY, Path to Half library
+#  OPENEXR_ILMIMF_LIBRARY, Path to Ilmimf library
+#  OPENEXR_ILMTHREAD_LIBRARY, Path to IlmThread library
+#  OPENEXR_IMATH_LIBRARY, Path to Imath library
 #
-# Special inputs:
-#   OPENEXR_CUSTOM_INCLUDE_DIR - custom location of headers
-#   OPENEXR_CUSTOM_LIB_DIR - custom location of libraries
-#   OPENEXR_CUSTOM_LIB_PREFIX - special snowflake library prefix
-#   OPENEXR_CUSTOM_LIB_SUFFIX - special snowflake library suffix
+# also defined, but not for general use are
+#  OPENEXR_LIBRARY, where to find the OpenEXR library.
+
+#=============================================================================
+# Copyright 2011 Blender Foundation.
 #
+# Distributed under the OSI-approved BSD 3-Clause License,
+# see accompanying file BSD-3-Clause-license.txt for details.
+#=============================================================================
+
+# If OPENEXR_ROOT_DIR was defined in the environment, use it.
+IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "")
+  SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR})
+ENDIF()
+
+# 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_FIND_COMPONENTS
+  Iex
+  Imath
+  OpenEXR
+  IlmThread
+)
 
-# Other standard issue macros
-include (FindPackageHandleStandardArgs)
-include (SelectLibraryConfigurations)
-
-find_package (ZLIB REQUIRED)
-
-# Link with pthreads if required
-find_package (Threads)
-if (CMAKE_USE_PTHREADS_INIT)
-    set (ILMBASE_PTHREADS ${CMAKE_THREAD_LIBS_INIT})
-endif ()
-
-# List of likely places to find the headers -- note priority override of
-# OPENEXR_CUSTOM_INCLUDE_DIR and ${OPENEXR_HOME}/include.
-# ILMBASE is needed in case ilmbase an openexr are installed in separate
-# directories, like NixOS does
-set (GENERIC_INCLUDE_PATHS
-    ${OPENEXR_CUSTOM_INCLUDE_DIR}
-    ${OPENEXR_HOME}/include
-    ${ILMBASE_HOME}/include
-#    /usr/local/include
-#    /usr/include
-#    /usr/include/${CMAKE_LIBRARY_ARCHITECTURE}
-#    /sw/include
-#    /opt/local/include
+SET(_openexr_SEARCH_DIRS
+  ${OPENEXR_ROOT_DIR}
+  /opt/lib/openexr
 )
 
-# Find the include file locations. We call find_path twice -- first using
-# only the custom paths, then if that fails, try the default paths only.
-# This seems to be the most robust way I can find to not get confused when
-# both system and custom libraries are present.
-find_path (ILMBASE_INCLUDE_PATH OpenEXR/IlmBaseConfig.h
-           PATHS ${GENERIC_INCLUDE_PATHS})
-#find_path (ILMBASE_INCLUDE_PATH OpenEXR/IlmBaseConfig.h)
-find_path (OPENEXR_INCLUDE_PATH OpenEXR/OpenEXRConfig.h
-           PATHS ${GENERIC_INCLUDE_PATHS})
-#find_path (OPENEXR_INCLUDE_PATH OpenEXR/OpenEXRConfig.h)
-
-# message(WARNING "GENERIC_INCLUDE_PATHS: ${GENERIC_INCLUDE_PATHS}")
-# message(WARNING "Test if file exist: ${OPENEXR_INCLUDE_PATH}/OpenEXR/ImfMultiPartInputFile.h")
-
-
-# Try to figure out version number
-if (EXISTS "${OPENEXR_INCLUDE_PATH}/OpenEXR/ImfMultiPartInputFile.h")
-    # message(WARNING "Yes, file exist")
-
-    # Must be at least 2.0
-    file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_STRING .*$")
-    string (REGEX MATCHALL "[0-9]+[.0-9]+" OPENEXR_VERSION ${TMP})
-    file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_MAJOR .*$")
-    string (REGEX MATCHALL "[0-9]+" OPENEXR_VERSION_MAJOR ${TMP})
-    file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_MINOR .*$")
-    string (REGEX MATCHALL "[0-9]+" OPENEXR_VERSION_MINOR ${TMP})
-else ()
-    message(STATUS  "File ${OPENEXR_INCLUDE_PATH}/OpenEXR/ImfMultiPartInputFile.h does not exist. Default to 1.6.1")
-    # Assume an old one, predates 2.x that had versions
-    set (OPENEXR_VERSION 1.6.1)
-    set (OPENEXR_MAJOR 1)
-    set (OPENEXR_MINOR 6)
-endif ()
-
-
-# List of likely places to find the libraries -- note priority override of
-# OPENEXR_CUSTOM_LIB_DIR and ${OPENEXR_HOME}/lib.
-
-# If there's no OPENEXR_HOME or ILMBASE_HOME, then the path will point to
-# "/lib", which may not always be wanted/expected.
-if (OPENEXR_CUSTOM_LIB_DIR)
-  set (GENERIC_LIBRARY_PATHS ${GENERIC_LIBRARY_PATHS} ${OPENEXR_CUSTOM_LIB_DIR})
-endif()
-
-if (OPENEXR_HOME)
-  set (GENERIC_LIBRARY_PATHS ${GENERIC_LIBRARY_PATHS} ${OPENEXR_HOME})
-endif()
-
-if (ILMBASE_HOME)
-  set (GENERIC_LIBRARY_PATHS ${GENERIC_LIBRARY_PATHS} ${ILMBASE_HOME})
-endif()
-
-set (GENERIC_LIBRARY_PATHS
-    ${GENERIC_LIBRARY_PATHS}
-    ${OPENEXR_INCLUDE_PATH}/../lib
-    ${ILMBASE_INCLUDE_PATH}/../lib
-    /usr/local/lib
-    /usr/local/lib/${CMAKE_LIBRARY_ARCHITECTURE}
-    /usr/lib
-    /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
-    /sw/lib
-    /opt/local/lib
-    $ENV{PROGRAM_FILES}/OpenEXR/lib/static )
-
-# Handle request for static libs by altering CMAKE_FIND_LIBRARY_SUFFIXES.
-# We will restore it at the end of this file.
-set (_openexr_orig_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES})
-if (OpenEXR_USE_STATIC_LIBS)
-    if (WIN32)
-        set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-    else ()
-        set (CMAKE_FIND_LIBRARY_SUFFIXES .a)
-    endif ()
-endif ()
-
-# Look for the libraries themselves, for all the components. Like with the
-# headers, we do two finds -- first for custom locations, then for default.
-# This is complicated because the OpenEXR libraries may or may not be
-# built with version numbers embedded.
-set (_openexr_components IlmThread IlmImf Imath Iex Half)
-foreach (COMPONENT ${_openexr_components})
-    string (TOUPPER ${COMPONENT} UPPERCOMPONENT)
-    # First try with the version embedded
-    set (FULL_COMPONENT_NAME ${OPENEXR_CUSTOM_LIB_PREFIX}${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}${OPENEXR_CUSTOM_LIB_SUFFIX})
-    find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY ${FULL_COMPONENT_NAME}
-                  PATHS ${GENERIC_LIBRARY_PATHS} NO_DEFAULT_PATH)
-    # Again, with no directory restrictions
-    find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY ${FULL_COMPONENT_NAME})
-    # Try again without the version
-    set (FULL_COMPONENT_NAME ${OPENEXR_CUSTOM_LIB_PREFIX}${COMPONENT}${OPENEXR_CUSTOM_LIB_SUFFIX})
-    find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY ${FULL_COMPONENT_NAME}
-                  PATHS ${GENERIC_LIBRARY_PATHS} NO_DEFAULT_PATH)
-    # One more time, with no restrictions
-    find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY ${FULL_COMPONENT_NAME})
-endforeach ()
-#Half usually has no suffix
-find_library (OPENEXR_HALF_LIBRARY ${OPENEXR_CUSTOM_LIB_PREFIX}Half
-              PATHS ${GENERIC_LIBRARY_PATHS} NO_DEFAULT_PATH)
-find_library (OPENEXR_HALF_LIBRARY ${OPENEXR_CUSTOM_LIB_PREFIX}Half)
-
-# Set the FOUND, INCLUDE_DIR, and LIBRARIES variables.
-if (ILMBASE_INCLUDE_PATH AND OPENEXR_INCLUDE_PATH AND
-      OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND
-      OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY)
-    set (OPENEXR_FOUND TRUE)
-    set (ILMBASE_FOUND TRUE)
-    set (ILMBASE_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH};${ILMBASE_INCLUDE_PATH}/OpenEXR CACHE STRING "The include paths needed to use IlmBase")
-    set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_PATH} CACHE STRING "The include paths needed to use OpenEXR")
-    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")
-endif ()
-
-find_package_handle_standard_args (OpenEXR
-    REQUIRED_VARS ILMBASE_INCLUDE_PATH OPENEXR_INCLUDE_PATH
-                  OPENEXR_IMATH_LIBRARY OPENEXR_ILMIMF_LIBRARY
-                  OPENEXR_IEX_LIBRARY OPENEXR_HALF_LIBRARY
-    VERSION_VAR   OPENEXR_VERSION
+FIND_PATH(OPENEXR_INCLUDE_DIR
+  NAMES
+    OpenEXR/ImfXdr.h
+  HINTS
+    ${_openexr_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+# If the headers were found, get the version from config file, if not already set.
+IF(OPENEXR_INCLUDE_DIR)
+  IF(NOT OPENEXR_VERSION)
+
+    FIND_FILE(_openexr_CONFIG
+      NAMES
+        OpenEXRConfig.h
+      PATHS
+        "${OPENEXR_INCLUDE_DIR}"
+        "${OPENEXR_INCLUDE_DIR}/OpenEXR"
+      NO_DEFAULT_PATH
     )
 
-message(WARNING "ILMBASE_INCLUDE_DIR: ${ILMBASE_INCLUDE_DIR}")
+    IF(_openexr_CONFIG)
+      FILE(STRINGS "${_openexr_CONFIG}" OPENEXR_BUILD_SPECIFICATION
+           REGEX "^[ \t]*#define[ \t]+OPENEXR_VERSION_STRING[ \t]+\"[.0-9]+\".*$")
+    ELSE()
+      MESSAGE(WARNING "Could not find \"OpenEXRConfig.h\" in \"${OPENEXR_INCLUDE_DIR}\"")
+    ENDIF()
+
+    IF(OPENEXR_BUILD_SPECIFICATION)
+      MESSAGE(STATUS "${OPENEXR_BUILD_SPECIFICATION}")
+      STRING(REGEX REPLACE ".*#define[ \t]+OPENEXR_VERSION_STRING[ \t]+\"([.0-9]+)\".*"
+             "\\1" _openexr_libs_ver_init ${OPENEXR_BUILD_SPECIFICATION})
+    ELSE()
+      MESSAGE(WARNING "Could not determine ILMBase library version, assuming ${_openexr_libs_ver_init}.")
+    ENDIF()
+
+    UNSET(_openexr_CONFIG CACHE)
+
+  ENDIF()
+ENDIF()
+
+SET("OPENEXR_VERSION" ${_openexr_libs_ver_init} CACHE STRING "Version of OpenEXR lib")
+UNSET(_openexr_libs_ver_init)
+
+STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENEXR_VERSION})
+
+SET(_openexr_LIBRARIES)
+FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+  FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY
+    NAMES
+      ${COMPONENT}-${_openexr_libs_ver} ${COMPONENT}
+    NAMES_PER_DIR
+    HINTS
+      ${_openexr_SEARCH_DIRS}
+    PATH_SUFFIXES
+      lib64 lib
+    )
+  LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}")
+ENDFOREACH()
 
-MARK_AS_ADVANCED(
-    ILMBASE_INCLUDE_DIR
-    OPENEXR_INCLUDE_DIR
-    ILMBASE_LIBRARIES
-    OPENEXR_LIBRARIES
-    OPENEXR_ILMIMF_LIBRARY
-    OPENEXR_IMATH_LIBRARY
-    OPENEXR_IEX_LIBRARY
-    OPENEXR_HALF_LIBRARY
-    OPENEXR_VERSION)
+UNSET(_openexr_libs_ver)
+
+# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR  DEFAULT_MSG
+    _openexr_LIBRARIES OPENEXR_INCLUDE_DIR)
+
+IF(OPENEXR_FOUND)
+  SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES})
+  # Both include paths are needed because of dummy OSL headers mixing #include <OpenEXR/foo.h> and #include <foo.h> :(
+  SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR_INCLUDE_DIR}/OpenEXR ${OPENEXR_INCLUDE_DIR}/Imath)
+ENDIF()
 
-# Restore the original CMAKE_FIND_LIBRARY_SUFFIXES
-set (CMAKE_FIND_LIBRARY_SUFFIXES ${_openexr_orig_suffixes})
+MARK_AS_ADVANCED(
+  OPENEXR_INCLUDE_DIR
+  OPENEXR_VERSION
+)
+FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+  MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY)
+ENDFOREACH()
+
+UNSET(COMPONENT)
+UNSET(UPPERCOMPONENT)
+UNSET(_openexr_FIND_COMPONENTS)
+UNSET(_openexr_LIBRARIES)
+UNSET(_openexr_SEARCH_DIRS)