You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ap...@apache.org on 2022/05/17 07:12:46 UTC

[arrow] branch master updated: ARROW-16507: [CI][C++] Use system gtest with mamba/conda

This is an automated email from the ASF dual-hosted git repository.

apitrou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new acbfd60ded ARROW-16507: [CI][C++] Use system gtest with mamba/conda
acbfd60ded is described below

commit acbfd60ded8046e6e725115db74ead639505fe26
Author: Sutou Kouhei <ko...@clear-code.com>
AuthorDate: Tue May 17 09:12:38 2022 +0200

    ARROW-16507: [CI][C++] Use system gtest with mamba/conda
    
    The gtest package for Windows provided by conda-forge doesn't provide `GTestConfig.cmake`.
    See also: https://github.com/conda-forge/gtest-feedstock/blob/main/recipe/bld.bat
    
    And `FindGTest.cmake` provided by CMake can't find `gtest_dll.dll` that is a shared
    library version of GoogleTest.
    See also: https://gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/FindGTest.cmake
    
    It means that we can find only static version of GoogleTest on Windows with Conda
    without a custom `FindGTestAlt.cmake`.
    
    Shared library version `arrow_flight_testing` requires shared library version GoogleTest on
    Windows because it defines `arrow::flight::FlightTest` that inherits `testing::Test`.
    See also: https://github.com/apache/arrow/blob/master/cpp/src/arrow/flight/test_definitions.h
    
    We must use the same library type for them on Windows.
    
    To support `ARROW_FLIGHT=ON`/`ARROW_BUILD_SHARED=ON`/`ARROW_BUILD_STATIC=OFF`/
    `ARROW_BUILD_TESTS=ON` with static version of GoogleTest, we need to build a static library not
    shared library for  `arrow_flight_testing`.
    
    Closes #13101 from assignUser/ARROW-16507-fix-gtest2
    
    Lead-authored-by: Sutou Kouhei <ko...@clear-code.com>
    Co-authored-by: Jacob Wujciak-Jens <ja...@wujciak.de>
    Signed-off-by: Antoine Pitrou <an...@python.org>
---
 ci/appveyor-cpp-build.bat                          |   9 +-
 ci/appveyor-cpp-setup.bat                          |  12 +--
 cpp/cmake_modules/BuildUtils.cmake                 |   2 +-
 cpp/cmake_modules/ThirdpartyToolchain.cmake        |  49 ++++------
 cpp/src/arrow/CMakeLists.txt                       |  14 ---
 cpp/src/arrow/flight/CMakeLists.txt                | 100 +++++++++++++++------
 .../arrow/flight/integration_tests/CMakeLists.txt  |  25 +++---
 cpp/src/arrow/flight/sql/CMakeLists.txt            |   9 +-
 dev/release/verify-release-candidate.bat           |   4 -
 dev/release/verify-release-candidate.sh            |   5 +-
 10 files changed, 122 insertions(+), 107 deletions(-)

diff --git a/ci/appveyor-cpp-build.bat b/ci/appveyor-cpp-build.bat
index 287197458e..e9441c63e2 100644
--- a/ci/appveyor-cpp-build.bat
+++ b/ci/appveyor-cpp-build.bat
@@ -28,6 +28,9 @@ set PARQUET_TEST_DATA=%CD%\cpp\submodules\parquet-testing\data
 
 set ARROW_DEBUG_MEMORY_POOL=trap
 
+set CMAKE_BUILD_PARALLEL_LEVEL=%NUMBER_OF_PROCESSORS%
+set CTEST_PARALLEL_LEVEL=%NUMBER_OF_PROCESSORS%
+
 @rem
 @rem In the configurations below we disable building the Arrow static library
 @rem to save some time.  Unfortunately this will still build the Parquet static
