OpenImageIO
OpenImageIO copied to clipboard
[BUG] Installed Tessil/robin-map is not found and downloaded version is outdated
Describe the bug
I need to build without internet connection. So I build and install dependencies manuelly.
You download Robinmap here:
set (ROBINMAP_GIT_REPOSITORY "https://github.com/Tessil/robin-map")
You use a very outdated version of it: (just a side note)
set (BUILD_ROBINMAP_VERSION "v0.6.2" CACHE STRING "Preferred Tessil/robin-map version, of downloading/building our own")
I build and install the current version 1.2.1 from https://github.com/Tessil/robin-map. This gives me CMake Config files.
Directory: C:\tt\develop\usr\lib\cmake\tsl-robin-map
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/7/2023 9:46 PM 1311 tsl-robin-mapConfig.cmake
-a--- 11/7/2023 9:46 PM 2824 tsl-robin-mapConfigVersion.cmake
-a--- 11/7/2023 9:46 PM 4221 tsl-robin-mapTargets.cmake
The Bug is, that these are not considered by your find_package (Robinmap QUIET) call:
find_package (Robinmap QUIET)
The library name is tsl-robin-map, not Robinmap.
Evidence
-- Configuring OpenImageIO 2.5.4.0
-- CMake 3.27.7
-- CMake system = Windows-10.0.22631
-- CMake system name = Windows
-- Project source dir = C:/tt/develop/libsrc/open_image_io
-- Project build dir = C:/temp/tt/wd/build/open_image_io
-- Project install prefix = C:/tt/develop/usr
-- Configuration types = Release;Debug;RelWithDebInfo
-- Build type = Release
-- Supported release = ON
-- CMAKE_UNITY_BUILD_MODE =
-- CMAKE_UNITY_BUILD_BATCH_SIZE =
-- Setting Namespace to: OpenImageIO_v2_5
-- CMAKE_CXX_COMPILER = C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe
-- CMAKE_CXX_COMPILER_ID = MSVC
-- Building with C++20, downstream minimum C++14
-- Compiler supports std::filesystem
-- clang-format not found.
--
-- * Checking for dependencies...
-- * - Missing a dependency 'Package'?
-- * Try cmake -DPackage_ROOT=path or set environment var Package_ROOT=path
-- * For many dependencies, we supply src/build-scripts/build_Package.bash
-- * - To exclude an optional dependency (even if found),
-- * -DUSE_Package=OFF or set environment var USE_Package=OFF
--
-- Boost_COMPONENTS = thread
-- Found Boost 1.83.0
-- Found ZLIB 1.3.0
-- Found TIFF 4.6.0
-- Found OpenEXR 3.2.1
-- Found libjpeg-turbo 3.0.1
-- Using internal PugiXML
-- Not using Python -- disabled
-- Found PNG
-- Not using BZip2 -- disabled
-- Not using Freetype -- disabled
-- Not using OpenColorIO -- disabled
-- Not using OpenCV -- disabled
-- Not using TBB -- disabled
-- Not using DCMTK -- disabled
-- Not using FFmpeg -- disabled
-- Not using GIF -- disabled
-- Not using Libheif -- disabled
-- Not using LibRaw -- disabled
-- Not using OpenJPEG -- disabled
-- Not using OpenVDB -- disabled
-- Not using Ptex -- disabled
-- Not using Ptex -- disabled
-- Not using WebP -- disabled
-- Not using R3DSDK -- disabled
-- Not using Nuke -- disabled
-- Found OpenGL
-- Found Qt6 6.6.0
-- Found fmt 10.1.0
-- Robinmap library not found
CMake Error at src/cmake/checked_find_package.cmake:177 (message):
-- Robinmap_ROOT was: C:/tt/develop/usr/lib/cmake/tsl-robin-map
Robinmap is required, aborting.
Platform information:
- OIIO branch/version: 2.5.4.0
- OS: Windows 11
- C++ compiler: VS 2019
- Any non-default build flags when you build OIIO:
"-DCMAKE_VERBOSE_MAKEFILE=ON"
"-DCMAKE_INSTALL_PREFIX=${INSTALL_PATH}"
"-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
"-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/../toolchain/windows_msvc.cmake"
"-DCMAKE_CONFIGURATION_TYPES=Release;Debug;RelWithDebInfo"
"-DCMAKE_DEBUG_POSTFIX=d"
"-DCMAKE_RELWITHDEBINFO_POSTFIX=rd"
"-DCMAKE_INSTALL_INCLUDEDIR=include/${PACKAGE_NAME}"
"-DBUILD_SHARED_LIBS=ON"
"-DOIIO_BUILD_TESTS=OFF"
"-DOIIO_BUILD_TOOLS=ON"
"-DBUILD_DOCS=OFF"
"-DREQUIRED_DEPS=FMT;ZLIB;ROBINMAP;BOOST;TIFF;OPENEXR;JPEG;PNG"
"-DUSE_PYTHON=OFF"
"-DUSE_QT=ON"
"-DUSE_PUGIXML=OFF"
"-DUSE_BZIP2=OFF"
"-DUSE_FREETYPE=OFF"
"-DUSE_OPENCOLORIO=OFF"
"-DUSE_OPENCV=OFF"
"-DUSE_TBB=OFF"
"-DUSE_DCMTK=OFF"
"-DUSE_FFMPEG=OFF"
"-DUSE_GIF=OFF"
"-DUSE_JPEGTURBO=ON"
"-DUSE_LIBHEIF=OFF"
"-DUSE_LIBRAW=OFF"
"-DUSE_OPENJPEG=OFF"
"-DUSE_OPENVDB=OFF"
"-DUSE_PTEX=OFF"
"-DUSE_R3DSDK=OFF"
"-DUSE_NUKE=OFF"
"-DUSE_WEBP=OFF"
"-DBUILD_MISSING_ROBINMAP=OFF"
"-DBUILD_MISSING_FMT=OFF"
"-DINTERNALIZE_FMT=OFF"
"-DLINKSTATIC=OFF"
@lgritz Do you think it makes sense to update the default version of Tessil/robin-map from v0.6.2 to the latest version v1.2.2 or is there a good technical reason to stay on the old version?
If I see it correctly, both the CMake code and the API of the latest Tessil/robin-map implementation are no longer compatible with the version v0.6.2 used by default. This makes it very difficult to use OpenImageIO with the current version of this dependency. This is particularly critical because Tessil/robin-map is a basic dependency that is always required.
Yes, we should definitely bump the version. In master, I think we can move to the very latest. In 2.5 releases, we still need to be C++14 compatible, so somebody will need to figure out what the highest version of robin-map is that we can use while satisfying that constraint.
As far as the C++ standard is concerned, the documentation says:
The code should work with any C++11 standard-compliant compiler and has been tested with GCC 4.8.4, Clang 3.5.0 and Visual Studio 2015.
As far as I can see, the CI pipelines use the respective default of the compiler. This should be C++11 and C++14 for GCC/clang/msvc.
So I don't think that should cause any problems in the 2.5 branch either.
It would be nice if the integration could be done with the standard CMake find_package and Target workflow in the future. I think the current situation is that only the header is extracted somehow, but this fails if you have installed Tessil/robin-map yourself externally and do not download it during the build of OIIO.
Yes, coincidentally, I'm working on a total overhaul of how we pull in and self-build some dependencies.