diff --git a/.github/actions/install-deps/action.yml b/.github/actions/install-deps/action.yml index c939ca364..15d148492 100644 --- a/.github/actions/install-deps/action.yml +++ b/.github/actions/install-deps/action.yml @@ -112,6 +112,12 @@ runs: xz-utils ) + # Debian wants to build Transmission with system gtest + # https://github.com/transmission/transmission/pull/6900 + if [ "$DISTRO" = 'debian' ]; then + BASE_PACKAGES+=(libgtest-dev) + fi + # Compiler packages if [[ "${{ inputs.compiler }}" == "clang" ]]; then BASE_PACKAGES+=(clang) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index be34f551e..8059c8301 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -771,6 +771,7 @@ jobs: -DREBUILD_WEB=${{ (needs.what-to-make.outputs.make-web == 'true') && 'ON' || 'OFF' }} \ -DENABLE_WERROR=ON \ -DRUN_CLANG_TIDY=OFF \ + -DUSE_SYSTEM_GTEST=ON \ -DUSE_SYSTEM_DEFAULT=ON \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Debian 11` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian 11` \ @@ -851,6 +852,7 @@ jobs: -DREBUILD_WEB=${{ (needs.what-to-make.outputs.make-web == 'true') && 'ON' || 'OFF' }} \ -DENABLE_WERROR=ON \ -DRUN_CLANG_TIDY=OFF \ + -DUSE_SYSTEM_GTEST=ON \ -DUSE_SYSTEM_DEFAULT=ON \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Debian` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian` \ diff --git a/cmake/TrGTest.cmake b/cmake/TrGTest.cmake new file mode 100644 index 000000000..edf3d7e33 --- /dev/null +++ b/cmake/TrGTest.cmake @@ -0,0 +1,16 @@ +include(TrMacros) + +option(USE_SYSTEM_GTEST "Use system GTest library" OFF) + +tr_add_external_auto_library(GTEST GTest + SUBPROJECT + SOURCE_DIR googletest + CMAKE_ARGS + -DBUILD_GMOCK=OFF + -DINSTALL_GTEST=OFF + -DBUILD_SHARED_LIBS=ON) + +# The GTest::gtest_main target is new in CMake 3.20 +if(NOT TARGET GTest::gtest_main) + add_library(GTest::gtest_main ALIAS GTest::Main) +endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4aa971546..f5fd0c67b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,5 @@ -add_subdirectory(gtest) +include(TrGTest) + add_subdirectory(libtransmission) if(ENABLE_UTILS) add_subdirectory(utils) diff --git a/tests/gtest/CMakeLists.txt b/tests/gtest/CMakeLists.txt deleted file mode 100644 index 77eef5320..000000000 --- a/tests/gtest/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -set(GTEST_ROOT_DIR ${TR_THIRD_PARTY_SOURCE_DIR}/googletest/googletest) - -add_library(gtestall STATIC) - -# GTest 1.12 triggers nullptr warnings in gcc 13 -set(CACHE_ID "${CMAKE_CXX_COMPILER_ID}_CXX_HAS-Wnull-dereference") -string(TOLOWER "${CACHE_ID}" CACHE_ID) -check_c_compiler_flag(-Wnull-dereference ${CACHE_ID}) -if(${CACHE_ID}) - target_compile_options(gtestall PRIVATE -Wno-null-dereference) -endif() - -target_sources(gtestall - PRIVATE - ${GTEST_ROOT_DIR}/src/gtest-all.cc - ${GTEST_ROOT_DIR}/src/gtest_main.cc) - -set_property( - TARGET gtestall - PROPERTY FOLDER "${TR_THIRD_PARTY_DIR_NAME}") - -target_include_directories(gtestall SYSTEM - PRIVATE - ${GTEST_ROOT_DIR} - PUBLIC - ${GTEST_ROOT_DIR}/include) diff --git a/tests/libtransmission/CMakeLists.txt b/tests/libtransmission/CMakeLists.txt index 0432a05ea..81a5cb3fb 100644 --- a/tests/libtransmission/CMakeLists.txt +++ b/tests/libtransmission/CMakeLists.txt @@ -81,12 +81,29 @@ target_compile_options(libtransmission-test target_link_libraries(libtransmission-test PRIVATE ${TR_NAME} - gtestall + GTest::gtest_main dht::dht fmt::fmt-header-only libevent::event WideInteger::WideInteger) +if (WIN32) + cmake_policy(PUSH) + cmake_minimum_required(VERSION 3.21 FATAL_ERROR) + + add_custom_command( + TARGET libtransmission-test POST_BUILD + COMMAND + ${CMAKE_COMMAND} + -E copy_if_different + $ + $ + COMMAND_EXPAND_LISTS + ) + + cmake_policy(POP) +endif () + if(NOT CMAKE_CROSSCOMPILING OR CMAKE_CROSSCOMPILING_EMULATOR) gtest_discover_tests(libtransmission-test TEST_PREFIX "LT.") diff --git a/tests/libtransmission/announce-list-test.cc b/tests/libtransmission/announce-list-test.cc index a2c86f5f1..4063b7aa4 100644 --- a/tests/libtransmission/announce-list-test.cc +++ b/tests/libtransmission/announce-list-test.cc @@ -13,6 +13,8 @@ #include +#include + #include #include diff --git a/tests/libtransmission/announcer-udp-test.cc b/tests/libtransmission/announcer-udp-test.cc index 30fc0e837..5be2010b6 100644 --- a/tests/libtransmission/announcer-udp-test.cc +++ b/tests/libtransmission/announcer-udp-test.cc @@ -26,6 +26,8 @@ #include +#include + #define LIBTRANSMISSION_ANNOUNCER_MODULE #include diff --git a/tests/libtransmission/api-compat-test.cc b/tests/libtransmission/api-compat-test.cc index 0b68050c6..bf0b4ba48 100644 --- a/tests/libtransmission/api-compat-test.cc +++ b/tests/libtransmission/api-compat-test.cc @@ -5,11 +5,12 @@ #include +#include + #include #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using ApiCompatTest = ::libtransmission::test::TransmissionTest; diff --git a/tests/libtransmission/bitfield-test.cc b/tests/libtransmission/bitfield-test.cc index 7350fcf28..ea51614cc 100644 --- a/tests/libtransmission/bitfield-test.cc +++ b/tests/libtransmission/bitfield-test.cc @@ -10,11 +10,11 @@ #include #include +#include + #include #include -#include "gtest/gtest.h" - TEST(Bitfield, count) { auto constexpr IterCount = size_t{ 10000U }; diff --git a/tests/libtransmission/blocklist-test.cc b/tests/libtransmission/blocklist-test.cc index b67d9a4ad..ce40d74f7 100644 --- a/tests/libtransmission/blocklist-test.cc +++ b/tests/libtransmission/blocklist-test.cc @@ -6,13 +6,14 @@ #include #include +#include + #include #include #include // tr_session.addressIsBlocked() #include -#include "gtest/gtest.h" #include "test-fixtures.h" namespace libtransmission::test diff --git a/tests/libtransmission/clients-test.cc b/tests/libtransmission/clients-test.cc index c34cd178e..0deca1a35 100644 --- a/tests/libtransmission/clients-test.cc +++ b/tests/libtransmission/clients-test.cc @@ -8,12 +8,12 @@ #include // size_t #include +#include + #include // tr_rand_obj() #include #include -#include "gtest/gtest.h" - using namespace std::literals; TEST(Client, clientForId) diff --git a/tests/libtransmission/copy-test.cc b/tests/libtransmission/copy-test.cc index 1dd6d0dac..a3ffa72ad 100644 --- a/tests/libtransmission/copy-test.cc +++ b/tests/libtransmission/copy-test.cc @@ -9,13 +9,14 @@ #include #include +#include + #include #include #include #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" namespace libtransmission::test diff --git a/tests/libtransmission/crypto-test.cc b/tests/libtransmission/crypto-test.cc index 017fa3e91..ed3feea00 100644 --- a/tests/libtransmission/crypto-test.cc +++ b/tests/libtransmission/crypto-test.cc @@ -13,13 +13,13 @@ #include #include +#include + #include #include #include #include -#include "gtest/gtest.h" - using namespace std::literals; namespace diff --git a/tests/libtransmission/dht-test.cc b/tests/libtransmission/dht-test.cc index 16bf31536..6980118ca 100644 --- a/tests/libtransmission/dht-test.cc +++ b/tests/libtransmission/dht-test.cc @@ -32,6 +32,8 @@ #include +#include + #include #include // tr_rand_obj @@ -48,7 +50,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" #ifdef _WIN32 diff --git a/tests/libtransmission/error-test.cc b/tests/libtransmission/error-test.cc index db32f959d..315deb5d8 100644 --- a/tests/libtransmission/error-test.cc +++ b/tests/libtransmission/error-test.cc @@ -5,12 +5,12 @@ #include +#include + #include #include "test-fixtures.h" -#include "gtest/gtest.h" - using namespace std::literals; TEST(Error, errorSet) diff --git a/tests/libtransmission/file-test.cc b/tests/libtransmission/file-test.cc index b4d1d99f7..69a2a0882 100644 --- a/tests/libtransmission/file-test.cc +++ b/tests/libtransmission/file-test.cc @@ -25,12 +25,13 @@ #include +#include + #include #include #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" #if !defined(__OpenBSD__) diff --git a/tests/libtransmission/handshake-test.cc b/tests/libtransmission/handshake-test.cc index 943230081..7ec4906df 100644 --- a/tests/libtransmission/handshake-test.cc +++ b/tests/libtransmission/handshake-test.cc @@ -23,6 +23,8 @@ #include +#include + #include #include // tr_sha1_to_string, tr_base... @@ -37,7 +39,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/history-test.cc b/tests/libtransmission/history-test.cc index 6dc20047f..f97af9048 100644 --- a/tests/libtransmission/history-test.cc +++ b/tests/libtransmission/history-test.cc @@ -5,9 +5,9 @@ #include // size_t -#include +#include -#include "gtest/gtest.h" +#include TEST(History, recentHistory) { diff --git a/tests/libtransmission/json-test.cc b/tests/libtransmission/json-test.cc index 26ca6e7e3..990b7a9ff 100644 --- a/tests/libtransmission/json-test.cc +++ b/tests/libtransmission/json-test.cc @@ -11,13 +11,13 @@ #include #include +#include + #include #include #include #include -#include "gtest/gtest.h" - using namespace std::literals; class JSONTest : public ::testing::TestWithParam diff --git a/tests/libtransmission/lpd-test.cc b/tests/libtransmission/lpd-test.cc index 8eb124db1..970e01807 100644 --- a/tests/libtransmission/lpd-test.cc +++ b/tests/libtransmission/lpd-test.cc @@ -11,6 +11,8 @@ #include #include +#include + #include // tr_torrent_activity #include // tr_rand_obj() @@ -20,7 +22,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/makemeta-test.cc b/tests/libtransmission/makemeta-test.cc index ea7645205..defa4cc9a 100644 --- a/tests/libtransmission/makemeta-test.cc +++ b/tests/libtransmission/makemeta-test.cc @@ -12,6 +12,8 @@ #include #include +#include + #include #include #include @@ -23,7 +25,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/move-test.cc b/tests/libtransmission/move-test.cc index 9890f5e49..7e3831169 100644 --- a/tests/libtransmission/move-test.cc +++ b/tests/libtransmission/move-test.cc @@ -9,6 +9,8 @@ #include #include +#include + #include #include @@ -20,7 +22,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/open-files-test.cc b/tests/libtransmission/open-files-test.cc index 7d4cbaebf..662d879a9 100644 --- a/tests/libtransmission/open-files-test.cc +++ b/tests/libtransmission/open-files-test.cc @@ -12,6 +12,8 @@ #include +#include + #include #include @@ -19,7 +21,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/peer-msgs-test.cc b/tests/libtransmission/peer-msgs-test.cc index 4c45e55e9..fa73a7006 100644 --- a/tests/libtransmission/peer-msgs-test.cc +++ b/tests/libtransmission/peer-msgs-test.cc @@ -3,7 +3,7 @@ // or any future license endorsed by Mnemosyne LLC. // License text can be found in the licenses/ folder. -#include "gtest/gtest.h" +#include TEST(PeerMsgs, placeholder) { diff --git a/tests/libtransmission/platform-test.cc b/tests/libtransmission/platform-test.cc index 9b2c49229..230a7ba0a 100644 --- a/tests/libtransmission/platform-test.cc +++ b/tests/libtransmission/platform-test.cc @@ -8,6 +8,8 @@ #include +#include + #include #include @@ -15,7 +17,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/remove-test.cc b/tests/libtransmission/remove-test.cc index d38478023..56223fb19 100644 --- a/tests/libtransmission/remove-test.cc +++ b/tests/libtransmission/remove-test.cc @@ -10,13 +10,14 @@ #include #include +#include + #include #include #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/rename-test.cc b/tests/libtransmission/rename-test.cc index 5e2a66ed8..9dbcbcec2 100644 --- a/tests/libtransmission/rename-test.cc +++ b/tests/libtransmission/rename-test.cc @@ -11,6 +11,8 @@ #include #include +#include + #include #include @@ -21,7 +23,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" struct tr_ctor; diff --git a/tests/libtransmission/rpc-test.cc b/tests/libtransmission/rpc-test.cc index a9d96284a..551447bf5 100644 --- a/tests/libtransmission/rpc-test.cc +++ b/tests/libtransmission/rpc-test.cc @@ -13,12 +13,13 @@ #include #include +#include + +#include #include #include #include -#include "gtest/gtest.h" -#include "libtransmission/quark.h" #include "test-fixtures.h" struct tr_session; diff --git a/tests/libtransmission/session-test.cc b/tests/libtransmission/session-test.cc index f2bb304e3..50ec2d742 100644 --- a/tests/libtransmission/session-test.cc +++ b/tests/libtransmission/session-test.cc @@ -12,6 +12,8 @@ #include #include +#include + #include #include @@ -21,7 +23,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/subprocess-test.cc b/tests/libtransmission/subprocess-test.cc index e9fca1bb9..f7624403d 100644 --- a/tests/libtransmission/subprocess-test.cc +++ b/tests/libtransmission/subprocess-test.cc @@ -12,6 +12,8 @@ #include #include +#include + #include #include #include diff --git a/tests/libtransmission/test-fixtures.h b/tests/libtransmission/test-fixtures.h index a8d253da1..79d11b695 100644 --- a/tests/libtransmission/test-fixtures.h +++ b/tests/libtransmission/test-fixtures.h @@ -18,6 +18,8 @@ #include +#include + #include // tr_base64_decode() #include #include // tr_sys_file_*() @@ -27,8 +29,6 @@ #include #include -#include "gtest/gtest.h" - using namespace std::literals; inline std::ostream& operator<<(std::ostream& os, tr_error const& err) diff --git a/tests/libtransmission/timer-test.cc b/tests/libtransmission/timer-test.cc index 8862c92bc..d2680c3cc 100644 --- a/tests/libtransmission/timer-test.cc +++ b/tests/libtransmission/timer-test.cc @@ -8,6 +8,8 @@ #include +#include + #include #include #include diff --git a/tests/libtransmission/torrent-files-test.cc b/tests/libtransmission/torrent-files-test.cc index c49700bb6..c5b85cee6 100644 --- a/tests/libtransmission/torrent-files-test.cc +++ b/tests/libtransmission/torrent-files-test.cc @@ -11,6 +11,8 @@ #include #include +#include + #include #include @@ -18,7 +20,6 @@ #include "libtransmission/tr-macros.h" #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/torrent-magnet-test.cc b/tests/libtransmission/torrent-magnet-test.cc index 7c4f49c07..d6250b848 100644 --- a/tests/libtransmission/torrent-magnet-test.cc +++ b/tests/libtransmission/torrent-magnet-test.cc @@ -7,11 +7,12 @@ #include #include +#include + #include #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" namespace libtransmission::test diff --git a/tests/libtransmission/torrent-metainfo-test.cc b/tests/libtransmission/torrent-metainfo-test.cc index 359eb17f0..2c04c2c30 100644 --- a/tests/libtransmission/torrent-metainfo-test.cc +++ b/tests/libtransmission/torrent-metainfo-test.cc @@ -9,6 +9,8 @@ #include #include +#include + #include #include @@ -20,7 +22,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/torrent-queue-test.cc b/tests/libtransmission/torrent-queue-test.cc index 914021e8e..56d46e862 100644 --- a/tests/libtransmission/torrent-queue-test.cc +++ b/tests/libtransmission/torrent-queue-test.cc @@ -9,10 +9,11 @@ #include #include +#include + #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using namespace std::literals; diff --git a/tests/libtransmission/torrents-test.cc b/tests/libtransmission/torrents-test.cc index d7644e764..334cb9262 100644 --- a/tests/libtransmission/torrents-test.cc +++ b/tests/libtransmission/torrents-test.cc @@ -11,6 +11,8 @@ #include #include +#include + #include #include diff --git a/tests/libtransmission/utils-apple-test.mm b/tests/libtransmission/utils-apple-test.mm index 2d5851b07..b1a2c790f 100644 --- a/tests/libtransmission/utils-apple-test.mm +++ b/tests/libtransmission/utils-apple-test.mm @@ -8,9 +8,10 @@ #include #include +#include + #include -#include "gtest/gtest.h" #include "test-fixtures.h" using UtilsTest = ::libtransmission::test::TransmissionTest; diff --git a/tests/libtransmission/utils-test.cc b/tests/libtransmission/utils-test.cc index dfc375bef..92430115a 100644 --- a/tests/libtransmission/utils-test.cc +++ b/tests/libtransmission/utils-test.cc @@ -21,6 +21,8 @@ #include +#include + #include #include // tr_rand_int() @@ -29,7 +31,6 @@ #include #include -#include "gtest/gtest.h" #include "test-fixtures.h" using UtilsTest = ::libtransmission::test::TransmissionTest; diff --git a/tests/libtransmission/variant-test.cc b/tests/libtransmission/variant-test.cc index 85c60a602..3de14d9ae 100644 --- a/tests/libtransmission/variant-test.cc +++ b/tests/libtransmission/variant-test.cc @@ -14,6 +14,8 @@ #include #include +#include + #define LIBTRANSMISSION_VARIANT_MODULE #include diff --git a/tests/libtransmission/watchdir-test.cc b/tests/libtransmission/watchdir-test.cc index 746ab7478..7d67ea6af 100644 --- a/tests/libtransmission/watchdir-test.cc +++ b/tests/libtransmission/watchdir-test.cc @@ -20,6 +20,8 @@ #include +#include + #define LIBTRANSMISSION_WATCHDIR_MODULE #include