@@ -51,7 +54,7 @@ if "%JOB%" == "Build_Debug" (
         .. || exit /B
 
   cmake --build . --config Debug || exit /B
-  ctest --output-on-failure -j2 || exit /B
+  ctest --output-on-failure || exit /B
   popd
 
   @rem Finish Debug build successfully
@@ -121,13 +124,13 @@ cmake -G "%GENERATOR%" %CMAKE_ARGS% ^
       -DPARQUET_BUILD_EXECUTABLES=ON ^
       -DPARQUET_REQUIRE_ENCRYPTION=ON ^
       ..  || exit /B
-cmake --build . --target install --config %CONFIGURATION%  || exit /B
+cmake --build . --target install --config Release || exit /B
 
 @rem Needed so arrow-python-test.exe works
 set OLD_PYTHONHOME=%PYTHONHOME%
 set PYTHONHOME=%CONDA_PREFIX%
 
-ctest --output-on-failure -j2 || exit /B
+ctest --output-on-failure || exit /B
 
 set PYTHONHOME=%OLD_PYTHONHOME%
 popd
diff --git a/ci/appveyor-cpp-setup.bat b/ci/appveyor-cpp-setup.bat
index 936306296f..af3456c452 100644
--- a/ci/appveyor-cpp-setup.bat
+++ b/ci/appveyor-cpp-setup.bat
@@ -71,19 +71,13 @@ if "%JOB%" NEQ "Build_Debug" (
   mamba create -n arrow -q -y -c conda-forge ^
     --file=ci\conda_env_python.txt ^
     %CONDA_PACKAGES%  ^
-    "cmake=3.17" ^
+    "cmake" ^
     "ninja" ^
     "nomkl" ^
     "pandas" ^
     "fsspec" ^
     "python=%PYTHON%" ^
     || exit /B
-
-  @rem On Windows, GTest is always bundled from source instead of using
-  @rem conda binaries, avoid any interference between the two versions.
-  if "%JOB%" == "Toolchain" (
-    mamba uninstall -n arrow -q -y -c conda-forge gtest || exit /B
-  )
 )
 
 @rem
@@ -96,6 +90,8 @@ if defined need_vcvarsall (
         exit /B
     )
     call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
+    set CC=cl.exe
+    set CXX=cl.exe
 )
 
 @rem
@@ -128,4 +124,4 @@ move tzdata %USERPROFILE%\Downloads\tzdata
 @rem Also need Windows timezone mapping
 curl https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml ^
   --output %USERPROFILE%\Downloads\tzdata\windowsZones.xml
-@rem (Doc section: Download timezone database)
\ No newline at end of file
+@rem (Doc section: Download timezone database)
diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
index f3e3269d4f..c153f3ab88 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -382,7 +382,7 @@ function(ADD_ARROW_LIB LIB_NAME)
       set(LIB_NAME_STATIC ${LIB_NAME})
     endif()
 
-    if(ARROW_BUILD_STATIC AND WIN32)
+    if(WIN32)
       target_compile_definitions(${LIB_NAME}_static PUBLIC ARROW_STATIC)
       target_compile_definitions(${LIB_NAME}_static PUBLIC ARROW_FLIGHT_STATIC)
     endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 158be06d7d..637bf9d04c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -1972,8 +1972,6 @@ macro(build_gtest)
       -DCMAKE_MACOSX_RPATH=OFF)
   set(GMOCK_INCLUDE_DIR "${GTEST_PREFIX}/include")
 
-  add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY=1)
-
   if(MSVC AND NOT ARROW_USE_STATIC_CRT)
     set(GTEST_CMAKE_ARGS ${GTEST_CMAKE_ARGS} -Dgtest_force_shared_crt=ON)
   endif()
