From f89c1bdce0b16c918b7ea6d49a3c27b4c781f475 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Tue, 28 Jan 2020 22:36:07 +0100
Subject: [PATCH] Small build system cleanups

---
 CMakeLists.txt                      | 513 ++++++++++++++--------------
 include/mtxclient/crypto/client.hpp |   1 -
 2 files changed, 260 insertions(+), 254 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ebf1b039..0109464c6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,39 +1,43 @@
-cmake_minimum_required(VERSION 3.12)
+cmake_minimum_required(VERSION 3.13)
 
 
 set(
-    CMAKE_TOOLCHAIN_FILE
-    "${CMAKE_CURRENT_LIST_DIR}/toolchain.cmake"
-    CACHE
-    FILEPATH
-    "Default toolchain"
-)
+	CMAKE_TOOLCHAIN_FILE
+	"${CMAKE_CURRENT_LIST_DIR}/toolchain.cmake"
+	CACHE
+	FILEPATH
+	"Default toolchain"
+	)
 
 
 option(HUNTER_ENABLED "Enable Hunter package manager" OFF)
 include("cmake/HunterGate.cmake")
 HunterGate(
-    URL "https://github.com/cpp-pm/hunter/archive/v0.23.244.tar.gz"
-    SHA1 "2c0f491fd0b80f7b09e3d21adb97237161ef9835"
-    LOCAL
-)
+	URL "https://github.com/cpp-pm/hunter/archive/v0.23.244.tar.gz"
+	SHA1 "2c0f491fd0b80f7b09e3d21adb97237161ef9835"
+	LOCAL
+	)
 
 option(USE_BUNDLED_BOOST "Use the bundled version of Boost." ${HUNTER_ENABLED})
 option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 option(USE_BUNDLED_OLM "Use the bundled version of libolm." ${HUNTER_ENABLED})
 option(USE_BUNDLED_GTEST "Use the bundled version of Google Test."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 option(USE_BUNDLED_JSON "Use the bundled version of nlohmann json."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 option(USE_BUNDLED_OPENSSL "Use the bundled version of OpenSSL."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 option(USE_BUNDLED_SODIUM "Use the bundled version of libsodium."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 option(USE_BUNDLED_ZLIB "Use the bundled version of zlib."
-        ${HUNTER_ENABLED})
+	${HUNTER_ENABLED})
 
-project(matrix_client VERSION 0.3.0 LANGUAGES CXX C)
+project(matrix_client
+	VERSION 0.3.0
+	DESCRIPTION "Client API library for Matrix, built on top of Boost.Asio"
+	HOMEPAGE_URL https://github.com/Nheko-Reborn/mtxclient
+	LANGUAGES CXX C)
 
 option(ASAN "Compile with address sanitizers" OFF)
 option(BUILD_LIB_TESTS "Build tests" ON)
@@ -42,56 +46,56 @@ option(COVERAGE "Calculate test coverage" OFF)
 option(IWYU "Check headers with include-what-you-use" OFF)
 option(BUILD_SHARED_LIBS "Specifies whether to build mtxclient as a shared library lib or not" ON)
 
-set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
 
 if(NOT MSVC)
-  set(
-    CMAKE_CXX_FLAGS
-    "${CMAKE_CXX_FLAGS} \
-        -Wall \
-        -Wextra \
-        -pipe \
-        -pedantic \
-        -fsized-deallocation \
-        -fdiagnostics-color=always \
-        -Wunreachable-code"
-    )
+	set(
+		CMAKE_CXX_FLAGS
+		"${CMAKE_CXX_FLAGS} \
+		-Wall \
+		-Wextra \
+		-pipe \
+		-pedantic \
+		-fsized-deallocation \
+		-fdiagnostics-color=always \
+		-Wunreachable-code"
+		)
 endif()
 
 if(MSVC)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj -bigobj")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj -bigobj")
 endif()
 
 if(ASAN)
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined")
 endif()
 
 if(NOT MSVC AND NOT APPLE)
-  set(THREADS_PREFER_PTHREAD_FLAG ON)
-  find_package(Threads REQUIRED)
+	set(THREADS_PREFER_PTHREAD_FLAG ON)
+	find_package(Threads REQUIRED)
 endif()
 
 include(FeatureSummary)
 
 if(USE_BUNDLED_OPENSSL)
-        hunter_add_package(OpenSSL)
+	hunter_add_package(OpenSSL)
 endif()
 find_package(OpenSSL REQUIRED)
 set_package_properties(OpenSSL PROPERTIES
-    DESCRIPTION "Open source SSL and TLS implementation and cryptographic library"
-    URL "https://www.openssl.org/"
-    TYPE REQUIRED
-)
+	DESCRIPTION "Open source SSL and TLS implementation and cryptographic library"
+	URL "https://www.openssl.org/"
+	TYPE REQUIRED
+	)
 
 if(USE_BUNDLED_ZLIB)
-        hunter_add_package(ZLIB)
+	hunter_add_package(ZLIB)
 endif()
 find_package(ZLIB)
 set_package_properties(ZLIB PROPERTIES
-    DESCRIPTION "A free compression library unencumbered by patents"
-    URL "https://www.zlib.net/"
-    TYPE REQUIRED
-)
+	DESCRIPTION "A free compression library unencumbered by patents"
+	URL "https://www.zlib.net/"
+	TYPE REQUIRED
+	)
 
 if(USE_BUNDLED_OLM)
 	include(FetchContent)
