11cmake_minimum_required (VERSION 3.10 )
2- project (kitepp)
2+ project (CppKiteConnect)
33
4- #detect Linux (for optional linking of libuv)
4+ # set variables
5+ set (CMAKE_CXX_STANDARD 17)
6+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
7+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/modules/" )
8+
9+ # detect Linux (for optional linking of libuv)
510if (UNIX AND NOT APPLE )
11+ message (STATUS "environment set to linux" )
612 set (LINUX TRUE )
713endif ()
814
9- #set variables
10- set (CMAKE_CXX_STANDARD 11)
11- set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
12- set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/modules/" )
13-
14- #set project include directory
15+ # set project include directory
1516include_directories ("${CMAKE_SOURCE_DIR} /include" )
1617
17- #build examples
18- add_subdirectory ("examples/example1" )
19- add_subdirectory ("examples/example2" )
20- add_subdirectory ("examples/example3" )
21- add_subdirectory ("examples/example4" )
18+ # find deps
19+ set (LINUX_AND_UV_NOT_FOUND false )
20+
21+ if (BUILD_EXAMPLES OR BUILD_TESTS)
22+ find_package (Threads REQUIRED )
23+ find_package (OpenSSL REQUIRED )
24+ find_package (ZLIB REQUIRED )
25+ find_library (UWS_LIB uWS REQUIRED )
26+ find_path (UWS_INCLUDE uWS REQUIRED )
27+
28+ if (DEFINED LINUX )
29+ find_library (UV_LIB uv )
30+ find_path (UV_INCLUDE "uv.h" )
31+ else ()
32+ find_library (UV_LIB uv REQUIRED )
33+ find_path (UV_INCLUDE "uv.h" REQUIRED )
34+ endif ()
35+
36+ if (BUILD_TESTS)
37+ find_package (GTest REQUIRED )
38+ find_package (GMock REQUIRED )
39+ endif ()
40+
41+ if ((NOT UV_LIB OR NOT UV_INCLUDE) AND DEFINED LINUX )
42+ set (LINUX_AND_UV_NOT_FOUND true )
43+ message (STATUS "couldn't find libuv" )
44+ endif ()
45+ endif ()
46+
47+ # build examples
48+ if (BUILD_EXAMPLES)
49+ function (build_exmaple example_name )
50+ add_executable (${example_name} "${CMAKE_SOURCE_DIR} /examples/${example_name} .cpp" )
51+
52+ if (LINUX_AND_UV_NOT_FOUND)
53+ target_include_directories (${example_name} PUBLIC ${UWS_INCLUDE} )
54+ target_link_libraries (${example_name} PUBLIC Threads::Threads OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB ${UWS_LIB} )
55+ else ()
56+ target_include_directories (${example_name} PUBLIC ${UWS_INCLUDE} ${UV_INCLUDE} )
57+ target_link_libraries (${example_name} PUBLIC Threads::Threads OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB ${UWS_LIB} ${UV_LIB} )
58+ endif ()
59+ endfunction (build_exmaple )
60+
61+ build_exmaple (example1 )
62+ build_exmaple (example2 )
63+ build_exmaple (example3 )
64+ build_exmaple (example4 )
65+ endif ()
66+
67+ # build tests
68+ if (BUILD_TESTS)
69+ include (CTest )
70+ option (CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON )
71+ option (gtest_disable_pthreads "disabling pthreads in gtest" ON )
72+
73+ # kite-test
74+ set (KITE_TEST_BINARY_NAME kiteTest)
75+ file (GLOB test_files
76+ "${CMAKE_SOURCE_DIR} /tests/unit/kite/*.cpp"
77+ )
78+ add_executable (${KITE_TEST_BINARY_NAME} ${test_files} )
79+ target_include_directories (${KITE_TEST_BINARY_NAME} PUBLIC ${GTEST_INCLUDE_DIRS} ${GMOCK_INCLUDE_DIRS} )
80+ target_link_libraries (${KITE_TEST_BINARY_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES} Threads::Threads )
81+ add_test (NAME kite-test COMMAND ${KITE_TEST_BINARY_NAME} )
82+
83+ # ticker-test
84+ set (TICKER_TEST_BINARY_NAME tickerTest)
85+ add_executable (${TICKER_TEST_BINARY_NAME} "${CMAKE_SOURCE_DIR} /tests/unit/tickertest.cpp" )
86+
87+ if (LINUX_AND_UV_NOT_FOUND)
88+ target_include_directories (${TICKER_TEST_BINARY_NAME} PUBLIC ${UWS_INCLUDE} ${GTEST_INCLUDE_DIRS} )
89+ target_link_libraries (${TICKER_TEST_BINARY_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB ${UWS_LIB} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} Threads::Threads )
90+ else ()
91+ target_include_directories (${TICKER_TEST_BINARY_NAME} PUBLIC ${UV_INCLUDE} ${UWS_INCLUDE} ${GTEST_INCLUDE_DIRS} )
92+ target_link_libraries (${TICKER_TEST_BINARY_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB ${UV_LIB} ${UWS_LIB} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} Threads::Threads )
93+ endif ()
2294
23- #build tests
24- include (CTest )
25- if (BUILD_TESTING)
26- add_subdirectory ("tests" )
95+ add_test (NAME ticker-test COMMAND ${TICKER_TEST_BINARY_NAME} )
2796endif ()
2897
29- #generate documentation
30- add_subdirectory ("docs" )
98+ # generate docs
99+ if (BUILD_DOCS)
100+ find_package (Doxygen )
31101
102+ if (DOXYGEN_FOUND)
103+ # set io files and configure doxyfile
104+ set (DOXY_FILE Doxyfile.in)
105+ set (DOXYGEN_IN ${CMAKE_SOURCE_DIR} /cmake/templates/${DOXY_FILE} )
106+ set (DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile.out)
107+ configure_file (${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY )
32108
109+ # ! don't add to the `all` target. doing so will build build docs everytime.
110+ add_custom_target (docs
111+ COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
112+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
113+ COMMENT "generating documentation with doxygen"
114+ VERBATIM )
115+ else (DOXYGEN_FOUND )
116+ message (FATAL_ERROR "doxygen is required for generating documentation" )
117+ endif (DOXYGEN_FOUND )
118+ endif ()
0 commit comments