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

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


The following commit(s) were added to refs/heads/main by this push:
     new a4a5562e6b GH-43400: [C++] Ensure using bundled GoogleTest when we use 
bundled GoogleTest (#43465)
a4a5562e6b is described below

commit a4a5562e6b5a82ff297faeac45eb2ce1f391bfec
Author: Sutou Kouhei <[email protected]>
AuthorDate: Tue Jul 30 11:55:21 2024 +0900

    GH-43400: [C++] Ensure using bundled GoogleTest when we use bundled 
GoogleTest (#43465)
    
    ### Rationale for this change
    
    If we use bundled GoogleTest and system other dependencies such as Boost, 
our include path options may be:
    
    * `-isystem /opt/homebrew/include` (for Boost)
    * `-isystem build_dir/_deps/googletest-src/googletest` (for bundled 
GoogleTest)
    * `-isystem build_dir/_deps/googletest-src/googlemock` (for bundled 
GoogleTest)
    
    With this order, GoogleTest headers in `/opt/homebrew/include/` are used 
with bundled GoogleTest. It may cause link errors.
    
    ### What changes are included in this PR?
    
    This change introduces a new CMake target
    `arrow::GTest::gtest_headers` that has include paths for bundled 
GoogleTest. And it's always used as the first link library of all test program. 
With this change, our include path options are:
    
    * `-isystem build_dir/_deps/googletest-src/googletest` (for bundled 
GoogleTest)
    * `-isystem build_dir/_deps/googletest-src/googlemock` (for bundled 
GoogleTest)
    * `-isystem /opt/homebrew/include` (for Boost)
    
    With this order, we can always use our bundled GoogleTest.
    
    `arrow::GTest::gtest_headers` is defined only when we use bundled 
GoogleTest. So this doesn't change the system GoogleTest case.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    Yes.
    * GitHub Issue: #43400
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Jacob Wujciak-Jens <[email protected]>
---
 cpp/cmake_modules/BuildUtils.cmake          | 5 +++++
 cpp/cmake_modules/ThirdpartyToolchain.cmake | 6 ++++++
 dev/tasks/java-jars/github.yml              | 5 -----
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/cpp/cmake_modules/BuildUtils.cmake 
b/cpp/cmake_modules/BuildUtils.cmake
index e7523add27..692efa7837 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -721,6 +721,11 @@ function(ADD_TEST_CASE REL_TEST_NAME)
                                      
"${EXECUTABLE_OUTPUT_PATH};$ENV{CONDA_PREFIX}/lib")
   endif()
 
+  # Ensure using bundled GoogleTest when we use bundled GoogleTest.
+  # ARROW_GTEST_GTEST_HEADERS is defined only when we use bundled
+  # GoogleTest.
+  target_link_libraries(${TEST_NAME} PRIVATE ${ARROW_GTEST_GTEST_HEADERS})
+
   if(ARG_STATIC_LINK_LIBS)
     # Customize link libraries
     target_link_libraries(${TEST_NAME} PRIVATE ${ARG_STATIC_LINK_LIBS})
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1c8c40d6f9..92bd80014e 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -2306,6 +2306,10 @@ function(build_gtest)
   install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/"
                     "${googletest_SOURCE_DIR}/googletest/include/"
           DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
+  add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED)
+  target_include_directories(arrow::GTest::gtest_headers
+                             INTERFACE 
"${googletest_SOURCE_DIR}/googlemock/include/"
+                                       
"${googletest_SOURCE_DIR}/googletest/include/")
   install(TARGETS gmock gmock_main gtest gtest_main
           EXPORT arrow_testing_targets
           RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
@@ -2350,12 +2354,14 @@ if(ARROW_TESTING)
 
       string(APPEND ARROW_TESTING_PC_LIBS " $<TARGET_FILE:GTest::gtest>")
     endif()
+    set(ARROW_GTEST_GTEST_HEADERS)
     set(ARROW_GTEST_GMOCK GTest::gmock)
     set(ARROW_GTEST_GTEST GTest::gtest)
     set(ARROW_GTEST_GTEST_MAIN GTest::gtest_main)
   else()
     string(APPEND ARROW_TESTING_PC_CFLAGS " -I\${includedir}/arrow-gtest")
     string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest")
+    set(ARROW_GTEST_GTEST_HEADERS arrow::GTest::gtest_headers)
     set(ARROW_GTEST_GMOCK arrow::GTest::gmock)
     set(ARROW_GTEST_GTEST arrow::GTest::gtest)
     set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main)
diff --git a/dev/tasks/java-jars/github.yml b/dev/tasks/java-jars/github.yml
index 58c1cedb11..77e8867652 100644
--- a/dev/tasks/java-jars/github.yml
+++ b/dev/tasks/java-jars/github.yml
@@ -138,11 +138,6 @@ jobs:
           # used on test  We uninstall Homebrew's Protobuf to ensure using
           # bundled Protobuf.
           brew uninstall protobuf
-          # We want to use the bundled googletest for static linking. Since
-          # both BUNDLED and brew options are enabled, it could cause a 
conflict
-          # when there is a version mismatch.
-          # We uninstall googletest to ensure using the bundled googletest.
-          brew uninstall googletest
 
           brew bundle --file=arrow/java/Brewfile
       - name: Build C++ libraries

Reply via email to