# SPDX-License-Identifier: BSD-3-Clause # Copyright Contributors to the OpenEXR Project. include(CheckIncludeFiles) include(CheckSymbolExists) include(CheckLibraryExists) include(CheckStructHasMember) include(CheckCXXSourceCompiles) include(../../cmake/JoinPaths.cmake) 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) if (${CMAKE_OSX_ARCHITECTURES} MATCHES arm64) set(OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX FALSE) 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) if(OPENEXR_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 "\${prefix}") join_paths(libdir "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}") join_paths(includedir "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") set(LIB_SUFFIX_DASH ${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 include(CMakePackageConfigHelpers) configure_package_config_file(OpenEXRConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} ) write_basic_package_version_file("${PROJECT_NAME}ConfigVersion.cmake" VERSION ${OPENEXR_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} ) install(EXPORT ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} FILE ${PROJECT_NAME}Targets.cmake NAMESPACE ${PROJECT_NAME}:: EXPORT_LINK_INTERFACE_LIBRARIES )