diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a52b4c13a..2416ac69d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,30 @@ -IF (WIN32) - CMAKE_MINIMUM_REQUIRED(VERSION 3.11) -ELSE() - CMAKE_MINIMUM_REQUIRED(VERSION 3.2) -ENDIF() +# "More Modern" CMake version +cmake_minimum_required(VERSION 3.12) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +set(CMAKE_PREFIX_PATH "/prefix") -include(OpenEXRVersion) +# An "official" way to make this a super-project +# basically overrides the find_package to not find anything +# for stuff we're including locally +set(as_subproject IlmBase OpenEXR) +macro(find_package) + if(NOT "${ARGV0}" IN_LIST as_subproject) + _find_package(${ARGV}) + endif() +endmacro() + +enable_testing() -project(OpenEXR VERSION ${OPENEXR_VERSION}) +add_subdirectory(IlmBase) +# TODO: +#add_subdirectory(PyIlmBase) +add_subdirectory(OpenEXR) +# TODO: +#add_subdirectory(OpenEXR_Viewers) -include(OpenEXRSettings) +#[==[ # Packages -if(OPENEXR_BUILD_OPENEXR OR OPENEXR_BUILD_VIEWERS) - find_package(ZLIB) - if(NOT ZLIB_FOUND) - message(WARNING "Make Zlib available to CMake's search path, and re-run configuration") - message(FATAL_ERROR "Zlib is a required dependency when OPENEXR_BUILD_OPENEXR or OPENEXR_BUILD_VIEWERS is set") - endif() -endif() if (OPENEXR_BUILD_PYTHON_LIBS) find_package(PythonLibs ${OPENEXR_PYTHON_MAJOR}.${OPENEXR_PYTHON_MINOR}) @@ -74,40 +79,4 @@ if(OPENEXR_BUILD_VIEWERS) endif() endif() -if ((OPENEXR_BUILD_OPENEXR OR OPENEXR_BUILD_UTILS OR OPENEXR_BUILD_TESTS OR OPENEXR_BUILD_PYTHON_LIBS OR OPENEXR_BUILD_VIEWERS) AND NOT(OPENEXR_BUILD_ILMBASE)) - message(INFO "OPENEXR_BUILD_ILMBASE not requested, searching for installed IlmBase instead") - find_package(IlmBase) - if (NOT IlmBase_FOUND) - message(ERROR "Could not find IlmBase, cannot build dependent libraries.") - message(INFO, "Set ILMBASE_LOCATION to location of IlmBase.") - endif() -endif() - -if ((OPENEXR_BUILD_UTILS OR OPENEXR_BUILD_TESTS OR OPENEXR_BUILD_VIEWERS) AND NOT(OPENEXR_BUILD_OPENEXR)) - message(INFO "OPENEXR_BUILD_OPENEXR not requested, searching for installed OpenEXR instead") - find_package(OpenEXR) - if (NOT OpenEXR_FOUND) - message(ERROR "Could not find OpenEXR, cannot build dependent libraries.") - message(INFO, "Set OPENEXR_LOCATION to location of OpenEXR.") - endif() -endif() - -# Perform the build -if(OPENEXR_BUILD_ILMBASE) - add_subdirectory(IlmBase) -endif() -if(OPENEXR_BUILD_OPENEXR) - add_subdirectory(OpenEXR) -else() - message(INFO, "Skipping OpenEXR build") -endif() -if(OPENEXR_BUILD_PYTHON_LIBS) - add_subdirectory(PyIlmBase) -else() - message(INFO, "Skipping Python bindings") -endif() -if(OPENEXR_BUILD_VIEWERS AND FLTK_FOUND AND OpenGL_FOUND) - add_subdirectory(OpenEXR_Viewers) -else() - message(INFO, "Skipping OpenEXR Viewers") -endif() +#]==] diff --git a/IlmBase/CMakeLists.txt b/IlmBase/CMakeLists.txt index b6c9e5e6b8..d7f016b4db 100644 --- a/IlmBase/CMakeLists.txt +++ b/IlmBase/CMakeLists.txt @@ -1,211 +1,75 @@ - -IF (WIN32) - CMAKE_MINIMUM_REQUIRED(VERSION 3.11) -ELSE() - CMAKE_MINIMUM_REQUIRED(VERSION 3.2) -ENDIF() - -# test if we are being built as a standalone library or if -# we are being built as part of the overall project -IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - ELSE() - MESSAGE(FATAL_ERROR "Please compile using the top-level CMakeLists.txt or a pre-built package") - ENDIF() - INCLUDE(OpenEXRVersion) - SET(ILMBASE_STANDALONE ON) -ENDIF() - -SET(ILMBASE_BASEVERSION ${OPENEXR_BASEVERSION}) -SET(ILMBASE_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR}) -SET(ILMBASE_VERSION_MINOR ${OPENEXR_VERSION_MINOR}) -SET(ILMBASE_VERSION_PATCH ${OPENEXR_VERSION_PATCH}) -SET(ILMBASE_VERSION ${OPENEXR_VERSION}) -SET(ILMBASE_VERSION_API ${OPENEXR_VERSION_API}) - -PROJECT(ilmbase VERSION ${ILMBASE_VERSION}) - -IF(ILMBASE_STANDALONE) - INCLUDE(OpenEXRSettings) -ENDIF() - -INCLUDE_DIRECTORIES ( Iex IexMath Imath Half - IlmThread IexTest ImathTest HalfTest - ${CMAKE_CURRENT_BINARY_DIR}/config ) - -IF(WIN32) - SET(CMAKE_DEBUG_POSTFIX "_d") -ENDIF() - -# also add the current directory to pick up the autogenerated headers -SET(CMAKE_INCLUDE_CURRENT_DIR ON) - -MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_value) - GET_TARGET_PROPERTY (${_variable} ${_target} ${_property}) - IF (${_variable} MATCHES NOTFOUND) - SET (${_variable} ${_default_value}) - ENDIF (${_variable} MATCHES NOTFOUND) - ENDMACRO (GET_TARGET_PROPERTY_WITH_DEFAULT) - - MACRO(CREATE_LIBTOOL_FILE _target _install_DIR) - SET(_target_location $) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_static_lib ${_target} STATIC_LIB "") - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dependency_libs ${_target} LT_DEPENDENCY_LIBS "") - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_current ${_target} LT_VERSION_CURRENT 0) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_age ${_target} LT_VERSION_AGE 0) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_revision ${_target} LT_VERSION_REVISION 0) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_installed ${_target} LT_INSTALLED yes) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_shouldnotlink ${_target} LT_SHOULDNOTLINK yes) - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlopen ${_target} LT_DLOPEN "") - GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlpreopen ${_target} LT_DLPREOPEN "") - SET(_laname ${_target}${OPENEXR_LIBSUFFIX}) - SET(_soname ${_laname}) - SET(_laname ${PROJECT_BINARY_DIR}/${_laname}.la) - FILE(WRITE ${_laname} "# ${_laname} - a libtool library file\n") - FILE(APPEND ${_laname} "# Generated by CMake ${CMAKE_VERSION} (like GNU libtool)\n") - FILE(APPEND ${_laname} "\n# Please DO NOT delete this file!\n# It is necessary for linking the library with libtool.\n\n" ) - FILE(APPEND ${_laname} "# The name that we can dlopen(3).\n") - FILE(APPEND ${_laname} "dlname='${_soname}'\n\n") - FILE(APPEND ${_laname} "# Names of this library.\n") - FILE(APPEND ${_laname} "library_names='${_soname}.${_target_current}.${_target_age}.${_target_revision} ${_soname}.${_target_current} ${_soname}'\n\n") - FILE(APPEND ${_laname} "# The name of the static archive.\n") - FILE(APPEND ${_laname} "old_library='${_target_static_lib}'\n\n") - FILE(APPEND ${_laname} "# Libraries that this one depends upon.\n") - FILE(APPEND ${_laname} "dependency_libs='${_target_dependency_libs}'\n\n") - FILE(APPEND ${_laname} "# Names of additional weak libraries provided by this library\n") - FILE(APPEND ${_laname} "weak_library_names=\n\n") - FILE(APPEND ${_laname} "# Version information for ${_laname}.\n") - FILE(APPEND ${_laname} "current=${_target_current}\n") - FILE(APPEND ${_laname} "age=${_target_age}\n") - FILE(APPEND ${_laname} "revision=${_target_revision}\n\n") - FILE(APPEND ${_laname} "# Is this an already installed library?\n") - FILE(APPEND ${_laname} "installed=${_target_installed}\n\n") - FILE(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\n") - FILE(APPEND ${_laname} "shouldnotlink=${_target_shouldnotlink}\n\n") - FILE(APPEND ${_laname} "# Files to dlopen/dlpreopen\n") - FILE(APPEND ${_laname} "dlopen='${_target_dlopen}'\n") - FILE(APPEND ${_laname} "dlpreopen='${_target_dlpreopen}'\n\n") - FILE(APPEND ${_laname} "# Directory that this library needs to be installed in:\n") - FILE(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}${_install_DIR}'\n") - INSTALL( FILES ${_laname} DESTINATION ${CMAKE_INSTALL_PREFIX}${_install_DIR}) - ENDMACRO(CREATE_LIBTOOL_FILE) - -ADD_SUBDIRECTORY ( Half ) -ADD_SUBDIRECTORY ( Iex ) -ADD_SUBDIRECTORY ( IexMath ) -ADD_SUBDIRECTORY ( Imath ) -ADD_SUBDIRECTORY ( IlmThread ) - - -########################## -# IlmBaseConfig.h generation -########################## - -# By using a temp file then using configure_file below with copy, we -# avoid constantly updating it (unless a value has changed) -SET(ILMBASE_TMP_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h.in) -IF (WIN32 AND NOT MSYS) - FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#ifdef HAVE_PTHREAD\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "# undef HAVE_PTHREAD\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#endif\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#ifdef HAVE_POSIX_SEMAPHORES\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "# undef HAVE_POSIX_SEMAPHORES\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#endif\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define PLATFORM_WINDOWS 1\n" ) -ELSE () - IF (APPLE) - FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#define HAVE_PTHREAD 1\n" ) - ELSE () - FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#define HAVE_PTHREAD 1\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_HAVE_LARGE_STACK 1\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define HAVE_POSIX_SEMAPHORES 1\n" ) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT 1\n") - ENDIF () -ENDIF () - -IF (OPENEXR_FORCE_CXX03) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_FORCE_CXX03 1\n" ) -ELSEIF (NOT WIN32) - # really only care about c++11 right now for the threading bits, but this can be changed to 14 - # when needed... - # Note that the __cplusplus check is not valid under MSVC - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#if __cplusplus < 201103L\n# error \"Modern C++ 11/14 not enabled but force cxx03 not set\"\n#endif\n" ) -ENDIF () - -IF (OPENEXR_NAMESPACE_VERSIONING) - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM 1\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_INTERNAL_NAMESPACE Imath_${ILMBASE_VERSION_API}\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_INTERNAL_NAMESPACE Iex_${ILMBASE_VERSION_API}\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_INTERNAL_NAMESPACE IlmThread_${ILMBASE_VERSION_API}\n") -ELSE () - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM 0\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_INTERNAL_NAMESPACE Imath\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_INTERNAL_NAMESPACE Iex\n") - FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_INTERNAL_NAMESPACE IlmThread\n") -ENDIF () - -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_NAMESPACE Imath\n") -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_NAMESPACE Iex\n") -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_NAMESPACE IlmThread\n") -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_STRING \"${ILMBASE_VERSION}\"\n" ) -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_PACKAGE_STRING \"IlmBase ${ILMBASE_VERSION}\"\n" ) -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_MAJOR ${ILMBASE_VERSION_MAJOR}\n" ) -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_MINOR ${ILMBASE_VERSION_MINOR}\n" ) -FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_PATCH ${ILMBASE_VERSION_PATCH}\n" ) - -FILE ( APPEND ${ILMBASE_TMP_CONFIG} " -// Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define ILMBASE_VERSION_HEX ((ILMBASE_VERSION_MAJOR << 24) | \\ - (ILMBASE_VERSION_MINOR << 16) | \\ - (ILMBASE_VERSION_PATCH << 8)) -") - -CONFIGURE_FILE ( ${ILMBASE_TMP_CONFIG} ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h COPYONLY ) -FILE ( REMOVE ${ILMBASE_TMP_CONFIG} ) -UNSET ( ILMBASE_TMP_CONFIG ) - -IF ( NOT WIN32 AND OPENEXR_BUILD_SHARED ) - CREATE_LIBTOOL_FILE ( Half /lib ) - CREATE_LIBTOOL_FILE ( Iex /lib ) - CREATE_LIBTOOL_FILE ( IexMath /lib ) - CREATE_LIBTOOL_FILE ( Imath /lib ) - CREATE_LIBTOOL_FILE ( IlmThread /lib ) -ENDIF () - - -# Tests -IF ( ENABLE_TESTS ) - ADD_SUBDIRECTORY ( HalfTest ) - ADD_SUBDIRECTORY ( IexTest ) - ADD_SUBDIRECTORY ( ImathTest ) -ENDIF () - -# Installation - -INSTALL ( FILES - ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h - DESTINATION - include/OpenEXR -) - -IF ( NOT WIN32 ) - FILE ( WRITE ${CMAKE_BINARY_DIR}/IlmBase.pc "prefix=${CMAKE_INSTALL_PREFIX}\n" ) - FILE ( APPEND ${CMAKE_BINARY_DIR}/IlmBase.pc "exec_prefix=\${prefix} -libdir=\${exec_prefix}/lib -includedir=\${prefix}/include -OpenEXR_includedir=\${prefix}/include/OpenEXR - -Name: IlmBase -Description: Base math and exception libraries -Version: ${ILMBASE_VERSION} -Libs: -L\${libdir} -lImath${ILMBASE_LIBSUFFIX} -lIexMath${ILMBASE_LIBSUFFIX} -lHalf${ILMBASE_LIBSUFFIX} -lIex${ILMBASE_LIBSUFFIX} -lIlmThread${ILMBASE_LIBSUFFIX} -pthread -Cflags: -pthread -I\${OpenEXR_includedir} -") - - INSTALL ( FILES - ${CMAKE_BINARY_DIR}/IlmBase.pc - DESTINATION - lib/pkgconfig - ) -ENDIF() +# "More Modern" CMake version +cmake_minimum_required(VERSION 3.12) + +# this is for target_sources, new policy converts relative paths to absolute +cmake_policy(SET CMP0076 NEW) + +# we include this first to parse configure.ac and extract the version +# numbers +include(config/ParseConfigure.cmake) + +#set up our project +project(IlmBase VERSION ${ILMBASE_VERSION} LANGUAGES C CXX) + +####################################### +####################################### +# This declares all the configuration variables visible +# in cmake-gui or similar and the rest of the global +# project setup +# +# Please look at this file to see what is configurable +####################################### +####################################### +include(config/IlmBaseSetup.cmake) + +# generates config headers, package config files +add_subdirectory(config) + +# utility function for the repeated boilerplate of defining +# the libraries +include(config/LibraryDefine.cmake) + +add_subdirectory( Half ) +add_subdirectory( Iex ) +add_subdirectory( IexMath ) +add_subdirectory( Imath ) +add_subdirectory( IlmThread ) + +# Can't seem to do EXCLUDE_FROM_ALL on the test executables +# since you can't then create a dependency on the internal +# "test" target such that it is auto built +option(ILMBASE_ENABLE_TESTS "Enables building of tests" ON) +if(ILMBASE_ENABLE_TESTS) + enable_testing() + # TODO: + #include(CTest) + #set(CTEST_PROJECT_NAME "OpenEXR - IlmBase") + #set(CTEST_NIGHTLY_START_TIME "01:01:01 UTC") + #set(CTEST_DROP_METHOD "http") # there are others... + #set(CTEST_DROP_SITE "open.cdash.org") + #set(CTEST_DROP_LOCATION "/submit.php?project=MyProject") + #set(CTEST_DROP_SITE_CDASH TRUE) + # + # Then can make a ctest script that has something like the following + # in it: + # set(CTEST_SOURCE_DIRECTORY "/source") + # set(CTEST_BINARY_DIRECTORY "/binary") + # + # set(ENV{CXXFLAGS} "--coverage") + # set(CTEST_CMAKE_GENERATOR "Ninja") + # set(CTEST_USE_LAUNCHERS 1) + # set(CTEST_COVERAGE_COMMAND "gcov") + # set(CTEST_MEMORYCHECK_COMMAND "valgrind") + # #set(CTEST_MEMORYCHECK_TYPE "ThreadSanitizer") + # ctest_start("Continuous") + # ctest_configure() + # ctest_build() + # ctest_test() + # ctest_coverage() + # ctest_memcheck() + # ctest_submit() + + add_subdirectory( HalfTest ) + add_subdirectory( IexTest ) + add_subdirectory( ImathTest ) +endif() diff --git a/IlmBase/Half/CMakeLists.txt b/IlmBase/Half/CMakeLists.txt index 3d24cd7888..8186429d7a 100644 --- a/IlmBase/Half/CMakeLists.txt +++ b/IlmBase/Half/CMakeLists.txt @@ -1,94 +1,33 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( eLut eLut.cpp ) -ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/eLut.h - COMMAND $ ARGS > ${CMAKE_CURRENT_BINARY_DIR}/eLut.h - DEPENDS eLut) -SET_SOURCE_FILES_PROPERTIES( - ${CMAKE_CURRENT_BINARY_DIR}/eLut.h - PROPERTIES HEADER_FILE_ONLY TRUE) - -ADD_EXECUTABLE ( toFloat toFloat.cpp ) -ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h - COMMAND $ ARGS > ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h - DEPENDS toFloat) - -SET_SOURCE_FILES_PROPERTIES( - ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h - PROPERTIES HEADER_FILE_ONLY TRUE) - -SET_SOURCE_FILES_PROPERTIES( - half.cpp - PROPERTIES - OBJECT_DEPENDS - "${CMAKE_CURRENT_BINARY_DIR}/eLut.h;${CMAKE_CURRENT_BINARY_DIR}/toFloat.h" - ) - -SET (ILMBASE_LIB_TARGETS "") - -IF (OPENEXR_BUILD_SHARED) - LIST ( APPEND ILMBASE_LIB_TARGETS Half ) - - ADD_LIBRARY ( Half SHARED - half.cpp - ) +add_executable(eLut eLut.cpp) +target_compile_features(eLut PUBLIC cxx_std_${ILMBASE_CXX_STANDARD}) - TARGET_COMPILE_DEFINITIONS ( Half PRIVATE HALF_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( Half PUBLIC OPENEXR_DLL ) - ENDIF () - SET_TARGET_PROPERTIES ( Half - PROPERTIES - VERSION ${OPENEXR_VERSION} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "Half${ILMBASE_LIBSUFFIX}" - ) +add_executable(toFloat toFloat.cpp) +target_compile_features(toFloat PUBLIC cxx_std_${ILMBASE_CXX_STANDARD}) - ADD_DEPENDENCIES ( Half toFloat eLut ) -ENDIF () +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h + ${CMAKE_CURRENT_BINARY_DIR}/eLut.h + COMMAND $ ARGS > ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h + COMMAND $ ARGS > ${CMAKE_CURRENT_BINARY_DIR}/eLut.h + DEPENDS eLut toFloat +) -IF (BUILD_ILMBASE_STATIC) - LIST ( APPEND ILMBASE_LIB_TARGETS Half_static ) +### Now define the real library - ADD_LIBRARY ( Half_static STATIC +ilmbase_define_library(Half + PRIV_EXPORT IEXMATH_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + CURBINDIR ${CMAKE_CURRENT_BINARY_DIR} + SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/toFloat.h + ${CMAKE_CURRENT_BINARY_DIR}/eLut.h half.cpp - ) - - SET_TARGET_PROPERTIES ( Half_static - PROPERTIES - VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH} - OUTPUT_NAME "Half${ILMBASE_LIBSUFFIX}_s" - ) - - ADD_DEPENDENCIES ( Half_static toFloat eLut ) -ENDIF () - -IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC) - INSTALL ( TARGETS - ${ILMBASE_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES + HEADERS half.h halfFunction.h halfExport.h halfLimits.h - - DESTINATION - include/OpenEXR ) - -if (OPENEXR_BUILD_SHARED) - add_library(IlmBase::Half ALIAS Half) -endif() -if (BUILD_ILMBASE_STATIC) - add_library(IlmBase::Half_static ALIAS Half_static) -endif() diff --git a/IlmBase/HalfTest/CMakeLists.txt b/IlmBase/HalfTest/CMakeLists.txt index 7eedaf842b..97c19112d6 100644 --- a/IlmBase/HalfTest/CMakeLists.txt +++ b/IlmBase/HalfTest/CMakeLists.txt @@ -1,6 +1,5 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( HalfTest +add_executable(HalfTest main.cpp testArithmetic.cpp testBitPatterns.cpp @@ -9,8 +8,7 @@ ADD_EXECUTABLE ( HalfTest testFunction.cpp testLimits.cpp testSize.cpp - ) +) -TARGET_LINK_LIBRARIES ( HalfTest IlmBase::Half${OPENEXR_TARGET_SUFFIX} ) - -ADD_TEST ( TestHalf HalfTest ) +target_link_libraries(HalfTest IlmBase::Half) +add_test(IlmBase.Half HalfTest) diff --git a/IlmBase/Iex/CMakeLists.txt b/IlmBase/Iex/CMakeLists.txt index 847518cf84..902f8f48f1 100644 --- a/IlmBase/Iex/CMakeLists.txt +++ b/IlmBase/Iex/CMakeLists.txt @@ -1,53 +1,10 @@ -# yue.nicholas@gmail.com - -SET (ILMBASE_LIB_TARGETS "") - -IF(OPENEXR_BUILD_SHARED) - LIST ( APPEND ILMBASE_LIB_TARGETS Iex ) - - ADD_LIBRARY ( Iex SHARED +ilmbase_define_library(Iex + PRIV_EXPORT IEX_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES IexBaseExc.cpp IexThrowErrnoExc.cpp - ) - - TARGET_COMPILE_DEFINITIONS ( Iex PRIVATE IEX_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( Iex PUBLIC OPENEXR_DLL ) - ENDIF () - - SET_TARGET_PROPERTIES ( Iex - PROPERTIES - VERSION ${OPENEXR_VERSION} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "Iex${ILMBASE_LIBSUFFIX}" - ) -ENDIF() - -IF (BUILD_ILMBASE_STATIC) - LIST ( APPEND ILMBASE_LIB_TARGETS Iex_static ) - - ADD_LIBRARY ( Iex_static STATIC - IexBaseExc.cpp - IexThrowErrnoExc.cpp - ) - - SET_TARGET_PROPERTIES ( Iex_static - PROPERTIES - VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH} - OUTPUT_NAME "Iex${ILMBASE_LIBSUFFIX}_s" - ) -ENDIF() - -IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC) - INSTALL ( TARGETS ${ILMBASE_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES + HEADERS IexBaseExc.h IexMathExc.h IexThrowErrnoExc.h @@ -57,14 +14,4 @@ INSTALL ( IexNamespace.h IexExport.h IexForward.h - - DESTINATION - include/OpenEXR -) - -if (OPENEXR_BUILD_SHARED) - add_library(IlmBase::Iex ALIAS Iex) -endif() -if (BUILD_ILMBASE_STATIC) - add_library(IlmBase::Iex_static ALIAS Iex_static) -endif() + ) diff --git a/IlmBase/IexMath/CMakeLists.txt b/IlmBase/IexMath/CMakeLists.txt index 472fd337cb..5f58c92d39 100644 --- a/IlmBase/IexMath/CMakeLists.txt +++ b/IlmBase/IexMath/CMakeLists.txt @@ -1,66 +1,13 @@ -# pstanczyk@ilm.com - -SET (ILMBASE_LIB_TARGETS "") - -IF ( OPENEXR_BUILD_SHARED ) - LIST ( APPEND ILMBASE_LIB_TARGETS IexMath ) - - ADD_LIBRARY ( IexMath SHARED +ilmbase_define_library(IexMath + PRIV_EXPORT IEXMATH_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES IexMathFloatExc.cpp IexMathFpu.cpp - ) - - TARGET_COMPILE_DEFINITIONS ( IexMath PRIVATE IEXMATH_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( IexMath PUBLIC OPENEXR_DLL ) - ENDIF () - - TARGET_LINK_LIBRARIES( IexMath - PUBLIC IlmBase::Iex ) - SET_TARGET_PROPERTIES ( IexMath - PROPERTIES - VERSION ${OPENEXR_VERSION} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IexMath${ILMBASE_LIBSUFFIX}" - ) -ENDIF () - -IF (BUILD_ILMBASE_STATIC) - LIST ( APPEND ILMBASE_LIB_TARGETS IexMath_static ) - - ADD_LIBRARY ( IexMath_static STATIC - IexMathFloatExc.cpp - IexMathFpu.cpp - ) - - SET_TARGET_PROPERTIES ( IexMath_static - PROPERTIES - VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH} - OUTPUT_NAME "IexMath${ILMBASE_LIBSUFFIX}_s" - ) -ENDIF( ) - -IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC) - INSTALL ( TARGETS ${ILMBASE_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES + HEADERS IexMathFloatExc.h IexMathFpu.h IexMathIeeeExc.h - - DESTINATION - include/OpenEXR -) - -if (OPENEXR_BUILD_SHARED) - add_library(IlmBase::IexMath ALIAS IexMath) -endif() -if (BUILD_ILMBASE_STATIC) - add_library(IlmBase::IexMath_static ALIAS IexMath_static) -endif() + DEPENDENCIES + IlmBase::Iex + ) diff --git a/IlmBase/IexMath/IexMathFpu.cpp b/IlmBase/IexMath/IexMathFpu.cpp index 5543046588..ceed658e01 100644 --- a/IlmBase/IexMath/IexMathFpu.cpp +++ b/IlmBase/IexMath/IexMathFpu.cpp @@ -52,12 +52,15 @@ #define debug(x) #endif -#if defined(HAVE_UCONTEXT_H) && (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) - -#include -#include -#include -#include +#include +#if defined(HAVE_UCONTEXT_H) && \ + (defined(ILMBASE_HAVE_SIGCONTEXT_CONTROL_REGISTER_SUPPORT) || \ + defined(ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT)) + +# include +# include +# include +# include IEX_INTERNAL_NAMESPACE_SOURCE_ENTER diff --git a/IlmBase/IexTest/CMakeLists.txt b/IlmBase/IexTest/CMakeLists.txt index 8080435cb6..c4191cbcb8 100644 --- a/IlmBase/IexTest/CMakeLists.txt +++ b/IlmBase/IexTest/CMakeLists.txt @@ -1,10 +1,7 @@ -# yue.nicholas@gmail.com - -ADD_EXECUTABLE ( IexTest +add_executable(IexTest main.cpp testBaseExc.cpp - ) - -TARGET_LINK_LIBRARIES ( IexTest IlmBase::Iex${OPENEXR_TARGET_SUFFIX} ) +) -ADD_TEST ( TestIex IexTest ) +target_link_libraries(IexTest IlmBase::Iex) +add_test(IlmBase.Iex IexTest) diff --git a/IlmBase/IlmBase.pc.in b/IlmBase/IlmBase.pc.in index 0c0d8f057d..024333a4b9 100644 --- a/IlmBase/IlmBase.pc.in +++ b/IlmBase/IlmBase.pc.in @@ -2,10 +2,11 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -OpenEXR_includedir=@includedir@/OpenEXR - +libsuffix=@LIB_SUFFIX@ Name: IlmBase Description: Base math and exception libraries Version: @ILMBASE_VERSION@ -Libs: -L${libdir} -lImath -lHalf -lIex -lIexMath -lIlmThread @PTHREAD_LIBS@ -Cflags: @PTHREAD_CFLAGS@ -I${OpenEXR_includedir} +Requires: +Conflicts: +Libs: -L${libdir} -lImath${libsuffix} -lHalf${libsuffix} -lIex${libsuffix} -lIexMath${libsuffix} -lIlmThread${libsuffix} @PTHREAD_LIBS@ +Cflags: @PTHREAD_CFLAGS@ -I${includedir} -I${includedir}/OpenEXR diff --git a/IlmBase/IlmThread/CMakeLists.txt b/IlmBase/IlmThread/CMakeLists.txt index b94821928c..85f18f5373 100644 --- a/IlmBase/IlmThread/CMakeLists.txt +++ b/IlmBase/IlmThread/CMakeLists.txt @@ -1,69 +1,20 @@ -# yue.nicholas@gmail.com - -SET( ILMTHREAD_LIBRARY_SOURCES - IlmThread.cpp - IlmThreadMutex.cpp - IlmThreadMutexPosix.cpp - IlmThreadPool.cpp - IlmThreadPosix.cpp - IlmThreadSemaphore.cpp - IlmThreadSemaphorePosixCompat.cpp - IlmThreadSemaphorePosix.cpp - IlmThreadSemaphoreOSX.cpp -) -IF (WIN32 AND NOT MSYS) - SET( ILMTHREAD_LIBRARY_SOURCES ${ILMTHREAD_LIBRARY_SOURCES} +ilmbase_define_library(IlmThread + PRIV_EXPORT ILMTHREAD_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES + IlmThread.cpp + IlmThreadMutex.cpp + IlmThreadMutexPosix.cpp + IlmThreadPool.cpp + IlmThreadPosix.cpp + IlmThreadSemaphore.cpp + IlmThreadSemaphorePosixCompat.cpp + IlmThreadSemaphorePosix.cpp + IlmThreadSemaphoreOSX.cpp IlmThreadMutexWin32.cpp IlmThreadSemaphoreWin32.cpp IlmThreadWin32.cpp - ) -ENDIF() - -SET (ILMBASE_LIB_TARGETS "") - -IF ( OPENEXR_BUILD_SHARED ) - LIST ( APPEND ILMBASE_LIB_TARGETS IlmThread ) - - ADD_LIBRARY ( IlmThread SHARED ${ILMTHREAD_LIBRARY_SOURCES} ) - - TARGET_COMPILE_DEFINITIONS ( IlmThread PRIVATE ILMTHREAD_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( IlmThread PUBLIC OPENEXR_DLL ) - ENDIF () - - TARGET_LINK_LIBRARIES( IlmThread - PUBLIC IlmBase::Iex ) - - SET_TARGET_PROPERTIES ( IlmThread - PROPERTIES - VERSION ${OPENEXR_VERSION} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmThread${ILMBASE_LIBSUFFIX}" - ) -ENDIF () - -IF (BUILD_ILMBASE_STATIC) - LIST ( APPEND ILMBASE_LIB_TARGETS IlmThread_static ) - - ADD_LIBRARY ( IlmThread_static STATIC ${ILMTHREAD_LIBRARY_SOURCES} ) - - SET_TARGET_PROPERTIES ( IlmThread_static - PROPERTIES - VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH} - OUTPUT_NAME "IlmThread${ILMBASE_LIBSUFFIX}_s" - ) -ENDIF () - -IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC) - INSTALL ( TARGETS ${ILMBASE_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES + HEADERS IlmThreadPool.h IlmThread.h IlmThreadSemaphore.h @@ -71,14 +22,7 @@ INSTALL ( IlmThreadNamespace.h IlmThreadExport.h IlmThreadForward.h - - DESTINATION - include/OpenEXR -) - -if (OPENEXR_BUILD_SHARED) - add_library(IlmBase::IlmThread ALIAS IlmThread) -endif() -if (BUILD_ILMBASE_STATIC) - add_library(IlmBase::IlmThread_static ALIAS IlmThread_static) -endif() + DEPENDENCIES + IlmBase::Iex + Threads::Threads + ) diff --git a/IlmBase/IlmThread/IlmThreadMutexWin32.cpp b/IlmBase/IlmThread/IlmThreadMutexWin32.cpp index 2f7bc302e1..39e27d5120 100644 --- a/IlmBase/IlmThread/IlmThreadMutexWin32.cpp +++ b/IlmBase/IlmThread/IlmThreadMutexWin32.cpp @@ -41,8 +41,10 @@ #include "IlmBaseConfig.h" #ifdef ILMBASE_FORCE_CXX03 -# include "IlmThreadMutex.h" -# include "Iex.h" +# ifdef _WIN32 + +# include "IlmThreadMutex.h" +# include "Iex.h" ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER @@ -75,4 +77,5 @@ Mutex::unlock () const ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT +# endif // _WIN32 #endif diff --git a/IlmBase/IlmThread/IlmThreadSemaphoreWin32.cpp b/IlmBase/IlmThread/IlmThreadSemaphoreWin32.cpp index 3e5c372306..b794f8aafe 100644 --- a/IlmBase/IlmThread/IlmThreadSemaphoreWin32.cpp +++ b/IlmBase/IlmThread/IlmThreadSemaphoreWin32.cpp @@ -38,6 +38,8 @@ // //----------------------------------------------------------------------------- +#ifdef _WIN32 + #include "IlmThreadSemaphore.h" #include "Iex.h" #include @@ -145,3 +147,5 @@ Semaphore::value() const ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT + +#endif // _WIN32 diff --git a/IlmBase/IlmThread/IlmThreadWin32.cpp b/IlmBase/IlmThread/IlmThreadWin32.cpp index 43ec23f6e6..d18094ede2 100644 --- a/IlmBase/IlmThread/IlmThreadWin32.cpp +++ b/IlmBase/IlmThread/IlmThreadWin32.cpp @@ -42,6 +42,7 @@ #include "IlmBaseConfig.h" #ifdef ILMBASE_FORCE_CXX03 +#ifdef _WIN32 #include "IlmThread.h" #include "Iex.h" @@ -98,4 +99,5 @@ Thread::start () ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT +#endif // _WIN32 #endif diff --git a/IlmBase/Imath/CMakeLists.txt b/IlmBase/Imath/CMakeLists.txt index 8faa97a081..300cbd0342 100644 --- a/IlmBase/Imath/CMakeLists.txt +++ b/IlmBase/Imath/CMakeLists.txt @@ -1,56 +1,13 @@ -# yue.nicholas@gmail.com - -SET (ILMBASE_LIB_TARGETS "") - -SET ( IMATH_SOURCES - ImathRandom.cpp - ImathColorAlgo.cpp - ImathFun.cpp - ImathVec.cpp - ImathMatrixAlgo.cpp -) - -IF ( OPENEXR_BUILD_SHARED ) - LIST ( APPEND ILMBASE_LIB_TARGETS Imath ) - - ADD_LIBRARY ( Imath SHARED ${IMATH_SOURCES} ) - - TARGET_COMPILE_DEFINITIONS ( Imath PRIVATE IMATH_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( Imath PUBLIC OPENEXR_DLL ) - ENDIF () - - TARGET_LINK_LIBRARIES(Imath PUBLIC IlmBase::Iex) - SET_TARGET_PROPERTIES ( Imath - PROPERTIES - VERSION ${OPENEXR_VERSION} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "Imath${ILMBASE_LIBSUFFIX}" - ) -ENDIF () - -IF (BUILD_ILMBASE_STATIC) - LIST ( APPEND ILMBASE_LIB_TARGETS Imath_static ) - - ADD_LIBRARY ( Imath_static STATIC ${IMATH_SOURCES} ) - - SET_TARGET_PROPERTIES ( Imath_static - PROPERTIES - VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH} - OUTPUT_NAME "Imath${ILMBASE_LIBSUFFIX}_s" - ) -ENDIF () - -IF (OPENEXR_BUILD_SHARED OR BUILD_ILMBASE_STATIC) - INSTALL ( TARGETS ${ILMBASE_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES +ilmbase_define_library(Imath + PRIV_EXPORT IMATH_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES + ImathRandom.cpp + ImathColorAlgo.cpp + ImathFun.cpp + ImathVec.cpp + ImathMatrixAlgo.cpp + HEADERS ImathBoxAlgo.h ImathBox.h ImathColorAlgo.h @@ -84,14 +41,6 @@ INSTALL ( ImathSphere.h ImathVecAlgo.h ImathVec.h - - DESTINATION - include/OpenEXR + DEPENDENCIES + IlmBase::Half IlmBase::IexMath ) - -if (OPENEXR_BUILD_SHARED) - add_library(IlmBase::Imath ALIAS Imath) -endif() -if (BUILD_ILMBASE_STATIC) - add_library(IlmBase::Imath_static ALIAS Imath_static) -endif() diff --git a/IlmBase/ImathTest/CMakeLists.txt b/IlmBase/ImathTest/CMakeLists.txt index 46841b81dc..93741cd606 100644 --- a/IlmBase/ImathTest/CMakeLists.txt +++ b/IlmBase/ImathTest/CMakeLists.txt @@ -1,6 +1,5 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( ImathTest +add_executable(ImathTest main.cpp testBox.cpp testBoxAlgo.cpp @@ -24,12 +23,7 @@ ADD_EXECUTABLE ( ImathTest testShear.cpp testTinySVD.cpp testVec.cpp - ) - -ADD_TEST ( TestImath ImathTest ) - -TARGET_LINK_LIBRARIES ( ImathTest - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - ) +) +target_link_libraries(ImathTest IlmBase::Imath) +add_test(IlmBase.Imath ImathTest) diff --git a/IlmBase/Makefile.am b/IlmBase/Makefile.am index 5223a7649d..f2e95df671 100644 --- a/IlmBase/Makefile.am +++ b/IlmBase/Makefile.am @@ -12,18 +12,12 @@ SUBDIRS = \ DIST_SUBDIRS = \ $(SUBDIRS) - EXTRA_DIST = \ AUTHORS ChangeLog LICENSE NEWS \ README.md \ bootstrap \ - config.windows/IlmBaseConfig.h \ CMakeLists.txt -dist-hook: - cp -fpR $(abspath $(srcdir)/..)/cmake $(distdir) - find $(distdir)/cmake -type d ! -perm -700 -exec chmod u+rwx {} \; - pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = IlmBase.pc diff --git a/IlmBase/config/CMakeLists.txt b/IlmBase/config/CMakeLists.txt new file mode 100644 index 0000000000..fcb1448b93 --- /dev/null +++ b/IlmBase/config/CMakeLists.txt @@ -0,0 +1,104 @@ + +include(CheckIncludeFiles) +include(CheckSymbolExists) +include(CheckLibraryExists) +include(CheckStructHasMember) + +check_include_files(ucontext.h ILMBASE_HAVE_UCONTEXT_H) +if(ILMBASE_HAVE_UCONTEXT_H) + # TODO: remove this once we cleanly have ILMBASE_ prefix on all #defines + set(HAVE_UCONTEXT_H ON) + check_struct_has_member("struct _libc_fpstate" mxcsr ucontext.h ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT) + if(NOT ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT) + check_include_files(asm/sigcontext.h ILMBASE_HAVE_SIGCONTEXT_H) + if(ILMBASE_HAVE_SIGCONTEXT_H) + check_struct_has_member("struct _fpstate" mxcsr asm/sigcontext.h ILMBASE_HAVE_SIGCONTEXT_CONTROL_REGISTER_SUPPORT) + endif() + endif() +endif() + +# so we know how to link / use... +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG TRUE) +find_package(Threads) +###check_include_files(pthread.h ILMBASE_HAVE_PTHREAD) +if(Threads_FOUND) + set_target_properties(Threads::Threads PROPERTIES IMPORTED_GLOBAL TRUE) + if(CMAKE_HAVE_PTHREAD_H OR CMAKE_USE_PTHREADS_INIT OR CMAKE_HP_PTHREAD_INIT) + set(ILMBASE_HAVE_PTHREAD ON) + # TODO: remove this once we cleanly have ILMBASE_ prefix on all #defines + set(HAVE_PTHREAD ON) + endif() + + # we have threads, but do we have posix semaphores for sem_init? + # should be in pthreads + check_include_files(semaphore.h ILMBASE_HAVE_SEMAPHORE_H) + if(ILMBASE_HAVE_SEMAPHORE_H AND ILMBASE_HAVE_PTHREAD) + # should just be in libc, so no need for check_library_exists + set(CMAKE_REQUIRED_FLAGS ${CMAKE_THREAD_LIBS_INIT}) + check_library_exists(pthread sem_init "" ILMBASE_HAVE_POSIX_SEMAPHORES) + # TODO: remove this once we cleanly have ILMBASE_ prefix on all #defines + if(ILMBASE_HAVE_POSIX_SEMAPHORES) + set(HAVE_POSIX_SEMAPHORES ON) + endif() + set(CMAKE_REQUIRED_FLAGS) + endif() +endif() + +if (ILMBASE_ENABLE_LARGE_STACK) + set(ILMBASE_HAVE_LARGE_STACK ON) +endif() + +configure_file(IlmBaseConfig.h.in_cmake ${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h) +configure_file(IlmBaseConfigInternal.h.in_cmake ${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfigInternal.h) + +add_library(IlmBaseConfig INTERFACE) +target_include_directories(IlmBaseConfig INTERFACE + $ + $ + $) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h + DESTINATION + ${CMAKE_INSTALL_INCLUDEDIR}/${ILMBASE_OUTPUT_SUBDIR} +) + +install(TARGETS IlmBaseConfig EXPORT ${PROJECT_NAME}) +add_library(IlmBase::Config ALIAS IlmBaseConfig) + +option(INSTALL_PKG_CONFIG "Install IlmBase.pc file" ON) +if(INSTALL_PKG_CONFIG) + # use a helper function to avoid variable pollution, but pretty simple + function(ilmbase_pkg_config_help pcinfile) + set(prefix ${CMAKE_INSTALL_PREFIX}) + set(exec_prefix ${CMAKE_INSTALL_BINDIR}) + set(libdir ${CMAKE_INSTALL_LIBDIR}) + set(includedir ${CMAKE_INSTALL_INCLUDEDIR}) + set(LIB_SUFFIX ${ILMBASE_LIB_SUFFIX}) + if(TARGET Threads::Threads) + # hrm, can't use properties as they end up as generator expressions + # which don't seem to evaluate + if(THREADS_HAVE_PTHREAD_ARG) + set(PTHREAD_CFLAGS "-pthread") + endif() + set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) + endif() + string(REPLACE ".in" "" pcout ${pcinfile}) + configure_file(${pcinfile} ${CMAKE_CURRENT_BINARY_DIR}/${pcout} @ONLY) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${pcout} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) + endfunction() + ilmbase_pkg_config_help(../IlmBase.pc.in) +endif() + +# The main export of the configuration - This is the +# moral equivalent of a pkg-config file for cmake +# and replaces the Find*.cmake of the "old" cmake +install(EXPORT ${PROJECT_NAME} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + NAMESPACE ${PROJECT_NAME}:: +) diff --git a/IlmBase/config/IlmBaseConfig.h.in b/IlmBase/config/IlmBaseConfig.h.in index c90029df53..70fead829a 100644 --- a/IlmBase/config/IlmBaseConfig.h.in +++ b/IlmBase/config/IlmBaseConfig.h.in @@ -1,3 +1,8 @@ +// This file is auto-generated by the configure step + +#ifndef INCLUDED_ILMBASE_CONFIG_H +#define INCLUDED_ILMBASE_CONFIG_H 1 + // // Define and set to 1 if the target system has c++11/14 support // and you want IlmBase to NOT use it's features @@ -21,15 +26,6 @@ #undef HAVE_POSIX_SEMAPHORES -#undef HAVE_UCONTEXT_H - - -// -// Dealing with FPEs -// -#undef ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT - - // // Define and set to 1 if the target system has support for large // stack sizes. @@ -71,8 +67,8 @@ #undef ILMBASE_VERSION_PATCH // Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define ILMBASE_VERSION_HEX ((ILMBASE_VERSION_MAJOR << 24) | \ - (ILMBASE_VERSION_MINOR << 16) | \ - (ILMBASE_VERSION_PATCH << 8)) - +#define ILMBASE_VERSION_HEX ((uint32_t(ILMBASE_VERSION_MAJOR) << 24) | \ + (uint32_t(ILMBASE_VERSION_MINOR) << 16) | \ + (uint32_t(ILMBASE_VERSION_PATCH) << 8)) +#endif // INCLUDED_ILMBASE_CONFIG_H diff --git a/IlmBase/config/IlmBaseConfig.h.in_cmake b/IlmBase/config/IlmBaseConfig.h.in_cmake new file mode 100644 index 0000000000..18f5f7ffbe --- /dev/null +++ b/IlmBase/config/IlmBaseConfig.h.in_cmake @@ -0,0 +1,49 @@ +// This file is auto-generated by the cmake configure step + +#ifndef INCLUDED_ILMBASE_CONFIG_H +#define INCLUDED_ILMBASE_CONFIG_H 1 + +// +// Options / configuration based on O.S. / compiler +///////////////////// + +#cmakedefine HAVE_PTHREAD 1 +#cmakedefine HAVE_POSIX_SEMAPHORES 1 + +// +// Define and set to 1 if the target system has support for large +// stack sizes. +// +#cmakedefine ILMBASE_HAVE_LARGE_STACK + +////////////////////// +// +// C++ namespace configuration / options + +// Current (internal) library namepace name and corresponding public +// client namespaces. +#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM @ILMBASE_NAMESPACE_CUSTOM@ +#define IMATH_INTERNAL_NAMESPACE @ILMBASE_INTERNAL_IMATH_NAMESPACE@ +#define IEX_INTERNAL_NAMESPACE @ILMBASE_INTERNAL_IEX_NAMESPACE@ +#define ILMTHREAD_INTERNAL_NAMESPACE @ILMBASE_INTERNAL_ILMTHREAD_NAMESPACE@ + +#define ILMBASE_NAMESPACE_CUSTOM @ILMBASE_NAMESPACE_CUSTOM@ +#define IMATH_NAMESPACE @ILMBASE_IMATH_NAMESPACE@ +#define IEX_NAMESPACE @ILMBASE_IEX_NAMESPACE@ +#define ILMTHREAD_NAMESPACE @ILMBASE_ILMTHREAD_NAMESPACE@ + +// +// Version information +// +#define ILMBASE_VERSION_STRING "@ILMBASE_VERSION@" +#define ILMBASE_PACKAGE_STRING "@ILMBASE_PACKAGE_NAME@" + +#define ILMBASE_VERSION_MAJOR @ILMBASE_VERSION_MAJOR@ +#define ILMBASE_VERSION_MINOR @ILMBASE_VERSION_MINOR@ +#define ILMBASE_VERSION_PATCH @ILMBASE_VERSION_PATCH@ + +#define ILMBASE_VERSION_HEX ((uint32_t(ILMBASE_VERSION_MAJOR) << 24) | \ + (uint32_t(ILMBASE_VERSION_MINOR) << 16) | \ + (uint32_t(ILMBASE_VERSION_PATCH) << 8)) + +#endif // INCLUDED_ILMBASE_CONFIG_H diff --git a/IlmBase/config/IlmBaseConfigInternal.h.in b/IlmBase/config/IlmBaseConfigInternal.h.in new file mode 100644 index 0000000000..e0aa218762 --- /dev/null +++ b/IlmBase/config/IlmBaseConfigInternal.h.in @@ -0,0 +1,8 @@ + +// +// Dealing with FPEs +// +#undef HAVE_UCONTEXT_H + +#undef ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT + diff --git a/IlmBase/config/IlmBaseConfigInternal.h.in_cmake b/IlmBase/config/IlmBaseConfigInternal.h.in_cmake new file mode 100644 index 0000000000..84d8aa2f56 --- /dev/null +++ b/IlmBase/config/IlmBaseConfigInternal.h.in_cmake @@ -0,0 +1,7 @@ + +// +// Dealing with FPEs +// +#cmakedefine HAVE_UCONTEXT_H 1 +#cmakedefine ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT 1 +#cmakedefine ILMBASE_HAVE_SIGCONTEXT_CONTROL_REGISTER_SUPPORT 1 diff --git a/IlmBase/config/IlmBaseSetup.cmake b/IlmBase/config/IlmBaseSetup.cmake new file mode 100644 index 0000000000..03ce715343 --- /dev/null +++ b/IlmBase/config/IlmBaseSetup.cmake @@ -0,0 +1,86 @@ + +include(GNUInstallDirs) + +######################## +## Target configuration + +# This is primarily for the halfFunction code that enables a stack +# object (if you enable this) that contains a LUT of the function +option(ILMBASE_ENABLE_LARGE_STACK "Enables code to take advantage of large stack support" OFF) + +# What C++ standard to compile for +# VFX Platform 18 is c++14, so let's enable that by default +set(ILMBASE_CXX_STANDARD "14" CACHE STRING "C++ standard to compile against") + +# Namespace-related settings, allows one to customize the +# namespace generated, and to version the namespaces +set(ILMBASE_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") +set(ILMBASE_INTERNAL_IMATH_NAMESPACE "Imath_${ILMBASE_VERSION_API}" CACHE STRING "Real namespace for Imath that will end up in compiled symbols") +set(ILMBASE_INTERNAL_IEX_NAMESPACE "Iex_${ILMBASE_VERSION_API}" CACHE STRING "Real namespace for Iex that will end up in compiled symbols") +set(ILMBASE_INTERNAL_ILMTHREAD_NAMESPACE "IlmThread_${ILMBASE_VERSION_API}" CACHE STRING "Real namespace for IlmThread that will end up in compiled symbols") +set(ILMBASE_IMATH_NAMESPACE "Imath" CACHE STRING "Public namespace alias for Imath") +set(ILMBASE_IEX_NAMESPACE "Iex" CACHE STRING "Public namespace alias for Iex") +set(ILMBASE_ILMTHREAD_NAMESPACE "IlmThread" CACHE STRING "Public namespace alias for IlmThread") +set(ILMBASE_PACKAGE_NAME "IlmBase ${ILMBASE_VERSION}" CACHE STRING "Public string / label for displaying package") + +######################## +## Build related options + +# This is a variable here for use in install lines, but OpenEXR pretty much +# relies on this code to be intermingled currently... but someone +# who is making an ilmbase only package could put it somewhere else... +# NB: If you want to change this, make sure places like the pkgconfig +# file are updated as appropriate +set(ILMBASE_OUTPUT_SUBDIR OpenEXR) + +# This does not seem to be available as a per-target property, +# but is pretty harmless to set globally +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# Suffix for debug configuration libraries +# (if you should choose to install those) +set(CMAKE_DEBUG_POSTFIX "_d" CACHE STRING "Suffix for debug builds") + +# Usual cmake option to build shared libraries or not +option(BUILD_SHARED_LIBS "Build shared library" ON) +# This allows a "double library" setup, where we compile both +# a dynamic and shared library +option(ILMBASE_BUILD_BOTH_STATIC_SHARED "Build both static and shared libraries in one step (otherwise follows BUILD_SHARED_LIBS)" OFF) +if (ILMBASE_BUILD_BOTH_STATIC_SHARED) + set(BUILD_SHARED_LIBS ON) +endif() +# Suffix to append to root name, this helps with version management +# but can be turned off if you don't care, or otherwise customized +set(ILMBASE_LIB_SUFFIX "-${ILMBASE_VERSION_API}" CACHE STRING "string added to the end of all the libraries") +# when building both dynamic and static, the additional string to +# add to the library name, such that to get static linkage, you +# would use -lImath_static (or target_link_libraries(xxx IlmBase::Imath_static)) +set(ILMBASE_STATIC_LIB_SUFFIX "_static" CACHE STRING "When building both static and shared, name to append to static library (in addition to normal suffix)") + +if(APPLE) + # TODO: Right now, this will make a framework for every library + # is that desired? Or should the framework be the set of libraries? + # or trigger some compile-all-as-one-big-.so? + set(CMAKE_MACOSX_RPATH ON) + option(ILMBASE_BUILD_FRAMEWORK "Built Framework bundle" OFF) + if(ILMBASE_BUILD_FRAMEWORK) + set(BUILD_SHARED_LIBS ON) + endif() +endif() + +######################## + +# Code check related features +option(ILMBASE_USE_CLANG_TIDY "Check if clang-tidy is available, and enable that" OFF) +if(ILMBASE_USE_CLANG_TIDY) + find_program(ILMBASE_CLANG_TIDY_BIN clang-tidy) + if(ILMBASE_CLANG_TIDY_BIN-NOTFOUND) + message(FATAL_ERROR "clang-tidy processing requested, but no clang-tidy found") + endif() + # TODO: Need to define the list of valid checks and add a file with said list + set(CMAKE_CXX_CLANG_TIDY + ${ILMBASE_CLANG_TIDY_BIN}; + -header-filter=.; + -checks=*; + ) +endif() diff --git a/IlmBase/config/LibraryDefine.cmake b/IlmBase/config/LibraryDefine.cmake new file mode 100644 index 0000000000..ad5d2bde68 --- /dev/null +++ b/IlmBase/config/LibraryDefine.cmake @@ -0,0 +1,84 @@ +# NB: This function has a number if IlmBase specific names / variables +# in it, so be careful copying... +function(ILMBASE_DEFINE_LIBRARY libname) + set(options) + set(oneValueArgs PRIV_EXPORT CURDIR CURBINDIR) + set(multiValueArgs SOURCES HEADERS DEPENDENCIES PRIVATE_DEPS) + cmake_parse_arguments(ILMBASE_CURLIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(objlib ${libname}_Object) + add_library(${objlib} OBJECT ${ILMBASE_CURLIB_SOURCES}) + target_compile_features(${objlib} PUBLIC cxx_std_${ILMBASE_CXX_STANDARD}) + if(ILMBASE_CURLIB_PRIV_EXPORT) + target_compile_definitions(${objlib} PRIVATE ${ILMBASE_CURLIB_PRIV_EXPORT}) + if(WIN32) + target_compile_definitions(${objlib} PUBLIC OPENEXR_DLL) + endif() + endif() + if(ILMBASE_CURLIB_CURDIR) + target_include_directories(${objlib} INTERFACE $) + endif() + if(ILMBASE_CURLIB_CURBINDIR) + target_include_directories(${objlib} PRIVATE $) + endif() + target_link_libraries(${objlib} PUBLIC ${PROJECT_NAME}::Config ${ILMBASE_CURLIB_DEPENDENCIES}) + if(ILMBASE_CURLIB_PRIVATE_DEPS) + target_link_libraries(${objlib} PRIVATE ${ILMBASE_CURLIB_PRIVATE_DEPS}) + endif() + set_property(TARGET ${objlib} PROPERTY CXX_STANDARD_REQUIRED ON) + set_property(TARGET ${objlib} PROPERTY CXX_EXTENSIONS OFF) + set_property(TARGET ${objlib} PROPERTY POSITION_INDEPENDENT_CODE ON) + + set_property(TARGET ${objlib} PROPERTY PUBLIC_HEADER ${ILMBASE_CURLIB_HEADERS}) + + install(TARGETS ${objlib} + EXPORT ${PROJECT_NAME} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${ILMBASE_OUTPUT_SUBDIR} + ) + + # let the default behaviour BUILD_SHARED_LIBS control the + # disposition of the default library... + add_library(${libname} $) + target_link_libraries(${libname} PUBLIC ${objlib}) + if(BUILD_SHARED_LIBS) + set_target_properties(${libname} PROPERTIES + SOVERSION ${ILMBASE_SOVERSION} + VERSION ${ILMBASE_LIB_VERSION} + OUTPUT_NAME "${libname}${ILMBASE_LIB_SUFFIX}" + ) + endif() + if(ILMBASE_BUILD_FRAMEWORK) + set_target_properties(${libname} PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION ${ILMBASE_LIB_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER io.aswf.OpenEXR-IlmBase + ) + endif() + add_library(${PROJECT_NAME}::${libname} ALIAS ${libname}) + + install(TARGETS ${libname} + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + + if(ILMBASE_BUILD_BOTH_STATIC_SHARED) + add_library(${libname}_static STATIC $) + target_link_libraries(${libname}_static INTERFACE ${objlib}) + set_target_properties(${libname}_static PROPERTIES + SOVERSION ${ILMBASE_SOVERSION} + VERSION ${ILMBASE_LIB_VERSION} + OUTPUT_NAME "${libname}${ILMBASE_LIB_SUFFIX}${ILMBASE_STATIC_LIB_SUFFIX}" + ) + add_library(${PROJECT_NAME}::${libname}_static ALIAS ${libname}_static) + + install(TARGETS ${libname}_static + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + endif() +endfunction() diff --git a/IlmBase/config/ParseConfigure.cmake b/IlmBase/config/ParseConfigure.cmake new file mode 100644 index 0000000000..e903768787 --- /dev/null +++ b/IlmBase/config/ParseConfigure.cmake @@ -0,0 +1,18 @@ + +file(READ configure.ac CONFIGURE_AC_CONTENTS) +string(REGEX MATCH "AC_INIT\\(IlmBase,[ ]*([0-9]+).([0-9]+).([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(ILMBASE_VERSION_MAJOR ${CMAKE_MATCH_1}) +set(ILMBASE_VERSION_MINOR ${CMAKE_MATCH_2}) +set(ILMBASE_VERSION_PATCH ${CMAKE_MATCH_3}) +set(ILMBASE_VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH}) +set(ILMBASE_VERSION_API ${ILMBASE_VERSION_MAJOR}_${ILMBASE_VERSION_MINOR}) +string(REGEX MATCH "LIBTOOL_CURRENT=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(ILMBASE_SOCURRENT ${CMAKE_MATCH_1}) +string(REGEX MATCH "LIBTOOL_REVISION=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(ILMBASE_SOREVISION ${CMAKE_MATCH_1}) +string(REGEX MATCH "LIBTOOL_AGE=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(ILMBASE_SOAGE ${CMAKE_MATCH_1}) +math(EXPR ILMBASE_SOVERSION "${ILMBASE_SOCURRENT} - ${ILMBASE_SOAGE}") +set(ILMBASE_LIB_VERSION "${ILMBASE_SOVERSION}.${ILMBASE_SOAGE}.${ILMBASE_SOREVISION}") +message(NOTICE ": Configure ILMBASE Version: ${ILMBASE_VERSION} Lib API: ${ILMBASE_LIB_VERSION}") +unset(CONFIGURE_AC_CONTENTS) diff --git a/IlmBase/configure.ac b/IlmBase/configure.ac index c6f49134f6..45f7dae813 100644 --- a/IlmBase/configure.ac +++ b/IlmBase/configure.ac @@ -11,6 +11,7 @@ AC_SUBST(ILMBASE_VERSION_API, ${ILMBASE_VERSION_MAJOR}_${ILMBASE_VERSION_MINOR}) AC_CANONICAL_HOST AC_CONFIG_SRCDIR(ImathTest/main.cpp) AC_CONFIG_HEADER(config/IlmBaseConfig.h) +AC_CONFIG_HEADER(config/IlmBaseConfigInternal.h) AM_INIT_AUTOMAKE(1.6.3) dnl Require automake 1.6.3 or better AM_MAINTAINER_MODE diff --git a/OpenEXR/CMakeLists.txt b/OpenEXR/CMakeLists.txt index 1df2d27e65..14e88e4963 100644 --- a/OpenEXR/CMakeLists.txt +++ b/OpenEXR/CMakeLists.txt @@ -1,250 +1,65 @@ -IF (WIN32) - CMAKE_MINIMUM_REQUIRED(VERSION 3.11) -ELSE() - CMAKE_MINIMUM_REQUIRED(VERSION 3.2) -ENDIF() - -# test if we are being built as a standalone library or if -# we are being built as part of the overall project -IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - ELSE() - MESSAGE(FATAL_ERROR "Please compile using the top-level CMakeLists.txt or a pre-built package") - ENDIF() - INCLUDE(OpenEXRVersion) - SET(OPENEXR_STANDALONE ON) -ENDIF() - -PROJECT (openexr VERSION ${OPENEXR_VERSION}) - -IF(OPENEXR_STANDALONE) - INCLUDE(OpenEXRSettings) -ENDIF() - -IF (NOT ILMBASE_PACKAGE_PREFIX) - SET (ILMBASE_PACKAGE_PREFIX ${CMAKE_INSTALL_PREFIX}) -ENDIF () - -ADD_DEFINITIONS (-DILM_IMF_TEST_IMAGEDIR="${CMAKE_CURRENT_SOURCE_DIR}/IlmImfTest/" ) - -IF (NOT WIN32) - SET ( PTHREAD_LIB pthread ) -ENDIF() - -IF(WIN32) - SET(CMAKE_DEBUG_POSTFIX "_d") -ENDIF() - - -MACRO(SET_ILMBASE_INCLUDE_DIRS _target) - TARGET_INCLUDE_DIRECTORIES(${_target} - PRIVATE ${ZLIB_INCLUDE_DIR} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../config - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../../IlmBase/config - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../IlmImf - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../IlmImfUtil - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/Half - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/Iex - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/IexMath - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/IlmThread - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/Imath - ) -ENDMACRO() - -LINK_DIRECTORIES ( ${ILMBASE_PACKAGE_PREFIX}/lib ) -MESSAGE ( "ILMBASE_PACKAGE_PREFIX = " ${ILMBASE_PACKAGE_PREFIX}) - -IF (NOT WIN32 AND NOT APPLE) - # Test for GCC-style inline asm support with AVX instructions - INCLUDE (CheckCXXSourceCompiles) - CHECK_CXX_SOURCE_COMPILES ( - " - int main() - { - #if defined(__GNUC__) && defined(__SSE2__) - int n = 0; - int eax = 0; - int edx = 0; - __asm__( - \"xgetbv ;\" - \"vzeroupper \" - : \"=a\"(eax), \"=d\"(edx) : \"c\"(n) : ); - #else - #error No GCC style inline asm supported for AVX instructions - #endif - } - " HAVE_GCC_INLINE_ASM_AVX) - - # Check if sysconf(_SC_NPROCESSORS_ONLN) can be used for CPU count - CHECK_CXX_SOURCE_COMPILES ( - " - #include - int main() - { - sysconf(_SC_NPROCESSORS_ONLN); - } - " HAVE_SYSCONF_NPROCESSORS_ONLN) -ENDIF() - - -########################## -# OpenEXRConfig.h generation -########################## - -# By using a temp file then using configure_file below with copy, we -# avoid constantly updating it (unless a value has changed) -SET(OPENEXR_TMP_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h.in) -IF (WIN32) - FILE ( WRITE ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" ) -ELSEIF (APPLE) - FILE ( WRITE ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_DARWIN 1\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#include \n" ) -ELSE () - # Linux - FILE ( WRITE ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_LINUX_PROCFS 1\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_LARGE_STACK 1\n" ) -ENDIF() - -IF (OPENEXR_NAMESPACE_VERSIONING) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 1\n") - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_NAMESPACE Imf\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf_${OPENEXR_VERSION_API}\n\n" ) -ELSE () - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 0\n") - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_NAMESPACE Imf\n" ) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf\n\n" ) -ENDIF () - -FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_VERSION_STRING \"${OPENEXR_VERSION}\"\n" ) -FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_PACKAGE_STRING \"OpenEXR ${OPENEXR_VERSION}\"\n" ) - - -FILE ( APPEND ${OPENEXR_TMP_CONFIG} " -#define OPENEXR_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR} -#define OPENEXR_VERSION_MINOR ${OPENEXR_VERSION_MINOR} -#define OPENEXR_VERSION_PATCH ${OPENEXR_VERSION_PATCH} -") - - - FILE ( APPEND ${OPENEXR_TMP_CONFIG} " -// Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define OPENEXR_VERSION_HEX ((OPENEXR_VERSION_MAJOR << 24) | \\ - (OPENEXR_VERSION_MINOR << 16) | \\ - (OPENEXR_VERSION_PATCH << 8))\n -") - -IF (HAVE_GCC_INLINE_ASM_AVX) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX 1\n" ) -ENDIF() - -IF (HAVE_SYSCONF_NPROCESSORS_ONLN) - FILE ( APPEND ${OPENEXR_TMP_CONFIG} "#define OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN 1\n" ) -ENDIF() - -CONFIGURE_FILE ( ${OPENEXR_TMP_CONFIG} ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h COPYONLY ) -FILE ( REMOVE ${OPENEXR_TMP_CONFIG} ) -UNSET ( OPENEXR_TMP_CONFIG ) - -########################## -# IlmImf library -########################## -ADD_SUBDIRECTORY ( IlmImf ) - -IF ( OPENEXR_BUILD_SHARED ) - SET_TARGET_PROPERTIES ( IlmImf - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmImf${OPENEXR_LIBSUFFIX}" - ) -ENDIF () - -########################## -# IlmImfUtil library -########################## -ADD_SUBDIRECTORY ( IlmImfUtil ) - -IF ( OPENEXR_BUILD_SHARED ) - SET_TARGET_PROPERTIES ( IlmImfUtil - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmImfUtil${OPENEXR_LIBSUFFIX}" - ) -ENDIF () - -########################## -# Example Code -########################## -ADD_SUBDIRECTORY ( IlmImfExamples ) - - -########################## -# Tests -########################## -IF (ENABLE_TESTS) - ADD_SUBDIRECTORY ( IlmImfTest ) - ADD_SUBDIRECTORY ( IlmImfUtilTest ) - ADD_SUBDIRECTORY ( IlmImfFuzzTest ) -ENDIF () +# "More Modern" CMake version +cmake_minimum_required(VERSION 3.12) + +# this is for target_sources, new policy converts relative paths to absolute +cmake_policy(SET CMP0076 NEW) + +# we include this first to parse configure.ac and extract the version +# numbers +include(config/ParseConfigure.cmake) + +project(OpenEXR VERSION ${OPENEXR_VERSION}) + +# Everyone depends on IlmBase, and we currently rely on +# the version matched with our release +find_package(IlmBase ${OPENEXR_VERSION} EXACT REQUIRED) + +####################################### +####################################### +# This declares all the configuration variables visible +# in cmake-gui or similar and the rest of the global +# project setup +# +# Please look at this file to see what is configurable +####################################### +####################################### +include(config/OpenEXRSetup.cmake) + +# generates config headers, package config files +add_subdirectory(config) + +# utility function for the repeated boilerplate of defining +# the libraries +include(config/LibraryDefine.cmake) + +add_subdirectory( IlmImf ) +add_subdirectory( IlmImfUtil ) +add_subdirectory( IlmImfExamples ) + +# Can't seem to do EXCLUDE_FROM_ALL on the test executables +# since you can't then create a dependency on the internal +# "test" target such that it is auto built +option(OPENEXR_ENABLE_TESTS "Enables building of tests" ON) +if(OPENEXR_ENABLE_TESTS) + enable_testing() + add_subdirectory( IlmImfTest ) + add_subdirectory( IlmImfUtilTest ) + add_subdirectory( IlmImfFuzzTest ) +endif() ########################## # Binaries / Utilities ########################## -IF (OPENEXR_BUILD_UTILS) - ADD_SUBDIRECTORY ( exrheader ) - ADD_SUBDIRECTORY ( exrmaketiled ) - ADD_SUBDIRECTORY ( exrstdattr ) - ADD_SUBDIRECTORY ( exrmakepreview ) - ADD_SUBDIRECTORY ( exrenvmap ) - ADD_SUBDIRECTORY ( exrmultiview ) - ADD_SUBDIRECTORY ( exrmultipart ) -ENDIF () - -########################## -# Installation -########################## - -INSTALL ( FILES - ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h - DESTINATION - ${CMAKE_INSTALL_PREFIX}/include/OpenEXR - ) - -# Documentation -INSTALL ( FILES - doc/TechnicalIntroduction.pdf - doc/ReadingAndWritingImageFiles.pdf - doc/OpenEXRFileLayout.pdf - doc/MultiViewOpenEXR.pdf - doc/InterpretingDeepPixels.pdf - doc/TheoryDeepPixels.pdf - DESTINATION - ${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION} - ) - -# Examples -INSTALL ( FILES - IlmImfExamples/main.cpp - IlmImfExamples/drawImage.cpp - IlmImfExamples/rgbaInterfaceExamples.cpp - IlmImfExamples/rgbaInterfaceTiledExamples.cpp - IlmImfExamples/generalInterfaceExamples.cpp - IlmImfExamples/lowLevelIoExamples.cpp - IlmImfExamples/previewImageExamples.cpp - IlmImfExamples/generalInterfaceTiledExamples.cpp - IlmImfExamples/generalInterfaceTiledExamples.h - IlmImfExamples/drawImage.h - IlmImfExamples/rgbaInterfaceExamples.h - IlmImfExamples/generalInterfaceExamples.h - IlmImfExamples/rgbaInterfaceTiledExamples.h - IlmImfExamples/lowLevelIoExamples.h - IlmImfExamples/previewImageExamples.h - IlmImfExamples/namespaceAlias.h - DESTINATION - ${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION}/examples - ) +if(OPENEXR_BUILD_UTILS) + add_subdirectory( exr2aces ) + add_subdirectory( exrbuild ) + add_subdirectory( exrheader ) + add_subdirectory( exrmaketiled ) + add_subdirectory( exrstdattr ) + add_subdirectory( exrmakepreview ) + add_subdirectory( exrenvmap ) + add_subdirectory( exrmultiview ) + add_subdirectory( exrmultipart ) +endif() + +add_subdirectory(doc) diff --git a/OpenEXR/IlmImf/CMakeLists.txt b/OpenEXR/IlmImf/CMakeLists.txt index 9d399dcbc8..cd8e4f6e30 100644 --- a/OpenEXR/IlmImf/CMakeLists.txt +++ b/OpenEXR/IlmImf/CMakeLists.txt @@ -1,262 +1,118 @@ -# yue.nicholas@gmail.com - -SET(CMAKE_INCLUDE_CURRENT_DIR 1) - -SET(BUILD_B44EXPLOGTABLE OFF) -IF (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h") - SET(BUILD_B44EXPLOGTABLE ON) -ENDIF () - -IF (BUILD_B44EXPLOGTABLE) - ADD_EXECUTABLE ( b44ExpLogTable - b44ExpLogTable.cpp - ) - - IF (WIN32) - TARGET_LINK_LIBRARIES ( b44ExpLogTable - IlmBase::Half_static - IlmBase::IlmThread_static - IlmBase::Iex_static) - ELSE() - TARGET_LINK_LIBRARIES ( b44ExpLogTable - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB}) - ENDIF() - - TARGET_INCLUDE_DIRECTORIES ( b44ExpLogTable - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../IlmBase/Half - ) - - ADD_CUSTOM_COMMAND ( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h - COMMAND $ > ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h - DEPENDS b44ExpLogTable - ) - -ELSE () - message (STATUS "Skipping build of b44ExpLogTable.h") -ENDIF() - -if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h") - ADD_EXECUTABLE ( dwaLookups - dwaLookups.cpp - ) - - SET(BUILD_DWALOOKUPS ON) - - SET_ILMBASE_INCLUDE_DIRS(dwaLookups) - - IF (WIN32) - TARGET_LINK_LIBRARIES ( dwaLookups - IlmBase::Half_static - IlmBase::IlmThread_static - IlmBase::Iex_static) - ELSE() - TARGET_LINK_LIBRARIES ( dwaLookups - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB}) - ENDIF() +add_executable(b44ExpLogTable b44ExpLogTable.cpp) +target_link_libraries(b44ExpLogTable PRIVATE OpenEXR::Config IlmBase::Half IlmBase::IlmThread IlmBase::Iex) +# TODO: Old file had logic to skip these if the file already exists +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h + COMMAND $ > ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h + DEPENDS b44ExpLogTable +) - ADD_CUSTOM_COMMAND ( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h - COMMAND $ > ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h - DEPENDS dwaLookups - ) -ELSE () - message (STATUS "Skipping build of dwaLookups.h") -ENDIF() -SET ( ILMIMF_SRCS - ImfAttribute.cpp - ImfBoxAttribute.cpp - ImfCRgbaFile.cpp - ImfChannelList.cpp - ImfChannelListAttribute.cpp - ImfFloatAttribute.cpp - ImfFrameBuffer.cpp - ImfHeader.cpp - ImfIO.cpp - ImfInputFile.cpp - ImfIntAttribute.cpp - ImfLineOrderAttribute.cpp - ImfMatrixAttribute.cpp - ImfOpaqueAttribute.cpp - ImfOutputFile.cpp - ImfRgbaFile.cpp - ImfStringAttribute.cpp - ImfVecAttribute.cpp - ImfHuf.cpp - ImfThreading.cpp - ImfWav.cpp - ImfLut.cpp - ImfCompressor.cpp - ImfRleCompressor.cpp - ImfZipCompressor.cpp - ImfPizCompressor.cpp - ImfB44Compressor.cpp - ImfDwaCompressor.cpp - ImfMisc.cpp - ImfCompressionAttribute.cpp - ImfDoubleAttribute.cpp - ImfConvert.cpp - ImfPreviewImage.cpp - ImfPreviewImageAttribute.cpp - ImfVersion.cpp - ImfChromaticities.cpp - ImfChromaticitiesAttribute.cpp - ImfKeyCode.cpp - ImfKeyCodeAttribute.cpp - ImfTimeCode.cpp - ImfTimeCodeAttribute.cpp - ImfRational.cpp - ImfRationalAttribute.cpp - ImfFramesPerSecond.cpp - ImfStandardAttributes.cpp - ImfStdIO.cpp - ImfEnvmap.cpp - ImfEnvmapAttribute.cpp - ImfScanLineInputFile.cpp - ImfTiledInputFile.cpp - ImfTiledMisc.cpp - ImfTiledOutputFile.cpp - ImfTiledRgbaFile.cpp - ImfTileDescriptionAttribute.cpp - ImfTileOffsets.cpp - ImfRgbaYca.cpp - ImfPxr24Compressor.cpp - ImfTestFile.cpp - ImfStringVectorAttribute.cpp - ImfMultiView.cpp - ImfAcesFile.cpp - ImfMultiPartOutputFile.cpp - ImfGenericOutputFile.cpp - ImfOutputPartData.cpp - ImfMultiPartInputFile.cpp - ImfGenericInputFile.cpp - ImfPartType.cpp - ImfInputPartData.cpp - ImfOutputPart.cpp - ImfTiledOutputPart.cpp - ImfInputPart.cpp - ImfTiledInputPart.cpp - ImfDeepScanLineInputPart.cpp - ImfDeepScanLineOutputPart.cpp - ImfDeepScanLineInputFile.cpp - ImfDeepScanLineOutputFile.cpp - ImfDeepTiledInputPart.cpp - ImfDeepTiledOutputPart.cpp - ImfDeepTiledInputFile.cpp - ImfDeepTiledOutputFile.cpp - ImfDeepFrameBuffer.cpp - ImfDeepCompositing.cpp - ImfCompositeDeepScanLine.cpp - ImfDeepImageStateAttribute.cpp - ImfFastHuf.cpp - ImfFloatVectorAttribute.cpp - ImfRle.cpp - ImfSystemSpecific.cpp - ImfZip.cpp +add_executable(dwaLookups dwaLookups.cpp) +target_link_libraries(dwaLookups PRIVATE OpenEXR::Config IlmBase::Imath IlmBase::Half IlmBase::IlmThread IlmBase::Iex) +# TODO: Old file had logic to skip these if the file already exists +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h + COMMAND $ > ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h + DEPENDS dwaLookups ) -IF (BUILD_B44EXPLOGTABLE) - SET_SOURCE_FILES_PROPERTIES ( +openexr_define_library(IlmImf + PRIV_EXPORT ILMIMF_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h + ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h + ImfAttribute.cpp + ImfBoxAttribute.cpp + ImfCRgbaFile.cpp + ImfChannelList.cpp + ImfChannelListAttribute.cpp + ImfFloatAttribute.cpp + ImfFrameBuffer.cpp + ImfHeader.cpp + ImfIO.cpp + ImfInputFile.cpp + ImfIntAttribute.cpp + ImfLineOrderAttribute.cpp + ImfMatrixAttribute.cpp + ImfOpaqueAttribute.cpp + ImfOutputFile.cpp + ImfRgbaFile.cpp + ImfStringAttribute.cpp + ImfVecAttribute.cpp + ImfHuf.cpp + ImfThreading.cpp + ImfWav.cpp + ImfLut.cpp + ImfCompressor.cpp + ImfRleCompressor.cpp + ImfZipCompressor.cpp + ImfPizCompressor.cpp ImfB44Compressor.cpp - PROPERTIES - OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h - ) -ENDIF () - -IF (BUILD_DWALOOKUPS) - SET_SOURCE_FILES_PROPERTIES ( ImfDwaCompressor.cpp - PROPERTIES - OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h - ) -ENDIF () - -SET (OPENEXR_LIB_TARGETS "") - -IF ( OPENEXR_BUILD_SHARED ) - LIST ( APPEND OPENEXR_LIB_TARGETS IlmImf ) - - ADD_LIBRARY ( IlmImf SHARED ${ILMIMF_SRCS} ) - - TARGET_COMPILE_DEFINITIONS ( IlmImf PRIVATE ILMIMF_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( IlmImf PUBLIC OPENEXR_DLL ) - ENDIF () - - IF (MSVC) - TARGET_COMPILE_DEFINITIONS ( IlmImf PUBLIC _CRT_SECURE_NO_WARNINGS ) - ENDIF () - - TARGET_LINK_LIBRARIES ( IlmImf - PUBLIC IlmBase::Iex - PUBLIC IlmBase::Half - PUBLIC IlmBase::Imath - PUBLIC IlmBase::IlmThread - PRIVATE ${PTHREAD_LIB} - PRIVATE ${ZLIB_LIBRARIES} - ) - SET_ILMBASE_INCLUDE_DIRS(IlmImf) - - SET_TARGET_PROPERTIES ( IlmImf - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmImf${OPENEXR_LIBSUFFIX}" - ) - - IF (BUILD_DWALOOKUPS) - ADD_DEPENDENCIES ( IlmImf dwaLookups ) - ENDIF () - - IF (BUILD_B44EXPLOGTABLE) - ADD_DEPENDENCIES ( IlmImf b44ExpLogTable ) - ENDIF() - -ENDIF () - -IF (OPENEXR_BUILD_STATIC) - LIST ( APPEND OPENEXR_LIB_TARGETS IlmImf_static ) - - ADD_LIBRARY ( IlmImf_static STATIC ${ILMIMF_SRCS} ) - - SET_TARGET_PROPERTIES ( IlmImf_static - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - OUTPUT_NAME "IlmImf${OPENEXR_LIBSUFFIX}_s" - ) - SET_ILMBASE_INCLUDE_DIRS(IlmImf_static) - - IF (MSVC) - TARGET_COMPILE_DEFINITIONS ( IlmImf_static PUBLIC _CRT_SECURE_NO_WARNINGS ) - ENDIF () - - iF (BUILD_DWALOOKUPS) - ADD_DEPENDENCIES ( IlmImf_static dwaLookups ) - ENDIF () - - IF (BUILD_B44EXPLOGTABLE) - ADD_DEPENDENCIES ( IlmImf_static b44ExpLogTable ) - ENDIF() - -ENDIF () - -IF (OPENEXR_BUILD_SHARED OR OPENEXR_BUILD_STATIC) - INSTALL ( TARGETS ${OPENEXR_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -INSTALL ( - FILES + ImfMisc.cpp + ImfCompressionAttribute.cpp + ImfDoubleAttribute.cpp + ImfConvert.cpp + ImfPreviewImage.cpp + ImfPreviewImageAttribute.cpp + ImfVersion.cpp + ImfChromaticities.cpp + ImfChromaticitiesAttribute.cpp + ImfKeyCode.cpp + ImfKeyCodeAttribute.cpp + ImfTimeCode.cpp + ImfTimeCodeAttribute.cpp + ImfRational.cpp + ImfRationalAttribute.cpp + ImfFramesPerSecond.cpp + ImfStandardAttributes.cpp + ImfStdIO.cpp + ImfEnvmap.cpp + ImfEnvmapAttribute.cpp + ImfScanLineInputFile.cpp + ImfTiledInputFile.cpp + ImfTiledMisc.cpp + ImfTiledOutputFile.cpp + ImfTiledRgbaFile.cpp + ImfTileDescriptionAttribute.cpp + ImfTileOffsets.cpp + ImfRgbaYca.cpp + ImfPxr24Compressor.cpp + ImfTestFile.cpp + ImfStringVectorAttribute.cpp + ImfMultiView.cpp + ImfAcesFile.cpp + ImfMultiPartOutputFile.cpp + ImfGenericOutputFile.cpp + ImfOutputPartData.cpp + ImfMultiPartInputFile.cpp + ImfGenericInputFile.cpp + ImfPartType.cpp + ImfInputPartData.cpp + ImfOutputPart.cpp + ImfTiledOutputPart.cpp + ImfInputPart.cpp + ImfTiledInputPart.cpp + ImfDeepScanLineInputPart.cpp + ImfDeepScanLineOutputPart.cpp + ImfDeepScanLineInputFile.cpp + ImfDeepScanLineOutputFile.cpp + ImfDeepTiledInputPart.cpp + ImfDeepTiledOutputPart.cpp + ImfDeepTiledInputFile.cpp + ImfDeepTiledOutputFile.cpp + ImfDeepFrameBuffer.cpp + ImfDeepCompositing.cpp + ImfCompositeDeepScanLine.cpp + ImfDeepImageStateAttribute.cpp + ImfFastHuf.cpp + ImfFloatVectorAttribute.cpp + ImfRle.cpp + ImfSystemSpecific.cpp + ImfZip.cpp + HEADERS ImfForward.h ImfExport.h ImfAttribute.h @@ -345,14 +201,11 @@ INSTALL ( ImfDeepImageState.h ImfDeepImageStateAttribute.h ImfFloatVectorAttribute.h - - DESTINATION - include/OpenEXR -) - -if (OPENEXR_BUILD_SHARED) - add_library(OpenEXR::IlmImf ALIAS IlmImf) -endif() -if (OPENEXR_BUILD_STATIC) - add_library(OpenEXR::IlmImf_static ALIAS IlmImf_static) -endif() + DEPENDENCIES + OpenEXR::Config + IlmBase::Iex + IlmBase::Half + IlmBase::Imath + IlmBase::IlmThread + ZLIB::ZLIB + ) diff --git a/OpenEXR/IlmImf/ImfDwaCompressorSimd.h b/OpenEXR/IlmImf/ImfDwaCompressorSimd.h index 469a3383f0..6d7697542b 100644 --- a/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +++ b/OpenEXR/IlmImf/ImfDwaCompressorSimd.h @@ -47,6 +47,7 @@ #include "ImfSimd.h" #include "ImfSystemSpecific.h" #include "OpenEXRConfig.h" +#include "OpenEXRConfigInternal.h" #include #include diff --git a/OpenEXR/IlmImf/ImfSystemSpecific.cpp b/OpenEXR/IlmImf/ImfSystemSpecific.cpp index d10f9bcabd..ccce8074d6 100644 --- a/OpenEXR/IlmImf/ImfSystemSpecific.cpp +++ b/OpenEXR/IlmImf/ImfSystemSpecific.cpp @@ -35,6 +35,7 @@ #include "ImfSystemSpecific.h" #include "ImfNamespace.h" #include "OpenEXRConfig.h" +#include "OpenEXRConfigInternal.h" OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER diff --git a/OpenEXR/IlmImf/dwaLookups.cpp b/OpenEXR/IlmImf/dwaLookups.cpp index 8048878c2e..8d6f6c61b8 100644 --- a/OpenEXR/IlmImf/dwaLookups.cpp +++ b/OpenEXR/IlmImf/dwaLookups.cpp @@ -43,6 +43,11 @@ #include #include +#include + +#if __cplusplus >= 201103L +#include +#endif #ifdef OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN #include @@ -440,6 +445,10 @@ cpuCount() int cpuCount = 1; +#if __cplusplus >= 201103L + cpuCount = std::thread::hardware_concurrency(); +#else + #if defined (OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN) cpuCount = sysconf(_SC_NPROCESSORS_ONLN); @@ -452,6 +461,7 @@ cpuCount() #endif +#endif if (cpuCount < 1) cpuCount = 1; return cpuCount; } diff --git a/OpenEXR/IlmImfExamples/CMakeLists.txt b/OpenEXR/IlmImfExamples/CMakeLists.txt index cc341b98a9..8e96a23348 100644 --- a/OpenEXR/IlmImfExamples/CMakeLists.txt +++ b/OpenEXR/IlmImfExamples/CMakeLists.txt @@ -1,6 +1,5 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( IlmImfExamples +add_executable(IlmImfExamples drawImage.cpp generalInterfaceExamples.cpp generalInterfaceTiledExamples.cpp @@ -9,15 +8,28 @@ ADD_EXECUTABLE ( IlmImfExamples previewImageExamples.cpp rgbaInterfaceExamples.cpp rgbaInterfaceTiledExamples.cpp - ) +) +target_link_libraries(IlmImfExamples OpenEXR::IlmImf) -SET_ILMBASE_INCLUDE_DIRS( IlmImfExamples ) - -TARGET_LINK_LIBRARIES ( IlmImfExamples - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} ${ZLIB_LIBRARIES} +# Examples +install( + FILES + main.cpp + drawImage.cpp + rgbaInterfaceExamples.cpp + rgbaInterfaceTiledExamples.cpp + generalInterfaceExamples.cpp + lowLevelIoExamples.cpp + previewImageExamples.cpp + generalInterfaceTiledExamples.cpp + generalInterfaceTiledExamples.h + drawImage.h + rgbaInterfaceExamples.h + generalInterfaceExamples.h + rgbaInterfaceTiledExamples.h + lowLevelIoExamples.h + previewImageExamples.h + namespaceAlias.h + DESTINATION + ${CMAKE_INSTALL_DOCDIR}/examples ) diff --git a/OpenEXR/IlmImfFuzzTest/CMakeLists.txt b/OpenEXR/IlmImfFuzzTest/CMakeLists.txt index 908979009a..77fbce5b5d 100644 --- a/OpenEXR/IlmImfFuzzTest/CMakeLists.txt +++ b/OpenEXR/IlmImfFuzzTest/CMakeLists.txt @@ -1,31 +1,17 @@ -# yue.nicholas@gmail.com - -ADD_EXECUTABLE ( IlmImfFuzzTest +add_executable( IlmImfFuzzTest fuzzFile.cpp main.cpp testFuzzDeepTiles.cpp testFuzzDeepScanLines.cpp testFuzzScanLines.cpp testFuzzTiles.cpp - ) - -SET_ILMBASE_INCLUDE_DIRS( IlmImfFuzzTest ) - -TARGET_LINK_LIBRARIES ( IlmImfFuzzTest - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} ${ZLIB_LIBRARIES}) - -IF ( OPENEXR_RUN_FUZZ_TESTS ) - ADD_TEST ( TestIlmImfFuzz IlmImfFuzzTest ) - # This takes a really long time to run... the default timeout is 1500 seconds or - # but this can take 10 hours to run on an older machine - SET_TESTS_PROPERTIES ( TestIlmImfFuzz PROPERTIES TIMEOUT 36000 ) -ENDIF () +) +target_link_libraries(IlmImfFuzzTest OpenEXR::IlmImf) +option(OPENEXR_RUN_FUZZ_TESTS "Controls whether to include the fuzz tests (slow) in default test cases, there is a custom fuzz target" OFF) +if(OPENEXR_RUN_FUZZ_TESTS) + add_test(OpenEXR.ImfFuzz IlmImfFuzzTest) + set_tests_properties(OpenEXR.ImfFuzz PROPERTIES TIMEOUT 36000) +endif() -ADD_CUSTOM_TARGET(fuzz ${CMAKE_CURRENT_BINARY_DIR}/IlmImfFuzzTest) -# the depends you can add in ADD_CUSTOM_TARGET only works for other add_custom_command -ADD_DEPENDENCIES(fuzz IlmImfFuzzTest) +add_custom_target(fuzz ${CMAKE_CURRENT_BINARY_DIR}/IlmImfFuzzTest) +add_dependencies(fuzz IlmImfFuzzTest) diff --git a/OpenEXR/IlmImfFuzzTest/main.cpp b/OpenEXR/IlmImfFuzzTest/main.cpp index 0c30e4a00a..280e7541a6 100644 --- a/OpenEXR/IlmImfFuzzTest/main.cpp +++ b/OpenEXR/IlmImfFuzzTest/main.cpp @@ -34,6 +34,8 @@ #include "ImfNamespace.h" +#include "OpenEXRConfigInternal.h" + #include "testFuzzDeepScanLines.h" #include "testFuzzDeepTiles.h" #include "testFuzzScanLines.h" diff --git a/OpenEXR/IlmImfFuzzTest/testFuzzDeepTiles.cpp b/OpenEXR/IlmImfFuzzTest/testFuzzDeepTiles.cpp index a1b4d81e13..f45c0b8ba2 100644 --- a/OpenEXR/IlmImfFuzzTest/testFuzzDeepTiles.cpp +++ b/OpenEXR/IlmImfFuzzTest/testFuzzDeepTiles.cpp @@ -217,7 +217,7 @@ void generateRandomFile(const char filename[], int channelCount, int parts , Com { for(int x=0;x( data[k][y][x] ); data[k][y][x]=0; } } diff --git a/OpenEXR/IlmImfTest/CMakeLists.txt b/OpenEXR/IlmImfTest/CMakeLists.txt index be16ecbdaa..ccc3123967 100644 --- a/OpenEXR/IlmImfTest/CMakeLists.txt +++ b/OpenEXR/IlmImfTest/CMakeLists.txt @@ -1,8 +1,4 @@ -# yue.nicholas@gmail.com - -# IlmImfTest - -ADD_EXECUTABLE ( IlmImfTest +add_executable(IlmImfTest compareB44.cpp compareDwa.cpp compareFloat.cpp @@ -60,16 +56,7 @@ ADD_EXECUTABLE ( IlmImfTest testWav.cpp testXdr.cpp testYca.cpp - ) - -SET_ILMBASE_INCLUDE_DIRS( IlmImfTest ) - -ADD_TEST ( TestIlmImf IlmImfTest ) -TARGET_LINK_LIBRARIES ( IlmImfTest - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} ${ZLIB_LIBRARIES} - ) +) +target_compile_definitions(IlmImfTest PRIVATE ILM_IMF_TEST_IMAGEDIR="${CMAKE_CURRENT_SOURCE_DIR}/") +target_link_libraries(IlmImfTest OpenEXR::IlmImf) +add_test(OpenEXR.IlmImf IlmImfTest) diff --git a/OpenEXR/IlmImfTest/main.cpp b/OpenEXR/IlmImfTest/main.cpp index f8e238a02c..8803679c59 100644 --- a/OpenEXR/IlmImfTest/main.cpp +++ b/OpenEXR/IlmImfTest/main.cpp @@ -34,6 +34,7 @@ #include "ImfNamespace.h" +#include "OpenEXRConfigInternal.h" #include "testXdr.h" #include "testMagic.h" diff --git a/OpenEXR/IlmImfUtil/CMakeLists.txt b/OpenEXR/IlmImfUtil/CMakeLists.txt index 4cc53de293..b6fc5d9b20 100644 --- a/OpenEXR/IlmImfUtil/CMakeLists.txt +++ b/OpenEXR/IlmImfUtil/CMakeLists.txt @@ -1,82 +1,23 @@ -SET ( ILMIMFUTIL_SRCS - ImfImageChannel.cpp - ImfFlatImageChannel.cpp - ImfDeepImageChannel.cpp - ImfSampleCountChannel.cpp - ImfImageLevel.cpp - ImfFlatImageLevel.cpp - ImfDeepImageLevel.cpp - ImfImage.cpp - ImfFlatImage.cpp - ImfDeepImage.cpp - ImfImageIO.cpp - ImfFlatImageIO.cpp - ImfDeepImageIO.cpp - ImfImageDataWindow.cpp -) - -SET (OPENEXR_LIB_TARGETS "") - -LINK_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR}/../IlmImf ) - -IF(OPENEXR_BUILD_SHARED) - LIST ( APPEND OPENEXR_LIB_TARGETS IlmImfUtil ) - - ADD_LIBRARY ( IlmImfUtil SHARED ${ILMIMFUTIL_SRCS} ) - SET_ILMBASE_INCLUDE_DIRS( IlmImfUtil ) - - TARGET_COMPILE_DEFINITIONS ( IlmImfUtil PRIVATE ILMIMFUTIL_EXPORTS ) - IF (WIN32) - TARGET_COMPILE_DEFINITIONS ( IlmImfUtil PUBLIC OPENEXR_DLL ) - ENDIF () - - TARGET_LINK_LIBRARIES ( IlmImfUtil - PUBLIC IlmBase::Iex - PUBLIC IlmBase::Half - PUBLIC IlmBase::Imath - PUBLIC IlmBase::IlmThread - PUBLIC OpenEXR::IlmImf - PRIVATE ${PTHREAD_LIB} - PRIVATE ${ZLIB_LIBRARIES} - ) - - SET_TARGET_PROPERTIES ( IlmImfUtil - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmImfUtil${OPENEXR_LIBSUFFIX}" - ) -ENDIF() - - -IF ( OPENEXR_BUILD_STATIC ) - LIST ( APPEND OPENEXR_LIB_TARGETS IlmImfUtil_static ) - - ADD_LIBRARY ( IlmImfUtil_static STATIC ${ILMIMFUTIL_SRCS} ) - SET_ILMBASE_INCLUDE_DIRS( IlmImfUtil_static ) - - SET_TARGET_PROPERTIES ( IlmImfUtil_static - PROPERTIES - VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} - SOVERSION ${OPENEXR_SOVERSION} - OUTPUT_NAME "IlmImfUtil${OPENEXR_LIBSUFFIX}_s" - ) -ENDIF() - - -IF (OPENEXR_BUILD_SHARED OR OPENEXR_BUILD_STATIC) - INSTALL ( TARGETS - ${OPENEXR_LIB_TARGETS} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION ${RUNTIME_DIR} - ) -ENDIF () - -# Headers -INSTALL ( - FILES +openexr_define_library(IlmImfUtil + PRIV_EXPORT ILMIMFUTIL_EXPORTS + CURDIR ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES + ImfImageChannel.cpp + ImfFlatImageChannel.cpp + ImfDeepImageChannel.cpp + ImfSampleCountChannel.cpp + ImfImageLevel.cpp + ImfFlatImageLevel.cpp + ImfDeepImageLevel.cpp + ImfImage.cpp + ImfFlatImage.cpp + ImfDeepImage.cpp + ImfImageIO.cpp + ImfFlatImageIO.cpp + ImfDeepImageIO.cpp + ImfImageDataWindow.cpp + HEADERS ImfImageChannel.h ImfFlatImageChannel.h ImfDeepImageChannel.h @@ -93,14 +34,6 @@ INSTALL ( ImfImageDataWindow.h ImfImageChannelRenaming.h ImfUtilExport.h - - DESTINATION - ${CMAKE_INSTALL_PREFIX}/include/OpenEXR - ) - -if (OPENEXR_BUILD_SHARED) - add_library(OpenEXR::IlmImfUtil ALIAS IlmImfUtil) -endif() -if (OPENEXR_BUILD_STATIC) - add_library(OpenEXR::IlmImfUtil_static ALIAS IlmImfUtil_static) -endif() + DEPENDENCIES + OpenEXR::IlmImf +) diff --git a/OpenEXR/IlmImfUtilTest/CMakeLists.txt b/OpenEXR/IlmImfUtilTest/CMakeLists.txt index a66ec299b9..349e12b7fe 100644 --- a/OpenEXR/IlmImfUtilTest/CMakeLists.txt +++ b/OpenEXR/IlmImfUtilTest/CMakeLists.txt @@ -1,25 +1,8 @@ - -# IlmImfUtilTest - -LINK_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR}/../IlmImf ) - - -ADD_EXECUTABLE ( IlmImfUtilTest +add_executable(IlmImfUtilTest main.cpp testFlatImage.cpp testDeepImage.cpp testIO.cpp ) - - SET_ILMBASE_INCLUDE_DIRS( IlmImfUtilTest ) - -ADD_TEST ( TestIlmImfUtil IlmImfUtilTest ) -TARGET_LINK_LIBRARIES ( IlmImfUtilTest - OpenEXR::IlmImfUtil${OPENEXR_TARGET_SUFFIX} - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} ${ZLIB_LIBRARIES} - ) +target_link_libraries(IlmImfUtilTest OpenEXR::IlmImfUtil) +add_test(OpenEXR.IlmImfUtil IlmImfUtilTest) diff --git a/OpenEXR/IlmImfUtilTest/main.cpp b/OpenEXR/IlmImfUtilTest/main.cpp index eb1e0b035a..c1d9019b8b 100644 --- a/OpenEXR/IlmImfUtilTest/main.cpp +++ b/OpenEXR/IlmImfUtilTest/main.cpp @@ -33,6 +33,7 @@ /////////////////////////////////////////////////////////////////////////// #include "ImfNamespace.h" +#include "OpenEXRConfigInternal.h" #include "testFlatImage.h" #include "testDeepImage.h" diff --git a/OpenEXR/OpenEXR.pc.in b/OpenEXR/OpenEXR.pc.in index f1d4e59762..5061b69ec2 100644 --- a/OpenEXR/OpenEXR.pc.in +++ b/OpenEXR/OpenEXR.pc.in @@ -3,12 +3,13 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ OpenEXR_includedir=@includedir@/OpenEXR +libsuffix=@LIB_SUFFIX@ Name: OpenEXR Description: OpenEXR image library Version: @OPENEXR_VERSION@ -Libs: -L${libdir} -lIlmImf +Libs: -L${libdir} -lIlmImf${libsuffix} Cflags: -I${OpenEXR_includedir} Requires: IlmBase Libs.private: -lz diff --git a/OpenEXR/config/CMakeLists.txt b/OpenEXR/config/CMakeLists.txt new file mode 100644 index 0000000000..0c04bbb752 --- /dev/null +++ b/OpenEXR/config/CMakeLists.txt @@ -0,0 +1,121 @@ + +include(CheckIncludeFiles) +include(CheckSymbolExists) +include(CheckLibraryExists) +include(CheckStructHasMember) +include(CheckCXXSourceCompiles) + +if (NOT CMAKE_CROSSCOMPILING AND EXISTS "/proc/self/exe") + set(OPENEXR_IMF_HAVE_LINUX_PROCFS TRUE) +endif() + +check_cxx_source_compiles( +" +#include +int main() +{ + sysconf(_SC_NPROCESSORS_ONLN); +} +" OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN +) + +check_cxx_source_compiles( +" +int main() +{ +#if defined(__SSE2__) + int n = 0; + int eax = 0; + int edx = 0; + __asm__( + \"xgetbv ;\" + \"vzeroupper \" + : \"=a\"(eax), \"=d\"(edx) : \"c\"(n) : ); +#else +# error No SSE support enabled to query AVX support +#endif +} +" OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX +) + + +# This is no longer something that needs to be tested if we have +# C++14 support... +set(OPENEXR_IMF_HAVE_COMPLETE_IOMANIP TRUE) + +if(APPLE) + set(OPENEXR_IMF_HAVE_DARWIN TRUE) +endif() + +find_package(ZLIB REQUIRED) +set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_GLOBAL TRUE) + +# so we know how to link / use... +if(NOT TARGET Threads::Threads) + set(CMAKE_THREAD_PREFER_PTHREAD TRUE) + set(THREADS_PREFER_PTHREAD_FLAG TRUE) + find_package(Threads) + ###check_include_files(pthread.h OPENEXR_HAVE_PTHREAD) + if(Threads_FOUND) + set_target_properties(Threads::Threads PROPERTIES IMPORTED_GLOBAL TRUE) + if(CMAKE_HAVE_PTHREAD_H OR CMAKE_USE_PTHREADS_INIT OR CMAKE_HP_PTHREAD_INIT) + set(OPENEXR_HAVE_PTHREAD ON) + # TODO: remove this once we cleanly have OPENEXR_ prefix on all #defines + set(HAVE_PTHREAD ON) + endif() + endif() +endif() + +configure_file(OpenEXRConfig.h.in_cmake ${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h) +configure_file(OpenEXRConfigInternal.h.in_cmake ${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfigInternal.h) + +add_library(IlmImfConfig INTERFACE) +target_include_directories(IlmImfConfig INTERFACE + $ + $ + $) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h + DESTINATION + ${CMAKE_INSTALL_INCLUDEDIR}/${OPENEXR_OUTPUT_SUBDIR} +) + +install(TARGETS IlmImfConfig EXPORT ${PROJECT_NAME}) +add_library(${PROJECT_NAME}::Config ALIAS IlmImfConfig) + +option(INSTALL_PKG_CONFIG "Install OpenEXR.pc file" ON) +if(INSTALL_PKG_CONFIG) + # use a helper function to avoid variable pollution, but pretty simple + function(openexr_pkg_config_help pcinfile) + set(prefix ${CMAKE_INSTALL_PREFIX}) + set(exec_prefix ${CMAKE_INSTALL_BINDIR}) + set(libdir ${CMAKE_INSTALL_LIBDIR}) + set(includedir ${CMAKE_INSTALL_INCLUDEDIR}) + set(LIB_SUFFIX ${OPENEXR_LIB_SUFFIX}) + if(TARGET Threads::Threads) + # hrm, can't use properties as they end up as generator expressions + # which don't seem to evaluate + if(THREADS_HAVE_PTHREAD_ARG) + set(PTHREAD_CFLAGS "-pthread") + endif() + set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) + endif() + string(REPLACE ".in" "" pcout ${pcinfile}) + configure_file(${pcinfile} ${CMAKE_CURRENT_BINARY_DIR}/${pcout} @ONLY) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${pcout} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) + endfunction() + openexr_pkg_config_help(../OpenEXR.pc.in) +endif() + +# The main export of the configuration - This is the +# moral equivalent of a pkg-config file for cmake +# and replaces the Find*.cmake of the "old" cmake +install(EXPORT ${PROJECT_NAME} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + NAMESPACE ${PROJECT_NAME}:: +) diff --git a/OpenEXR/config/LibraryDefine.cmake b/OpenEXR/config/LibraryDefine.cmake new file mode 100644 index 0000000000..d02ee24856 --- /dev/null +++ b/OpenEXR/config/LibraryDefine.cmake @@ -0,0 +1,84 @@ +# NB: This function has a number of specific names / variables +# in it, so be careful copying... +function(OPENEXR_DEFINE_LIBRARY libname) + set(options) + set(oneValueArgs PRIV_EXPORT CURDIR CURBINDIR) + set(multiValueArgs SOURCES HEADERS DEPENDENCIES PRIVATE_DEPS) + cmake_parse_arguments(OPENEXR_CURLIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(objlib ${libname}_Object) + add_library(${objlib} OBJECT ${OPENEXR_CURLIB_SOURCES}) + target_compile_features(${objlib} PUBLIC cxx_std_${OPENEXR_CXX_STANDARD}) + if(OPENEXR_CURLIB_PRIV_EXPORT) + target_compile_definitions(${objlib} PRIVATE ${OPENEXR_CURLIB_PRIV_EXPORT}) + if(WIN32) + target_compile_definitions(${objlib} PUBLIC OPENEXR_DLL) + endif() + endif() + if(OPENEXR_CURLIB_CURDIR) + target_include_directories(${objlib} INTERFACE $) + endif() + if(OPENEXR_CURLIB_CURBINDIR) + target_include_directories(${objlib} PRIVATE $) + endif() + target_link_libraries(${objlib} PUBLIC ${PROJECT_NAME}::Config ${OPENEXR_CURLIB_DEPENDENCIES}) + if(OPENEXR_CURLIB_PRIVATE_DEPS) + target_link_libraries(${objlib} PRIVATE ${OPENEXR_CURLIB_PRIVATE_DEPS}) + endif() + set_property(TARGET ${objlib} PROPERTY CXX_STANDARD_REQUIRED ON) + set_property(TARGET ${objlib} PROPERTY CXX_EXTENSIONS OFF) + set_property(TARGET ${objlib} PROPERTY POSITION_INDEPENDENT_CODE ON) + + set_property(TARGET ${objlib} PROPERTY PUBLIC_HEADER ${OPENEXR_CURLIB_HEADERS}) + + install(TARGETS ${objlib} + EXPORT ${PROJECT_NAME} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${OPENEXR_OUTPUT_SUBDIR} + ) + + # let the default behaviour BUILD_SHARED_LIBS control the + # disposition of the default library... + add_library(${libname} $) + target_link_libraries(${libname} PUBLIC ${objlib}) + if(BUILD_SHARED_LIBS) + set_target_properties(${libname} PROPERTIES + SOVERSION ${OPENEXR_SOVERSION} + VERSION ${OPENEXR_LIB_VERSION} + OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}" + ) + endif() + if(OPENEXR_BUILD_FRAMEWORK) + set_target_properties(${libname} PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION ${OPENEXR_LIB_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER io.aswf.OpenEXR + ) + endif() + add_library(${PROJECT_NAME}::${libname} ALIAS ${libname}) + + install(TARGETS ${libname} + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + + if(OPENEXR_BUILD_BOTH_STATIC_SHARED) + add_library(${libname}_static STATIC $) + target_link_libraries(${libname}_static INTERFACE ${objlib}) + set_target_properties(${libname}_static PROPERTIES + SOVERSION ${OPENEXR_SOVERSION} + VERSION ${OPENEXR_LIB_VERSION} + OUTPUT_NAME "${libname}${OPENEXR_LIB_SUFFIX}${OPENEXR_STATIC_LIB_SUFFIX}" + ) + add_library(${PROJECT_NAME}::${libname}_static ALIAS ${libname}_static) + + install(TARGETS ${libname}_static + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + endif() +endfunction() diff --git a/OpenEXR/config/OpenEXRConfig.h.in b/OpenEXR/config/OpenEXRConfig.h.in index 17ca6396fa..08497eee41 100644 --- a/OpenEXR/config/OpenEXRConfig.h.in +++ b/OpenEXR/config/OpenEXRConfig.h.in @@ -1,45 +1,7 @@ -// -// Define and set to 1 if the target system supports a proc filesystem -// compatible with the Linux kernel's proc filesystem. Note that this -// is only used by a program in the IlmImfTest test suite, it's not -// used by any OpenEXR library or application code. -// - -#undef OPENEXR_IMF_HAVE_LINUX_PROCFS - -// -// Define and set to 1 if the target system is a Darwin-based system -// (e.g., OS X). -// - -#undef OPENEXR_IMF_HAVE_DARWIN - -// -// Define and set to 1 if the target system has a complete -// implementation, specifically if it supports the std::right -// formatter. -// - -#undef OPENEXR_IMF_HAVE_COMPLETE_IOMANIP - -// -// Define and set to 1 if the target system has support for large -// stack sizes. -// - -#undef OPENEXR_IMF_HAVE_LARGE_STACK - -// -// Define if we can support GCC style inline asm with AVX instructions -// - -#undef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - -// -// Define if we can use sysconf(_SC_NPROCESSORS_ONLN) to get CPU count -// +// This file is auto-generated by the configure step -#undef OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN +#ifndef INCLUDED_OPENEXR_CONFIG_H +#define INCLUDED_OPENEXR_CONFIG_H 1 // // Current internal library namepace name @@ -66,7 +28,8 @@ #undef OPENEXR_VERSION_PATCH // Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define OPENEXR_VERSION_HEX ((OPENEXR_VERSION_MAJOR << 24) | \ - (OPENEXR_VERSION_MINOR << 16) | \ - (OPENEXR_VERSION_PATCH << 8)) +#define OPENEXR_VERSION_HEX ((uint32_t(OPENEXR_VERSION_MAJOR) << 24) | \ + (uint32_t(OPENEXR_VERSION_MINOR) << 16) | \ + (uint32_t(OPENEXR_VERSION_PATCH) << 8)) +#endif // INCLUDED_OPENEXR_CONFIG_H diff --git a/OpenEXR/config/OpenEXRConfig.h.in_cmake b/OpenEXR/config/OpenEXRConfig.h.in_cmake new file mode 100644 index 0000000000..f64dc5303d --- /dev/null +++ b/OpenEXR/config/OpenEXRConfig.h.in_cmake @@ -0,0 +1,35 @@ +// This file is auto-generated by the configure step + +#ifndef INCLUDED_OPENEXR_CONFIG_H +#define INCLUDED_OPENEXR_CONFIG_H 1 + +// +// Current internal library namepace name +// +#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM @OPENEXR_NAMESPACE_CUSTOM@ +#define OPENEXR_IMF_INTERNAL_NAMESPACE @OPENEXR_INTERNAL_IMF_NAMESPACE@ + +// +// Current public user namepace name +// + +#define OPENEXR_IMF_NAMESPACE_CUSTOM @OPENEXR_NAMESPACE_CUSTOM@ +#define OPENEXR_IMF_NAMESPACE @OPENEXR_IMF_NAMESPACE@ + +// +// Version string for runtime access +// + +#define OPENEXR_VERSION_STRING "@OPENEXR_VERSION@" +#define OPENEXR_PACKAGE_STRING "@OPENEXR_PACKAGE_NAME@" + +#define OPENEXR_VERSION_MAJOR @OPENEXR_VERSION_MAJOR@ +#define OPENEXR_VERSION_MINOR @OPENEXR_VERSION_MINOR@ +#define OPENEXR_VERSION_PATCH @OPENEXR_VERSION_PATCH@ + +// Version as a single hex number, e.g. 0x01000300 == 1.0.3 +#define OPENEXR_VERSION_HEX ((uint32_t(OPENEXR_VERSION_MAJOR) << 24) | \ + (uint32_t(OPENEXR_VERSION_MINOR) << 16) | \ + (uint32_t(OPENEXR_VERSION_PATCH) << 8)) + +#endif // INCLUDED_OPENEXR_CONFIG_H diff --git a/OpenEXR/config/OpenEXRConfigInternal.h.in b/OpenEXR/config/OpenEXRConfigInternal.h.in new file mode 100644 index 0000000000..132a848ebd --- /dev/null +++ b/OpenEXR/config/OpenEXRConfigInternal.h.in @@ -0,0 +1,35 @@ +// +// Define and set to 1 if the target system supports a proc filesystem +// compatible with the Linux kernel's proc filesystem. Note that this +// is only used by a program in the IlmImfTest test suite, it's not +// used by any OpenEXR library or application code. +// + +#undef OPENEXR_IMF_HAVE_LINUX_PROCFS + +// +// Define and set to 1 if the target system is a Darwin-based system +// (e.g., OS X). +// + +#undef OPENEXR_IMF_HAVE_DARWIN + +// +// Define and set to 1 if the target system has a complete +// implementation, specifically if it supports the std::right +// formatter. +// + +#undef OPENEXR_IMF_HAVE_COMPLETE_IOMANIP + +// +// Define if we can use sysconf(_SC_NPROCESSORS_ONLN) to get CPU count +// + +#undef OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN + +// +// Define if we can support GCC style inline asm with AVX instructions +// + +#undef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX diff --git a/OpenEXR/config/OpenEXRConfigInternal.h.in_cmake b/OpenEXR/config/OpenEXRConfigInternal.h.in_cmake new file mode 100644 index 0000000000..df31f068ed --- /dev/null +++ b/OpenEXR/config/OpenEXRConfigInternal.h.in_cmake @@ -0,0 +1,42 @@ +// This file is auto-generated by the configure step + +#ifndef INCLUDED_OPENEXR_INTERNAL_CONFIG_H +#define INCLUDED_OPENEXR_INTERNAL_CONFIG_H 1 + +// +// Define and set to 1 if the target system supports a proc filesystem +// compatible with the Linux kernel's proc filesystem. Note that this +// is only used by a program in the IlmImfTest test suite, it's not +// used by any OpenEXR library or application code. +// + +#cmakedefine OPENEXR_IMF_HAVE_LINUX_PROCFS 1 + +// +// Define and set to 1 if the target system is a Darwin-based system +// (e.g., OS X). +// + +#cmakedefine OPENEXR_IMF_HAVE_DARWIN 1 + +// +// Define and set to 1 if the target system has a complete +// implementation, specifically if it supports the std::right +// formatter. +// + +#cmakedefine OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1 + +// +// Define if we can use sysconf(_SC_NPROCESSORS_ONLN) to get CPU count +// + +#cmakedefine OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN 1 + +// +// Define if we can support GCC style inline asm with AVX instructions +// + +#cmakedefine OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX 1 + +#endif // INCLUDED_OPENEXR_INTERNAL_CONFIG_H diff --git a/OpenEXR/config/OpenEXRSetup.cmake b/OpenEXR/config/OpenEXRSetup.cmake new file mode 100644 index 0000000000..b435ce362c --- /dev/null +++ b/OpenEXR/config/OpenEXRSetup.cmake @@ -0,0 +1,75 @@ + +include(GNUInstallDirs) + +######################## +## Target configuration + +# What C++ standard to compile for +# VFX Platform 18 is c++14, so let's enable that by default +set(OPENEXR_CXX_STANDARD "14" CACHE STRING "C++ standard to compile against") + +set(OPENEXR_NAMESPACE_CUSTOM "0" CACHE STRING "Whether the namespace has been customized (so external users know)") +set(OPENEXR_INTERNAL_IMF_NAMESPACE "Imf_${OPENEXR_VERSION_API}" CACHE STRING "Real namespace for Imath that will end up in compiled symbols") +set(OPENEXR_IMF_NAMESPACE "Imf" CACHE STRING "Public namespace alias for Imath") +set(OPENEXR_PACKAGE_NAME "IlmBase ${ILMBASE_VERSION}" CACHE STRING "Public string / label for displaying package") + +######################## +## Build related options + +# Whether to build & install the various command line utility programs +option(OPENEXR_BUILD_UTILS "Enables building of utility programs" ON) + +# The sub directory if include that library headers end up in +set(OPENEXR_OUTPUT_SUBDIR OpenEXR) + +# This does not seem to be available as a per-target property, +# but is pretty harmless to set globally +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# Suffix for debug configuration libraries +# (if you should choose to install those) +set(CMAKE_DEBUG_POSTFIX "_d" CACHE STRING "Suffix for debug builds") + +# Usual cmake option to build shared libraries or not +option(BUILD_SHARED_LIBS "Build shared library" ON) +# This allows a "double library" setup, where we compile both +# a dynamic and shared library +option(OPENEXR_BUILD_BOTH_STATIC_SHARED "Build both static and shared libraries in one step (otherwise follows BUILD_SHARED_LIBS)" OFF) +if (OPENEXR_BUILD_BOTH_STATIC_SHARED) + set(BUILD_SHARED_LIBS ON) +endif() +# Suffix to append to root name, this helps with version management +# but can be turned off if you don't care, or otherwise customized +set(OPENEXR_LIB_SUFFIX "-${OPENEXR_VERSION_API}" CACHE STRING "string added to the end of all the libraries") +# when building both dynamic and static, the additional string to +# add to the library name, such that to get static linkage, you +# would use -lImath_static (or target_link_libraries(xxx IlmBase::Imath_static)) +set(OPENEXR_STATIC_LIB_SUFFIX "_static" CACHE STRING "When building both static and shared, name to append to static library (in addition to normal suffix)") + +if(APPLE) + # TODO: Right now, this will make a framework for every library + # is that desired? Or should the framework be the set of libraries? + # or trigger some compile-all-as-one-big-.so? + set(CMAKE_MACOSX_RPATH ON) + option(OPENEXR_BUILD_FRAMEWORK "Built Framework bundle" OFF) + if(OPENEXR_BUILD_FRAMEWORK) + set(BUILD_SHARED_LIBS ON) + endif() +endif() + +######################## + +# Code check related features +option(OPENEXR_USE_CLANG_TIDY "Check if clang-tidy is available, and enable that" OFF) +if(OPENEXR_USE_CLANG_TIDY) + find_program(OPENEXR_CLANG_TIDY_BIN clang-tidy) + if(OPENEXR_CLANG_TIDY_BIN-NOTFOUND) + message(FATAL_ERROR "clang-tidy processing requested, but no clang-tidy found") + endif() + # TODO: Need to define the list of valid checks and add a file with said list + set(CMAKE_CXX_CLANG_TIDY + ${OPENEXR_CLANG_TIDY_BIN}; + -header-filter=.; + -checks=*; + ) +endif() diff --git a/OpenEXR/config/ParseConfigure.cmake b/OpenEXR/config/ParseConfigure.cmake new file mode 100644 index 0000000000..b4c6ebd07e --- /dev/null +++ b/OpenEXR/config/ParseConfigure.cmake @@ -0,0 +1,18 @@ + +file(READ configure.ac CONFIGURE_AC_CONTENTS) +string(REGEX MATCH "AC_INIT\\(OpenEXR,[ ]*([0-9]+).([0-9]+).([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(OPENEXR_VERSION_MAJOR ${CMAKE_MATCH_1}) +set(OPENEXR_VERSION_MINOR ${CMAKE_MATCH_2}) +set(OPENEXR_VERSION_PATCH ${CMAKE_MATCH_3}) +set(OPENEXR_VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH}) +set(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}) +string(REGEX MATCH "LIBTOOL_CURRENT=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(OPENEXR_SOCURRENT ${CMAKE_MATCH_1}) +string(REGEX MATCH "LIBTOOL_REVISION=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(OPENEXR_SOREVISION ${CMAKE_MATCH_1}) +string(REGEX MATCH "LIBTOOL_AGE=([0-9]+)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(OPENEXR_SOAGE ${CMAKE_MATCH_1}) +math(EXPR OPENEXR_SOVERSION "${OPENEXR_SOCURRENT} - ${OPENEXR_SOAGE}") +set(OPENEXR_LIB_VERSION "${OPENEXR_SOVERSION}.${OPENEXR_SOAGE}.${OPENEXR_SOREVISION}") +message(NOTICE ": Configure OpenEXR Version: ${OPENEXR_VERSION} Lib API: ${OPENEXR_LIB_VERSION}") +unset(CONFIGURE_AC_CONTENTS) diff --git a/OpenEXR/configure.ac b/OpenEXR/configure.ac index cafd452bbd..0f10f75e95 100644 --- a/OpenEXR/configure.ac +++ b/OpenEXR/configure.ac @@ -13,6 +13,7 @@ AC_SUBST(OPENEXR_VERSION_API, ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}) AC_CANONICAL_HOST AC_CONFIG_SRCDIR(IlmImfTest/main.cpp) AC_CONFIG_HEADERS([config/OpenEXRConfig.h]) +AC_CONFIG_HEADERS([config/OpenEXRConfigInternal.h]) AM_INIT_AUTOMAKE(1.6.3) dnl Require automake 1.6.3 or better AM_MAINTAINER_MODE @@ -128,33 +129,6 @@ AS_IF([test "x${multithread}" != xno], [ LIBS="${LIBS} ${PTHREAD_CFLAGS}" ]) - -dnl --enable-large-stack -case "$host" in -*linux*) - AC_ARG_ENABLE(large-stack, - AC_HELP_STRING([--enable-large-stack], - [enable optimizations for systems that support - large stack sizes [[default=yes]]]), - [large_stack="${enableval}"], - [large_stack=yes]) - ;; -*) - AC_ARG_ENABLE(large-stack, - AC_HELP_STRING([--enable-large-stack], - [enable optimizations for systems that support - large stack sizes [[default=no]]]), - [large_stack="${enableval}"], - [large_stack=no]) - ;; -esac - -if test "x${large_stack}" != xno ; then - AC_DEFINE([OPENEXR_IMF_HAVE_LARGE_STACK], [1], [Define if large stack sizes are supported]) -fi - - - save_CXXFLAGS="${CXXFLAGS}" save_LIBS="${LIBS}" CXXFLAGS="${save_CXXFLAGS} ${ILMBASE_CFLAGS}" @@ -415,5 +389,3 @@ fi AC_MSG_RESULT([ --------------------------------------------- ]) - - diff --git a/OpenEXR/exr2aces/CMakeLists.txt b/OpenEXR/exr2aces/CMakeLists.txt index e6af1f5341..a145b72709 100644 --- a/OpenEXR/exr2aces/CMakeLists.txt +++ b/OpenEXR/exr2aces/CMakeLists.txt @@ -1,22 +1,4 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exr2aces - main.cpp -) - -TARGET_LINK_LIBRARIES ( exr2aces - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -SET_ILMBASE_INCLUDE_DIRS( exr2aces ) - -INSTALL ( TARGETS - exr2aces - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +add_executable(exr2aces main.cpp) +target_link_libraries(exr2aces OpenEXR::IlmImf) +install(TARGETS exr2aces DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrbuild/CMakeLists.txt b/OpenEXR/exrbuild/CMakeLists.txt index 1d92f0066e..08812ee684 100644 --- a/OpenEXR/exrbuild/CMakeLists.txt +++ b/OpenEXR/exrbuild/CMakeLists.txt @@ -1,19 +1,4 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrbuild exrbuild.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrbuild ) - -TARGET_LINK_LIBRARIES ( exrbuild - OpenEXR::IlmImf - IlmBase::IlmThread - IlmBase::Iex - IlmBase::Half - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrbuild - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +add_executable(exrbuild exrbuild.cpp) +target_link_libraries(exrbuild OpenEXR::IlmImf) +install(TARGETS exrbuild DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrenvmap/CMakeLists.txt b/OpenEXR/exrenvmap/CMakeLists.txt index a3974ecd68..e68d7e530b 100644 --- a/OpenEXR/exrenvmap/CMakeLists.txt +++ b/OpenEXR/exrenvmap/CMakeLists.txt @@ -1,6 +1,5 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrenvmap +add_executable( exrenvmap makeLatLongMap.cpp readInputImage.cpp resizeImage.cpp @@ -10,19 +9,5 @@ ADD_EXECUTABLE ( exrenvmap EnvmapImage.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrenvmap ) - -TARGET_LINK_LIBRARIES ( exrenvmap - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrenvmap - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +target_link_libraries(exrenvmap OpenEXR::IlmImf) +install(TARGETS exrenvmap DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrheader/CMakeLists.txt b/OpenEXR/exrheader/CMakeLists.txt index 17c11604f2..3801be3af7 100644 --- a/OpenEXR/exrheader/CMakeLists.txt +++ b/OpenEXR/exrheader/CMakeLists.txt @@ -1,19 +1,4 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrheader main.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrheader ) - -TARGET_LINK_LIBRARIES ( exrheader - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} - ) - -INSTALL ( TARGETS - exrheader - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +add_executable(exrheader main.cpp) +target_link_libraries(exrheader OpenEXR::IlmImf) +install(TARGETS exrheader DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrmakepreview/CMakeLists.txt b/OpenEXR/exrmakepreview/CMakeLists.txt index 7e5053d594..62fb961bba 100644 --- a/OpenEXR/exrmakepreview/CMakeLists.txt +++ b/OpenEXR/exrmakepreview/CMakeLists.txt @@ -1,23 +1,7 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrmakepreview - makePreview.cpp +add_executable(exrmakepreview main.cpp + makePreview.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrmakepreview ) - - -TARGET_LINK_LIBRARIES ( exrmakepreview - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrmakepreview - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +target_link_libraries(exrmakepreview OpenEXR::IlmImf) +install(TARGETS exrmakepreview DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrmaketiled/CMakeLists.txt b/OpenEXR/exrmaketiled/CMakeLists.txt index 273a4a6d82..baca1e3488 100644 --- a/OpenEXR/exrmaketiled/CMakeLists.txt +++ b/OpenEXR/exrmaketiled/CMakeLists.txt @@ -1,23 +1,8 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrmaketiled +add_executable(exrmaketiled makeTiled.cpp main.cpp Image.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrmaketiled ) - -TARGET_LINK_LIBRARIES ( exrmaketiled - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrmaketiled - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +target_link_libraries(exrmaketiled OpenEXR::IlmImf) +install(TARGETS exrmaketiled DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrmultipart/CMakeLists.txt b/OpenEXR/exrmultipart/CMakeLists.txt index 79b0f7d7b3..83765af074 100644 --- a/OpenEXR/exrmultipart/CMakeLists.txt +++ b/OpenEXR/exrmultipart/CMakeLists.txt @@ -1,19 +1,4 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrmultipart exrmultipart.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrmultipart ) - -TARGET_LINK_LIBRARIES ( exrmultipart - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrmultipart - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +add_executable(exrmultipart exrmultipart.cpp) +target_link_libraries(exrmultipart OpenEXR::IlmImf) +install(TARGETS exrmultipart DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrmultiview/CMakeLists.txt b/OpenEXR/exrmultiview/CMakeLists.txt index 2335263beb..db7b0b93f6 100644 --- a/OpenEXR/exrmultiview/CMakeLists.txt +++ b/OpenEXR/exrmultiview/CMakeLists.txt @@ -1,25 +1,8 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrmultiview +add_executable(exrmultiview makeMultiView.cpp main.cpp Image.cpp ) - -SET_ILMBASE_INCLUDE_DIRS( exrmultiview ) - -TARGET_LINK_LIBRARIES ( exrmultiview - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - IlmBase::Imath${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrmultiview - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +target_link_libraries(exrmultiview OpenEXR::IlmImf) +install(TARGETS exrmultiview DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR/exrstdattr/CMakeLists.txt b/OpenEXR/exrstdattr/CMakeLists.txt index 16775afad0..3813212e60 100644 --- a/OpenEXR/exrstdattr/CMakeLists.txt +++ b/OpenEXR/exrstdattr/CMakeLists.txt @@ -1,19 +1,4 @@ -# yue.nicholas@gmail.com -ADD_EXECUTABLE ( exrstdattr main.cpp ) -SET_ILMBASE_INCLUDE_DIRS( exrstdattr ) - -TARGET_LINK_LIBRARIES ( exrstdattr - OpenEXR::IlmImf${OPENEXR_TARGET_SUFFIX} - IlmBase::IlmThread${OPENEXR_TARGET_SUFFIX} - IlmBase::Iex${OPENEXR_TARGET_SUFFIX} - IlmBase::Half${OPENEXR_TARGET_SUFFIX} - ${PTHREAD_LIB} - ${ZLIB_LIBRARIES} -) - -INSTALL ( TARGETS - exrstdattr - DESTINATION - ${CMAKE_INSTALL_PREFIX}/bin -) +add_executable(exrstdattr main.cpp) +target_link_libraries(exrstdattr OpenEXR::IlmImf) +install(TARGETS exrstdattr DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/OpenEXR_Viewers/CMakeLists.txt b/OpenEXR_Viewers/CMakeLists.txt index f324bdfbb4..6002bf11f1 100644 --- a/OpenEXR_Viewers/CMakeLists.txt +++ b/OpenEXR_Viewers/CMakeLists.txt @@ -1,3 +1,17 @@ +# "More Modern" CMake version +cmake_minimum_required(VERSION 3.12) + +# this is for target_sources, new policy converts relative paths to absolute +cmake_policy(SET CMP0076 NEW) + +set(OPENEXR_VIEWERS_VERSION 2.3.0) + +project(OpenEXR_Viewers VERSION ${OPENEXR_VIEWERS_VERSION}) + +find_package(IlmBase ${OPENEXR_VIEWERS_VERSION} EXACT REQUIRED) + +#[==[ + IF (WIN32) CMAKE_MINIMUM_REQUIRED(VERSION 3.11) ELSE() @@ -76,3 +90,4 @@ INSTALL ( FILES ${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION} ) +#]==] diff --git a/cmake/FindIlmBase.cmake b/cmake/FindIlmBase.cmake deleted file mode 100644 index 3501c1f707..0000000000 --- a/cmake/FindIlmBase.cmake +++ /dev/null @@ -1,192 +0,0 @@ - -# adapted from FindOpenEXR.cmake in Pixar's USD distro. -# -# The original license is as follows: -# -# Copyright 2016 Pixar -# -# Licensed under the Apache License, Version 2.0 (the "Apache License") -# with the following modification; you may not use this file except in -# compliance with the Apache License and the following modification to it: -# Section 6. Trademarks. is deleted and replaced with: -# -# 6. Trademarks. This License does not grant permission to use the trade -# names, trademarks, service marks, or product names of the Licensor -# and its affiliates, except as required to comply with Section 4(c) of -# the License and to reproduce the content of the NOTICE file. -# -# You may obtain a copy of the Apache License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the Apache License with the above modification is -# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the Apache License for the specific -# language governing permissions and limitations under the Apache License. -# - -find_path(ILMBASE_INCLUDE_DIR - OpenEXR/Iex.h - -HINTS - "${OPENEXR_LOCATION}" - "${ILMBASE_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - "$ENV{OPENEXR_ROOT}" - "$ENV{ILMBASE_LOCATION}" - "$ENV{ILMBASE_ROOT}" - -PATH_SUFFIXES - include/ - -NO_DEFAULT_PATH -NO_SYSTEM_ENVIRONMENT_PATH - -DOC - "IlmBase headers path" -) - -if(ILMBASE_INCLUDE_DIR) - set(ilmbase_config_file "${ILMBASE_INCLUDE_DIR}/OpenEXR/OpenEXRConfig.h") - if(EXISTS ${ilmbase_config_file}) - file(STRINGS - ${ilmbase_config_file} - TMP - REGEX "#define OPENEXR_VERSION_STRING.*$") - string(REGEX MATCHALL "[0-9.]+" OPENEXR_VERSION ${TMP}) - - file(STRINGS - ${ilmbase_config_file} - TMP - REGEX "#define OPENEXR_VERSION_MAJOR.*$") - string(REGEX MATCHALL "[0-9]" OPENEXR_MAJOR_VERSION ${TMP}) - - file(STRINGS - ${ilmbase_config_file} - TMP - REGEX "#define OPENEXR_VERSION_MINOR.*$") - string(REGEX MATCHALL "[0-9]" OPENEXR_MINOR_VERSION ${TMP}) - endif() -else() - message(WARNING, " IlmBase headers not found") -endif() - -foreach(ILMBASE_LIB - Half - Iex - IexMath - Imath - IlmThread) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${ILMBASE_LIB}_LIBRARY - NAMES - ${ILMBASE_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION} - ${ILMBASE_LIB} - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - DOC - "OPENEXR's ${ILMBASE_LIB} library path" - ) - - if(OPENEXR_${ILMBASE_LIB}_LIBRARY) - list(APPEND ILMBASE_LIBRARIES ${OPENEXR_${ILMBASE_LIB}_LIBRARY}) - endif() - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${ILMBASE_LIB}_DEBUG_LIBRARY - NAMES - ${ILMBASE_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_d - ${ILMBASE_LIB}_d - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - debug/lib/ - DOC - "OPENEXR's ${ILMBASE_LIB} debug library path" - ) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${ILMBASE_LIB}_STATIC_LIBRARY - NAMES - ${ILMBASE_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s - ${ILMBASE_LIB}_s - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - DOC - "OPENEXR's ${ILMBASE_LIB} static library path" - ) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${ILMBASE_LIB}_STATIC_DEBUG_LIBRARY - NAMES - ${ILMBASE_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s_d - ${ILMBASE_LIB}_s_d - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - debug/lib/ - DOC - "OPENEXR's ${ILMBASE_LIB} static debug library path" - ) - -endforeach(ILMBASE_LIB) - -# So #include works -list(APPEND ILMBASE_INCLUDE_DIRS ${ILMBASE_INCLUDE_DIR}) -list(APPEND ILMBASE_INCLUDE_DIRS ${ILMBASE_INCLUDE_DIR}/OpenEXR) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(IlmBase - REQUIRED_VARS - ILMBASE_INCLUDE_DIR - ILMBASE_LIBRARIES - VERSION_VAR - OPENEXR_VERSION -) - -foreach(ILMBASE_LIB - Half - Iex - IexMath - Imath - IlmThread) - - if (OPENEXR_${ILMBASE_LIB}_LIBRARY) - add_library(IlmBase::${ILMBASE_LIB} SHARED IMPORTED) - set_target_properties(IlmBase::${ILMBASE_LIB} PROPERTIES IMPORTED_LOCATION_RELEASE ${OPENEXR_${ILMBASE_LIB}_LIBRARY}) - set_target_properties(IlmBase::${ILMBASE_LIB} PROPERTIES IMPORTED_LOCATION_DEBUG ${OPENEXR_${ILMBASE_LIB}_DEBUG_LIBRARY}) - set_target_properties(IlmBase::${ILMBASE_LIB} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) - set_property(TARGET IlmBase::${ILMBASE_LIB} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ILMBASE_INCLUDE_DIR}) - set_property(TARGET IlmBase::${ILMBASE_LIB} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ILMBASE_INCLUDE_DIR}/OpenEXR) - endif() - - if (OPENEXR_${ILMBASE_LIB}_STATIC_LIBRARY) - add_library(IlmBase::${ILMBASE_LIB}_static SHARED IMPORTED) - set_target_properties(IlmBase::${ILMBASE_LIB}_static PROPERTIES IMPORTED_LOCATION_RELEASE ${OPENEXR_${ILMBASE_LIB}_STATIC_LIBRARY}) - set_target_properties(IlmBase::${ILMBASE_LIB}_static PROPERTIES IMPORTED_LOCATION_DEBUG ${OPENEXR_${ILMBASE_LIB}_STATIC_DEBUG_LIBRARY}) - set_target_properties(IlmBase::${ILMBASE_LIB}_static PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) - set_property(TARGET IlmBase::${ILMBASE_LIB}_static APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ILMBASE_INCLUDE_DIR}) - set_property(TARGET IlmBase::${ILMBASE_LIB}_static APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ILMBASE_INCLUDE_DIR}/OpenEXR) - endif() - - if (NOT OPENEXR_${ILMBASE_LIB}_LIBRARY AND NOT OPENEXR_${ILMBASE_LIB}_STATIC_LIBRARY) - message(WARNING, "${ILMBASE_LIB} was not found.") - endif() - -endforeach() diff --git a/cmake/FindOpenEXR.cmake b/cmake/FindOpenEXR.cmake deleted file mode 100644 index edfb0f549f..0000000000 --- a/cmake/FindOpenEXR.cmake +++ /dev/null @@ -1,198 +0,0 @@ - -# adapted from FindOpenEXR.cmake in Pixar's USD distro. -# -# The original license is as follows: -# -# Copyright 2016 Pixar -# -# Licensed under the Apache License, Version 2.0 (the "Apache License") -# with the following modification; you may not use this file except in -# compliance with the Apache License and the following modification to it: -# Section 6. Trademarks. is deleted and replaced with: -# -# 6. Trademarks. This License does not grant permission to use the trade -# names, trademarks, service marks, or product names of the Licensor -# and its affiliates, except as required to comply with Section 4(c) of -# the License and to reproduce the content of the NOTICE file. -# -# You may obtain a copy of the Apache License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the Apache License with the above modification is -# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the Apache License for the specific -# language governing permissions and limitations under the Apache License. -# - -find_path(OPENEXR_INCLUDE_DIR - OpenEXR/ImfHeader.h - -HINTS - "${OPENEXR_LOCATION}" - "${ILMBASE_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - "$ENV{OPENEXR_ROOT}" - "$ENV{ILMBASE_LOCATION}" - "$ENV{ILMBASE_ROOT}" - -PATH_SUFFIXES - include/ - -NO_DEFAULT_PATH -NO_SYSTEM_ENVIRONMENT_PATH - -DOC - "OpenEXR headers path" -) - -if(OPENEXR_INCLUDE_DIR) - set(openexr_config_file "${OPENEXR_INCLUDE_DIR}/OpenEXR/OpenEXRConfig.h") - if(EXISTS ${openexr_config_file}) - file(STRINGS - ${openexr_config_file} - TMP - REGEX "#define OPENEXR_VERSION_STRING.*$") - string(REGEX MATCHALL "[0-9.]+" OPENEXR_VERSION ${TMP}) - - file(STRINGS - ${openexr_config_file} - TMP - REGEX "#define OPENEXR_VERSION_MAJOR.*$") - string(REGEX MATCHALL "[0-9]" OPENEXR_MAJOR_VERSION ${TMP}) - - file(STRINGS - ${openexr_config_file} - TMP - REGEX "#define OPENEXR_VERSION_MINOR.*$") - string(REGEX MATCHALL "[0-9]" OPENEXR_MINOR_VERSION ${TMP}) - endif() -else() - message(WARNING, " OpenEXR headers not found") -endif() - -foreach(OPENEXR_LIB - IlmImf - IlmImfUtil) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${OPENEXR_LIB}_LIBRARY - NAMES - ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION} - ${OPENEXR_LIB} - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - NO_DEFAULT_PATH - NO_SYSTEM_ENVIRONMENT_PATH - DOC - "OPENEXR's ${OPENEXR_LIB} library path" - ) - #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_LIBRARY) - - if(OPENEXR_${OPENEXR_LIB}_LIBRARY) - list(APPEND OPENEXR_LIBRARIES ${OPENEXR_${OPENEXR_LIB}_LIBRARY}) - endif() - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${OPENEXR_LIB}_DEBUG_LIBRARY - NAMES - ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_d - ${OPENEXR_LIB}_d - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - debug/lib/ - NO_DEFAULT_PATH - NO_SYSTEM_ENVIRONMENT_PATH - DOC - "OPENEXR's ${OPENEXR_LIB} debug library path" - ) - #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_DEBUG_LIBRARY) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY - NAMES - ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s - ${OPENEXR_LIB}_s - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - NO_DEFAULT_PATH - NO_SYSTEM_ENVIRONMENT_PATH - DOC - "OPENEXR's ${OPENEXR_LIB} static library path" - ) - #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY) - - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - find_library(OPENEXR_${OPENEXR_LIB}_STATIC_DEBUG_LIBRARY - NAMES - ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s_d - ${OPENEXR_LIB}_s_d - HINTS - "${OPENEXR_LOCATION}" - "$ENV{OPENEXR_LOCATION}" - PATH_SUFFIXES - lib/ - debug/lib/ - NO_DEFAULT_PATH - NO_SYSTEM_ENVIRONMENT_PATH - DOC - "OPENEXR's ${OPENEXR_LIB} static debug library path" - ) - #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_STATIC_DEBUG_LIBRARY) - -endforeach(OPENEXR_LIB) - -# So #include works -list(APPEND OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR}) -list(APPEND OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR}/OpenEXR) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenEXR - REQUIRED_VARS - OPENEXR_INCLUDE_DIRS - OPENEXR_LIBRARIES - VERSION_VAR - OPENEXR_VERSION -) - -foreach(OPENEXR_LIB - IlmImf - IlmImfUtil) - - if (OPENEXR_${OPENEXR_LIB}_LIBRARY) - add_library(OpenEXR::${OPENEXR_LIB} SHARED IMPORTED) - set_target_properties(OpenEXR::${OPENEXR_LIB} PROPERTIES IMPORTED_LOCATION_RELEASE ${OPENEXR_${OPENEXR_LIB}_LIBRARY}) - set_target_properties(OpenEXR::${OPENEXR_LIB} PROPERTIES IMPORTED_LOCATION_DEBUG ${OPENEXR_${OPENEXR_LIB}_DEBUG_LIBRARY}) - set_target_properties(OpenEXR::${OPENEXR_LIB} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) - set_property(TARGET OpenEXR::${OPENEXR_LIB} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENEXR_INCLUDE_DIR}) - set_property(TARGET OpenEXR::${OPENEXR_LIB} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENEXR_INCLUDE_DIR}/OpenEXR) - endif() - - if (OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY) - add_library(OpenEXR::${OPENEXR_LIB}_static SHARED IMPORTED) - set_target_properties(OpenEXR::${OPENEXR_LIB}_static PROPERTIES IMPORTED_LOCATION_RELEASE ${OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY}) - set_target_properties(OpenEXR::${OPENEXR_LIB}_static PROPERTIES IMPORTED_LOCATION_DEBUG ${OPENEXR_${OPENEXR_LIB}_STATIC_DEBUG_LIBRARY}) - set_target_properties(OpenEXR::${OPENEXR_LIB}_static PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) - set_property(TARGET OpenEXR::${OPENEXR_LIB}_static APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENEXR_INCLUDE_DIR}) - set_property(TARGET OpenEXR::${OPENEXR_LIB}_static APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENEXR_INCLUDE_DIR}/OpenEXR) - endif() - - if (NOT OPENEXR_${OPENEXR_LIB}_LIBRARY AND NOT OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY) - message(WARNING, "${OPENEXR_LIB} was not found.") - endif() - -endforeach() diff --git a/cmake/OpenEXRSettings.cmake b/cmake/OpenEXRSettings.cmake deleted file mode 100644 index 11847b2d9b..0000000000 --- a/cmake/OpenEXRSettings.cmake +++ /dev/null @@ -1,98 +0,0 @@ -#set(OPENEXR_LOCATION ${CMAKE_INSTALL_PREFIX}) - -#------------------------------------------------------------------------------- -# The following user options are cached. They are named with the OPENEXR -# prefix in order that they be grouped together in tools such as ccmake and cmake-gui. - -option(OPENEXR_BUILD_ILMBASE "Build IlmBase" ON) -option(OPENEXR_BUILD_OPENEXR "Build OpenEXR" ON) -option(OPENEXR_BUILD_PYTHON_LIBS "Build the Python bindings" ON) -option(OPENEXR_BUILD_VIEWERS "Build the viewers" OFF) -option(OPENEXR_BUILD_TESTS "Enable the tests" ON) -# when enabled, adds the (long) running fuzz tests to the "make test" rule -# even when this is disabled, as long as OPENEXR_BUILD_TESTS is enabled, one -# can still run "make fuzz" (or equivalent) -option(OPENEXR_RUN_FUZZ_TESTS "Run damaged-input tests" OFF) -option(OPENEXR_BUILD_UTILS "Build the utility programs" ON) - -option(OPENEXR_BUILD_SHARED "Build Shared Libraries" ON) -option(OPENEXR_BUILD_STATIC "Build Static Libraries" OFF) -option(OPENEXR_NAMESPACE_VERSIONING "Use Namespace Versioning" ON) -option(OPENEXR_FORCE_CXX03 "Force CXX03" OFF) -set(OPENEXR_PYTHON_MAJOR "2" CACHE STRING "Python major version") -set(OPENEXR_PYTHON_MINOR "7" CACHE STRING "Python minor version") - -# For more info on finding boost python: -# https://cmake.org/cmake/help/v3.11/module/FindBoost.html - -# end of user options -#------------------------------------------------------------------------------- - - -if (OPENEXR_BUILD_VIEWERS AND NOT OPENEXR_BUILD_OPENEXR) - message(ERROR, "Configuration error, enable OPENEXR_BUILD_OPENEXR for OPENEXR_BUILD_VIEWERS") -endif() - -if (WIN32 AND OPENEXR_BUILD_ILMBASE AND OPENEXR_BUILD_OPENEXR AND OPENEXR_BUILD_SHARED) - # necessary for building dwa lookup tables, and b44log tables on windows - set(BUILD_ILMBASE_STATIC ON) -elseif (OPENEXR_BUILD_ILMBASE AND OPENEXR_BUILD_STATIC) - set(BUILD_ILMBASE_STATIC ON) -else() - set(BUILD_ILMBASE_STATIC OFF) -endif() - -if (NOT OPENEXR_BUILD_SHARED) - set(OPENEXR_TARGET_SUFFIX _static) -endif() - -# Testing -set(ENABLE_TESTS ${OPENEXR_BUILD_TESTS}) -if(ENABLE_TESTS) - include(CTest) - enable_testing() -endif() - -# CPACK -set(CPACK_PROJECT_NAME ${PROJECT_NAME}) -set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) -set(CPACK_SOURCE_IGNORE_FILES "/.git*;/.cvs*;${CPACK_SOURCE_IGNORE_FILES}") -set(CPACK_SOURCE_GENERATOR "TGZ") -set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${OPENEXR_VERSION}" ) -include(CPack) - -# Configuration -if(OPENEXR_FORCE_CXX03) - ADD_DEFINITIONS ( -std=c++03 ) -else(OPENEXR_FORCE_CXX03) - # VP18 switches to c++14, so let's do that by default - set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ ISO Standard") - # but switch gnu++14 or other extensions off for portability - set(CMAKE_CXX_EXTENSIONS OFF) -endif() - -add_definitions( -DHAVE_CONFIG_H ) - -if(NOT WIN32) - add_definitions( -pthread ) -endif() - -if(WIN32) - set(RUNTIME_DIR bin) -else() - set(RUNTIME_DIR lib) -endif() - -set(OPENEXR_LIBSUFFIX "") -set(ILMBASE_LIBSUFFIX "") -if(OPENEXR_NAMESPACE_VERSIONING) - set( OPENEXR_LIBSUFFIX "-${OPENEXR_VERSION_API}" ) - set( ILMBASE_LIBSUFFIX "-${OPENEXR_VERSION_API}" ) -endif() - -# MacOs/linux rpathing -set(CMAKE_MACOSX_RPATH ON) -set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) - -# Set position independent code (mostly for static builds, but not a bad idea regardless) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) diff --git a/cmake/OpenEXRVersion.cmake b/cmake/OpenEXRVersion.cmake deleted file mode 100644 index 82f0086985..0000000000 --- a/cmake/OpenEXRVersion.cmake +++ /dev/null @@ -1,8 +0,0 @@ -# Version -set(OPENEXR_VERSION_MAJOR 2) -set(OPENEXR_VERSION_MINOR 3) -set(OPENEXR_VERSION_PATCH 0) -set(OPENEXR_VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH}) -set(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}) -set(OPENEXR_SOVERSION 24) -