Skip to content

Commit 2a19881

Browse files
committed
Add CMake functionality to export/import cleanly.
This is a CMakeLists.txt file that writes the proper config import files and nothing else. Doesn't replace or "enhance" the actual build system, just something that exists on the side. I've intentionally written it to require pretty much no maintenance, but if it ever does just ping me (github or e-mail) and I'll get it sorted as soon as I have time.
1 parent 55684d4 commit 2a19881

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

CMakeLists.txt

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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 lib/cmake
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 "lib/cmake"
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 lib/cmake
110+
NAMESPACE ${PROJECT_NAME}::
111+
)
112+

cmake/config.cmake.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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+
@PACKAGE_INIT@
7+
8+
include("${CMAKE_CURRENT_LIST_DIR}/asio-targets.cmake")

0 commit comments

Comments
 (0)