CMakeLists.txt 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. ########################################################################
  2. # CMake build script for Google Mock.
  3. #
  4. # To run the tests for Google Mock itself on Linux, use 'make test' or
  5. # ctest. You can select which tests to run using 'ctest -R regex'.
  6. # For more options, run 'ctest --help'.
  7. # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to
  8. # make it prominent in the GUI.
  9. option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
  10. option(gmock_build_tests "Build all of Google Mock's own tests." OFF)
  11. # A directory to find Google Test sources.
  12. if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt")
  13. set(gtest_dir gtest)
  14. else()
  15. set(gtest_dir ../googletest)
  16. endif()
  17. # Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build().
  18. include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL)
  19. if (COMMAND pre_project_set_up_hermetic_build)
  20. # Google Test also calls hermetic setup functions from add_subdirectory,
  21. # although its changes will not affect things at the current scope.
  22. pre_project_set_up_hermetic_build()
  23. endif()
  24. ########################################################################
  25. #
  26. # Project-wide settings
  27. # Name of the project.
  28. #
  29. # CMake files in this project can refer to the root source directory
  30. # as ${gmock_SOURCE_DIR} and to the root binary directory as
  31. # ${gmock_BINARY_DIR}.
  32. # Language "C" is required for find_package(Threads).
  33. project(gmock CXX C)
  34. cmake_minimum_required(VERSION 2.6.2)
  35. if (COMMAND set_up_hermetic_build)
  36. set_up_hermetic_build()
  37. endif()
  38. # Instructs CMake to process Google Test's CMakeLists.txt and add its
  39. # targets to the current scope. We are placing Google Test's binary
  40. # directory in a subdirectory of our own as VC compilation may break
  41. # if they are the same (the default).
  42. add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/gtest")
  43. # Although Google Test's CMakeLists.txt calls this function, the
  44. # changes there don't affect the current scope. Therefore we have to
  45. # call it again here.
  46. config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake
  47. # Adds Google Mock's and Google Test's header directories to the search path.
  48. include_directories("${gmock_SOURCE_DIR}/include"
  49. "${gmock_SOURCE_DIR}"
  50. "${gtest_SOURCE_DIR}/include"
  51. # This directory is needed to build directly from Google
  52. # Test sources.
  53. "${gtest_SOURCE_DIR}")
  54. # Summary of tuple support for Microsoft Visual Studio:
  55. # Compiler version(MS) version(cmake) Support
  56. # ---------- ----------- -------------- -----------------------------
  57. # <= VS 2010 <= 10 <= 1600 Use Google Tests's own tuple.
  58. # VS 2012 11 1700 std::tr1::tuple + _VARIADIC_MAX=10
  59. # VS 2013 12 1800 std::tr1::tuple
  60. if (MSVC AND MSVC_VERSION EQUAL 1700)
  61. add_definitions(/D _VARIADIC_MAX=10)
  62. endif()
  63. ########################################################################
  64. #
  65. # Defines the gmock & gmock_main libraries. User tests should link
  66. # with one of them.
  67. # Google Mock libraries. We build them using more strict warnings than what
  68. # are used for other targets, to ensure that Google Mock can be compiled by
  69. # a user aggressive about warnings.
  70. cxx_library(gmock
  71. "${cxx_strict}"
  72. "${gtest_dir}/src/gtest-all.cc"
  73. src/gmock-all.cc)
  74. cxx_library(gmock_main
  75. "${cxx_strict}"
  76. "${gtest_dir}/src/gtest-all.cc"
  77. src/gmock-all.cc
  78. src/gmock_main.cc)
  79. # If the CMake version supports it, attach header directory information
  80. # to the targets for when we are part of a parent build (ie being pulled
  81. # in via add_subdirectory() rather than being a standalone build).
  82. if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
  83. target_include_directories(gmock INTERFACE "${gmock_SOURCE_DIR}/include")
  84. target_include_directories(gmock_main INTERFACE "${gmock_SOURCE_DIR}/include")
  85. endif()
  86. ########################################################################
  87. #
  88. # Install rules
  89. install(TARGETS gmock gmock_main
  90. DESTINATION lib)
  91. install(DIRECTORY ${gmock_SOURCE_DIR}/include/gmock
  92. DESTINATION include)
  93. ########################################################################
  94. #
  95. # Google Mock's own tests.
  96. #
  97. # You can skip this section if you aren't interested in testing
  98. # Google Mock itself.
  99. #
  100. # The tests are not built by default. To build them, set the
  101. # gmock_build_tests option to ON. You can do it by running ccmake
  102. # or specifying the -Dgmock_build_tests=ON flag when running cmake.
  103. if (gmock_build_tests)
  104. # This must be set in the root directory for the tests to be run by
  105. # 'make test' or ctest.
  106. enable_testing()
  107. ############################################################
  108. # C++ tests built with standard compiler flags.
  109. cxx_test(gmock-actions_test gmock_main)
  110. cxx_test(gmock-cardinalities_test gmock_main)
  111. cxx_test(gmock_ex_test gmock_main)
  112. cxx_test(gmock-generated-actions_test gmock_main)
  113. cxx_test(gmock-generated-function-mockers_test gmock_main)
  114. cxx_test(gmock-generated-internal-utils_test gmock_main)
  115. cxx_test(gmock-generated-matchers_test gmock_main)
  116. cxx_test(gmock-internal-utils_test gmock_main)
  117. cxx_test(gmock-matchers_test gmock_main)
  118. cxx_test(gmock-more-actions_test gmock_main)
  119. cxx_test(gmock-nice-strict_test gmock_main)
  120. cxx_test(gmock-port_test gmock_main)
  121. cxx_test(gmock-spec-builders_test gmock_main)
  122. cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc)
  123. cxx_test(gmock_test gmock_main)
  124. if (CMAKE_USE_PTHREADS_INIT)
  125. cxx_test(gmock_stress_test gmock)
  126. endif()
  127. # gmock_all_test is commented to save time building and running tests.
  128. # Uncomment if necessary.
  129. # cxx_test(gmock_all_test gmock_main)
  130. ############################################################
  131. # C++ tests built with non-standard compiler flags.
  132. cxx_library(gmock_main_no_exception "${cxx_no_exception}"
  133. "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
  134. cxx_library(gmock_main_no_rtti "${cxx_no_rtti}"
  135. "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
  136. if (NOT MSVC OR MSVC_VERSION LESS 1600) # 1600 is Visual Studio 2010.
  137. # Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that
  138. # conflict with our own definitions. Therefore using our own tuple does not
  139. # work on those compilers.
  140. cxx_library(gmock_main_use_own_tuple "${cxx_use_own_tuple}"
  141. "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
  142. cxx_test_with_flags(gmock_use_own_tuple_test "${cxx_use_own_tuple}"
  143. gmock_main_use_own_tuple test/gmock-spec-builders_test.cc)
  144. endif()
  145. cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}"
  146. gmock_main_no_exception test/gmock-more-actions_test.cc)
  147. cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}"
  148. gmock_main_no_rtti test/gmock-spec-builders_test.cc)
  149. cxx_shared_library(shared_gmock_main "${cxx_default}"
  150. "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc)
  151. # Tests that a binary can be built with Google Mock as a shared library. On
  152. # some system configurations, it may not possible to run the binary without
  153. # knowing more details about the system configurations. We do not try to run
  154. # this binary. To get a more robust shared library coverage, configure with
  155. # -DBUILD_SHARED_LIBS=ON.
  156. cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}"
  157. shared_gmock_main test/gmock-spec-builders_test.cc)
  158. set_target_properties(shared_gmock_test_
  159. PROPERTIES
  160. COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
  161. ############################################################
  162. # Python tests.
  163. cxx_executable(gmock_leak_test_ test gmock_main)
  164. py_test(gmock_leak_test)
  165. cxx_executable(gmock_output_test_ test gmock)
  166. py_test(gmock_output_test)
  167. endif()