#
# Find libgmock
#
#  LIBGMOCK_DEFINES     - List of defines when using libgmock.
#  LIBGMOCK_INCLUDE_DIR - where to find gmock/gmock.h, etc.
#  LIBGMOCK_LIBRARIES   - List of libraries when using libgmock.
#  LIBGMOCK_FOUND       - True if libgmock found.

IF (LIBGMOCK_INCLUDE_DIR)
  # Already in cache, be silent
  SET(LIBGMOCK_FIND_QUIETLY TRUE)
ENDIF ()

FIND_PATH(LIBGMOCK_INCLUDE_DIR gmock/gmock.h)

FIND_LIBRARY(LIBGMOCK_MAIN_LIBRARY_DEBUG NAMES gmock_maind)
FIND_LIBRARY(LIBGMOCK_MAIN_LIBRARY_RELEASE NAMES gmock_main)
FIND_LIBRARY(LIBGMOCK_LIBRARY_DEBUG NAMES gmockd)
FIND_LIBRARY(LIBGMOCK_LIBRARY_RELEASE NAMES gmock)
FIND_LIBRARY(LIBGTEST_LIBRARY_DEBUG NAMES gtestd)
FIND_LIBRARY(LIBGTEST_LIBRARY_RELEASE NAMES gtest)

find_package(Threads REQUIRED)
INCLUDE(SelectLibraryConfigurations)
SELECT_LIBRARY_CONFIGURATIONS(LIBGMOCK_MAIN)
SELECT_LIBRARY_CONFIGURATIONS(LIBGMOCK)
SELECT_LIBRARY_CONFIGURATIONS(LIBGTEST)

set(LIBGMOCK_LIBRARIES
  ${LIBGMOCK_MAIN_LIBRARY}
  ${LIBGMOCK_LIBRARY}
  ${LIBGTEST_LIBRARY}
  Threads::Threads
)

if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  # The GTEST_LINKED_AS_SHARED_LIBRARY macro must be set properly on Windows.
  #
  # There isn't currently an easy way to determine if a library was compiled as
  # a shared library on Windows, so just assume we've been built against a
  # shared build of gmock for now.
  SET(LIBGMOCK_DEFINES "GTEST_LINKED_AS_SHARED_LIBRARY=1" CACHE STRING "")
endif()

# handle the QUIETLY and REQUIRED arguments and set LIBGMOCK_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
  GMock
  DEFAULT_MSG
  LIBGMOCK_MAIN_LIBRARY
  LIBGMOCK_LIBRARY
  LIBGTEST_LIBRARY
  LIBGMOCK_LIBRARIES
  LIBGMOCK_INCLUDE_DIR
)

MARK_AS_ADVANCED(
  LIBGMOCK_DEFINES
  LIBGMOCK_MAIN_LIBRARY
  LIBGMOCK_LIBRARY
  LIBGTEST_LIBRARY
  LIBGMOCK_LIBRARIES
  LIBGMOCK_INCLUDE_DIR
)
