https://src.fedoraproject.org/rpms/Field3D/raw/rawhide/f/Field3D-openexr.patch https://github.com/imageworks/Field3D/issues/101 --- a/export/StdMathLib.h +++ b/export/StdMathLib.h @@ -38,18 +38,41 @@ #ifndef _INCLUDED_Field3D_StdMathLib_H_ #define _INCLUDED_Field3D_StdMathLib_H_ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else + // OpenEXR 2.x, use the old locations +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif //----------------------------------------------------------------------------// #include "ns.h" --- a/export/Curve.h +++ b/export/Curve.h @@ -53,8 +53,25 @@ #include -#include -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) + +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +# include +#else + // OpenEXR 2.x, use the old locations +# include +# include +#endif + //----------------------------------------------------------------------------// --- a/include/OgUtil.h +++ b/include/OgUtil.h @@ -10,7 +10,22 @@ #include #include -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) + +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +#else + // OpenEXR 2.x, use the old locations +# include +#endif #include "All.h" #include "UtilFoundation.h" --- a/include/UtilFoundation.h +++ b/include/UtilFoundation.h @@ -68,7 +68,22 @@ #include -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) + +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +#else + // OpenEXR 2.x, use the old locations +# include +#endif #include #include --- a/include/OgIAttribute.h +++ b/include/OgIAttribute.h @@ -9,7 +9,22 @@ #include "OgUtil.h" -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) + +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +#else + // OpenEXR 2.x, use the old locations +# include +#endif //----------------------------------------------------------------------------// --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,13 @@ FIND_PACKAGE (Boost COMPONENTS regex thr FIND_PACKAGE (MPI) ENDIF () -FIND_PACKAGE (ILMBase) +# First, try to find just the right config files +find_package(Imath CONFIG) +if (NOT TARGET Imath::Imath) + # Couldn't find Imath::Imath, maybe it's older and has IlmBase? + find_package(IlmBase CONFIG) +endif () +find_package(OpenEXR CONFIG) # Allow the developer to select if Dynamic or Static libraries are built OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" ON) @@ -146,9 +152,20 @@ IF ( CMAKE_HOST_UNIX ) LIST ( APPEND Field3D_Libraries_Shared ${MPI_LIBRARIES} ) ENDIF ( MPI_FOUND ) - LIST ( APPEND Field3D_Libraries_Shared - Iex Half IlmThread Imath - pthread dl z ) + if(TARGET Imath::Imath) + list(APPEND Field3D_Libraries_Shared + # For OpenEXR/Imath 3.x: + $<$:OpenEXR::OpenEXR> + $<$:Imath::Imath> + $<$:Imath::Half> + pthread + dl + z) + else() + LIST ( APPEND Field3D_Libraries_Shared + Iex Half IlmThread Imath + pthread dl z ) + endif() SET ( Field3D_DSO_Libraries ${Field3D_Libraries_Shared} ) SET ( Field3D_BIN_Libraries Field3D ${Field3D_Libraries_Shared} ${Boost_LIBRARIES} ) --- a/test/unit_tests/UnitTest.cpp +++ b/test/unit_tests/UnitTest.cpp @@ -44,7 +44,22 @@ #include #include -#include +// The version can reliably be found in this header file from OpenEXR, +// for both 2.x and 3.x: +#include +#define COMBINED_OPENEXR_VERSION ((10000*OPENEXR_VERSION_MAJOR) + \ + (100*OPENEXR_VERSION_MINOR) + \ + OPENEXR_VERSION_PATCH) + +// There's just no easy way to have an `#include` that works in both +// cases, so we use the version to switch which set of include files we +// use. +#if COMBINED_OPENEXR_VERSION >= 20599 /* 2.5.99: pre-3.0 */ +# include +#else + // OpenEXR 2.x, use the old locations +# include +#endif #include "Field3D/DenseField.h" #include "Field3D/EmptyField.h"