Separate search for GTEST/GMOCK sources into different cases

1. If GTEST_ROOT and/or GMOCK_ROOT are defined, sources are expected
somewhere inside these directories. Otherwise a CMake error is
generated. Different source directory layouts are considered.

2. If GTEST_ROOT and GMOCK_ROOT are both not defined, sources are
searched in /usr/src. Different source directory layouts are considered.

3. If sources are not found in one of the first two cases, preinstalled
libraries are searched.

Additionally using HINTS in function find_path() has been replaced by
PATHS and PATH_SUFFIXES. According to CMake documentation in case of
hard-coded guesses PATHS should be used. Remark: This reverts commit
5f53e29, but instead NO_CMAKE_SYSTEM_PATH is used now to prevent CMake
from searching in system paths.

Hint: There was a special handling implemented regarding search for
gmock-all.cc. This file was additionally searched in /usr/src/gmock
directly instead of /usr/src/gmock/src (see commit 1241b71). This
special handling has been kept in case of searching sources in
/usr/src/gmock, but not in case of searching sources in GMOCK_ROOT or
GTEST_ROOT.
This commit is contained in:
Christian Gruber 2019-08-29 23:36:05 +02:00
parent 53fe478ce1
commit d637c53fff

View File

@ -131,27 +131,35 @@ function(gnc_gtest_configure)
endif()
unset(GTEST_SRC_DIR CACHE)
if (GTEST_ROOT)
find_path(GTEST_SRC_DIR src/gtest-all.cc
HINTS ${GTEST_ROOT} ${GMOCK_ROOT}/gtest /usr/src/gtest)
if (GTEST_SRC_DIR)
if (EXISTS ${GTEST_SRC_DIR}/include/gtest/gtest.h)
set(GTEST_INCLUDE_DIR ${GTEST_SRC_DIR}/include CACHE PATH "" FORCE)
else()
message(FATAL_ERROR "GTEST sources found, but it doesn't have 'gtest/gtest.h'")
endif()
set(lib_gtest_SOURCES
"${GTEST_SRC_DIR}/src/gtest_main.cc"
"${GTEST_SRC_DIR}/src/gtest-all.cc"
PARENT_SCOPE)
else()
message(FATAL_ERROR "GTEST not found in GTEST_ROOT")
endif()
find_path(GTEST_SRC_DIR src/gtest-all.cc NO_CMAKE_SYSTEM_PATH
PATHS ${GTEST_ROOT} PATH_SUFFIXES googletest)
elseif (GMOCK_ROOT)
find_path(GTEST_SRC_DIR src/gtest-all.cc NO_CMAKE_SYSTEM_PATH
PATHS ${GMOCK_ROOT}/../googletest ${GMOCK_ROOT}/gtest)
else()
find_path(GTEST_INCLUDE_DIR gtest/gtest.h)
find_library(GTEST_SHARED_LIB gtest)
find_library(GTEST_MAIN_LIB gtest_main)
if (NOT (GTEST_SHARED_LIB AND GTEST_MAIN_LIB AND GTEST_INCLUDE_DIR))
message(FATAL_ERROR "GTEST not found. Please install it or set GTEST_ROOT or GMOCK_ROOT")
find_path(GTEST_SRC_DIR src/gtest-all.cc
PATHS /usr/src PATH_SUFFIXES googletest/googletest gtest)
endif()
if (GTEST_SRC_DIR)
if (EXISTS ${GTEST_SRC_DIR}/include/gtest/gtest.h)
set(GTEST_INCLUDE_DIR ${GTEST_SRC_DIR}/include CACHE PATH "" FORCE)
else()
message(FATAL_ERROR "GTEST sources found, but it doesn't have 'gtest/gtest.h'")
endif()
set(lib_gtest_SOURCES
"${GTEST_SRC_DIR}/src/gtest_main.cc"
"${GTEST_SRC_DIR}/src/gtest-all.cc"
PARENT_SCOPE)
else()
if (GTEST_ROOT OR GMOCK_ROOT)
message(FATAL_ERROR "GTEST sources not found in GTEST_ROOT or GMOCK_ROOT")
else()
find_path(GTEST_INCLUDE_DIR gtest/gtest.h)
find_library(GTEST_SHARED_LIB gtest)
find_library(GTEST_MAIN_LIB gtest_main)
if (NOT (GTEST_SHARED_LIB AND GTEST_MAIN_LIB AND GTEST_INCLUDE_DIR))
message(FATAL_ERROR "GTEST not found. Please install it or set GTEST_ROOT or GMOCK_ROOT")
endif()
endif()
endif()
set(THREADS_PREFER_PTHREAD_FLAG ON)
@ -161,36 +169,45 @@ function(gnc_gtest_configure)
message(STATUS "Checking for GMOCK")
unset(GMOCK_SRC_DIR CACHE)
if (GMOCK_ROOT)
find_path(GMOCK_SRC_DIR src/gmock-all.cc NO_CMAKE_SYSTEM_PATH
PATHS ${GMOCK_ROOT})
elseif (GTEST_ROOT)
find_path(GMOCK_SRC_DIR src/gmock-all.cc NO_CMAKE_SYSTEM_PATH
PATHS ${GTEST_ROOT}/googlemock ${GTEST_ROOT}/../googlemock)
else()
find_path(GMOCK_SRC_DIR src/gmock-all.cc
HINTS ${GMOCK_ROOT} /usr/src/gmock)
if (GMOCK_SRC_DIR)
set(GMOCK_MAIN_SRC_DIR "${GMOCK_SRC_DIR}/src")
else()
PATHS /usr/src PATH_SUFFIXES googletest/googlemock gmock)
if (NOT GMOCK_SRC_DIR)
find_path(GMOCK_SRC_DIR gmock-all.cc
HINTS ${GMOCK_ROOT} /usr/src/gmock)
PATHS /usr/src PATH_SUFFIXES gmock)
if (GMOCK_SRC_DIR)
set(GMOCK_MAIN_SRC_DIR "${GMOCK_SRC_DIR}")
endif()
endif()
if (GMOCK_SRC_DIR)
if (EXISTS ${GMOCK_SRC_DIR}/include/gmock/gmock.h)
set(GMOCK_INCLUDE_DIR ${GMOCK_SRC_DIR}/include CACHE PATH "" FORCE)
else()
endif()
if (GMOCK_SRC_DIR)
if (EXISTS ${GMOCK_SRC_DIR}/include/gmock/gmock.h)
set(GMOCK_INCLUDE_DIR ${GMOCK_SRC_DIR}/include CACHE PATH "" FORCE)
else()
message(FATAL_ERROR "GMOCK sources found, but it doesn't have 'gmock/gmock.h'")
endif()
set(GMOCK_SRC "${GMOCK_MAIN_SRC_DIR}/gmock-all.cc" PARENT_SCOPE)
set(GMOCK_LIB "${CMAKE_BINARY_DIR}/common/test-core/libgmock.a" PARENT_SCOPE)
else()
message(FATAL_ERROR "GMOCK not found in GMOCK_ROOT")
endif()
if (NOT GMOCK_MAIN_SRC_DIR)
set(GMOCK_MAIN_SRC_DIR "${GMOCK_SRC_DIR}/src")
endif()
set(GMOCK_SRC "${GMOCK_MAIN_SRC_DIR}/gmock-all.cc" PARENT_SCOPE)
set(GMOCK_LIB "${CMAKE_BINARY_DIR}/common/test-core/libgmock.a" PARENT_SCOPE)
else()
find_path(GMOCK_INCLUDE_DIR gmock/gmock.h)
find_library(GMOCK_SHARED_LIB gmock)
find_library(GMOCK_MAIN_LIB gmock_main)
if (GMOCK_MAIN_LIB AND GMOCK_SHARED_LIB AND GMOCK_INCLUDE_DIR)
set(GMOCK_LIB "${GMOCK_SHARED_LIB};${GMOCK_MAIN_LIB}" PARENT_SCOPE)
if (GMOCK_ROOT OR GTEST_ROOT)
message(FATAL_ERROR "GMOCK sources not found in GMOCK_ROOT or GTEST_ROOT")
else()
message(FATAL_ERROR "GMOCK not found. Please install it or set GMOCK_ROOT")
find_path(GMOCK_INCLUDE_DIR gmock/gmock.h)
find_library(GMOCK_SHARED_LIB gmock)
find_library(GMOCK_MAIN_LIB gmock_main)
if (GMOCK_MAIN_LIB AND GMOCK_SHARED_LIB AND GMOCK_INCLUDE_DIR)
set(GMOCK_LIB "${GMOCK_SHARED_LIB};${GMOCK_MAIN_LIB}" PARENT_SCOPE)
else()
message(FATAL_ERROR "GMOCK not found. Please install it or set GMOCK_ROOT")
endif()
endif()
endif()
set(GMOCK_FOUND YES PARENT_SCOPE)