|
| 1 | +# Copyright (c) 2026 Narta Xaymar Dirks (info at xaymar dot com) |
| 2 | +# |
| 3 | +# Distributed under the Boost Software License, Version 1.0. (See accompanying |
| 4 | +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| 5 | + |
| 6 | +# Require the latest CMake version. |
| 7 | +cmake_minimum_required(VERSION 4.2.1) |
| 8 | + |
| 9 | +project(asio) |
| 10 | + |
| 11 | +# Is this the new or old layout? |
| 12 | +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/include") |
| 13 | + # New Layout |
| 14 | + set(_src "${CMAKE_CURRENT_SOURCE_DIR}") |
| 15 | +else() |
| 16 | + # Old Layout |
| 17 | + set(_src "${CMAKE_CURRENT_SOURCE_DIR}/asio") |
| 18 | +endif() |
| 19 | + |
| 20 | +# Figure out the version from the provided version.hpp. |
| 21 | +if(EXISTS "${_src}/include/asio/version.hpp") |
| 22 | + file(READ "${_src}/include/asio/version.hpp" ASIO_VERSION_HPP) |
| 23 | + string(REGEX MATCH "#define ASIO_VERSION ([0-9]+) // ([0-9]+)\.([0-9]+)\.([0-9]+)" ASIO_VERSION "${ASIO_VERSION_HPP}") |
| 24 | + set(ASIO_VERSION_INT ${CMAKE_MATCH_1}) |
| 25 | + set(ASIO_VERSION_MAJOR ${CMAKE_MATCH_2}) # Trust the comment for now. |
| 26 | + set(ASIO_VERSION_MINOR ${CMAKE_MATCH_3}) |
| 27 | + set(ASIO_VERSION_PATCH ${CMAKE_MATCH_4}) |
| 28 | + project(${PROJECT_NAME} VERSION "${ASIO_VERSION_MAJOR}.${ASIO_VERSION_MINOR}.${ASIO_VERSION_PATCH}") |
| 29 | +endif() |
| 30 | + |
| 31 | + |
| 32 | +#--------------------------------------------------------------------------------# |
| 33 | +# Options |
| 34 | +#--------------------------------------------------------------------------------# |
| 35 | + |
| 36 | +# What options? |
| 37 | + |
| 38 | +#--------------------------------------------------------------------------------# |
| 39 | +# Library |
| 40 | +#--------------------------------------------------------------------------------# |
| 41 | + |
| 42 | +add_library(${PROJECT_NAME} INTERFACE) |
| 43 | + |
| 44 | +target_include_directories(${PROJECT_NAME} |
| 45 | + INTERFACE |
| 46 | + $<BUILD_INTERFACE:${_src}/include/> |
| 47 | + $<INSTALL_INTERFACE:include/> |
| 48 | +) |
| 49 | + |
| 50 | +target_compile_definitions(${PROJECT_NAME} |
| 51 | + INTERFACE |
| 52 | + ASIO_STANDALONE |
| 53 | +) |
| 54 | + |
| 55 | +set_target_properties(${PROJECT_NAME} PROPERTIES |
| 56 | + # Only necessary for source builds, which only work on MSVC anyway. |
| 57 | + CXX_STANDARD 11 |
| 58 | + CXX_STANDARD_REQUIRED ON |
| 59 | + CXX_EXTENSIONS OFF |
| 60 | +) |
| 61 | + |
| 62 | +#--------------------------------------------------------------------------------# |
| 63 | +# Install |
| 64 | +#--------------------------------------------------------------------------------# |
| 65 | + |
| 66 | +install(TARGETS ${PROJECT_NAME} |
| 67 | + EXPORT ${PROJECT_NAME}-targets |
| 68 | + LIBRARY RUNTIME FRAMEWORK |
| 69 | + PERMISSIONS OWNER_WRITE GROUP_WRITE OWNER_READ GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE |
| 70 | +) |
| 71 | +install( |
| 72 | + DIRECTORY "${_src}/include/" |
| 73 | + TYPE INCLUDE |
| 74 | + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE WORLD_READ |
| 75 | + DIRECTORY_PERMISSIONS OWNER_WRITE GROUP_WRITE OWNER_READ GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE |
| 76 | + FILES_MATCHING |
| 77 | + REGEX ".*\.hpp$" |
| 78 | + REGEX ".*\.ipp$" |
| 79 | +) |
| 80 | +install( |
| 81 | + FILES |
| 82 | + "${CMAKE_CURRENT_BINARY_DIR}/asio-config.cmake" |
| 83 | + "${CMAKE_CURRENT_BINARY_DIR}/asio-config-version.cmake" |
| 84 | + DESTINATION "share/cmake/asio/" |
| 85 | +) |
| 86 | + |
| 87 | +#--------------------------------------------------------------------------------# |
| 88 | +# CMake Config |
| 89 | +#--------------------------------------------------------------------------------# |
| 90 | + |
| 91 | +include(CMakePackageConfigHelpers) |
| 92 | +configure_package_config_file( |
| 93 | + "cmake/config.cmake.in" |
| 94 | + "${PROJECT_NAME}-config.cmake" |
| 95 | + INSTALL_DESTINATION "share/cmake/asio/" |
| 96 | +) |
| 97 | +write_basic_package_version_file( |
| 98 | + "${PROJECT_NAME}-config-version.cmake" |
| 99 | + COMPATIBILITY SameMinorVersion |
| 100 | + ARCH_INDEPENDENT |
| 101 | +) |
| 102 | + |
| 103 | +# Generate asio-targets.cmake and asio-targets${CMAKE_BUILD_TYPE}.cmake files. |
| 104 | +export(EXPORT ${PROJECT_NAME}-targets |
| 105 | + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake" |
| 106 | + NAMESPACE ${PROJECT_NAME}:: |
| 107 | +) |
| 108 | +install(EXPORT ${PROJECT_NAME}-targets |
| 109 | + DESTINATION "share/cmake/asio/" |
| 110 | + NAMESPACE ${PROJECT_NAME}:: |
| 111 | +) |
| 112 | + |
0 commit comments