@@ -111,7 +115,7 @@ else()
 endif()
 
 if(USE_BUNDLED_SODIUM)
-        hunter_add_package(libsodium)
+	hunter_add_package(libsodium)
 	find_package(libsodium 1.0.14 REQUIRED)
 else()
 	find_package(sodium 1.0.14 REQUIRED)
@@ -123,75 +127,78 @@ else()
 endif()
 
 if(USE_BUNDLED_JSON)
-        hunter_add_package(nlohmann_json)
+	hunter_add_package(nlohmann_json)
 endif()
 find_package(nlohmann_json 3.2.0)
 set_package_properties(nlohmann_json PROPERTIES
-    DESCRIPTION "JSON for Modern C++, a C++11 header-only JSON class"
-    URL "https://nlohmann.github.io/json/"
-    TYPE REQUIRED
-)
+	DESCRIPTION "JSON for Modern C++, a C++11 header-only JSON class"
+	URL "https://nlohmann.github.io/json/"
+	TYPE REQUIRED
+	)
 
 if(USE_BUNDLED_BOOST)
-        hunter_add_package(Boost COMPONENTS iostreams system thread)
+	hunter_add_package(Boost COMPONENTS iostreams system thread)
 endif()
-find_package(Boost 1.70 COMPONENTS iostreams system thread)
+find_package(Boost 1.70 COMPONENTS REQUIRED iostreams system thread)
 set_package_properties(Boost PROPERTIES
-DESCRIPTION "Free peer-reviewed portable C++ source libraries"
-URL "https://www.boost.org/"
-TYPE REQUIRED
-)
-
-add_library(matrix_client
-    lib/http/client.cpp
-    lib/http/session.cpp
-    lib/crypto/client.cpp
-    lib/crypto/utils.cpp
-    lib/utils.cpp
-    lib/log.cpp
-    lib/structs/common.cpp
-    lib/structs/errors.cpp
-    lib/structs/events.cpp
-    lib/structs/requests.cpp
-    lib/structs/events/aliases.cpp
-    lib/structs/events/avatar.cpp
-    lib/structs/events/canonical_alias.cpp
-    lib/structs/events/common.cpp
-    lib/structs/events/collections.cpp
-    lib/structs/events/create.cpp
-    lib/structs/events/encrypted.cpp
-    lib/structs/events/encryption.cpp
-    lib/structs/events/guest_access.cpp
-    lib/structs/events/history_visibility.cpp
-    lib/structs/events/join_rules.cpp
-    lib/structs/events/member.cpp
-    lib/structs/events/name.cpp
-    lib/structs/events/pinned_events.cpp
-    lib/structs/events/power_levels.cpp
-    lib/structs/events/redaction.cpp
-    lib/structs/events/tag.cpp
-    lib/structs/events/tombstone.cpp
-    lib/structs/events/topic.cpp
-    lib/structs/events/messages/audio.cpp
-    lib/structs/events/messages/emote.cpp
-    lib/structs/events/messages/file.cpp
-    lib/structs/events/messages/image.cpp
-    lib/structs/events/messages/notice.cpp
-    lib/structs/events/messages/text.cpp
-    lib/structs/events/messages/video.cpp
-    lib/structs/responses/common.cpp
-    lib/structs/responses/create_room.cpp
-    lib/structs/responses/crypto.cpp
-    lib/structs/responses/empty.cpp
-    lib/structs/responses/login.cpp
-    lib/structs/responses/media.cpp
-    lib/structs/responses/messages.cpp
-    lib/structs/responses/notifications.cpp
-    lib/structs/responses/profile.cpp
-    lib/structs/responses/register.cpp
-    lib/structs/responses/sync.cpp
-    lib/structs/responses/version.cpp
-    lib/structs/responses/well-known.cpp)
+	DESCRIPTION "Free peer-reviewed portable C++ source libraries"
+	URL "https://www.boost.org/"
+	TYPE REQUIRED
+	)
+
+add_library(matrix_client)
+
+target_sources(matrix_client
+	PRIVATE
+	lib/http/client.cpp
+	lib/http/session.cpp
+	lib/crypto/client.cpp
+	lib/crypto/utils.cpp
+	lib/utils.cpp
+	lib/log.cpp
+	lib/structs/common.cpp
+	lib/structs/errors.cpp
+	lib/structs/events.cpp
+	lib/structs/requests.cpp
+	lib/structs/events/aliases.cpp
+	lib/structs/events/avatar.cpp
+	lib/structs/events/canonical_alias.cpp
+	lib/structs/events/common.cpp
+	lib/structs/events/collections.cpp
+	lib/structs/events/create.cpp
+	lib/structs/events/encrypted.cpp
+	lib/structs/events/encryption.cpp
+	lib/structs/events/guest_access.cpp
+	lib/structs/events/history_visibility.cpp
+	lib/structs/events/join_rules.cpp
+	lib/structs/events/member.cpp
+	lib/structs/events/name.cpp
+	lib/structs/events/pinned_events.cpp
+	lib/structs/events/power_levels.cpp
+	lib/structs/events/redaction.cpp
+	lib/structs/events/tag.cpp
+	lib/structs/events/tombstone.cpp
+	lib/structs/events/topic.cpp
+	lib/structs/events/messages/audio.cpp
+	lib/structs/events/messages/emote.cpp
+	lib/structs/events/messages/file.cpp
+	lib/structs/events/messages/image.cpp
+	lib/structs/events/messages/notice.cpp
+	lib/structs/events/messages/text.cpp
+	lib/structs/events/messages/video.cpp
+	lib/structs/responses/common.cpp
+	lib/structs/responses/create_room.cpp
+	lib/structs/responses/crypto.cpp
+	lib/structs/responses/empty.cpp
+	lib/structs/responses/login.cpp
+	lib/structs/responses/media.cpp
+	lib/structs/responses/messages.cpp
+	lib/structs/responses/notifications.cpp
+	lib/structs/responses/profile.cpp
+	lib/structs/responses/register.cpp
+	lib/structs/responses/sync.cpp
+	lib/structs/responses/version.cpp
+	lib/structs/responses/well-known.cpp)
 add_library(MatrixClient::MatrixClient ALIAS matrix_client)
 target_include_directories(
 	matrix_client
@@ -224,35 +231,35 @@ else()
 endif()
 
 if(NOT MSVC AND NOT APPLE)
-  target_link_libraries(matrix_client PUBLIC Threads::Threads)
+	target_link_libraries(matrix_client PUBLIC Threads::Threads)
 endif()
 
 if(COVERAGE)
-  include(CodeCoverage)
-  add_custom_target(ctest COMMAND ${CMAKE_CTEST_COMMAND})
-  target_compile_options(matrix_client PUBLIC
-          -O0        # no optimization
-          -g         # generate debug info
-          --coverage # sets all required flags
-          -fprofile-arcs -ftest-coverage # just to be sure, for clang!
-          )
-  target_link_options(matrix_client PUBLIC --coverage)
-  setup_target_for_coverage(test_coverage ctest coverage)
+	include(CodeCoverage)
+	add_custom_target(ctest COMMAND ${CMAKE_CTEST_COMMAND})
+	target_compile_options(matrix_client PUBLIC
+		-O0        # no optimization
+		-g         # generate debug info
+		--coverage # sets all required flags
+		-fprofile-arcs -ftest-coverage # just to be sure, for clang!
+		)
+	target_link_options(matrix_client PUBLIC --coverage)
+	setup_target_for_coverage(test_coverage ctest coverage)
 endif()
 
 
 if(IWYU)
-  find_program(iwyu_path NAMES include-what-you-use iwyu)
-  if(iwyu_path)
-    set_property(TARGET matrix_client
-                 PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_path})
-  else()
-    message(WARNING "Could not find the program include-what-you-use")
-  endif()
+	find_program(iwyu_path NAMES include-what-you-use iwyu)
+	if(iwyu_path)
+		set_property(TARGET matrix_client
+			PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_path})
+	else()
+		message(WARNING "Could not find the program include-what-you-use")
+	endif()
 endif()
 
 if(BUILD_LIB_EXAMPLES)