@@ -2031,6 +2029,8 @@ macro(build_gtest)
   add_library(GTest::gtest SHARED IMPORTED)
   set_target_properties(GTest::gtest
                         PROPERTIES ${_GTEST_IMPORTED_TYPE} "${GTEST_SHARED_LIB}"
+                                   INTERFACE_COMPILE_DEFINITIONS
+                                   "GTEST_LINKED_AS_SHARED_LIBRARY=1"
                                    INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
 
   add_library(GTest::gtest_main SHARED IMPORTED)
@@ -2041,6 +2041,8 @@ macro(build_gtest)
   add_library(GTest::gmock SHARED IMPORTED)
   set_target_properties(GTest::gmock
                         PROPERTIES ${_GTEST_IMPORTED_TYPE} "${GMOCK_SHARED_LIB}"
+                                   INTERFACE_COMPILE_DEFINITIONS
+                                   "GMOCK_LINKED_AS_SHARED_LIBRARY=1"
                                    INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
   add_dependencies(toolchain-tests googletest_ep)
   add_dependencies(GTest::gtest googletest_ep)
@@ -2049,40 +2051,23 @@ macro(build_gtest)
 endmacro()
 
 if(ARROW_TESTING)
+  if(CMAKE_VERSION VERSION_LESS 3.23)
+    set(GTEST_USE_CONFIG TRUE)
+  else()
+    set(GTEST_USE_CONFIG FALSE)
+  endif()
+  # We can't find shred library version of GoogleTest on Windows with
+  # Conda's gtest package because it doesn't provide GTestConfig.cmake
+  # provided by GoogleTest and CMake's built-in FindGTtest.cmake
+  # doesn't support gtest_dll.dll. If we find static library version
+  # of GoogleTest and ARROW_BUILD_SHARED=ON/ARROW_BUILD_STATIC=OFF are
+  # specified, we need to build arrow_flight_testing as a static
+  # library. See cpp/src/arrow/flight/CMakeLists.txt for details.
   resolve_dependency(GTest
                      REQUIRED_VERSION
                      1.10.0
                      USE_CONFIG
-                     TRUE)
-
-  if(NOT GTEST_VENDORED)
-    # TODO(wesm): This logic does not work correctly with the MSVC static libraries
-    # built for the shared crt
-
-    #     set(CMAKE_REQUIRED_LIBRARIES GTest::GTest GTest::Main GTest::GMock)
-    #     CHECK_CXX_SOURCE_COMPILES("
-    # #include <gmock/gmock.h>
-    # #include <gtest/gtest.h>
-
-    # class A {
-    #   public:
-    #     int run() const { return 1; }
-    # };
-
-    # class B : public A {
-    #   public:
-    #     MOCK_CONST_METHOD0(run, int());
-    # };
-
-    # TEST(Base, Test) {
-    #   B b;
-    # }" GTEST_COMPILES_WITHOUT_MACRO)
-    #     if (NOT GTEST_COMPILES_WITHOUT_MACRO)
-    #       message(STATUS "Setting GTEST_LINKED_AS_SHARED_LIBRARY=1 on GTest::GTest")
-    #       add_compile_definitions("GTEST_LINKED_AS_SHARED_LIBRARY=1")
-    #     endif()
-    #     set(CMAKE_REQUIRED_LIBRARIES)
-  endif()
+                     ${GTEST_USE_CONFIG})
 endif()
 
 macro(build_benchmark)
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index 3b49f4ca00..77f9959fdb 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -754,20 +754,6 @@ endif()
 
 if(ARROW_FLIGHT)
   add_subdirectory(flight)
-
-  if(ARROW_WITH_UCX)
-    add_subdirectory(flight/transport/ucx)
-  endif()
-endif()
-
-if(ARROW_FLIGHT_SQL)
-  add_subdirectory(flight/sql)
-endif()
-
-if(ARROW_FLIGHT
-   AND ARROW_FLIGHT_SQL
-   AND ARROW_BUILD_INTEGRATION)
-  add_subdirectory(flight/integration_tests)
 endif()
 
 if(ARROW_HIVESERVER2)
diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt
index c09159eb15..ab4a47d39a 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -25,27 +25,52 @@ if(WIN32)
   list(APPEND ARROW_FLIGHT_LINK_LIBS ws2_32.lib)
 endif()
 
-set(ARROW_FLIGHT_TEST_LINKAGE
-    "${ARROW_TEST_LINKAGE}"
-    PARENT_SCOPE)
+set(ARROW_FLIGHT_TEST_LINKAGE "${ARROW_TEST_LINKAGE}")
 if(Protobuf_USE_STATIC_LIBS)
   message(STATUS "Linking Arrow Flight tests statically due to static Protobuf")
-  set(ARROW_FLIGHT_TEST_LINKAGE
-      "static"
-      PARENT_SCOPE)
+  set(ARROW_FLIGHT_TEST_LINKAGE "static")
 endif()
 if(NOT ARROW_GRPC_USE_SHARED)
   message(STATUS "Linking Arrow Flight tests statically due to static gRPC")
-  set(ARROW_FLIGHT_TEST_LINKAGE
-      "static"
-      PARENT_SCOPE)
+  set(ARROW_FLIGHT_TEST_LINKAGE "static")
+endif()
+if(ARROW_TESTING)
+  if(WIN32)
+    # We need to use the same library type for arrow_flight_testing
+    # and Google Test because arrow_flight_testing has
+    # arrow::flight:FlightTest that inherits testing::Test. If
+    # arrow_flight_testing's library type and gtest's library type are
+    # different such as arrow_flight_testing is a shared library and
+    # gtest is a static library, link error is occurred.
+    get_target_property(GTEST_TYPE GTest::gtest TYPE)
+    if(GTEST_TYPE STREQUAL "SHARED_LIBRARY")
+      set(ARROW_FLIGHT_TESTING_BUILD_SHARED TRUE)
+      set(ARROW_FLIGHT_TESTING_BUILD_STATIC FALSE)
+    else()
+      set(ARROW_FLIGHT_TESTING_BUILD_SHARED FALSE)
+      set(ARROW_FLIGHT_TESTING_BUILD_STATIC TRUE)
+      message(STATUS "Linking Arrow Flight tests statically due to static GTest")
+      set(ARROW_FLIGHT_TEST_LINKAGE "static")
+    endif()
+  else()
+    set(ARROW_FLIGHT_TESTING_BUILD_SHARED ${ARROW_BUILD_SHARED})
+    set(ARROW_FLIGHT_TESTING_BUILD_STATIC ${ARROW_BUILD_STATIC})
+  endif()
 endif()
 
 set(ARROW_FLIGHT_TEST_INTERFACE_LIBS)
 if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static")
-  set(ARROW_FLIGHT_TEST_LINK_LIBS
-      arrow_flight_static arrow_flight_testing_static ${ARROW_FLIGHT_STATIC_LINK_LIBS}
-      ${ARROW_TEST_LINK_LIBS})
+  if(ARROW_BUILD_STATIC)
+    set(ARROW_FLIGHT_TEST_LINK_LIBS arrow_flight_static)
+  else()
+    set(ARROW_FLIGHT_TEST_LINK_LIBS arrow_flight_shared)
+  endif()
+  if(ARROW_FLIGHT_TESTING_BUILD_STATIC)
+    list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS arrow_flight_testing_static)
+  else()
+    list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS arrow_flight_testing_shared)
+  endif()
+  list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS ${ARROW_TEST_LINK_LIBS})
   if(ARROW_CUDA)
     list(APPEND ARROW_FLIGHT_TEST_INTERFACE_LIBS arrow_cuda_static)
     list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS arrow_cuda_static)
