| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| if(GTestAlt_FOUND) |
| return() |
| endif() |
| |
| set(find_package_args) |
| if(GTestAlt_FIND_VERSION) |
| list(APPEND find_package_args ${GTestAlt_FIND_VERSION}) |
| endif() |
| if(GTestAlt_FIND_QUIETLY) |
| list(APPEND find_package_args QUIET) |
| endif() |
| if(CMAKE_VERSION VERSION_LESS 3.23) |
| list(APPEND find_package_args CONFIG) |
| 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. |
| find_package(GTest ${find_package_args}) |
| |
| set(GTestAlt_FOUND ${GTest_FOUND}) |
| if(GTestAlt_FOUND AND GTestAlt_NEED_CXX_STANDARD_CHECK) |
| set(KEEP_CMAKE_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE}) |
| set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) |
| set(GTestAlt_CXX_STANDARD_TEST_SOURCE |
| "${CMAKE_CURRENT_BINARY_DIR}/gtest_cxx_standard_test.cc") |
| file(WRITE ${GTestAlt_CXX_STANDARD_TEST_SOURCE} |
| " |
| #include <string_view> |
| #include <gtest/gtest.h> |
| |
| TEST(CXX_STANDARD, MatcherStringView) { |
| testing::Matcher matcher(std::string_view(\"hello\")); |
| } |
| ") |
| try_compile(GTestAlt_CXX_STANDARD_AVAILABLE ${CMAKE_CURRENT_BINARY_DIR} |
| SOURCES ${GTestAlt_CXX_STANDARD_TEST_SOURCE} |
| CMAKE_FLAGS "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" |
| LINK_LIBRARIES GTest::gtest_main |
| OUTPUT_VARIABLE GTestAlt_CXX_STANDARD_OUTPUT) |
| set(CMAKE_TRY_COMPILE_TARGET_TYPE ${KEEP_CMAKE_TRY_COMPILE_TARGET_TYPE}) |
| if(NOT GTestAlt_CXX_STANDARD_AVAILABLE) |
| message(STATUS "GTest can't be used with C++${CMAKE_CXX_STANDARD}.") |
| message(STATUS "Use -DGTest_SOURCE=BUNDLED.") |
| message(STATUS "Output:\n${GTestAlt_CXX_STANDARD_OUTPUT}") |
| find_package_handle_standard_args(GTestAlt |
| REQUIRED_VARS GTestAlt_CXX_STANDARD_AVAILABLE) |
| endif() |
| |
| target_link_libraries(GTest::gmock INTERFACE GTest::gtest) |
| target_link_libraries(GTest::gtest_main INTERFACE GTest::gtest) |
| endif() |