-  add_subdirectory(examples)
+	add_subdirectory(examples)
 endif()
 
 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
@@ -264,150 +271,150 @@ include(GNUInstallDirs)
 set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/MatrixClient)
 
 install(TARGETS matrix_client
-        EXPORT matrix_client-targets
-        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	EXPORT matrix_client-targets
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
 set_target_properties(matrix_client PROPERTIES EXPORT_NAME MatrixClient)
 
 install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 install(EXPORT matrix_client-targets
-               FILE
-               MatrixClientTargets.cmake
-               NAMESPACE
-               MatrixClient::
-               DESTINATION
-               ${INSTALL_CONFIGDIR})
+	FILE
+	MatrixClientTargets.cmake
+	NAMESPACE
+	MatrixClient::
+	DESTINATION
+	${INSTALL_CONFIGDIR})
 
 include(CMakePackageConfigHelpers)
 write_basic_package_version_file(
-  ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake
-  VERSION
-  ${PROJECT_VERSION}
-  COMPATIBILITY
-  AnyNewerVersion)
+	${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake
+	VERSION
+	${PROJECT_VERSION}
+	COMPATIBILITY
+	AnyNewerVersion)
 
 configure_package_config_file(
-  ${CMAKE_CURRENT_LIST_DIR}/cmake/MatrixClientConfig.cmake.in
-  ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfig.cmake
-  INSTALL_DESTINATION
-  ${INSTALL_CONFIGDIR})
+	${CMAKE_CURRENT_LIST_DIR}/cmake/MatrixClientConfig.cmake.in
+	${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfig.cmake
+	INSTALL_DESTINATION
+	${INSTALL_CONFIGDIR})
 
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfig.cmake
-              ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake
-              DESTINATION
-              ${INSTALL_CONFIGDIR})
+	${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake
+	DESTINATION
+	${INSTALL_CONFIGDIR})
 
 export(EXPORT
-       matrix_client-targets
-       FILE
-       ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientTargets.cmake
-       NAMESPACE
-       MatrixClient::)
+	matrix_client-targets
+	FILE
+	${CMAKE_CURRENT_BINARY_DIR}/MatrixClientTargets.cmake
+	NAMESPACE
+	MatrixClient::)
 export(PACKAGE MatrixClient)
 
 set_property(TARGET matrix_client PROPERTY SOVERSION ${PROJECT_VERSION})
 
 if(BUILD_LIB_TESTS)
