xref: /openbmc/boost-dbus/cmake/FindGMock.cmake (revision 377e76ab)
1# Locate the Google C++ Mocking Framework.
2# (This file is almost an identical copy of the original FindGTest.cmake file,
3#  feel free to use it as it is or modify it for your own needs.)
4#
5#
6# Defines the following variables:
7#
8#   GMOCK_FOUND - Found the Google Testing framework
9#   GMOCK_INCLUDE_DIRS - Include directories
10#
11# Also defines the library variables below as normal
12# variables. These contain debug/optimized keywords when
13# a debugging library is found.
14#
15#   GMOCK_BOTH_LIBRARIES - Both libgmock & libgmock-main
16#   GMOCK_LIBRARIES - libgmock
17#   GMOCK_MAIN_LIBRARIES - libgmock-main
18#
19# Accepts the following variables as input:
20#
21#   GMOCK_ROOT - (as a CMake or environment variable)
22#                The root directory of the gmock install prefix
23#
24#   GMOCK_MSVC_SEARCH - If compiling with MSVC, this variable can be set to
25#                       "MD" or "MT" to enable searching a gmock build tree
26#                       (defaults: "MD")
27#
28#-----------------------
29# Example Usage:
30#
31#    find_package(GMock REQUIRED)
32#    include_directories(${GMOCK_INCLUDE_DIRS})
33#
34#    add_executable(foo foo.cc)
35#    target_link_libraries(foo ${GMOCK_BOTH_LIBRARIES})
36#
37#=============================================================================
38# This file is released under the MIT licence:
39#
40# Copyright (c) 2011 Matej Svec
41#
42# Permission is hereby granted, free of charge, to any person obtaining a copy
43# of this software and associated documentation files (the "Software"), to
44# deal in the Software without restriction, including without limitation the
45# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
46# sell copies of the Software, and to permit persons to whom the Software is
47# furnished to do so, subject to the following conditions:
48#
49# The above copyright notice and this permission notice shall be included in
50# all copies or substantial portions of the Software.
51#
52# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
53# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
54# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
55# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
56# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
57# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
58# IN THE SOFTWARE.
59#=============================================================================
60
61
62function(_gmock_append_debugs _endvar _library)
63  if(${_library} AND ${_library}_DEBUG)
64    set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
65  else()
66    set(_output ${${_library}})
67  endif()
68  set(${_endvar} ${_output} PARENT_SCOPE)
69endfunction()
70
71function(_gmock_find_library _name)
72  find_library(${_name}
73    NAMES ${ARGN}
74    HINTS
75      $ENV{GMOCK_ROOT}
76      ${GMOCK_ROOT}
77    PATH_SUFFIXES ${_gmock_libpath_suffixes}
78  )
79  mark_as_advanced(${_name})
80endfunction()
81
82
83if(NOT DEFINED GMOCK_MSVC_SEARCH)
84  set(GMOCK_MSVC_SEARCH MD)
85endif()
86
87set(_gmock_libpath_suffixes lib)
88if(MSVC)
89  if(GMOCK_MSVC_SEARCH STREQUAL "MD")
90    list(APPEND _gmock_libpath_suffixes
91      msvc/gmock-md/Debug
92      msvc/gmock-md/Release)
93  elseif(GMOCK_MSVC_SEARCH STREQUAL "MT")
94    list(APPEND _gmock_libpath_suffixes
95      msvc/gmock/Debug
96      msvc/gmock/Release)
97  endif()
98endif()
99
100find_path(GMOCK_INCLUDE_DIR gmock/gmock.h
101  HINTS
102    $ENV{GMOCK_ROOT}/include
103    ${GMOCK_ROOT}/include
104)
105mark_as_advanced(GMOCK_INCLUDE_DIR)
106
107if(MSVC AND GMOCK_MSVC_SEARCH STREQUAL "MD")
108  # The provided /MD project files for Google Mock add -md suffixes to the
109  # library names.
110  _gmock_find_library(GMOCK_LIBRARY            gmock-md  gmock)
111  _gmock_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd gmockd)
112  _gmock_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md  gmock_main)
113  _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd gmock_maind)
114else()
115  _gmock_find_library(GMOCK_LIBRARY            gmock)
116  _gmock_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
117  _gmock_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
118  _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
119endif()
120
121include(FindPackageHandleStandardArgs)
122FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMock DEFAULT_MSG GMOCK_LIBRARY GMOCK_INCLUDE_DIR GMOCK_MAIN_LIBRARY)
123
124if(GMOCK_FOUND)
125  set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR})
126  _gmock_append_debugs(GMOCK_LIBRARIES      GMOCK_LIBRARY)
127  _gmock_append_debugs(GMOCK_MAIN_LIBRARIES GMOCK_MAIN_LIBRARY)
128  set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})
129endif()
130