Skip to content

Commit 7fcc511

Browse files
committed
updates, bug fix queue_work, add cmake packaging
1 parent dcbcdde commit 7fcc511

8 files changed

Lines changed: 266 additions & 77 deletions

File tree

CMakeLists.txt

Lines changed: 100 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
cmake_minimum_required(VERSION 3.11...3.14)
1+
cmake_minimum_required(VERSION 3.14...4.0)
22

33
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
44
cmake_policy(SET CMP0135 NEW)
55
endif()
66

7-
project(asio LANGUAGES C)
7+
project(asio
8+
VERSION 1.0.0
9+
DESCRIPTION "A memory safe focus `C framework`, combining RAII, libuv, coroutine, and other concurrency primitives."
10+
HOMEPAGE_URL "https://zelang-dev.github.io/c-asio/"
11+
LANGUAGES C
12+
)
813

914
set(CMAKE_C_STANDARD 90)
1015

@@ -20,7 +25,7 @@ set(CMAKE_CONFIGURATION_TYPES=Debug;Release)
2025
set(BUILD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build)
2126
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUILD_DIR})
2227
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/built")
23-
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
28+
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
2429

2530
find_package(raii QUIET)
2631
if(NOT raii_FOUND)
@@ -43,8 +48,8 @@ endif()
4348
find_package(opentls QUIET)
4449
if(NOT opentls_FOUND)
4550
FetchContent_Declare(opentls
46-
URL https://github.com/zelang-dev/openTLS/archive/refs/tags/4.1.4.zip
47-
URL_MD5 8b36facb05b61b9e0b0f29c354abb520
51+
URL https://github.com/zelang-dev/openTLS/archive/refs/tags/4.1.5.zip
52+
URL_MD5 ff135f215921480ce824c1c1f73374e7
4853
)
4954
if(WIN32)
5055
add_definitions(-DOPENSSL_MSVC_STATIC_RT=TRUE)
@@ -62,11 +67,11 @@ set(lib_files
6267

6368
add_library(${PROJECT_NAME} STATIC ${lib_files})
6469
add_library(ASIO::ASYNC ALIAS ${PROJECT_NAME})
65-
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${RAII_INCLUDE_DIR}
70+
target_include_directories(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${RAII_INCLUDE_DIR}
6671
$<INSTALL_INTERFACE:${RAII_INCLUDE_DIR})
67-
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${OPENTLS_INCLUDE_DIR}
72+
target_include_directories(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${OPENTLS_INCLUDE_DIR}
6873
$<INSTALL_INTERFACE:${OPENTLS_INCLUDE_DIR})
69-
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${OPENSSL_INCLUDE_DIR}
74+
target_include_directories(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${OPENSSL_INCLUDE_DIR}
7075
$<INSTALL_INTERFACE:${OPENSSL_INCLUDE_DIR})
7176
target_include_directories(${PROJECT_NAME} PUBLIC
7277
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -79,7 +84,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC opentls)
7984
target_link_libraries(${PROJECT_NAME} PUBLIC uv_a)
8085
target_link_libraries(${PROJECT_NAME} PUBLIC raii)
8186

82-
set_property(TARGET asio PROPERTY POSITION_INDEPENDENT_CODE True)
87+
set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE True)
8388

8489
if(UNIX)
8590
if(APPLE)
@@ -96,7 +101,7 @@ endif()
96101

97102
find_package(ZLIB CONFIG)
98103
if(ZLIB_FOUND)
99-
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${ZLIB_INCLUDE_DIR} $<INSTALL_INTERFACE:${INSTALL_INC_DIR})
104+
target_include_directories(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${ZLIB_INCLUDE_DIR} $<INSTALL_INTERFACE:${INSTALL_INC_DIR})
100105
message(STATUS "Cmake FindZLIB: using ZLIB includes at: ${ZLIB_INCLUDE_DIR}")
101106
message(STATUS "Cmake FindZLIB: using ZLIB libraries: ${ZLIB_LIBRARIES}")
102107
else()
@@ -111,7 +116,7 @@ else()
111116
set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "Build tests" FORCE)
112117
set(ZLIB_BUILD_MINIZIP OFF CACHE BOOL "Build libminizip" FORCE)
113118
set(ZLIB_INSTALL ON CACHE BOOL "Install zlib" FORCE)
114-
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${INSTALL_INC_DIR} $<INSTALL_INTERFACE:${INSTALL_INC_DIR})
119+
target_include_directories(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${INSTALL_INC_DIR} $<INSTALL_INTERFACE:${INSTALL_INC_DIR})
115120
endif()
116121
target_link_libraries(${PROJECT_NAME} PUBLIC ${ZLIB_LIBRARIES})
117122

