File: 0001-Simplify-Googletest-detection.patch

package info (click to toggle)
ros2-ament-cmake 2.7.2-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,624 kB
  • sloc: python: 697; xml: 503; cpp: 144; ansic: 84; sh: 8; makefile: 5
file content (264 lines) | stat: -rw-r--r-- 11,887 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
From: =?utf-8?q?Timo_R=C3=B6hling?= <roehling@debian.org>
Date: Mon, 11 Oct 2021 21:29:36 +0200
Subject: Simplify Googletest detection

Forwarded: not-needed

We can take advantage of the known shipped Googletest packages
in Debian and simplify the detection code considerably.
---
 ament_cmake_gmock/ament_cmake_gmock-extras.cmake   | 99 ++--------------------
 .../cmake/ament_add_gmock_executable.cmake         |  1 -
 ament_cmake_gtest/ament_cmake_gtest-extras.cmake   | 96 ++-------------------
 .../cmake/ament_add_gtest_executable.cmake         |  6 --
 4 files changed, 15 insertions(+), 187 deletions(-)

diff --git a/ament_cmake_gmock/ament_cmake_gmock-extras.cmake b/ament_cmake_gmock/ament_cmake_gmock-extras.cmake
index d612554..b84973e 100644
--- a/ament_cmake_gmock/ament_cmake_gmock-extras.cmake
+++ b/ament_cmake_gmock/ament_cmake_gmock-extras.cmake
@@ -20,99 +20,14 @@ macro(_ament_cmake_gmock_find_gmock)
     set(_AMENT_CMAKE_GMOCK_FIND_GMOCK TRUE)
 
     find_package(ament_cmake_test QUIET REQUIRED)
-    find_package(gmock_vendor QUIET)
 