@@ -65,11 +90,7 @@ list(APPEND
      Boost::system
      GTest::gtest
      GTest::gmock)
-
-# Needed for Flight SQL and integration
-set(ARROW_FLIGHT_TEST_LINK_LIBS
-    ${ARROW_FLIGHT_TEST_LINK_LIBS}
-    PARENT_SCOPE)
+list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS gRPC::grpc++)
 
 # TODO(wesm): Protobuf shared vs static linking
 
@@ -239,7 +260,30 @@ endforeach()
 
 # Define arrow_flight_testing library
 if(ARROW_TESTING)
+  if(ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+    set(ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS arrow_shared arrow_flight_shared)
+    set(ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS arrow_static arrow_flight_static)
+  elseif(ARROW_BUILD_SHARED)
+    set(ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS arrow_shared arrow_flight_shared)
+    set(ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS arrow_shared arrow_flight_shared)
+  else()
+    set(ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS arrow_static arrow_flight_static)
+    set(ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS arrow_static arrow_flight_static)
+  endif()
+  if(ARROW_TEST_LINKAGE STREQUAL "shared")
+    list(APPEND ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS arrow_testing_shared)
+    list(APPEND ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS arrow_testing_shared)
+  else()
+    list(APPEND ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS arrow_testing_static)
+    list(APPEND ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS arrow_testing_static)
+  endif()
+  list(APPEND ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS ${ARROW_FLIGHT_TEST_INTERFACE_LIBS})
+  list(APPEND ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS ${ARROW_FLIGHT_TEST_INTERFACE_LIBS})
   add_arrow_lib(arrow_flight_testing
+                BUILD_SHARED
+                ${ARROW_FLIGHT_TESTING_BUILD_SHARED}
+                BUILD_STATIC
+                ${ARROW_FLIGHT_TESTING_BUILD_STATIC}
                 CMAKE_PACKAGE_NAME
                 ArrowFlightTesting
                 PKG_CONFIG_NAME
@@ -254,15 +298,9 @@ if(ARROW_TESTING)
                 flight_grpc_gen
                 arrow_dependencies
                 SHARED_LINK_LIBS
-                arrow_shared
-                arrow_flight_shared
-                arrow_testing_shared
-                ${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
+                ${ARROW_FLIGHT_TESTING_SHARED_LINK_LIBS}
                 STATIC_LINK_LIBS
-                arrow_static
-                arrow_flight_static
-                arrow_testing_static
-                ${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
+                ${ARROW_FLIGHT_TESTING_STATIC_LINK_LIBS}
                 PRIVATE_INCLUDES
                 "${Protobuf_INCLUDE_DIRS}")
 
@@ -328,3 +366,15 @@ if(ARROW_BUILD_BENCHMARKS)
     endif()
   endif()
 endif(ARROW_BUILD_BENCHMARKS)
+
+if(ARROW_WITH_UCX)
+  add_subdirectory(transport/ucx)
+endif()
+
+if(ARROW_FLIGHT_SQL)
+  add_subdirectory(sql)
+
+  if(ARROW_BUILD_INTEGRATION)
+    add_subdirectory(integration_tests)
+  endif()
+endif()
diff --git a/cpp/src/arrow/flight/integration_tests/CMakeLists.txt b/cpp/src/arrow/flight/integration_tests/CMakeLists.txt
index c7a8c4fe45..66a021b4b5 100644
--- a/cpp/src/arrow/flight/integration_tests/CMakeLists.txt
+++ b/cpp/src/arrow/flight/integration_tests/CMakeLists.txt
@@ -17,27 +17,26 @@
 
 add_custom_target(arrow_flight_integration_tests)
 
-if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static")
-  set(ARROW_FLIGHT_TEST_LINK_LIBS
-      arrow_flight_static
-      arrow_flight_testing_static
-      arrow_flight_sql_static
-      ${ARROW_FLIGHT_STATIC_LINK_LIBS}
-      ${ARROW_FLIGHT_TEST_LINK_LIBS})
+if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static" AND ARROW_BUILD_STATIC)
+  set(ARROW_FLIGHT_INTEGRATION_TEST_LINK_LIBS arrow_flight_sql_static)
 else()
-  set(ARROW_FLIGHT_TEST_LINK_LIBS arrow_flight_shared arrow_flight_testing_shared
-                                  arrow_flight_sql_shared ${ARROW_FLIGHT_TEST_LINK_LIBS})
+  set(ARROW_FLIGHT_INTEGRATION_TEST_LINK_LIBS arrow_flight_sql_shared)
 endif()
+list(APPEND
+     ARROW_FLIGHT_INTEGRATION_TEST_LINK_LIBS
+     ${ARROW_FLIGHT_TEST_LINK_LIBS}
+     ${GFLAGS_LIBRARIES}
+     GTest::gtest)
 
 add_executable(flight-test-integration-server test_integration_server.cc
                                               test_integration.cc)
-target_link_libraries(flight-test-integration-server ${ARROW_FLIGHT_TEST_LINK_LIBS}
-                      ${GFLAGS_LIBRARIES} GTest::gtest)
+target_link_libraries(flight-test-integration-server
+                      ${ARROW_FLIGHT_INTEGRATION_TEST_LINK_LIBS})
 
 add_executable(flight-test-integration-client test_integration_client.cc
                                               test_integration.cc)
-target_link_libraries(flight-test-integration-client ${ARROW_FLIGHT_TEST_LINK_LIBS}
-                      ${GFLAGS_LIBRARIES} GTest::gtest)
+target_link_libraries(flight-test-integration-client
+                      ${ARROW_FLIGHT_INTEGRATION_TEST_LINK_LIBS})
 
 add_dependencies(arrow-integration flight-test-integration-client
                  flight-test-integration-server)
diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt
index 6a3c922210..1f5a72b50d 100644
--- a/cpp/src/arrow/flight/sql/CMakeLists.txt
+++ b/cpp/src/arrow/flight/sql/CMakeLists.txt
@@ -63,13 +63,12 @@ add_arrow_lib(arrow_flight_sql
               PRIVATE_INCLUDES
               "${Protobuf_INCLUDE_DIRS}")
 
-if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static")
-  set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_static
-                                      ${ARROW_FLIGHT_TEST_LINK_LIBS})
+if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static" AND ARROW_BUILD_STATIC)
+  set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_static)
 else()
-  set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_shared
-                                      ${ARROW_FLIGHT_TEST_LINK_LIBS})
+  set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_shared)
 endif()