@@ -129,8 +134,8 @@ if(ENABLE_ASAN AND CMAKE_BUILD_TYPE MATCHES Debug)
129134
set(ASAN_COMPILE_FLAG "-fsanitize=address")
130135
set(ASAN_LINK_FLAG "-fsanitize=address")
131136
endif()
132-
target_compile_options(asio PUBLIC ${ASAN_COMPILE_FLAG})
133-
target_link_options(asio PUBLIC ${ASAN_LINK_FLAG})
137+
target_compile_options(${PROJECT_NAME} PUBLIC ${ASAN_COMPILE_FLAG})
138+
target_link_options(${PROJECT_NAME} PUBLIC ${ASAN_LINK_FLAG})
134139
endif()
135140

136141
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
@@ -146,6 +151,9 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
146151
endif()
147152
endif()
148153

154+
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
155+
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
156+
149157
set(_fmt TGZ)
150158
if(WIN32)
151159
set(_fmt ZIP)
@@ -161,10 +169,85 @@ set(CPACK_NSIS_MODIFY_PATH ON)
161169
set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
162170
set(CPACK_VERBATIM_VARIABLES YES)
163171

164-
set(CPACK_PACKAGE_VENDOR "https://github.com/zelang-dev/c-asio")
165-
set(CPACK_PACKAGE_VERSION 1.0.0)
166-
include(CPack)
172+
set(CPACK_SOURCE_IGNORE_FILES
173+
"~$"
174+
"\\\\.svn/"
175+
"/CMakeFiles/"
176+
"/CMakeCache*"
177+
"/cmake_install\\\\.cmake$"
178+
"/cmake_uninstall\\\\.cmake$"
179+
"^_CPack_.*/"
180+
"/CPack*"
181+
"\\\\.o$"
182+
"/m4/"
183+
"/build/"
184+
"/built/"
185+
)
186+
187+
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
188+
CACHE PATH "Location of header files" )
189+
190+
set(SYSCONFIG_INSTALL_DIR ${CMAKE_INSTALL_SYSCONFDIR}/${PROJECT_NAME}
191+
CACHE PATH "Location of configuration files" )
192+
193+
configure_package_config_file(asioConfig.cmake.in
194+
${CMAKE_CURRENT_BINARY_DIR}/asioConfig.cmake
195+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
196+
PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
197+
198+
write_basic_package_version_file(
199+
${CMAKE_CURRENT_BINARY_DIR}/asioConfigVersion.cmake
200+
VERSION ${PROJECT_VERSION}
201+
COMPATIBILITY SameMajorVersion )
202+
203+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/asioConfig.cmake
204+
${CMAKE_CURRENT_BINARY_DIR}/asioConfigVersion.cmake
205+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} )
206+
207+
set(CMAKE_INSTALL_CONFIG_NAME ${CMAKE_BUILD_TYPE})
208+
209+
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/Package")
210+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME})
211+
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME})
212+
213+
set(CPACK_PACKAGE_CONTACT "lstubbs@zelang.dev")
214+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Lawrence Stubbs <${CPACK_PACKAGE_CONTACT}>")
215+
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
216+
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)
217+
SET(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "C framework library")
218+
SET(CPACK_COMPONENT_LIBRARIES_DESCRIPTION "A memory safe focus `C framework`, combining RAII, libuv, coroutine, and other concurrency primitives.")
219+
220+
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md)
221+
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
222+
223+
set(CPACK_PACKAGE_VENDOR "https://github.com/zelang-dev")
224+
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
225+
set(CPACK_PACKAGE_DESCRIPTION ${PROJECT_DESCRIPTION})
226+
227+
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
228+
set(CPACK_RPM_PACKAGE_URL "https://zelang-dev.github.io/c-asio/")
229+
set(CPACK_RPM_PACKAGE_ARCHITECTURE "noarch")
167230

