summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch')
-rw-r--r--meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch255
1 files changed, 255 insertions, 0 deletions
diff --git a/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch
new file mode 100644
index 0000000000..267f586a71
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch
@@ -0,0 +1,255 @@
1From 39eae0d6c1b398f18761abac7f55944f0290f8a1 Mon Sep 17 00:00:00 2001
2From: Eero Aaltonen <eero.aaltonen@iki.fi>
3Date: Sun, 17 Oct 2021 17:13:07 +0300
4Subject: [PATCH] FindGTest: Add target for gmock library
5
6`googlemock` has been absorbed into the
7[googletest](https://github.com/google/googletest) project and is built
8and installed from the same source tree.
9
10As GTest may be built with or without GMock, skip GMock if it is not
11present.
12
13Do not provide result variables for GMock. They are not provided by
14upstream GTest's CMake Package Configuration File.
15
16Also update the test case to cover linking to `GTest::gmock`.
17
18The patch was imported from the Kitware git server
19(git@gitlab.kitware.com:cmake/cmake.git) as of commit id
2050bf457a0dd857cf976b22c5be7d333493233d1e
21
22Patch was modified to support upper case variable `GTEST_FOUND`.
23
24Upstream-Status: Accepted [https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6632]
25Milestone: 3.23.0
26
27Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
28---
29 .../dev/FindGTest-target-for-gmock.rst | 4 +
30 Modules/FindGTest.cmake | 133 +++++++++++++++---
31 Tests/FindGTest/Test/CMakeLists.txt | 4 +
32 3 files changed, 121 insertions(+), 20 deletions(-)
33 create mode 100644 Help/release/dev/FindGTest-target-for-gmock.rst
34
35diff --git a/Help/release/dev/FindGTest-target-for-gmock.rst b/Help/release/dev/FindGTest-target-for-gmock.rst
36new file mode 100644
37index 0000000000..f78242c80e
38--- /dev/null
39+++ b/Help/release/dev/FindGTest-target-for-gmock.rst
40@@ -0,0 +1,4 @@
41+FindGTest-target-for-gmock
42+--------------------------
43+
44+* The :module:`FindGTest` module now provides a target for GMock, if found.
45diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
46index e015a9840f..0331049594 100644
47--- a/Modules/FindGTest.cmake
48+++ b/Modules/FindGTest.cmake
49@@ -7,10 +7,23 @@ FindGTest
50
51 Locate the Google C++ Testing Framework.
52
53+.. versionadded:: 3.20
54+ Upstream ``GTestConfig.cmake`` is used if possible.
55+
56 Imported targets
57 ^^^^^^^^^^^^^^^^
58
59-This module defines the following :prop_tgt:`IMPORTED` targets:
60+ This module defines the following :prop_tgt:`IMPORTED` targets:
61+
62+``GTest::gtest``
63+ The Google Test ``gtest`` library, if found; adds Thread::Thread
64+ automatically
65+``GTest::gtest_main``
66+ The Google Test ``gtest_main`` library, if found
67+
68+.. deprecated:: 3.20
69+ For backwards compatibility, this module defines additionally the
70+ following deprecated :prop_tgt:`IMPORTED` targets (available since 3.5):
71
72 ``GTest::GTest``
73 The Google Test ``gtest`` library, if found; adds Thread::Thread
74@@ -18,7 +31,6 @@ This module defines the following :prop_tgt:`IMPORTED` targets:
75 ``GTest::Main``
76 The Google Test ``gtest_main`` library, if found
77
78-
79 Result variables
80 ^^^^^^^^^^^^^^^^
81
82@@ -146,8 +158,42 @@ function(__gtest_import_library _target _var _config)
83 endif()
84 endfunction()
85
86+function(__gtest_define_backwards_compatible_library_targets)
87+ set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
88+
89+ # Add targets mapping the same library names as defined in
90+ # older versions of CMake's FindGTest
91+ if(NOT TARGET GTest::GTest)
92+ add_library(GTest::GTest INTERFACE IMPORTED)
93+ target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
94+ endif()
95+ if(NOT TARGET GTest::Main)
96+ add_library(GTest::Main INTERFACE IMPORTED)
97+ target_link_libraries(GTest::Main INTERFACE GTest::gtest_main)
98+ endif()
99+endfunction()
100+
101 #
102
103+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
104+
105+# first specifically look for the CMake version of GTest
106+find_package(GTest QUIET NO_MODULE)
107+
108+# if we found the GTest cmake package then we are done, and
109+# can print what we found and return.
110+if(GTest_FOUND)
111+ set(GTEST_FOUND ${GTest_FOUND})
112+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS CONFIG_MODE)
113+
114+ set(GTEST_LIBRARIES GTest::gtest)
115+ set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
116+
117+ __gtest_define_backwards_compatible_library_targets()
118+
119+ return()
120+endif()
121+
122 if(NOT DEFINED GTEST_MSVC_SEARCH)
123 set(GTEST_MSVC_SEARCH MD)
124 endif()
125@@ -194,50 +240,97 @@ if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
126 __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd)
127 __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main)
128 __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
129+ __gtest_find_library(GMOCK_LIBRARY gmock-md gmock)
130+ __gtest_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd)
131+ __gtest_find_library(GMOCK_MAIN_LIBRARY gmock_main-md gmock_main)
132+ __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd gmock_maind)
133 else()
134 __gtest_find_library(GTEST_LIBRARY gtest)
135 __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd)
136 __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main)
137 __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
138+ __gtest_find_library(GMOCK_LIBRARY gmock)
139+ __gtest_find_library(GMOCK_LIBRARY_DEBUG gmockd)
140+ __gtest_find_library(GMOCK_MAIN_LIBRARY gmock_main)
141+ __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
142 endif()
143
144-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
145 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
146
147-if(GTEST_FOUND)
148+if(GMOCK_LIBRARY AND GMOCK_MAIN_LIBRARY)
149+ set(GMock_FOUND True)
150+else()
151+ set(GMock_FOUND False)
152+endif()
153+
154+if(GTest_FOUND)
155 set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
156 __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY)
157 __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
158- set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
159
160 find_package(Threads QUIET)
161
162- if(NOT TARGET GTest::GTest)
163+ if(NOT TARGET GTest::gtest)
164 __gtest_determine_library_type(GTEST_LIBRARY)
165- add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED)
166+ add_library(GTest::gtest ${GTEST_LIBRARY_TYPE} IMPORTED)
167 if(TARGET Threads::Threads)
168- set_target_properties(GTest::GTest PROPERTIES
169+ set_target_properties(GTest::gtest PROPERTIES
170 INTERFACE_LINK_LIBRARIES Threads::Threads)
171 endif()
172 if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
173- set_target_properties(GTest::GTest PROPERTIES
174+ set_target_properties(GTest::gtest PROPERTIES
175 INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
176 endif()
177 if(GTEST_INCLUDE_DIRS)
178- set_target_properties(GTest::GTest PROPERTIES
179+ set_target_properties(GTest::gtest PROPERTIES
180 INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
181 endif()
182- __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
183- __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE")
184- __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG")
185+ __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
186+ __gtest_import_library(GTest::gtest GTEST_LIBRARY "RELEASE")
187+ __gtest_import_library(GTest::gtest GTEST_LIBRARY "DEBUG")
188 endif()
189- if(NOT TARGET GTest::Main)
190+ if(NOT TARGET GTest::gtest_main)
191 __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
192- add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
193- set_target_properties(GTest::Main PROPERTIES
194- INTERFACE_LINK_LIBRARIES "GTest::GTest")
195- __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "")
196- __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE")
197- __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG")
198+ add_library(GTest::gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
199+ set_target_properties(GTest::gtest_main PROPERTIES
200+ INTERFACE_LINK_LIBRARIES "GTest::gtest")
201+ __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "")
202+ __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "RELEASE")
203+ __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "DEBUG")
204+ endif()
205+
206+ __gtest_define_backwards_compatible_library_targets()
207+endif()
208+
209+if(GMock_FOUND)
210+ if(NOT TARGET GTest::gmock)
211+ __gtest_determine_library_type(GMOCK_LIBRARY)
212+ add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE} IMPORTED)
213+ set(_gmock_link_libraries "GTest::gtest")
214+ if(TARGET Threads::Threads)
215+ list(APPEND _gmock_link_libraries Threads::Threads)
216+ endif()
217+ set_target_properties(GTest::gmock PROPERTIES
218+ INTERFACE_LINK_LIBRARIES "${_gmock_link_libraries}")
219+ if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED")
220+ set_target_properties(GTest::gmock PROPERTIES
221+ INTERFACE_COMPILE_DEFINITIONS "GMOCK_LINKED_AS_SHARED_LIBRARY=1")
222+ endif()
223+ if(GTEST_INCLUDE_DIRS)
224+ set_target_properties(GTest::gmock PROPERTIES
225+ INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
226+ endif()
227+ __gtest_import_library(GTest::gmock GMOCK_LIBRARY "")
228+ __gtest_import_library(GTest::gmock GMOCK_LIBRARY "RELEASE")
229+ __gtest_import_library(GTest::gmock GMOCK_LIBRARY "DEBUG")
230+ endif()
231+ if(NOT TARGET GTest::gmock_main)
232+ __gtest_determine_library_type(GMOCK_MAIN_LIBRARY)
233+ add_library(GTest::gmock_main ${GMOCK_MAIN_LIBRARY_TYPE} IMPORTED)
234+ set_target_properties(GTest::gmock_main PROPERTIES
235+ INTERFACE_LINK_LIBRARIES "GTest::gmock")
236+ __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "")
237+ __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "RELEASE")
238+ __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "DEBUG")
239 endif()
240 endif()
241diff --git a/Tests/FindGTest/Test/CMakeLists.txt b/Tests/FindGTest/Test/CMakeLists.txt
242index b65b9d28f6..7d3a378a65 100644
243--- a/Tests/FindGTest/Test/CMakeLists.txt
244+++ b/Tests/FindGTest/Test/CMakeLists.txt
245@@ -12,3 +12,7 @@ add_executable(test_gtest_var main.cxx)
246 target_include_directories(test_gtest_var PRIVATE ${GTEST_INCLUDE_DIRS})
247 target_link_libraries(test_gtest_var PRIVATE ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
248 add_test(NAME test_gtest_var COMMAND test_gtest_var)
249+
250+add_executable(test_gmock_tgt main.cxx)
251+target_link_libraries(test_gmock_tgt GTest::gmock_main)
252+add_test(NAME test_gmock_tgt COMMAND test_gmock_tgt)
253--
2542.17.1
255