Hello Johannes,

Johannes Zarl wrote:
Trying to enable support for OpenEXR in OpenSG2, I stumbled over the following 
issues:

1) Setting OPENEXR_ROOT_DIR is not enough to find an OpenEXR installation in a 
non-standard location:
Installing OpenEXR with a certain prefix creates the following directory layout:
OPENEXR_ROOT_DIR/include
OPENEXR_ROOT_DIR/include/OpenEXR
OPENEXR_ROOT_DIR/lib
...

The FindOpenEXR.cmake script, however, searches OPENEXR_ROOT_DIR/OpenEXR and 
OPENEXR_ROOT_DIR/lib/__OPENEXR_LIBDIR_SUFFIX.
The patch includes the standard directories as well.

2) The FindOpenEXR.cmake script is distracted by globally installed OpenEXR 
libraries:
In SLES 10, the OpenEXR package does not contain libIlmThread.so (which it 
seems is needed by OpenSG2 OpenEXR support).
We cannot remove the OpenEXR-package due to package dependencies.
Setting OPENEXR_ROOT_DIR does not help, because cmake always prefers system-libraries 
over the "PATHS" argument of FIND_LIBRARY.
I think is a sound assumption that when OPENEXR_ROOT_DIR has been explicitly 
set by the user, he or she wants FindOpenEXR.cmake to ignore anything else.

The patch sets the "NO_DEFAULT_PATH" argument to FIND_LIBRARY, when 
OPENEXR_ROOT_DIR has been set.

I've essentially followed this approach, but looking at the cmake documentation ISTM that an alternative would be to use the HINTS argument to FIND_PATH/FIND_LIBRARY for the user specified directories and reserve PATHS for the hard coded guesses.

Do you think the following patch can be incorporated in OpenSG2?

there were some other small inconsistencies in the FindOpenEXR.cmake file, so I ended up committing the attached.
Many thanks for sending the patch.

        Cheers,
                Carsten
diff --git a/CMake/FindOpenEXR.cmake b/CMake/FindOpenEXR.cmake
index 301d9a6..04a7128 100644
--- a/CMake/FindOpenEXR.cmake
+++ b/CMake/FindOpenEXR.cmake
@@ -1,5 +1,5 @@
-# - Find collada dom libraries
-# Find the collada dom libraries and headers
+# - Find OpenEXR image format libraries
+# Find the OpenEXR high dynamic range (HDR) image format libraries and headers
 #
 # This module specifies the following variables:
 #  OPENEXR_INCLUDE_DIR
@@ -11,9 +11,13 @@
 #  OPENEXR_LIBRARY_RELEASE      release library
 #
 #  You can control where this module attempts to locate libraries and headers:
-#  OPENEXR_ROOT_DIR
-#  OPENEXR_INCLUDE_DIR
-#  OPENEXR_LIBRARY_DIR
+#
+#  OPENEXR_ROOT_DIR          look for headers in ${OPENEXR_ROOT_DIR}/include/OpenEXR
+#                            look for libs in    ${OPENEXR_ROOT_DIR}/lib
+#  OPENEXR_INCLUDE_DIR       look for headers in ${OPENEXR_INCLUDE_DIR}/OpenEXR
+#  OPENEXR_LIBRARY_DIR       look for libs in    ${OPENEXR_LIBRARY_DIR}
+#
+#  Note: Setting these variables will skip searching the system default paths.
 
 
 # default include search paths
@@ -21,17 +25,13 @@ SET(__OPENEXR_INCLUDE_SEARCH_DIRS
     ~/Library/Frameworks
     /Library/Frameworks
     /usr/local/include
-    /usr/local/include/colladadom
     /usr/include
-    /usr/include/colladadom
     /sw/include
     /opt/local/include
-    /opt/local/include/colladadom
-    /opt/include
-    /opt/include/colladadom)
+    /opt/include)
 
 # default library search paths
