From 60b45673bdc247ee663c9d56aa50bdec6e6a4bf7 Mon Sep 17 00:00:00 2001 From: Haocheng Liu Date: Tue, 28 Mar 2023 23:42:31 -0400 Subject: [PATCH] GH-14917: [C++] Error out when GTest is compiled with a standard lower than 17 ### Rationale for this change On MacOS, the system GTest from brew uses C++14 while arrow is default to C++17. The build will fail at the linking stage unless users explicity uses bundled GTest. Users are often confused by unclear linking errors. ### What changes are included in this PR? At CMake configuration time, the CMake code will automatically detect and compare the C++ standard used by GTest and arrow. If a mismatch is detected, CMake will error out and privide meaningful guidance. It will apply both to Linux and MacOS. ### Are these changes tested? Covered by Arrow github test worker and tested on local host. ### Are there any user-facing changes? Yes, now users are given better guidance when building Arrow against the system GTest. * Closes: #14917 --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index bdfe10c99d8..e282afb727b 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -2230,6 +2230,13 @@ if(ARROW_TESTING) 1.10.0 USE_CONFIG ${GTEST_USE_CONFIG}) + get_target_property(gtest_cxx_standard GTest::gtest INTERFACE_COMPILE_FEATURES) + + if((${gtest_cxx_standard} STREQUAL "cxx_std_11") OR (${gtest_cxx_standard} STREQUAL + "cxx_std_14")) + message(FATAL_ERROR "System GTest is built with a C++ standard lower than 17. Use bundled GTest via passing in CMake flag +-DGTest_SOURCE=\"BUNDLED\"") + endif() if(GTest_SOURCE STREQUAL "SYSTEM") find_package(PkgConfig QUIET)