168231
set(CMAKE_INSTALL_CONFIG_NAME ${CMAKE_BUILD_TYPE})
232+
install(
233+
TARGETS ${PROJECT_NAME} raii uv opentls
234+
EXPORT "${PROJECT_NAME}Targets"
235+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
236+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
237+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
238+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
239+
)
240+
241+
install(
242+
EXPORT "${PROJECT_NAME}Targets"
243+
FILE "${PROJECT_NAME}Targets.cmake"
244+
NAMESPACE ASIO::
245+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
246+
)
247+
169248
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
170-
install(DIRECTORY include/ DESTINATION include)
249+
file(GLOB HEADER_LIST "include/*.h")
250+
install(FILES ${HEADER_LIST} DESTINATION include)
251+
252+
set(CPACK_INSTALL_CMAKE_CONFIGURATIONS Release)
253+
include(CPack)

FindAsio.cmake

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#[=======================================================================[
2+
3+
FindAsio
4+
---------
5+
6+
Find asio includes and library.
7+
8+
Imported Targets
9+
^^^^^^^^^^^^^^^^
10+
11+
An :ref:`imported target <Imported targets>` named
12+
``ASIO::ASIO`` is provided if asio has been found.
13+
14+
Result Variables
15+
^^^^^^^^^^^^^^^^
16+
17+
This module defines the following variables:
18+
19+
``ASIO_FOUND``
20+
True if asio was found, false otherwise.
21+
``ASIO_INCLUDE_DIRS``
22+
Include directories needed to include asio headers.
23+
``ASIO_LIBRARIES``
24+
Libraries needed to link to asio.
25+
``ASIO_VERSION``
26+
The version of asio found.
27+
``ASIO_VERSION_MAJOR``
28+
The major version of asio.
29+
``ASIO_VERSION_MINOR``
30+
The minor version of asio.
31+
``ASIO_VERSION_PATCH``
32+
The patch version of asio.
33+
34+
Cache Variables
35+
^^^^^^^^^^^^^^^
36+
37+
This module uses the following cache variables:
38+
39+
``ASIO_LIBRARY``
40+
The location of the asio library file.
41+
``ASIO_INCLUDE_DIR``
42+
The location of the asio include directory containing ``asio.h``.
43+
44+
The cache variables should not be used by project code.
45+
They may be set by end users to point at asio components.
46+
#]=======================================================================]
47+
48+
find_library(asio_LIBRARY
49+
NAMES
50+
asio
51+
libasio
52+
)
53+
mark_as_advanced(asio_LIBRARY)
54+
55+
find_path(asio_INCLUDE_DIR
56+
NAMES asio.h
57+
)
58+
mark_as_advanced(asio_INCLUDE_DIR)
59+
60+
#-----------------------------------------------------------------------------
61+
# Extract version number if possible.
62+
set(_ASIO_H_REGEX "#[ \t]*define[ \t]+ASIO_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+")
63+
if(ASIO_INCLUDE_DIR AND EXISTS "${ASIO_INCLUDE_DIR}/asio.h")
64+
file(STRINGS "${ASIO_INCLUDE_DIR}/asio.h" _ASIO_H REGEX "${_ASIO_H_REGEX}")
65+
else()
66+
set(_ASIO_H "")
67+
endif()
68+
foreach(c MAJOR MINOR PATCH)
69+
if(_ASIO_H MATCHES "#[ \t]*define[ \t]+ASIO_VERSION_${c}[ \t]+([0-9]+)")
70+
set(_ASIO_VERSION_${c} "${CMAKE_MATCH_1}")
71+
else()
72+
unset(_ASIO_VERSION_${c})
73+
endif()
74+
endforeach()
75+
76+
if(DEFINED _ASIO_VERSION_MAJOR AND DEFINED _ASIO_VERSION_MINOR)
77+
set(ASIO_VERSION_MAJOR "${_ASIO_VERSION_MAJOR}")
78+
set(ASIO_VERSION_MINOR "${_ASIO_VERSION_MINOR}")
79+
set(ASIO_VERSION "${ASIO_VERSION_MAJOR}.${ASIO_VERSION_MINOR}")
80+
if(DEFINED _ASIO_VERSION_PATCH)
81+
set(ASIO_VERSION_PATCH "${_ASIO_VERSION_PATCH}")
82+
set(ASIO_VERSION "${ASIO_VERSION}.${ASIO_VERSION_PATCH}")
83+
else()
84+
unset(ASIO_VERSION_PATCH)
85+
endif()
86+
else()
87+
set(ASIO_VERSION_MAJOR "")
88+
set(ASIO_VERSION_MINOR "")
89+
set(ASIO_VERSION_PATCH "")
90+
set(ASIO_VERSION "")
91+
endif()
92+
unset(_ASIO_VERSION_MAJOR)
93+
unset(_ASIO_VERSION_MINOR)
94+
unset(_ASIO_VERSION_PATCH)
95+
unset(_ASIO_H_REGEX)
96+
unset(_ASIO_H)
97+
98+
#-----------------------------------------------------------------------------
99+
# Set Find Package Arguments
100+
include (FindPackageHandleStandardArgs)
101+
find_package_handle_standard_args(asio
102+
FOUND_VAR asio_FOUND
103+
REQUIRED_VARS ASIO_LIBRARY ASIO_INCLUDE_DIR
104+
VERSION_VAR ASIO_VERSION
105+
HANDLE_COMPONENTS
106+
FAIL_MESSAGE
107+
"Could NOT find ASIO"
108+
)
109+
110+
set(ASIO_FOUND ${asio_FOUND})
111+
112+
#-----------------------------------------------------------------------------
113+
# Provide documented result variables and targets.
114+
if(ASIO_FOUND)
115+
set(ASIO_INCLUDE_DIRS ${ASIO_INCLUDE_DIR})
116+
set(ASIO_LIBRARIES ${ASIO_LIBRARY})
117+
if(NOT TARGET ASIO::ASYNC)
118+
add_library(ASIO::ASYNC UNKNOWN IMPORTED)
119+
set_target_properties(ASIO::ASYNC PROPERTIES
120+
IMPORTED_LOCATION "${ASIO_LIBRARY}"
121+
INTERFACE_INCLUDE_DIRECTORIES "${ASIO_INCLUDE_DIRS}"
122+
)
123+
endif()
124+
endif()

