diff --git a/CMakeLists.txt b/CMakeLists.txt index 353f6bb..0173a78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,54 @@ -project(StatsdClient) -cmake_minimum_required(VERSION 3.2) - +# Basic project setup +cmake_minimum_required(VERSION 3.5) +project(cpp-statsd-client + VERSION 1.0.2 + LANGUAGES CXX + DESCRIPTION "A header-only StatsD client implemented in C++" + HOMEPAGE_URL "https://github.com/vthiery/cpp-statsd-client") set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) -set(CPP_STATSD_CLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/cpp-statsd-client) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) +find_package(Threads) -include_directories(${CPP_STATSD_CLIENT_DIR}) +# The library target +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories( + ${PROJECT_NAME} + INTERFACE $ + $) +target_link_libraries(${PROJECT_NAME} INTERFACE Threads::Threads) -install(DIRECTORY ${CPP_STATSD_CLIENT_DIR} DESTINATION include) +# The installation and pkg-config-like cmake config +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}_Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +write_basic_package_version_file("${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION + ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) +install(EXPORT ${PROJECT_NAME}_Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) +install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/include DESTINATION include) -find_package(Threads) +# The test targets add_executable(testStatsdClient ${CMAKE_CURRENT_SOURCE_DIR}/tests/testStatsdClient.cpp) +target_compile_options(testStatsdClient PRIVATE -Wall -Wextra -pedantic -Werror) target_include_directories(testStatsdClient PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) -target_link_libraries(testStatsdClient ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(testStatsdClient ${PROJECT_NAME}) +# The test suite enable_testing() -add_test(testSuite testStatsdClient) - -unset(CPP_STATSD_CLIENT_DIR) +add_test(ctestTestStatsdClient testStatsdClient) +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS testStatsdClient) diff --git a/cmake/cpp-statsd-clientConfig.cmake.in b/cmake/cpp-statsd-clientConfig.cmake.in new file mode 100644 index 0000000..9c15f36 --- /dev/null +++ b/cmake/cpp-statsd-clientConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/include/cpp-statsd-client/StatsdClient.hpp b/include/cpp-statsd-client/StatsdClient.hpp index 654b8c5..c05e360 100644 --- a/include/cpp-statsd-client/StatsdClient.hpp +++ b/include/cpp-statsd-client/StatsdClient.hpp @@ -1,12 +1,12 @@ #ifndef STATSD_CLIENT_HPP #define STATSD_CLIENT_HPP +#include #include #include #include #include #include -#include "UDPSender.hpp" namespace Statsd { diff --git a/tests/testStatsdClient.cpp b/tests/testStatsdClient.cpp index 8cc4acf..eca74fa 100644 --- a/tests/testStatsdClient.cpp +++ b/tests/testStatsdClient.cpp @@ -1,7 +1,8 @@ -#include -#include #include +#include "StatsdServer.hpp" +#include "cpp-statsd-client/StatsdClient.hpp" + using namespace Statsd; // Each test suite below spawns a thread to recv the client messages over UDP as if it were a real statsd server @@ -136,7 +137,7 @@ void testSendRecv(uint64_t batchSize) { } } -int main(int argc, char** argv) { +int main() { // If any of these tests fail they throw an exception, not catching makes for a nonzero return code // general things that should be errors