-    # if gmock sources were not found in a previous run
-    if(NOT GMOCK_FROM_SOURCE_FOUND)
-      # search path for gmock includes and sources
-      set(_search_path_include "")
-      set(_search_path_src "")
-
-      # option() consider environment variable to find gmock
-      if(NOT $ENV{GMOCK_DIR} STREQUAL "")
-        list(APPEND _search_path_include "$ENV{GMOCK_DIR}/include/gmock")
-        list(APPEND _search_path_src "$ENV{GMOCK_DIR}/src")
-      endif()
-
-      # check to system installed path (i.e. on Ubuntu)
-      set(_search_path_include "/usr/include/gmock")
-      set(_search_path_src "/usr/src/gmock/src")
-
-      # check gmock_vendor path, prefer this version over a system installed
-      if(gmock_vendor_FOUND AND gmock_vendor_BASE_DIR)
-        list(INSERT _search_path_include 0 "${gmock_vendor_BASE_DIR}/include/gmock")
-        list(INSERT _search_path_src 0 "${gmock_vendor_BASE_DIR}/src")
-      endif()
-
-      find_file(_gmock_header_file "gmock.h"
-        PATHS ${_search_path_include}
-        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-      find_file(_gmock_src_file
-        "gmock.cc"
-        "gmock-all.cc"
-        PATHS ${_search_path_src}
-        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-
-      if(_gmock_header_file AND _gmock_src_file)
-        # set from-source variables
-        set(GMOCK_FROM_SOURCE_FOUND TRUE CACHE INTERNAL "")
-
-        get_filename_component(_gmock_base_dir "${_gmock_src_file}" PATH)
-        get_filename_component(_gmock_base_dir "${_gmock_base_dir}" PATH)
-        set(GMOCK_FROM_SOURCE_BASE_DIR "${_gmock_base_dir}" CACHE INTERNAL "")
-
-        get_filename_component(_gmock_include_dir "${_gmock_header_file}" PATH)
-        get_filename_component(_gmock_include_dir ${_gmock_include_dir} PATH)
-        set(GMOCK_FROM_SOURCE_INCLUDE_DIRS "${_gmock_include_dir}" CACHE INTERNAL "")
-
-        set(GMOCK_FROM_SOURCE_LIBRARY_DIRS "${CMAKE_BINARY_DIR}/gmock" CACHE INTERNAL "")
-
-        set(GMOCK_FROM_SOURCE_LIBRARIES "gmock" CACHE INTERNAL "")
-        set(GMOCK_FROM_SOURCE_MAIN_LIBRARIES "gmock_main" CACHE INTERNAL "")
-      endif()
-    endif()
-
-    if(GMOCK_FROM_SOURCE_FOUND)
-      message(STATUS "Found gmock sources under '${GMOCK_FROM_SOURCE_BASE_DIR}': "
-        "C++ tests using 'Google Mock' will be built")
-
-      # if gmock is already a target, do not add again
-      # this can happen when ament_add_gmock() is called from a subdirectory
-      if(NOT TARGET gmock)
-        # add CMakeLists.txt from gmock dir
-        add_subdirectory("${GMOCK_FROM_SOURCE_BASE_DIR}" "${CMAKE_BINARY_DIR}/gmock")
-
-        # mark gmock targets with EXCLUDE_FROM_ALL to only build
-        # when tests are built which depend on them
-        set_target_properties(gmock gmock_main PROPERTIES EXCLUDE_FROM_ALL 1)
-      endif()
-
-      # set the same variables as find_package() would set
-      # but do NOT set GMOCK_FOUND in the cache when using gmock from source
-      # since the subdirectory must always be added to add the gmock targets
-      set(GMOCK_FOUND ${GMOCK_FROM_SOURCE_FOUND})
-      set(GMOCK_INCLUDE_DIRS ${GMOCK_FROM_SOURCE_INCLUDE_DIRS})
-      set(GMOCK_LIBRARY_DIRS ${GMOCK_FROM_SOURCE_LIBRARY_DIRS})
-      set(GMOCK_LIBRARIES ${GMOCK_FROM_SOURCE_LIBRARIES})
-      set(GMOCK_MAIN_LIBRARIES ${GMOCK_FROM_SOURCE_MAIN_LIBRARIES})
-
-      if(GMOCK_FROM_SOURCE_BASE_DIR STREQUAL gmock_vendor_BASE_DIR)
-        # the GMock headers require the GTest headers
-        find_package(ament_cmake_gtest REQUIRED)
-        ament_find_gtest()
-        list(APPEND GMOCK_INCLUDE_DIRS ${GTEST_INCLUDE_DIRS})
-      endif()
-    endif()
-
-    if(NOT GMOCK_FOUND)
-      message(WARNING
-        "'gmock' not found, C++ tests using 'Google Mock' can not be built. "
-        "Please install the 'Google Mock' headers globally in your system to "
-        "enable these tests (e.g. on Ubuntu/Debian install the package "
-          "'google-mock') or get the ament package 'gmock_vendor'")
-    endif()
+    # Debian ships a working GTest/GMock config
+    find_package(GTest REQUIRED)
+    set(GMOCK_FOUND TRUE)
+    set(GMOCK_INCLUDE_DIRS)
+    set(GMOCK_LIBRARY_DIRS)
+    set(GMOCK_LIBRARIES "GTest::gmock")
+    set(GMOCK_MAIN_LIBRARIES "GTest::gmock_main")
   endif()
 endmacro()
 
diff --git a/ament_cmake_gmock/cmake/ament_add_gmock_executable.cmake b/ament_cmake_gmock/cmake/ament_add_gmock_executable.cmake
index a1fcaea..78c6d34 100644
--- a/ament_cmake_gmock/cmake/ament_add_gmock_executable.cmake
+++ b/ament_cmake_gmock/cmake/ament_add_gmock_executable.cmake
@@ -48,7 +48,6 @@ function(_ament_add_gmock_executable target)
   # should be EXCLUDE_FROM_ALL if it would be possible
   # to add this target as a dependency to the "test" target
   add_executable("${target}" ${ARG_UNPARSED_ARGUMENTS})
-  target_include_directories("${target}" SYSTEM PRIVATE "${GMOCK_INCLUDE_DIRS}")
   if(NOT ARG_SKIP_LINKING_MAIN_LIBRARIES)
     target_link_libraries("${target}" ${GMOCK_MAIN_LIBRARIES})
   endif()
diff --git a/ament_cmake_gtest/ament_cmake_gtest-extras.cmake b/ament_cmake_gtest/ament_cmake_gtest-extras.cmake
index 0380e77..a877510 100644
--- a/ament_cmake_gtest/ament_cmake_gtest-extras.cmake
+++ b/ament_cmake_gtest/ament_cmake_gtest-extras.cmake
@@ -21,94 +21,14 @@ macro(_ament_cmake_gtest_find_gtest)
 
     find_package(ament_cmake_test QUIET REQUIRED)
 
-    # if gtest sources were not found in a previous run
-    if(NOT GTEST_FROM_SOURCE_FOUND)
-      # search path for gtest includes and sources
-      # check the system installed path (i.e. on Ubuntu)
-      set(_search_path_include "/usr/include/gtest")
-      set(_search_path_src "/usr/src/gtest/src")
-
-      # option() consider environment variable to find gtest
-      if(NOT $ENV{GTEST_DIR} STREQUAL "")
-        list(APPEND _search_path_include "$ENV{GTEST_DIR}/include/gtest")
-        list(APPEND _search_path_src "$ENV{GTEST_DIR}/src")
-      endif()
-
-      # check gtest_vendor path, prefer this version over a system installed
-      find_package(gtest_vendor QUIET)
-      if(gtest_vendor_FOUND AND gtest_vendor_BASE_DIR)
-        list(INSERT _search_path_include 0 "${gtest_vendor_BASE_DIR}/include/gtest")
-        list(INSERT _search_path_src 0 "${gtest_vendor_BASE_DIR}/src")
-      endif()
-
-      find_file(_gtest_header_file "gtest.h"
-        PATHS ${_search_path_include}
-        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-      find_file(_gtest_src_file
-        "gtest.cc"
-        "gtest-all.cc"
-        PATHS ${_search_path_src}
-        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-
-      if(_gtest_header_file AND _gtest_src_file)
-        # set from-source variables
-        set(GTEST_FROM_SOURCE_FOUND TRUE CACHE INTERNAL "")
-
-        get_filename_component(_gtest_base_dir "${_gtest_src_file}" PATH)
-        get_filename_component(_gtest_base_dir "${_gtest_base_dir}" PATH)
-        set(GTEST_FROM_SOURCE_BASE_DIR "${_gtest_base_dir}" CACHE INTERNAL "")
-
-        get_filename_component(_gtest_include_dir "${_gtest_header_file}" PATH)
-        get_filename_component(_gtest_include_dir ${_gtest_include_dir} PATH)
-        set(GTEST_FROM_SOURCE_INCLUDE_DIRS "${_gtest_include_dir}" CACHE INTERNAL "")
-
-        set(GTEST_FROM_SOURCE_LIBRARY_DIRS "${CMAKE_BINARY_DIR}/gtest" CACHE INTERNAL "")
-
-        set(GTEST_FROM_SOURCE_LIBRARIES "gtest" CACHE INTERNAL "")
-        set(GTEST_FROM_SOURCE_MAIN_LIBRARIES "gtest_main" CACHE INTERNAL "")
-      endif()
-    endif()
-
-    if(GTEST_FROM_SOURCE_FOUND)
-      message(STATUS "Found gtest sources under '${GTEST_FROM_SOURCE_BASE_DIR}': "
-        "C++ tests using 'Google Test' will be built")
-
-      # if the gtest sources are from a subfolder of gmock (not the case for gmock_vendor)
-      # the subdirectory was already added by gmock
-      if(NOT TARGET gtest)
-        # add CMakeLists.txt from gtest dir
-        add_subdirectory("${GTEST_FROM_SOURCE_BASE_DIR}" "${CMAKE_BINARY_DIR}/gtest")
-
-        # mark gtest targets with EXCLUDE_FROM_ALL to only build
-        # when tests are built which depend on them
-        set_target_properties(gtest gtest_main PROPERTIES EXCLUDE_FROM_ALL 1)
-        if(NOT WIN32)
-          target_compile_options(gtest PRIVATE -Wno-null-dereference)
-        endif()
-        target_include_directories(gtest SYSTEM BEFORE PUBLIC "${GTEST_FROM_SOURCE_INCLUDE_DIRS}")
-        target_include_directories(gtest_main SYSTEM BEFORE PUBLIC "${GTEST_FROM_SOURCE_INCLUDE_DIRS}")
-      endif()
-
-      # set the same variables as find_package()
-      # but do NOT set GTEST_FOUND in the cache when using gtest from source
-      # since the subdirectory must always be added to add the gtest targets
-      set(GTEST_FOUND ${GTEST_FROM_SOURCE_FOUND})
-      set(GTEST_INCLUDE_DIRS ${GTEST_FROM_SOURCE_INCLUDE_DIRS})
-      set(GTEST_LIBRARY_DIRS ${GTEST_FROM_SOURCE_LIBRARY_DIRS})
-      set(GTEST_LIBRARIES ${GTEST_FROM_SOURCE_LIBRARIES})
-      set(GTEST_MAIN_LIBRARIES ${GTEST_FROM_SOURCE_MAIN_LIBRARIES})
-      set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
-    endif()
-
-    if(NOT GTEST_FOUND)
-      message(WARNING
-        "'gtest' not found, C++ tests using 'Google Test' can not be built. "
-        "Please install the 'Google Test' headers globally in your system "
-        "to enable these tests (e.g. on Ubuntu/Debian install the package "
-        "'libgtest-dev') or get the ament package 'gtest_vendor'")
-    endif()
+    # Debian ships a working GTest/GMock config
+    find_package(GTest REQUIRED)
+    set(GTEST_FOUND TRUE)
+    set(GTEST_INCLUDE_DIRS)
+    set(GTEST_LIBRARY_DIRS)
+    set(GTEST_LIBRARIES "GTest::gtest")
+    set(GTEST_MAIN_LIBRARIES "GTest::gtest_main")
+    set(GTEST_BOTH_LIBRARIES "GTest::gtest" "GTest::gtest_main")
   endif()
 endmacro()
 
diff --git a/ament_cmake_gtest/cmake/ament_add_gtest_executable.cmake b/ament_cmake_gtest/cmake/ament_add_gtest_executable.cmake
index 644a23b..46293bf 100644
--- a/ament_cmake_gtest/cmake/ament_add_gtest_executable.cmake
+++ b/ament_cmake_gtest/cmake/ament_add_gtest_executable.cmake
@@ -48,14 +48,8 @@ function(_ament_add_gtest_executable target)
   # should be EXCLUDE_FROM_ALL if it would be possible
   # to add this target as a dependency to the "test" target
   add_executable("${target}" ${ARG_UNPARSED_ARGUMENTS})
-  target_include_directories("${target}" SYSTEM PRIVATE "${GTEST_INCLUDE_DIRS}")
   if(NOT ARG_SKIP_LINKING_MAIN_LIBRARIES)
     target_link_libraries("${target}" ${GTEST_MAIN_LIBRARIES})
   endif()
   target_link_libraries("${target}" ${GTEST_LIBRARIES})
-  if(NOT WIN32)
-    set(THREADS_PREFER_PTHREAD_FLAG ON)
-    find_package(Threads REQUIRED)
-    target_link_libraries("${target}" Threads::Threads)
-  endif()
 endfunction()