1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
# - Find Googlemock
# Find the google mock includes and the google mock libraries
# This module defines
# GOOGLEMOCK_INCLUDE_DIR, root google mock include dir
# GOOGLEMOCK_LIBRARY, the path to Google Mock library
# GOOGLEMOCK_LIBRARIES, the path to Google Mock and Google Test library
# GOOGLEMOCK_FOUND, whether Google Mock was found
#
# since google test and google mock is not supposed to be supplied pre-compiled
# we try to find the google mock sources as a fallback
find_program(GMOCK-CONFIG_EXECUTABLE NAMES gmock-config PATHS
${BIN_INSTALL_DIR}
/opt/local/bin
/usr/bin
)
if(GMOCK-CONFIG_EXECUTABLE)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --includedir OUTPUT_VARIABLE GOOGLEMOCK_INCLUDE_DIR)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --ldflags OUTPUT_VARIABLE GOOGLEMOCK_LDFLAGS)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE GOOGLEMOCK_libs_tmp)
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LDFLAGS} ${GOOGLEMOCK_libs_tmp})
if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARIES)
set(GOOGLEMOCK_FOUND TRUE)
message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")
else()
set(GOOGLEMOCK_FOUND FALSE)
if (GOOGLEMOCK_FIND_REQUIRED)
message(FATAL_ERROR "Could NOT find required package Googlemock")
endif()
endif()
else()
find_path(GOOGLEMOCK_INCLUDE_DIR NAMES gmock/gmock.h
HINTS
~/usr/include
/opt/local/include
/usr/include
/usr/local/include
)
find_library( GOOGLEMOCK_LIBRARY NAMES gmock
PATHS
~/usr/lib
/opt/local/lib
/usr/lib
/usr/lib64
/usr/local/lib
)
find_library( GOOGLEMOCK_DEP_GTEST_LIBRARY NAMES gtest
PATHS
~/usr/lib
/opt/local/lib
/usr/lib
/usr/lib64
/usr/local/lib
)
# google-mock >= 1.5 requires pthread
# see: http://code.google.com/p/googlemock/source/browse/trunk/CHANGES
if( NOT WIN32 AND GOOGLEMOCK_LIBRARY )
find_library( GOOGLEMOCK_DEP_PTHREAD_LIBRARY NAMES pthread
PATHS
~/usr/lib
/opt/local/lib
/usr/lib
/usr/lib64
/usr/local/lib
)
endif()
# Google recommends not to distribute a pre-build libary and ubuntu is following
# this advice with libgtest 1.6.0
# However they are distributing sources, so we are looking if we at least have
# them available
if( NOT GOOGLEMOCK_DEP_GTEST_LIBRARY )
find_path( GOOGLEMOCK_SOURCES NAMES gmock
PATHS /usr/src
NO_DEFAULT_PATH
NO_CMAKE_PATH
)
# found googlemock as sources. then we also have the gtest sources since they
# are included
if( GOOGLEMOCK_SOURCES )
find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
PATHS "${GOOGLEMOCK_SOURCES}/gmock"
NO_DEFAULT_PATH
NO_CMAKE_PATH
)
# make sure that we use the gtest supplied with googlemock
set(GOOGLEMOCK_INCLUDE_DIR
"${GOOGLEMOCK_INCLUDE_DIR}"
"${GOOGLEMOCK_SOURCES}/gmock"
"${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest/include"
)
elseif( GOOGLEMOCK_SOURCES )
find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
PATHS /usr/src
NO_DEFAULT_PATH
NO_CMAKE_PATH
)
# in this case we also have to use the static google mock library
set( OLD_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set( CMAKE_FIND_LIBRARY_SUFFIXES .a)
find_library( GOOGLEMOCK_LIBRARY_STATIC NAMES gmock
PATHS
~/usr/lib
/opt/local/lib
/usr/lib
/usr/lib64
/usr/local/lib
)
set( CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
endif()
# -- googlemock and gtest library available
if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_LIBRARY)
set(GOOGLEMOCK_FOUND TRUE)
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY} ${GOOGLEMOCK_DEP_GTEST_LIBRARY} ${GOOGLEMOCK_DEP_PTHREAD_LIBRARY})
message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")
# -- googlemock and gtest sources available
elseif(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_SOURCES)
set(GOOGLEMOCK_FOUND TRUE)
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY_STATIC} gtest)
set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
message(STATUS "Found libgmock but need to build gtest: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES} ${GOOGLEMOCK_DEP_GTEST_SOURCES}")
# -- googlemock sources and gtest sources available
elseif(GOOGLEMOCK_SOURCES)
set(GOOGLEMOCK_FOUND TRUE)
set(GOOGLEMOCK_LIBRARIES gtest)
set(GOOGLEMOCK_SRCS "${GOOGLEMOCK_SOURCES}/gmock/src/gmock-all.cc" CACHE PATH "Google mock source file that needs to be added")
set(GOOGLEMOCK_SOURCES "${GOOGLEMOCK_SOURCES}/gmock" CACHE PATH "Path to the google-mock sources")
set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
message(STATUS "Found gmock and gtest but need to build both: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_DEP_GTEST_SOURCES}")
mark_as_advanced(GOOGLEMOCK_SRCS)
# -- googlemock but no gtest
else()
set(GOOGLEMOCK_FOUND FALSE)
if (GOOGLEMOCK_FIND_REQUIRED)
message(FATAL_ERROR "Could NOT find required package Googlemock or gtest")
endif()
endif()
endif()
mark_as_advanced(GOOGLEMOCK_INCLUDE_DIR GOOGLEMOCK_LIBRARIES)
|