+list(APPEND ARROW_FLIGHT_SQL_TEST_LINK_LIBS ${ARROW_FLIGHT_TEST_LINK_LIBS})
 
 # Build test server for unit tests
 if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES)
diff --git a/dev/release/verify-release-candidate.bat b/dev/release/verify-release-candidate.bat
index 30bb69a225..396f0475e2 100644
--- a/dev/release/verify-release-candidate.bat
+++ b/dev/release/verify-release-candidate.bat
@@ -69,10 +69,6 @@ call conda create --no-shortcuts -c conda-forge -f -q -y -p %_VERIFICATION_CONDA
 
 call activate %_VERIFICATION_CONDA_ENV% || exit /B 1
 
-@rem With MSVC we always bundle a more recent GTest which causes a link conflict
-@rem for more context, see https://issues.apache.org/jira/browse/ARROW-15378
-call conda remove -y gtest gmock || exit /B 1
-
 set GENERATOR=Visual Studio 16 2019
 set ARCHITECTURE=x64
 set CONFIGURATION=release
diff --git a/dev/release/verify-release-candidate.sh b/dev/release/verify-release-candidate.sh
index e9bc6b02b2..a512449aea 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -632,9 +632,10 @@ test_and_install_cpp() {
 
   LD_LIBRARY_PATH=$PWD/release:$LD_LIBRARY_PATH PYTHONPATH=$pythonpath ctest \
     --exclude-regex "plasma-serialization_tests" \
-    -j$NPROC \
+    --label-regex unittest \
     --output-on-failure \
-    -L unittest
+    --parallel $NPROC \
+    --timeout 300
 
   popd
 }