mirror of
https://github.com/boostorg/cmake.git
synced 2026-02-22 03:12:18 +00:00
Update BoostInstall to use the install variables; set the OUTPUT_NAME, EXPORT_NAME properties of the installed target
This commit is contained in:
@@ -9,70 +9,178 @@ endif()
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
function(boost_install LIB)
|
||||
function(__boost_install_set_output_name LIB TYPE)
|
||||
|
||||
set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${LIB}-${PROJECT_VERSION}")
|
||||
set(name ${LIB})
|
||||
|
||||
install(TARGETS ${LIB} EXPORT ${LIB}-targets)
|
||||
install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake)
|
||||
# prefix
|
||||
if(NOT (WIN32 AND TYPE STREQUAL "SHARED_LIBRARY"))
|
||||
string(PREPEND name "lib")
|
||||
endif()
|
||||
|
||||
get_target_property(INTERFACE_LINK_LIBRARIES ${LIB} INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(TYPE ${LIB} TYPE)
|
||||
# toolset
|
||||
if(BOOST_INSTALL_LAYOUT STREQUAL versioned)
|
||||
|
||||
set(CONFIG_FILE_NAME "${CMAKE_BINARY_DIR}/${LIB}-config.cmake")
|
||||
set(CONFIG_FILE_CONTENTS "# Generated by BoostInstall.cmake for ${LIB}-${PROJECT_VERSION}\n\n")
|
||||
string(TOLOWER ${CMAKE_CXX_COMPILER_ID} toolset)
|
||||
|
||||
if(INTERFACE_LINK_LIBRARIES)
|
||||
if(toolset STREQUAL "msvc")
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "include(CMakeFindDependencyMacro)\n\n")
|
||||
set(toolset "vc")
|
||||
|
||||
foreach(dep IN LISTS INTERFACE_LINK_LIBRARIES)
|
||||
|
||||
if(${dep} MATCHES "^Boost::")
|
||||
|
||||
string(REGEX REPLACE "^Boost::(.*)" "\\1" name "${dep}")
|
||||
string(APPEND CONFIG_FILE_CONTENTS "find_dependency(boost_${name} ${PROJECT_VERSION} EXACT)\n")
|
||||
|
||||
endif()
|
||||
|
||||
endforeach()
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "\n")
|
||||
|
||||
endif()
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "include(\"\${CMAKE_CURRENT_LIST_DIR}/${LIB}-targets.cmake\")\n")
|
||||
|
||||
file(WRITE "${CONFIG_FILE_NAME}" "${CONFIG_FILE_CONTENTS}")
|
||||
install(FILES "${CONFIG_FILE_NAME}" DESTINATION "${CONFIG_INSTALL_DIR}")
|
||||
|
||||
set(CONFIG_VERSION_FILE_NAME "${PROJECT_BINARY_DIR}/${LIB}-config-version.cmake")
|
||||
|
||||
if(TYPE STREQUAL "INTERFACE_LIBRARY")
|
||||
|
||||
# Header-only libraries are arcitecture-independent
|
||||
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 3.14)
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT)
|
||||
if(CMAKE_CXX_COMPILER_VERSION MATCHES "^([0-9]+)[.]([0-9]+)")
|
||||
|
||||
if(CMAKE_MATCH_1 GREATER 18)
|
||||
math(EXPR major ${CMAKE_MATCH_1}-5)
|
||||
else()
|
||||
|
||||
set(OLD_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
|
||||
set(CMAKE_SIZEOF_VOID_P "")
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
set(CMAKE_SIZEOF_VOID_P ${OLD_CMAKE_SIZEOF_VOID_P})
|
||||
|
||||
math(EXPR major ${CMAKE_MATCH_1}-6)
|
||||
endif()
|
||||
|
||||
math(EXPR minor ${CMAKE_MATCH_2}/10)
|
||||
|
||||
string(APPEND toolset ${major}${minor})
|
||||
|
||||
endif()
|
||||
|
||||
else()
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion)
|
||||
if(toolset STREQUAL "gnu")
|
||||
|
||||
set(toolset "gcc")
|
||||
|
||||
elseif(toolset STREQUAL "clang")
|
||||
|
||||
if(MSVC)
|
||||
set(toolset "clangw")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION MATCHES "^([0-9]+)[.]")
|
||||
string(APPEND toolset ${CMAKE_MATCH_1})
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
install(FILES "${CONFIG_VERSION_FILE_NAME}" DESTINATION "${CONFIG_INSTALL_DIR}")
|
||||
string(APPEND name "-${toolset}")
|
||||
|
||||
endif()
|
||||
|
||||
if(BOOST_INSTALL_LAYOUT STREQUAL versioned OR BOOST_INSTALL_LAYOUT STREQUAL tagged)
|
||||
|
||||
# threading
|
||||
string(APPEND name "-mt")
|
||||
|
||||
# ABI tag
|
||||
|
||||
string(APPEND tag "$<$<STREQUAL:$<TARGET_GENEX_EVAL:${LIB},$<TARGET_PROPERTY:${LIB},MSVC_RUNTIME_LIBRARY>>,MultiThreaded>:s>")
|
||||
string(APPEND tag "$<$<STREQUAL:$<TARGET_GENEX_EVAL:${LIB},$<TARGET_PROPERTY:${LIB},MSVC_RUNTIME_LIBRARY>>,MultiThreadedDebug>:s>")
|
||||
|
||||
string(APPEND tag "$<$<STREQUAL:$<TARGET_GENEX_EVAL:${LIB},$<TARGET_PROPERTY:${LIB},MSVC_RUNTIME_LIBRARY>>,MultiThreadedDebug>:g>")
|
||||
string(APPEND tag "$<$<STREQUAL:$<TARGET_GENEX_EVAL:${LIB},$<TARGET_PROPERTY:${LIB},MSVC_RUNTIME_LIBRARY>>,MultiThreadedDebugDLL>:g>")
|
||||
|
||||
string(APPEND tag "$<$<CONFIG:Debug>:d>")
|
||||
|
||||
string(APPEND name "$<$<BOOL:${tag}>:->${tag}")
|
||||
|
||||
# Arch and model
|
||||
math(EXPR bits ${CMAKE_SIZEOF_VOID_P}*8)
|
||||
string(APPEND name "-x${bits}") # x86 only for now
|
||||
|
||||
endif()
|
||||
|
||||
if(BOOST_INSTALL_LAYOUT STREQUAL versioned)
|
||||
string(APPEND name "-${Boost_VERSION_MAJOR}_${Boost_VERSION_MINOR}")
|
||||
endif()
|
||||
|
||||
set_target_properties(${LIB} PROPERTIES OUTPUT_NAME ${name})
|
||||
|
||||
endfunction()
|
||||
|
||||
function(boost_install LIB)
|
||||
|
||||
if(NOT BOOST_INSTALL_LIBDIR)
|
||||
set(BOOST_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
||||
endif()
|
||||
|
||||
if(NOT BOOST_INSTALL_CMAKEDIR)
|
||||
set(BOOST_INSTALL_CMAKEDIR "${BOOST_INSTALL_LIBDIR}/cmake")
|
||||
endif()
|
||||
|
||||
get_target_property(INTERFACE_LINK_LIBRARIES ${LIB} INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(TYPE ${LIB} TYPE)
|
||||
|
||||
if(TYPE STREQUAL "STATIC_LIBRARY" OR TYPE STREQUAL "SHARED_LIBRARY")
|
||||
|
||||
get_target_property(OUTPUT_NAME ${LIB} OUTPUT_NAME)
|
||||
|
||||
if(NOT OUTPUT_NAME)
|
||||
__boost_install_set_output_name(${LIB} ${TYPE})
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
if(LIB MATCHES "^boost_(.*)$")
|
||||
set_target_properties(${LIB} PROPERTIES EXPORT_NAME ${CMAKE_MATCH_1})
|
||||
endif()
|
||||
|
||||
set(CONFIG_INSTALL_DIR "${BOOST_INSTALL_CMAKEDIR}/${LIB}-${PROJECT_VERSION}")
|
||||
|
||||
install(TARGETS ${LIB} EXPORT ${LIB}-targets DESTINATION ${BOOST_INSTALL_LIBDIR})
|
||||
install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake)
|
||||
|
||||
set(CONFIG_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${LIB}-config.cmake")
|
||||
set(CONFIG_FILE_CONTENTS "# Generated by BoostInstall.cmake for ${LIB}-${PROJECT_VERSION}\n\n")
|
||||
|
||||
if(INTERFACE_LINK_LIBRARIES)
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "include(CMakeFindDependencyMacro)\n\n")
|
||||
|
||||
foreach(dep IN LISTS INTERFACE_LINK_LIBRARIES)
|
||||
|
||||
if(${dep} MATCHES "^Boost::(.*)$")
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "find_dependency(boost_${CMAKE_MATCH_1} ${PROJECT_VERSION} EXACT)\n")
|
||||
|
||||
endif()
|
||||
|
||||
endforeach()
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "\n")
|
||||
|
||||
endif()
|
||||
|
||||
string(APPEND CONFIG_FILE_CONTENTS "include(\"\${CMAKE_CURRENT_LIST_DIR}/${LIB}-targets.cmake\")\n")
|
||||
|
||||
file(WRITE "${CONFIG_FILE_NAME}" "${CONFIG_FILE_CONTENTS}")
|
||||
install(FILES "${CONFIG_FILE_NAME}" DESTINATION "${CONFIG_INSTALL_DIR}")
|
||||
|
||||
set(CONFIG_VERSION_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${LIB}-config-version.cmake")
|
||||
|
||||
if(TYPE STREQUAL "INTERFACE_LIBRARY")
|
||||
|
||||
# Header-only libraries are arcitecture-independent
|
||||
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 3.14)
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT)
|
||||
|
||||
else()
|
||||
|
||||
set(OLD_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
|
||||
set(CMAKE_SIZEOF_VOID_P "")
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
set(CMAKE_SIZEOF_VOID_P ${OLD_CMAKE_SIZEOF_VOID_P})
|
||||
|
||||
endif()
|
||||
|
||||
else()
|
||||
|
||||
write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
endif()
|
||||
|
||||
install(FILES "${CONFIG_VERSION_FILE_NAME}" DESTINATION "${CONFIG_INSTALL_DIR}")
|
||||
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user