@@ -5,10 +5,50 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
55set (CMAKE_CXX_EXTENSIONS OFF )
66
77project (slick-socket
8- VERSION 1.0.5
8+ VERSION 1.0.6
99 LANGUAGES C CXX
1010)
1111
12+ # Options
13+ option (BUILD_SLICK_SOCKET_EXAMPLES "Build tests" ON )
14+ option (BUILD_SLICK_SOCKET_TESTING "Build tests" ON )
15+ option (ENABLE_ASAN "Enable AddressSanitizer" OFF )
16+
17+ if (WIN32 )
18+ # Find wepoll (vcpkg installation without CMake config)
19+ find_path (WEPOLL_INCLUDE_DIR wepoll.h )
20+ find_library (WEPOLL_LIBRARY NAMES wepoll )
21+
22+ if (WEPOLL_INCLUDE_DIR AND WEPOLL_LIBRARY)
23+ # Create an imported target for wepoll
24+ add_library (wepoll::wepoll STATIC IMPORTED )
25+ set_target_properties (wepoll::wepoll PROPERTIES
26+ IMPORTED_LOCATION "${WEPOLL_LIBRARY} "
27+ INTERFACE_INCLUDE_DIRECTORIES "${WEPOLL_INCLUDE_DIR} "
28+ )
29+ message (STATUS "wepoll: found at ${WEPOLL_LIBRARY} " )
30+ else ()
31+ # Fallback: Fetch wepoll from GitHub and build it
32+ message (STATUS "wepoll not found locally, fetching from GitHub..." )
33+ include (FetchContent )
34+ FetchContent_Declare (
35+ wepoll
36+ GIT_REPOSITORY https://github.com/piscisaureus/wepoll.git
37+ GIT_TAG v1.5.8
38+ )
39+ FetchContent_MakeAvailable (wepoll)
40+
41+ # Build wepoll as a static library
42+ add_library (wepoll_lib STATIC ${wepoll_SOURCE_DIR} /wepoll.c )
43+ target_include_directories (wepoll_lib PUBLIC ${wepoll_SOURCE_DIR} )
44+
45+ # Create the wepoll::wepoll target
46+ add_library (wepoll::wepoll ALIAS wepoll_lib )
47+
48+ message (STATUS "wepoll: fetched and built from GitHub" )
49+ endif ()
50+ endif ()
51+
1252# MSVC configuration
1353if (MSVC )
1454 # Enable policy CMP0091 to allow CMAKE_MSVC_RUNTIME_LIBRARY to be controlled by toolchain/user
@@ -32,7 +72,6 @@ if (CMAKE_BUILD_TYPE MATCHES Release)
3272 add_definitions (-DNDEBUG )
3373endif ()
3474
35- option (ENABLE_ASAN "Enable AddressSanitizer" OFF )
3675if (ENABLE_ASAN)
3776 if (MSVC )
3877 # MSVC AddressSanitizer (requires Visual Studio 2022 17.7+)
@@ -60,43 +99,28 @@ if (MSVC)
6099 set (CMAKE_SUPPRESS_REGENERATION true ) # supress zero_check project
61100endif ()
62101
102+ # Create header-only INTERFACE library
103+ add_library (slick-socket INTERFACE )
104+ add_library (slick::socket ALIAS slick-socket )
105+
106+ target_include_directories (slick-socket INTERFACE
107+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
108+ $<INSTALL_INTERFACE :include >
109+ )
110+
111+ # Platform-specific dependencies
63112if (WIN32 )
64- add_library (slick-socket STATIC src/wepoll.c )
65- add_library (slick::socket ALIAS slick-socket )
66- # For backward compatibility
67- add_library (slick_socket ALIAS slick-socket )
68- add_library (slick::slick_socket ALIAS slick-socket )
69-
70- set_target_properties (slick-socket PROPERTIES
71- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /lib
72- )
73- target_include_directories (slick-socket PUBLIC
74- $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
75- $<INSTALL_INTERFACE :include >
76- )
77- target_compile_definitions (slick-socket PUBLIC _WIN32_WINNT=0x0601 )
78- target_link_libraries (slick-socket PUBLIC ws2_32 )
79- elseif (UNIX )
80- add_library (slick-socket INTERFACE )
81- add_library (slick::socket ALIAS slick-socket )
82- # For backward compatibility
83- add_library (slick_socket ALIAS slick-socket )
84- add_library (slick::slick_socket ALIAS slick-socket )
85- target_include_directories (slick-socket INTERFACE
86- $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
87- $<INSTALL_INTERFACE :include >
88- )
113+ target_compile_definitions (slick-socket INTERFACE _WIN32_WINNT=0x0601 )
114+ target_link_libraries (slick-socket INTERFACE ws2_32 wepoll::wepoll )
89115endif ()
90116
91117set_target_properties (slick-socket PROPERTIES EXPORT_NAME socket )
92118
93- option (BUILD_SLICK_SOCKET_EXAMPLES "Build tests" ON )
94119if (BUILD_SLICK_SOCKET_EXAMPLES)
95120 add_subdirectory (examples )
96121endif ()
97122
98123# Tests
99- option (BUILD_SLICK_SOCKET_TESTING "Build tests" ON )
100124if (BUILD_SLICK_SOCKET_TESTING)
101125 enable_testing ()
102126 add_subdirectory (tests )
@@ -105,21 +129,10 @@ endif()
105129# Install headers
106130install (DIRECTORY include/ DESTINATION include)
107131
108- # Install library targets
109- if (WIN32 )
110- install (TARGETS slick-socket
111- EXPORT slick-socketTargets
112- ARCHIVE DESTINATION lib
113- LIBRARY DESTINATION lib
114- RUNTIME DESTINATION bin
115- )
116- else ()
117- install (TARGETS slick-socket
118- EXPORT slick-socketTargets
119- ARCHIVE DESTINATION lib
120- LIBRARY DESTINATION lib
121- )
122- endif ()
132+ # Install library targets (header-only INTERFACE library)
133+ install (TARGETS slick-socket
134+ EXPORT slick-socketTargets
135+ )
123136
124137# Install CMake package configuration files
125138include (CMakePackageConfigHelpers )
0 commit comments