-SET(__NVIDIAPARFSDK_LIBRARY_SEARCH_DIRS
+SET(__OPENEXR_LIBRARY_SEARCH_DIRS
     ~/Library/Frameworks
     /Library/Frameworks
     /usr/local/lib64
@@ -48,7 +48,7 @@ SET(__NVIDIAPARFSDK_LIBRARY_SEARCH_DIRS
 IF(OPENEXR_ROOT_DIR)
     FILE(TO_CMAKE_PATH ${OPENEXR_ROOT_DIR} OPENEXR_ROOT_DIR)
 
-    SET(__OPENEXR_INCLUDE_SEARCH_DIRS "${OPENEXR_ROOT_DIR}/OpenEXR"
+    SET(__OPENEXR_INCLUDE_SEARCH_DIRS "${OPENEXR_ROOT_DIR}/include"
                                       "${__OPENEXR_INCLUDE_SEARCH_DIRS}")
 
     SET(__OPENEXR_LIBDIR_SUFFIX_IN "${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}")
@@ -56,7 +56,12 @@ IF(OPENEXR_ROOT_DIR)
     STRING(TOLOWER ${__OPENEXR_LIBDIR_SUFFIX_IN} __OPENEXR_LIBDIR_SUFFIX)
 
     SET(__OPENEXR_LIBRARY_SEARCH_DIRS "${OPENEXR_ROOT_DIR}/lib/${__OPENEXR_LIBDIR_SUFFIX}"
-                                            "${__OPENEXR_LIBRARY_SEARCH_DIRS}")
+                                      "${OPENEXR_ROOT_DIR}/lib"
+                                      "${__OPENEXR_LIBRARY_SEARCH_DIRS}")
+
+    # skip default paths since the user specified explicit ones
+    SET(__OPENEXR_NO_DEFAULT_INC_PATH NO_DEFAULT_PATH)
+    SET(__OPENEXR_NO_DEFAULT_LIB_PATH NO_DEFAULT_PATH)
 ENDIF(OPENEXR_ROOT_DIR)
 
 
@@ -65,6 +70,7 @@ IF(OPENEXR_INCLUDE_DIR)
     FILE(TO_CMAKE_PATH ${OPENEXR_INCLUDE_DIR} OPENEXR_INCLUDE_DIR)
     SET(__OPENEXR_INCLUDE_SEARCH_DIRS "${OPENEXR_INCLUDE_DIR}"
                                       "${__OPENEXR_INCLUDE_SEARCH_DIRS}")
+    SET(__OPENEXR_NO_DEFAULT_INC_PATH NO_DEFAULT_PATH)
 ENDIF(OPENEXR_INCLUDE_DIR)
 
 # handle OPENEXR_LIBRARY_DIR input variable
@@ -72,46 +78,47 @@ IF(OPENEXR_LIBRARY_DIR)
     FILE(TO_CMAKE_PATH ${OPENEXR_LIBRARY_DIR} OPENEXR_LIBRARY_DIR)
     SET(__OPENEXR_LIBRARY_SEARCH_DIRS "${OPENEXR_LIBRARY_DIR}"
                                       "${__OPENEXR_LIBRARY_SEARCH_DIRS}")
+    SET(__OPENEXR_NO_DEFAULT_LIB_PATH NO_DEFAULT_PATH)
 ENDIF(OPENEXR_LIBRARY_DIR)
 
 
 # locate headers
 FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h
-    PATHS ${__OPENEXR_INCLUDE_SEARCH_DIRS})
+    PATHS ${__OPENEXR_INCLUDE_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_INC_PATH})
 
 # locate libraries
 FIND_LIBRARY(OPENEXR_LIBRARY_IMF_RELEASE
     NAMES IlmImf
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_HALF_RELEASE
     NAMES Half ilmhalf
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_IEX_RELEASE
     NAMES Iex ilmiex
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_ILMTHREAD_RELEASE
     NAMES IlmThread
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 
 FIND_LIBRARY(OPENEXR_LIBRARY_IMF_DEBUG
     NAMES IlmImf-d IlmImfd
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_HALF_DEBUG
     NAMES Half-d Halfd ilmhalf-d ilmhalfd
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_IEX_DEBUG
     NAMES Iex-d Iexd ilmiex-d ilmiexd
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 FIND_LIBRARY(OPENEXR_LIBRARY_ILMTHREAD_DEBUG
     NAMES IlmThread-d IlmThreadd
-    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS})
+    PATHS ${__OPENEXR_LIBRARY_SEARCH_DIRS} ${__OPENEXR_NO_DEFAULT_LIB_PATH})
 
 
 
------------------------------------------------------------------------------

_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to