1+ cmake_minimum_required (VERSION 3.16)
2+ project (aireg++ VERSION 1.0.0 LANGUAGES CXX)
3+
4+ # Set C++17 standard
5+ set (CMAKE_CXX_STANDARD 17)
6+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
7+ set (CMAKE_CXX_EXTENSIONS OFF )
8+
9+ # Enable testing
10+ enable_testing ()
11+
12+ # Set build type to Release if not specified
13+ if (NOT CMAKE_BUILD_TYPE )
14+ set (CMAKE_BUILD_TYPE Release)
15+ endif ()
16+
17+ # Compiler-specific options
18+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
19+ add_compile_options (-Wall -Wextra -Wpedantic -Werror)
20+ if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
21+ add_compile_options (-g -O0 --coverage)
22+ endif ()
23+ endif ()
24+
25+ # Find required packages
26+ find_package (PkgConfig REQUIRED)
27+
28+ # Find libsodium
29+ pkg_check_modules(LIBSODIUM REQUIRED libsodium)
30+
31+ # Include directories
32+ include_directories (${CMAKE_CURRENT_SOURCE_DIR} /include )
33+ include_directories (${LIBSODIUM_INCLUDE_DIRS} )
34+
35+ # Header-only library target
36+ add_library (aireg++ INTERFACE )
37+ target_include_directories (aireg++ INTERFACE
38+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
39+ $<INSTALL_INTERFACE:include >
40+ )
41+ target_compile_features (aireg++ INTERFACE cxx_std_17)
42+ target_link_libraries (aireg++ INTERFACE ${LIBSODIUM_LIBRARIES} )
43+
44+ # Implementation library (for non-header-only parts)
45+ add_library (aireg++_impl STATIC
46+ src/aireg++.cpp
47+ src/stubs.cpp
48+ )
49+ target_include_directories (aireg++_impl PUBLIC
50+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
51+ $<INSTALL_INTERFACE:include >
52+ )
53+ target_compile_features (aireg++_impl PUBLIC cxx_std_17)
54+ target_link_libraries (aireg++_impl PUBLIC ${LIBSODIUM_LIBRARIES} )
55+
56+ # Link the implementation to the interface
57+ target_link_libraries (aireg++ INTERFACE aireg++_impl)
58+
59+ # Add subdirectories
60+ add_subdirectory (tests)
61+ add_subdirectory (examples)
62+
63+ # Custom targets
64+ add_custom_target (test -integration
65+ COMMAND ${CMAKE_CTEST_COMMAND} -L integration
66+ COMMENT "Running integration tests"
67+ )
68+
69+ add_custom_target (coverage
70+ COMMAND gcov -r *.gcno
71+ COMMAND lcov --capture --directory . --output -file coverage.info
72+ COMMAND genhtml coverage.info --output -directory coverage_html
73+ COMMENT "Generating coverage report"
74+ )
75+
76+ add_custom_target (docs
77+ COMMAND doxygen ${CMAKE_CURRENT_SOURCE_DIR} /docs/Doxyfile
78+ COMMENT "Generating API documentation"
79+ )
80+
81+ # Install configuration
82+ install (TARGETS aireg++ EXPORT aireg++Targets)
83+ install (DIRECTORY include / DESTINATION include )
84+ install (EXPORT aireg++Targets
85+ FILE aireg++Targets.cmake
86+ NAMESPACE aireg++::
87+ DESTINATION lib/cmake/aireg++
88+ )
89+
90+ # Create config file
91+ include (CMakePackageConfigHelpers)
92+ write_basic_package_version_file(
93+ aireg++ConfigVersion.cmake
94+ VERSION ${PROJECT_VERSION}
95+ COMPATIBILITY AnyNewerVersion
96+ )
97+
98+ configure_package_config_file(
99+ cmake/aireg++Config.cmake.in
100+ aireg++Config.cmake
101+ INSTALL_DESTINATION lib/cmake/aireg++
102+ )
103+
104+ install (FILES
105+ ${CMAKE_CURRENT_BINARY_DIR} /aireg++Config.cmake
106+ ${CMAKE_CURRENT_BINARY_DIR} /aireg++ConfigVersion.cmake
107+ DESTINATION lib/cmake/aireg++
108+ )
0 commit comments