asioConfig.cmake.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
set(ASIO_VERSION ${PROJECT_VERSION})
2+
3+
@PACKAGE_INIT@
4+
5+
set_and_check(ASIO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
6+
set_and_check(ASIO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
7+
8+
check_required_components(asio)

include/asio.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#ifndef _ASIO_H
22
#define _ASIO_H
33

4+
#define ASIO_VERSION_MAJOR 1
5+
#define ASIO_VERSION_MINOR 0
6+
#define ASIO_VERSION_PATCH 0
7+
48
#define INTERRUPT_MODE UV_RUN_NOWAIT
59

610
#include "async_tls.h"
@@ -576,8 +580,8 @@ typedef struct {
576580
routine_t *thread;
577581
} async_state;
578582

579-
C_API async_state *async_state_handle_get(void_t);
580-
C_API async_state *async_state_req_get(void_t);
583+
C_API async_state *handle_getasync_state(void_t);
584+
C_API async_state *req_getasync_state(void_t);
581585

582586
C_API sockaddr_t *sockaddr(string_t host, int port);
583587

include/async_tls.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
// According to SSL Labs, enabling TLS1.1 doesn't do any good...
1919
// Not 100% sure about its status in IE11 though.
20-
#define ASYNC_TLS_PROTOCOLS (TLS_PROTOCOL_TLSv1_2)
20+
#define ASYNC_TLS_PROTOCOLS (TLS_PROTOCOLS_DEFAULT)
2121

2222
#ifdef __cplusplus
2323
extern "C" {
@@ -42,7 +42,6 @@ char *async_tls_read(async_tls_t *const socket);
4242
ssize_t async_tls_write(async_tls_t *const socket, unsigned char const *const buf, size_t const len);
4343

4444
ssize_t async_read(uv_stream_t *const stream, unsigned char *const buf, size_t const max);
45-
int async_connect(uv_tcp_t *const stream, struct sockaddr const *const addr);
4645

4746
#ifdef __cplusplus
4847
}

0 commit comments

Comments
 (0)