113481Sgiacomo.travaglini@arm.com########################################################################
213481Sgiacomo.travaglini@arm.com# CMake build script for Google Mock.
313481Sgiacomo.travaglini@arm.com#
413481Sgiacomo.travaglini@arm.com# To run the tests for Google Mock itself on Linux, use 'make test' or
513481Sgiacomo.travaglini@arm.com# ctest.  You can select which tests to run using 'ctest -R regex'.
613481Sgiacomo.travaglini@arm.com# For more options, run 'ctest --help'.
713481Sgiacomo.travaglini@arm.com
813481Sgiacomo.travaglini@arm.com# BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to
913481Sgiacomo.travaglini@arm.com# make it prominent in the GUI.
1013481Sgiacomo.travaglini@arm.comoption(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
1113481Sgiacomo.travaglini@arm.com
1213481Sgiacomo.travaglini@arm.comoption(gmock_build_tests "Build all of Google Mock's own tests." OFF)
1313481Sgiacomo.travaglini@arm.com
1413481Sgiacomo.travaglini@arm.com# A directory to find Google Test sources.
1513481Sgiacomo.travaglini@arm.comif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt")
1613481Sgiacomo.travaglini@arm.com  set(gtest_dir gtest)
1713481Sgiacomo.travaglini@arm.comelse()
1813481Sgiacomo.travaglini@arm.com  set(gtest_dir ../googletest)
1913481Sgiacomo.travaglini@arm.comendif()
2013481Sgiacomo.travaglini@arm.com
2113481Sgiacomo.travaglini@arm.com# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build().
2213481Sgiacomo.travaglini@arm.cominclude("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL)
2313481Sgiacomo.travaglini@arm.com
2413481Sgiacomo.travaglini@arm.comif (COMMAND pre_project_set_up_hermetic_build)
2513481Sgiacomo.travaglini@arm.com  # Google Test also calls hermetic setup functions from add_subdirectory,
2613481Sgiacomo.travaglini@arm.com  # although its changes will not affect things at the current scope.
2713481Sgiacomo.travaglini@arm.com  pre_project_set_up_hermetic_build()
2813481Sgiacomo.travaglini@arm.comendif()
2913481Sgiacomo.travaglini@arm.com
3013481Sgiacomo.travaglini@arm.com########################################################################
3113481Sgiacomo.travaglini@arm.com#
3213481Sgiacomo.travaglini@arm.com# Project-wide settings
3313481Sgiacomo.travaglini@arm.com
3413481Sgiacomo.travaglini@arm.com# Name of the project.
3513481Sgiacomo.travaglini@arm.com#
3613481Sgiacomo.travaglini@arm.com# CMake files in this project can refer to the root source directory
3713481Sgiacomo.travaglini@arm.com# as ${gmock_SOURCE_DIR} and to the root binary directory as
3813481Sgiacomo.travaglini@arm.com# ${gmock_BINARY_DIR}.
3913481Sgiacomo.travaglini@arm.com# Language "C" is required for find_package(Threads).
4013481Sgiacomo.travaglini@arm.comproject(gmock CXX C)
4113481Sgiacomo.travaglini@arm.comcmake_minimum_required(VERSION 2.6.2)
4213481Sgiacomo.travaglini@arm.com
4313481Sgiacomo.travaglini@arm.comif (COMMAND set_up_hermetic_build)
4413481Sgiacomo.travaglini@arm.com  set_up_hermetic_build()
4513481Sgiacomo.travaglini@arm.comendif()
4613481Sgiacomo.travaglini@arm.com
4713481Sgiacomo.travaglini@arm.com# Instructs CMake to process Google Test's CMakeLists.txt and add its
4813481Sgiacomo.travaglini@arm.com# targets to the current scope.  We are placing Google Test's binary
4913481Sgiacomo.travaglini@arm.com# directory in a subdirectory of our own as VC compilation may break
5013481Sgiacomo.travaglini@arm.com# if they are the same (the default).
5113481Sgiacomo.travaglini@arm.comadd_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/gtest")
5213481Sgiacomo.travaglini@arm.com
5313481Sgiacomo.travaglini@arm.com# Although Google Test's CMakeLists.txt calls this function, the
5413481Sgiacomo.travaglini@arm.com# changes there don't affect the current scope.  Therefore we have to
5513481Sgiacomo.travaglini@arm.com# call it again here.
5613481Sgiacomo.travaglini@arm.comconfig_compiler_and_linker()  # from ${gtest_dir}/cmake/internal_utils.cmake
5713481Sgiacomo.travaglini@arm.com
5813481Sgiacomo.travaglini@arm.com# Adds Google Mock's and Google Test's header directories to the search path.
5913481Sgiacomo.travaglini@arm.cominclude_directories("${gmock_SOURCE_DIR}/include"
6013481Sgiacomo.travaglini@arm.com                    "${gmock_SOURCE_DIR}"
6113481Sgiacomo.travaglini@arm.com                    "${gtest_SOURCE_DIR}/include"
6213481Sgiacomo.travaglini@arm.com                    # This directory is needed to build directly from Google
6313481Sgiacomo.travaglini@arm.com                    # Test sources.
6413481Sgiacomo.travaglini@arm.com                    "${gtest_SOURCE_DIR}")
6513481Sgiacomo.travaglini@arm.com
6613481Sgiacomo.travaglini@arm.com# Summary of tuple support for Microsoft Visual Studio:
6713481Sgiacomo.travaglini@arm.com# Compiler    version(MS)  version(cmake)  Support
6813481Sgiacomo.travaglini@arm.com# ----------  -----------  --------------  -----------------------------
6913481Sgiacomo.travaglini@arm.com# <= VS 2010  <= 10        <= 1600         Use Google Tests's own tuple.
7013481Sgiacomo.travaglini@arm.com# VS 2012     11           1700            std::tr1::tuple + _VARIADIC_MAX=10
7113481Sgiacomo.travaglini@arm.com# VS 2013     12           1800            std::tr1::tuple
7213481Sgiacomo.travaglini@arm.comif (MSVC AND MSVC_VERSION EQUAL 1700)
7313481Sgiacomo.travaglini@arm.com  add_definitions(/D _VARIADIC_MAX=10)
7413481Sgiacomo.travaglini@arm.comendif()
7513481Sgiacomo.travaglini@arm.com
7613481Sgiacomo.travaglini@arm.com########################################################################
7713481Sgiacomo.travaglini@arm.com#
7813481Sgiacomo.travaglini@arm.com# Defines the gmock & gmock_main libraries.  User tests should link
7913481Sgiacomo.travaglini@arm.com# with one of them.
8013481Sgiacomo.travaglini@arm.com
8113481Sgiacomo.travaglini@arm.com# Google Mock libraries.  We build them using more strict warnings than what
8213481Sgiacomo.travaglini@arm.com# are used for other targets, to ensure that Google Mock can be compiled by
8313481Sgiacomo.travaglini@arm.com# a user aggressive about warnings.
8413481Sgiacomo.travaglini@arm.comcxx_library(gmock
8513481Sgiacomo.travaglini@arm.com            "${cxx_strict}"
8613481Sgiacomo.travaglini@arm.com            "${gtest_dir}/src/gtest-all.cc"
8713481Sgiacomo.travaglini@arm.com            src/gmock-all.cc)
8813481Sgiacomo.travaglini@arm.com
8913481Sgiacomo.travaglini@arm.comcxx_library(gmock_main
9013481Sgiacomo.travaglini@arm.com            "${cxx_strict}"
9113481Sgiacomo.travaglini@arm.com            "${gtest_dir}/src/gtest-all.cc"
9213481Sgiacomo.travaglini@arm.com            src/gmock-all.cc
9313481Sgiacomo.travaglini@arm.com            src/gmock_main.cc)
9413481Sgiacomo.travaglini@arm.com
9513481Sgiacomo.travaglini@arm.com# If the CMake version supports it, attach header directory information
9613481Sgiacomo.travaglini@arm.com# to the targets for when we are part of a parent build (ie being pulled
9713481Sgiacomo.travaglini@arm.com# in via add_subdirectory() rather than being a standalone build).
9813481Sgiacomo.travaglini@arm.comif (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
9913481Sgiacomo.travaglini@arm.com  target_include_directories(gmock      INTERFACE "${gmock_SOURCE_DIR}/include")
10013481Sgiacomo.travaglini@arm.com  target_include_directories(gmock_main INTERFACE "${gmock_SOURCE_DIR}/include")
10113481Sgiacomo.travaglini@arm.comendif()
10213481Sgiacomo.travaglini@arm.com
10313481Sgiacomo.travaglini@arm.com########################################################################
10413481Sgiacomo.travaglini@arm.com#
10513481Sgiacomo.travaglini@arm.com# Install rules
10613481Sgiacomo.travaglini@arm.cominstall(TARGETS gmock gmock_main
10713481Sgiacomo.travaglini@arm.com  DESTINATION lib)
10813481Sgiacomo.travaglini@arm.cominstall(DIRECTORY ${gmock_SOURCE_DIR}/include/gmock
10913481Sgiacomo.travaglini@arm.com  DESTINATION include)
11013481Sgiacomo.travaglini@arm.com
11113481Sgiacomo.travaglini@arm.com########################################################################
11213481Sgiacomo.travaglini@arm.com#
11313481Sgiacomo.travaglini@arm.com# Google Mock's own tests.
11413481Sgiacomo.travaglini@arm.com#
11513481Sgiacomo.travaglini@arm.com# You can skip this section if you aren't interested in testing
11613481Sgiacomo.travaglini@arm.com# Google Mock itself.
11713481Sgiacomo.travaglini@arm.com#
11813481Sgiacomo.travaglini@arm.com# The tests are not built by default.  To build them, set the
11913481Sgiacomo.travaglini@arm.com# gmock_build_tests option to ON.  You can do it by running ccmake
12013481Sgiacomo.travaglini@arm.com# or specifying the -Dgmock_build_tests=ON flag when running cmake.
12113481Sgiacomo.travaglini@arm.com
12213481Sgiacomo.travaglini@arm.comif (gmock_build_tests)
12313481Sgiacomo.travaglini@arm.com  # This must be set in the root directory for the tests to be run by
12413481Sgiacomo.travaglini@arm.com  # 'make test' or ctest.
12513481Sgiacomo.travaglini@arm.com  enable_testing()
12613481Sgiacomo.travaglini@arm.com
12713481Sgiacomo.travaglini@arm.com  ############################################################
12813481Sgiacomo.travaglini@arm.com  # C++ tests built with standard compiler flags.
12913481Sgiacomo.travaglini@arm.com
13013481Sgiacomo.travaglini@arm.com  cxx_test(gmock-actions_test gmock_main)
13113481Sgiacomo.travaglini@arm.com  cxx_test(gmock-cardinalities_test gmock_main)
13213481Sgiacomo.travaglini@arm.com  cxx_test(gmock_ex_test gmock_main)
13313481Sgiacomo.travaglini@arm.com  cxx_test(gmock-generated-actions_test gmock_main)
13413481Sgiacomo.travaglini@arm.com  cxx_test(gmock-generated-function-mockers_test gmock_main)
13513481Sgiacomo.travaglini@arm.com  cxx_test(gmock-generated-internal-utils_test gmock_main)
13613481Sgiacomo.travaglini@arm.com  cxx_test(gmock-generated-matchers_test gmock_main)
13713481Sgiacomo.travaglini@arm.com  cxx_test(gmock-internal-utils_test gmock_main)
13813481Sgiacomo.travaglini@arm.com  cxx_test(gmock-matchers_test gmock_main)
13913481Sgiacomo.travaglini@arm.com  cxx_test(gmock-more-actions_test gmock_main)
14013481Sgiacomo.travaglini@arm.com  cxx_test(gmock-nice-strict_test gmock_main)
14113481Sgiacomo.travaglini@arm.com  cxx_test(gmock-port_test gmock_main)
14213481Sgiacomo.travaglini@arm.com  cxx_test(gmock-spec-builders_test gmock_main)
14313481Sgiacomo.travaglini@arm.com  cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc)
14413481Sgiacomo.travaglini@arm.com  cxx_test(gmock_test gmock_main)
14513481Sgiacomo.travaglini@arm.com
14613481Sgiacomo.travaglini@arm.com  if (CMAKE_USE_PTHREADS_INIT)
14713481Sgiacomo.travaglini@arm.com    cxx_test(gmock_stress_test gmock)
14813481Sgiacomo.travaglini@arm.com  endif()
14913481Sgiacomo.travaglini@arm.com
15013481Sgiacomo.travaglini@arm.com  # gmock_all_test is commented to save time building and running tests.
15113481Sgiacomo.travaglini@arm.com  # Uncomment if necessary.
15213481Sgiacomo.travaglini@arm.com  # cxx_test(gmock_all_test gmock_main)
15313481Sgiacomo.travaglini@arm.com
15413481Sgiacomo.travaglini@arm.com  ############################################################
15513481Sgiacomo.travaglini@arm.com  # C++ tests built with non-standard compiler flags.
15613481Sgiacomo.travaglini@arm.com
15713481Sgiacomo.travaglini@arm.com  cxx_library(gmock_main_no_exception "${cxx_no_exception}"
15813481Sgiacomo.travaglini@arm.com    "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
15913481Sgiacomo.travaglini@arm.com
16013481Sgiacomo.travaglini@arm.com  cxx_library(gmock_main_no_rtti "${cxx_no_rtti}"
16113481Sgiacomo.travaglini@arm.com    "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
16213481Sgiacomo.travaglini@arm.com
16313481Sgiacomo.travaglini@arm.com  if (NOT MSVC OR MSVC_VERSION LESS 1600)  # 1600 is Visual Studio 2010.
16413481Sgiacomo.travaglini@arm.com    # Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that
16513481Sgiacomo.travaglini@arm.com    # conflict with our own definitions. Therefore using our own tuple does not
16613481Sgiacomo.travaglini@arm.com    # work on those compilers.
16713481Sgiacomo.travaglini@arm.com    cxx_library(gmock_main_use_own_tuple "${cxx_use_own_tuple}"
16813481Sgiacomo.travaglini@arm.com      "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
16913481Sgiacomo.travaglini@arm.com
17013481Sgiacomo.travaglini@arm.com    cxx_test_with_flags(gmock_use_own_tuple_test "${cxx_use_own_tuple}"
17113481Sgiacomo.travaglini@arm.com      gmock_main_use_own_tuple test/gmock-spec-builders_test.cc)
17213481Sgiacomo.travaglini@arm.com  endif()
17313481Sgiacomo.travaglini@arm.com
17413481Sgiacomo.travaglini@arm.com  cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}"
17513481Sgiacomo.travaglini@arm.com    gmock_main_no_exception test/gmock-more-actions_test.cc)
17613481Sgiacomo.travaglini@arm.com
17713481Sgiacomo.travaglini@arm.com  cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}"
17813481Sgiacomo.travaglini@arm.com    gmock_main_no_rtti test/gmock-spec-builders_test.cc)
17913481Sgiacomo.travaglini@arm.com
18013481Sgiacomo.travaglini@arm.com  cxx_shared_library(shared_gmock_main "${cxx_default}"
18113481Sgiacomo.travaglini@arm.com    "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
18213481Sgiacomo.travaglini@arm.com
18313481Sgiacomo.travaglini@arm.com  # Tests that a binary can be built with Google Mock as a shared library.  On
18413481Sgiacomo.travaglini@arm.com  # some system configurations, it may not possible to run the binary without
18513481Sgiacomo.travaglini@arm.com  # knowing more details about the system configurations. We do not try to run
18613481Sgiacomo.travaglini@arm.com  # this binary. To get a more robust shared library coverage, configure with
18713481Sgiacomo.travaglini@arm.com  # -DBUILD_SHARED_LIBS=ON.
18813481Sgiacomo.travaglini@arm.com  cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}"
18913481Sgiacomo.travaglini@arm.com    shared_gmock_main test/gmock-spec-builders_test.cc)
19013481Sgiacomo.travaglini@arm.com  set_target_properties(shared_gmock_test_
19113481Sgiacomo.travaglini@arm.com    PROPERTIES
19213481Sgiacomo.travaglini@arm.com    COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
19313481Sgiacomo.travaglini@arm.com
19413481Sgiacomo.travaglini@arm.com  ############################################################
19513481Sgiacomo.travaglini@arm.com  # Python tests.
19613481Sgiacomo.travaglini@arm.com
19713481Sgiacomo.travaglini@arm.com  cxx_executable(gmock_leak_test_ test gmock_main)
19813481Sgiacomo.travaglini@arm.com  py_test(gmock_leak_test)
19913481Sgiacomo.travaglini@arm.com
20013481Sgiacomo.travaglini@arm.com  cxx_executable(gmock_output_test_ test gmock)
20113481Sgiacomo.travaglini@arm.com  py_test(gmock_output_test)
20213481Sgiacomo.travaglini@arm.comendif()
203