-  enable_testing()
-
-  if(USE_BUNDLED_GTEST)
-	  hunter_add_package(GTest)
-  endif()
-  find_package(GTest REQUIRED)
-
-  file(COPY tests/fixtures DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-
-  add_executable(client_api tests/client_api.cpp)
-  target_link_libraries(client_api
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-  target_include_directories(client_api PRIVATE
-                             ${CMAKE_CURRENT_SOURCE_DIR}/tests)
-
-  add_executable(media_api tests/media_api.cpp)
-  target_link_libraries(media_api
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-  target_include_directories(media_api PRIVATE
-                             ${CMAKE_CURRENT_SOURCE_DIR}/tests)
-
-  add_executable(e2ee tests/e2ee.cpp)
-  target_link_libraries(e2ee
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-  target_include_directories(e2ee PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests)
-
-  add_executable(utils tests/utils.cpp)
-  target_link_libraries(utils
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-  target_include_directories(utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests)
-
-  add_executable(connection tests/connection.cpp)
-  target_link_libraries(connection
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-  target_include_directories(connection PRIVATE
-                             ${CMAKE_CURRENT_SOURCE_DIR}/tests)
-
-  add_executable(identifiers tests/identifiers.cpp)
-  target_link_libraries(identifiers
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(events tests/events.cpp)
-  target_link_libraries(events
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(messages tests/messages.cpp)
-  target_link_libraries(messages
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(responses tests/responses.cpp)
-  target_link_libraries(responses
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(requests tests/requests.cpp)
-  target_link_libraries(requests
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(errors tests/errors.cpp)
-  target_link_libraries(errors
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_executable(crypto tests/crypto.cpp)
-  target_link_libraries(crypto
-                        MatrixClient::MatrixClient
-                        GTest::GTest
-                        GTest::Main)
-
-  add_test(BasicConnectivity connection)
-  add_test(ClientAPI client_api)
-  add_test(MediaAPI media_api)
-  add_test(Encryption e2ee)
-  add_test(Utilities utils)
-  add_test(Identifiers identifiers)
-  add_test(Errors errors)
-  add_test(CryptoStructs crypto)
-  add_test(StateEvents events)
-  add_test(RoomEvents messages)
-  add_test(Responses responses)
-  add_test(Requests requests)
+	enable_testing()
+
+	if(USE_BUNDLED_GTEST)
+		hunter_add_package(GTest)
+	endif()
+	find_package(GTest REQUIRED)
+
+	file(COPY tests/fixtures DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+	add_executable(client_api tests/client_api.cpp)
+	target_link_libraries(client_api
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+	target_include_directories(client_api PRIVATE
+		${CMAKE_CURRENT_SOURCE_DIR}/tests)
+
+	add_executable(media_api tests/media_api.cpp)
+	target_link_libraries(media_api
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+	target_include_directories(media_api PRIVATE
+		${CMAKE_CURRENT_SOURCE_DIR}/tests)
+
+	add_executable(e2ee tests/e2ee.cpp)
+	target_link_libraries(e2ee
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+	target_include_directories(e2ee PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests)
+
+	add_executable(utils tests/utils.cpp)
+	target_link_libraries(utils
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+	target_include_directories(utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests)
+
+	add_executable(connection tests/connection.cpp)
+	target_link_libraries(connection
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+	target_include_directories(connection PRIVATE
+		${CMAKE_CURRENT_SOURCE_DIR}/tests)
+
+	add_executable(identifiers tests/identifiers.cpp)
+	target_link_libraries(identifiers
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(events tests/events.cpp)
+	target_link_libraries(events
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(messages tests/messages.cpp)
+	target_link_libraries(messages
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(responses tests/responses.cpp)
+	target_link_libraries(responses
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(requests tests/requests.cpp)
+	target_link_libraries(requests
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(errors tests/errors.cpp)
+	target_link_libraries(errors
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_executable(crypto tests/crypto.cpp)
+	target_link_libraries(crypto
+		MatrixClient::MatrixClient
+		GTest::GTest
+		GTest::Main)
+
+	add_test(BasicConnectivity connection)
+	add_test(ClientAPI client_api)
+	add_test(MediaAPI media_api)
+	add_test(Encryption e2ee)
+	add_test(Utilities utils)
+	add_test(Identifiers identifiers)
+	add_test(Errors errors)
+	add_test(CryptoStructs crypto)
+	add_test(StateEvents events)
+	add_test(RoomEvents messages)
+	add_test(Responses responses)
+	add_test(Requests requests)
 endif()
diff --git a/include/mtxclient/crypto/client.hpp b/include/mtxclient/crypto/client.hpp
index cb626241a..b79d92e6e 100644
--- a/include/mtxclient/crypto/client.hpp
+++ b/include/mtxclient/crypto/client.hpp
@@ -5,7 +5,6 @@
 #include <new>
 
 #include <nlohmann/json.hpp>
-#include <sodium.h>
 
 #include <mtx/identifiers.hpp>
 #include <mtx/requests.hpp>
-- 
GitLab