cdk/cmake/gtest.cmake (154 lines of code) (raw):

# Copyright (c) 2015, 2024, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, as # published by the Free Software Foundation. # # This program is designed to work with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, as # designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an additional # permission to link the program and your derivative works with the # separately licensed software that they have either included with # the program or referenced in the documentation. # # Without limiting anything contained in the foregoing, this file, # which is part of Connector/C++, is also subject to the # Universal FOSS Exception, version 1.0, a copy of which can be found at # https://oss.oracle.com/licenses/universal-foss-exception. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License, version 2.0, for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # Set up gtest for use by targets in given folder and its sub-folders. # MACRO(SETUP_GTEST) ENDMACRO(SETUP_GTEST) SET(WITH_GTEST $ENV{WITH_GTEST} CACHE PATH "Location of gtest") if(NOT WITH_GTEST) # # Try to find gtest in system-wide locations # find_package(GTest) if(NOT GTEST_FOUND) message(FATAL_ERROR "This project requires gtest libraries" " but WITH_GTEST option was not specified." " Please set it to the location where gtest" " was built from sources using cmake.") endif() list(GET GTEST_LIBRARIES 0 gtest_location) list(GET GTEST_MAIN_LIBRARIES 0 gtest_main_location) else(NOT WITH_GTEST) message("Looking for gtest build in: ${WITH_GTEST}") # # TODO: Configure gtest build if source location is given # if(NOT EXISTS "${WITH_GTEST}/CMakeCache.txt") message(FATAL_ERROR "Could not find gtest build in this location: ${WITH_GTEST}" ) endif() # # Read source location from build configuration cache and set # GTEST_INCLUDE_DIR. # load_cache(${WITH_GTEST} READ_WITH_PREFIX GTEST_ CMAKE_PROJECT_NAME ) #MESSAGE(STATUS "Gtest project name: ${GTEST_CMAKE_PROJECT_NAME}") load_cache(${WITH_GTEST} READ_WITH_PREFIX GTEST_ ${GTEST_CMAKE_PROJECT_NAME}_SOURCE_DIR ) message("Gtest sources at: ${GTEST_${GTEST_CMAKE_PROJECT_NAME}_SOURCE_DIR}") find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_${GTEST_CMAKE_PROJECT_NAME}_SOURCE_DIR}/include ${GTEST_${GTEST_CMAKE_PROJECT_NAME}_SOURCE_DIR}/gtest/include NO_DEFAULT_PATH ) if(NOT EXISTS "${GTEST_INCLUDE_DIRS}/gtest/gtest.h") message(FATAL_ERROR "Could not find gtest headers at: ${GTEST_INCLUDE_DIRS}") endif() # # TODO: Run build if libraries can not be found in expected locations # find_library(gtest_location NAMES libgtest gtest PATHS ${WITH_GTEST} ${WITH_GTEST}/gtest PATH_SUFFIXES . Release RelWithDebInfo Debug NO_DEFAULT_PATH ) find_library(gtest_main_location NAMES libgtest_main gtest_main PATHS ${WITH_GTEST} ${WITH_GTEST}/gtest PATH_SUFFIXES . Release RelWithDebInfo Debug NO_DEFAULT_PATH ) endif(NOT WITH_GTEST) MESSAGE(STATUS "GTEST_INCLUDE_DIRS: ${GTEST_INCLUDE_DIRS}") # # Import gtest and gtest_main libraries as targets of this project # MESSAGE("gtest location: ${gtest_location}") MESSAGE("gtest_main location: ${gtest_main_location}") add_library(gtest STATIC IMPORTED) add_library(gtest_main STATIC IMPORTED) target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS}) # See: https://stackoverflow.com/questions/42847103/stdtr1-with-visual-studio-2017 target_compile_definitions(gtest INTERFACE -DGTEST_LANG_CXX11=1 ) set_target_properties(gtest PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${gtest_location}" ) set_target_properties(gtest_main PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LINK_INTERFACE_LIBRARIES "gtest" IMPORTED_LOCATION "${gtest_main_location}" ) # # Setup configuration-specific locations for Win # TODO: Should the same be done for OSX? # IF(WIN32) get_filename_component(gtest_path ${gtest_location} PATH) file(GLOB tmp "${gtest_path}/*/gtest.lib") if(NOT tmp) file(GLOB tmp "${gtest_path}/../*/gtest.lib") endif() list(GET tmp 0 tmp) get_filename_component(gtest_path ${tmp} REALPATH) get_filename_component(gtest_path ${gtest_path} PATH) get_filename_component(gtest_path ${gtest_path} PATH) #message("Setting-up per build configuration locations using base:" # " ${gtest_path}") FOREACH(Config Debug RelWithDebInfo MinSizeRel Release) if(EXISTS "${gtest_path}/${Config}/gtest.lib") message("found per configuration variant: ${gtest_path}/${Config}/gtest.lib") STRING(TOUPPER ${Config} CONFIG) set_property(TARGET gtest APPEND PROPERTY IMPORTED_CONFIGURATIONS ${CONFIG}) set_target_properties(gtest PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_${CONFIG} "CXX" IMPORTED_LOCATION_${CONFIG} "${gtest_path}/${Config}/gtest.lib" ) set_property(TARGET gtest_main APPEND PROPERTY IMPORTED_CONFIGURATIONS ${CONFIG}) set_target_properties(gtest_main PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_${CONFIG} "CXX" IMPORTED_LINK_INTERFACE_LIBRARIES_${CONFIG} "gtest" IMPORTED_LOCATION_${CONFIG} "${gtest_path}/${Config}/gtest_main.lib" ) endif() ENDFOREACH(Config) ELSE(WIN32) # On unix gtest depends on pthread library set_property(TARGET gtest APPEND PROPERTY INTERFACE_LINK_LIBRARIES pthread) set_property(TARGET gtest APPEND PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES pthread) ENDIF(WIN32)