project(connection) set(${PROJECT_NAME}_src src/DataConnection.cppm src/MSQuicConnection.cppm src/MSQuicServer.cppm src/MSQuicGlobal.cppm src/MSQuicError.cppm) # this is the "object library" target: compiles the sources only once add_library(${PROJECT_NAME}_lib STATIC ${${PROJECT_NAME}_src}) target_include_directories(${PROJECT_NAME}_lib PUBLIC ./src) find_package(msquic CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME}_lib PRIVATE msquic) target_link_libraries(${PROJECT_NAME}_lib PUBLIC logging_lib) if(WIN32) target_link_libraries(${PROJECT_NAME}_lib PUBLIC ntdll) endif() # Setup tests enable_testing() find_package(GTest CONFIG REQUIRED) include(GoogleTest) file(GLOB_RECURSE tests_${PROJECT_NAME}_src CONFIGURE_DEPENDS tests/*.cppm tests/*/*.cppm) add_executable(tests_${PROJECT_NAME} ${tests_${PROJECT_NAME}_src} tests/sanitizers.cpp) target_link_libraries(tests_${PROJECT_NAME} PRIVATE GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main ${PROJECT_NAME}_lib) add_test(AllTestsIn${PROJECT_NAME} tests_${PROJECT_NAME}) gtest_discover_tests(tests_${PROJECT_NAME}) find_program(OPENSSL_EXECUTABLE openssl) set(OPENSSL_EXECUTABLE_CFG "" CACHE FILEPATH "Path to openssl.cnf") if (NOT OPENSSL_EXECUTABLE) find_package(OpenSSL REQUIRED) message(STATUS "OpenSSL found: ${OPENSSL_FOUND} ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}") set(OPENSSL_EXECUTABLE ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl) endif () if (NOT OPENSSL_EXECUTABLE) message(FATAL_ERROR "OpenSSL not found") endif () if (OPENSSL_EXECUTABLE MATCHES ^${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl) set(OPENSSL_EXECUTABLE_CFG ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl.cnf) endif () add_custom_command(TARGET tests_${PROJECT_NAME} POST_BUILD COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 1 -nodes -x509 -keyout key.pem -out cert.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" $<$:-config> $<$:${OPENSSL_EXECUTABLE_CFG}> WORKING_DIRECTORY ${WORKING_DIRECTORY} BYPRODUCTS ${WORKING_DIRECTORY}/key.pem ${WORKING_DIRECTORY}/cert.pem COMMENT "Generating self-signed certificate using ${OPENSSL_EXECUTABLE} ${OPENSSL_EXECUTABLE_CFG}" VERBATIM COMMAND_EXPAND_LISTS )