diff --git a/src/cmake/Config.cmake.in b/src/cmake/Config.cmake.in index f4247dcc9c..8f4aef30d7 100644 --- a/src/cmake/Config.cmake.in +++ b/src/cmake/Config.cmake.in @@ -3,16 +3,18 @@ include(CMakeFindDependencyMacro) # add here all the find_dependency() whenever switching to config based dependencies -if (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 3.0) - find_dependency(Imath @Imath_VERSION@ - HINTS @Imath_DIR@) -elseif (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 2.4 AND @FOUND_OPENEXR_WITH_CONFIG@) - find_dependency(IlmBase @OpenEXR_VERSION@ - HINTS @IlmBase_DIR@ @OpenEXR_DIR@) - find_dependency(OpenEXR @OpenEXR_VERSION@ - HINTS @OpenEXR_DIR@) - find_dependency(ZLIB @ZLIB_VERSION@) # Because OpenEXR doesn't do it - find_dependency(Threads) # Because OpenEXR doesn't do it +if (NOT OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH) + if (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 3.0) + find_dependency(Imath @Imath_VERSION@ + HINTS @Imath_DIR@) + elseif (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 2.4 AND @FOUND_OPENEXR_WITH_CONFIG@) + find_dependency(IlmBase @OpenEXR_VERSION@ + HINTS @IlmBase_DIR@ @OpenEXR_DIR@) + find_dependency(OpenEXR @OpenEXR_VERSION@ + HINTS @OpenEXR_DIR@) + find_dependency(ZLIB @ZLIB_VERSION@) # Because OpenEXR doesn't do it + find_dependency(Threads) # Because OpenEXR doesn't do it + endif () endif () # Compute the installation prefix relative to this file diff --git a/src/cmake/externalpackages.cmake b/src/cmake/externalpackages.cmake index 38fd41bbe0..ab890e4c63 100644 --- a/src/cmake/externalpackages.cmake +++ b/src/cmake/externalpackages.cmake @@ -29,6 +29,8 @@ include (ExternalProject) option (BUILD_MISSING_DEPS "Try to download and build any missing dependencies" OFF) +include (FindThreads) + ########################################################################### # Boost setup @@ -106,13 +108,32 @@ include_directories(BEFORE ${IMATH_INCLUDES} ${OPENEXR_INCLUDES}) if (MSVC AND NOT LINKSTATIC) add_definitions (-DOPENEXR_DLL) # Is this needed for new versions? endif () - if (OPENEXR_VERSION VERSION_GREATER_EQUAL 3.0) set (OIIO_USING_IMATH 3) else () set (OIIO_USING_IMATH 2) endif () - +set (OPENIMAGEIO_IMATH_TARGETS + # For OpenEXR/Imath 3.x: + $ + $ + # For OpenEXR >= 2.4/2.5 with reliable exported targets + $ + $ + $ + # For OpenEXR <= 2.3: + ${ILMBASE_LIBRARIES} ) +set (OPENIMAGEIO_OPENEXR_TARGETS + # For OpenEXR/Imath 3.x: + $ + # For OpenEXR >= 2.4/2.5 with reliable exported targets + $ + $ + $ + # For OpenEXR <= 2.3: + ${OPENEXR_LIBRARIES} ) +set (OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY "PUBLIC" CACHE STRING + "Should we expose Imath library dependency as PUBLIC or PRIVATE") # JPEG -- prefer Turbo-JPEG to regular libjpeg checked_find_package (JPEGTurbo diff --git a/src/include/OpenImageIO/Imath.h.in b/src/include/OpenImageIO/Imath.h.in index 7f13faea40..e8a5a919ac 100644 --- a/src/include/OpenImageIO/Imath.h.in +++ b/src/include/OpenImageIO/Imath.h.in @@ -5,7 +5,8 @@ // clang-format off #pragma once - +#ifndef OIIO_IMATH_H_INCLUDED +#define OIIO_IMATH_H_INCLUDED 1 // Determine which Imath we're dealing with and include the appropriate // headers. @@ -23,3 +24,5 @@ # include # include #endif + +#endif // !defined(OIIO_IMATH_H_INCLUDED) diff --git a/src/libOpenImageIO/CMakeLists.txt b/src/libOpenImageIO/CMakeLists.txt index 5333d4399f..056aa7d6f6 100644 --- a/src/libOpenImageIO/CMakeLists.txt +++ b/src/libOpenImageIO/CMakeLists.txt @@ -126,24 +126,10 @@ target_compile_features (OpenImageIO target_link_libraries (OpenImageIO PUBLIC OpenImageIO_Util - # For OpenEXR/Imath 3.x: - $ - $ - # For OpenEXR >= 2.4/2.5 with reliable exported targets - $ - $ - # For OpenEXR <= 2.3: - ${ILMBASE_LIBRARIES} - ${GCC_ATOMIC_LIBRARIES} + ${OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY} + ${OPENIMAGEIO_IMATH_TARGETS} PRIVATE - # For OpenEXR/Imath 3.x: - $ - # For OpenEXR >= 2.4/2.5 with reliable exported targets - $ - $ - $ - # For OpenEXR <= 2.3: - ${OPENEXR_LIBRARIES} + ${OPENIMAGEIO_OPENEXR_TARGETS} ${OpenCV_LIBRARIES} ${SANITIZE_LIBRARIES} ${format_plugin_libs} # Add all the target link libraries from the plugins diff --git a/src/libutil/CMakeLists.txt b/src/libutil/CMakeLists.txt index acbf70a67d..46cce25c90 100644 --- a/src/libutil/CMakeLists.txt +++ b/src/libutil/CMakeLists.txt @@ -12,17 +12,10 @@ target_include_directories (OpenImageIO_Util ) target_link_libraries (OpenImageIO_Util PUBLIC - # For OpenEXR/Imath 3.x: - $ - $ - # For OpenEXR >= 2.4/2.5 with reliable exported targets - $ - $ - $ - $ - # For OpenEXR <= 2.3: - ${ILMBASE_LIBRARIES} + $ ${GCC_ATOMIC_LIBRARIES} + ${OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY} + ${OPENIMAGEIO_IMATH_TARGETS} PRIVATE Boost::filesystem Boost::system @@ -106,7 +99,8 @@ if (OIIO_BUILD_TESTS) add_test (unit_strutil ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/strutil_test) add_executable (fmath_test fmath_test.cpp) - target_link_libraries (fmath_test PRIVATE OpenImageIO_Util) + target_link_libraries (fmath_test PRIVATE OpenImageIO_Util + ${OPENIMAGEIO_IMATH_TARGETS}) set_target_properties (fmath_test PROPERTIES FOLDER "Unit Tests") add_test (unit_fmath ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/fmath_test) @@ -141,7 +135,8 @@ if (OIIO_BUILD_TESTS) add_test (unit_thread ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/thread_test) add_executable (simd_test simd_test.cpp) - target_link_libraries (simd_test PRIVATE OpenImageIO) + target_link_libraries (simd_test PRIVATE OpenImageIO + ${OPENIMAGEIO_IMATH_TARGETS}) set_target_properties (simd_test PROPERTIES FOLDER "Unit Tests") add_test (unit_simd ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/simd_test) @@ -151,7 +146,8 @@ if (OIIO_BUILD_TESTS) add_test (unit_filter ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter_test) add_executable (paramlist_test paramlist_test.cpp) - target_link_libraries (paramlist_test PRIVATE OpenImageIO) + target_link_libraries (paramlist_test PRIVATE OpenImageIO + ${OPENIMAGEIO_IMATH_TARGETS}) set_target_properties (paramlist_test PROPERTIES FOLDER "Unit Tests") add_test (unit_paramlist ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/paramlist_test) @@ -162,12 +158,7 @@ if (OIIO_BUILD_TESTS) add_executable (typedesc_test typedesc_test.cpp) target_link_libraries (typedesc_test PRIVATE OpenImageIO_Util - # For OpenEXR/Imath 3.x: - $ - # For OpenEXR >= 2.4/2.5 with reliable exported targets - $ - # For OpenEXR <= 2.3: - ${OPENEXR_LIBRARIES}) + ${OPENIMAGEIO_OPENEXR_TARGETS}) set_target_properties (typedesc_test PROPERTIES FOLDER "Unit Tests") add_test (unit_typedesc ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/typedesc_test)