Преглед на файлове

Hopefully fix testing dependencies

Jonas Pflanzer преди 5 години
родител
ревизия
3e064bab37
променени са 1 файла, в които са добавени 158 реда и са изтрити 118 реда
  1. 158 118
      .cmake_modules/FindGMock.cmake

+ 158 - 118
.cmake_modules/FindGMock.cmake

@@ -1,129 +1,169 @@
-# Locate the Google C++ Mocking Framework.
-# (This file is almost an identical copy of the original FindGTest.cmake file,
-#  feel free to use it as it is or modify it for your own needs.)
-#
-#
-# Defines the following variables:
-#
-#   GMOCK_FOUND - Found the Google Testing framework
-#   GMOCK_INCLUDE_DIRS - Include directories
-#
-# Also defines the library variables below as normal
-# variables. These contain debug/optimized keywords when
-# a debugging library is found.
-#
-#   GMOCK_BOTH_LIBRARIES - Both libgmock & libgmock-main
-#   GMOCK_LIBRARIES - libgmock
-#   GMOCK_MAIN_LIBRARIES - libgmock-main
-#
-# Accepts the following variables as input:
-#
-#   GMOCK_ROOT - (as a CMake or environment variable)
-#                The root directory of the gmock install prefix
-#
-#   GMOCK_MSVC_SEARCH - If compiling with MSVC, this variable can be set to
-#                       "MD" or "MT" to enable searching a gmock build tree
-#                       (defaults: "MD")
-#
-#-----------------------
-# Example Usage:
-#
-#    find_package(GMock REQUIRED)
-#    include_directories(${GMOCK_INCLUDE_DIRS})
-#
-#    add_executable(foo foo.cc)
-#    target_link_libraries(foo ${GMOCK_BOTH_LIBRARIES})
-#
+##############################################################################
+# @file  FindGMock.cmake
+# @brief Find Google Mock package.
+#
+# @par Input variables:
+# <table border="0">
+#   <tr>
+#     @tp @b GMock_DIR @endtp
+#     <td>The Google Mock package files are searched under the specified
+#         root directory. If they are not found there, the default search
+#         paths are considered. This variable can also be set as environment
+#         variable.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMOCK_DIR @endtp
+#     <td>Alternative environment variable for @p GMock_DIR.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMock_SHARED_LIBRARIES @endtp
+#     <td>Forces this module to search for shared libraries.
+#         Otherwise, static libraries are preferred.</td>
+#   </tr>
+# </table>
+#
+# @par Output variables:
+# <table border="0">
+#   <tr>
+#     @tp @b GMock_FOUND @endtp
+#     <td>Whether the package was found and the following CMake variables are valid.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMock_INCLUDE_DIR @endtp
+#     <td>Package include directories.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMock_INCLUDES @endtp
+#     <td>Include directories including prerequisite libraries.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMock_LIBRARY @endtp
+#     <td>Package libraries.</td>
+#   </tr>
+#   <tr>
+#     @tp @b GMock_LIBRARIES @endtp
+#     <td>Package ibraries and prerequisite libraries.</td>
+#   </tr>
+# </table>
+#
+# @ingroup CMakeFindModules
+##############################################################################
+
 #=============================================================================
 #=============================================================================
-# This file is released under the MIT licence:
-#
-# Copyright (c) 2011 Matej Svec
+# Copyright 2011-2012 University of Pennsylvania
+# Copyright 2013-2016 Andreas Schuh <andreas.schuh.84@gmail.com>
 #
 #
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
 #
 #
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
 #=============================================================================
 #=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# ----------------------------------------------------------------------------
+# initialize search
+if (NOT GMock_DIR)
+  if ($ENV{GMOCK_DIR})
+    set (GMock_DIR "$ENV{GMOCK_DIR}" CACHE PATH "Installation prefix for Google Mock.")
+  else ()
+    set (GMock_DIR "$ENV{GMock_DIR}" CACHE PATH "Installation prefix for Google Mock.")
+  endif ()
+endif ()
 
 
+set (GMock_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
 
 
-function(_gmock_append_debugs _endvar _library)
-  if(${_library} AND ${_library}_DEBUG)
-    set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
-  else()
-    set(_output ${${_library}})
+if (GMock_SHARED_LIBRARIES)
+  if (WIN32)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .dll)
+  else ()
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .so)
   endif()
   endif()
-  set(${_endvar} ${_output} PARENT_SCOPE)
-endfunction()
-
-function(_gmock_find_library _name)
-  find_library(${_name}
-    NAMES ${ARGN}
-    HINTS
-      $ENV{GMOCK_ROOT}
-      ${GMOCK_ROOT}
-    PATH_SUFFIXES ${_gmock_libpath_suffixes}
-  )
-  mark_as_advanced(${_name})
-endfunction()
-
-
-if(NOT DEFINED GMOCK_MSVC_SEARCH)
-  set(GMOCK_MSVC_SEARCH MD)
-endif()
-
-set(_gmock_libpath_suffixes lib)
-if(MSVC)
-  if(GMOCK_MSVC_SEARCH STREQUAL "MD")
-    list(APPEND _gmock_libpath_suffixes
-      msvc/gmock-md/Debug
-      msvc/gmock-md/Release)
-  elseif(GMOCK_MSVC_SEARCH STREQUAL "MT")
-    list(APPEND _gmock_libpath_suffixes
-      msvc/gmock/Debug
-      msvc/gmock/Release)
+else ()
+  if (WIN32)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .lib)
+  else ()
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .a)
   endif()
   endif()
-endif()
+endif ()
+
+# ----------------------------------------------------------------------------
+# find paths/files
+if (GMock_DIR)
 
 
-find_path(GMOCK_INCLUDE_DIR gmock/gmock.h
-  HINTS
-    $ENV{GMOCK_ROOT}/include
-    ${GMOCK_ROOT}/include
+  find_path (
+    GMock_INCLUDE_DIR
+      NAMES         gmock.h
+      HINTS         "${GMock_DIR}"
+      PATH_SUFFIXES "include/gmock"
+      DOC           "Include directory for Google Mock."
+      NO_DEFAULT_PATH
+  )
+
+  find_library (
+    GMock_LIBRARY
+      NAMES         gmock
+      HINTS         "${GMock_DIR}"
+      PATH_SUFFIXES "lib"
+      DOC           "Link library for Google Mock (gmock)."
+      NO_DEFAULT_PATH
+  )
+
+else ()
+
+  find_path (
+    GMock_INCLUDE_DIR
+      NAMES gmock.h
+      HINTS ENV C_INCLUDE_PATH ENV CXX_INCLUDE_PATH
+      DOC   "Include directory for Google Mock."
+  )
+
+  find_library (
+    GMock_LIBRARY
+      NAMES gmock
+      HINTS ENV LD_LIBRARY_PATH
+      DOC   "Link library for Google Mock (gmock)."
+  )
+
+endif ()
+
+mark_as_advanced (GMock_INCLUDE_DIR)
+mark_as_advanced (GMock_LIBRARY)
+
+# ----------------------------------------------------------------------------
+# prerequisite libraries
+set (GMock_INCLUDES  "${GMock_INCLUDE_DIR}")
+set (GMock_LIBRARIES "${GMock_LIBRARY}")
+
+# ----------------------------------------------------------------------------
+# reset CMake variables
+set (CMAKE_FIND_LIBRARY_SUFFIXES ${GTest_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+
+# ----------------------------------------------------------------------------
+# aliases / backwards compatibility
+set (GMock_INCLUDE_DIRS "${GTest_INCLUDES}")
+
+# ----------------------------------------------------------------------------
+# handle the QUIETLY and REQUIRED arguments and set *_FOUND to TRUE
+# if all listed variables are found or TRUE
+include (FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args (
+  GMock
+  REQUIRED_VARS
+    GMock_INCLUDE_DIR
+    GMock_LIBRARY
 )
 )
-mark_as_advanced(GMOCK_INCLUDE_DIR)
-
-if(MSVC AND GMOCK_MSVC_SEARCH STREQUAL "MD")
-  # The provided /MD project files for Google Mock add -md suffixes to the
-  # library names.
-  _gmock_find_library(GMOCK_LIBRARY            gmock-md  gmock)
-  _gmock_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd gmockd)
-  _gmock_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md  gmock_main)
-  _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd gmock_maind)
-else()
-  _gmock_find_library(GMOCK_LIBRARY            gmock)
-  _gmock_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
-  _gmock_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
-  _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
-endif()
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMock DEFAULT_MSG GMOCK_LIBRARY GMOCK_INCLUDE_DIR GMOCK_MAIN_LIBRARY)
-
-if(GMOCK_FOUND)
-  set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR})
-  _gmock_append_debugs(GMOCK_LIBRARIES      GMOCK_LIBRARY)
-  _gmock_append_debugs(GMOCK_MAIN_LIBRARIES GMOCK_MAIN_LIBRARY)
-  set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})
-endif()
+
+set (GMock_FOUND "${GMOCK_FOUND}")
+
+# ----------------------------------------------------------------------------
+# set GMock_DIR
+if (NOT GMock_DIR AND GMock_FOUND)
+  string (REGEX REPLACE "include(/gmock)?/?" "" GMock_PREFIX "${GMock_INCLUDE_DIR}")
+  set (GMock_DIR "${GMock_PREFIX}" CACHE PATH "Installation prefix for GMock." FORCE)
+  unset (GMock_PREFIX)
+endif ()