aboutsummaryrefslogtreecommitdiffstats
path: root/testing/cmake-extras/Use_gtest_cmake_from_mir.patch
blob: 915baf899f61aa7bd662cba9572b317eb8b4c336 (plain)
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
diff --git a/src/GMock/GMockConfig.cmake b/src/GMock/GMockConfig.cmake
index 2078030..77ba4a3 100644
--- a/src/GMock/GMockConfig.cmake
+++ b/src/GMock/GMockConfig.cmake
@@ -1,92 +1,77 @@
-# Copyright (C) 2014 Canonical Ltd
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# Build with system gmock and embedded gtest
-#
-# Usage:
-#
-# find_package(GMock)
-#
-# ...
-#
-# target_link_libraries(
-#   my-target
-#   ${GTEST_BOTH_LIBRARIES}
-# )
-#
-# NOTE: Due to the way this package finder is implemented, do not attempt
-# to find the GMock package more than once.
-
-find_package(Threads)
-
-if (EXISTS "/usr/src/googletest")
-    # As of version 1.8.0
-    set(GMOCK_SOURCE_DIR "/usr/src/googletest/googlemock" CACHE PATH "gmock source directory")
-    set(GMOCK_INCLUDE_DIRS "${GMOCK_SOURCE_DIR}/include" CACHE PATH "gmock source include directory")
-    set(GTEST_INCLUDE_DIRS "/usr/src/googletest/googletest/include" CACHE PATH "gtest source include directory")
+include(FindPackageHandleStandardArgs)
+
+find_package(GTest)
+
+pkg_check_modules (GTEST REQUIRED "gtest >= 1.8.0")
+pkg_check_modules (GTEST_MAIN REQUIRED "gtest_main >= 1.8.0")
+if (GTEST_FOUND AND GTEST_MAIN_FOUND)
+    set(GTEST_LIBRARY ${GTEST_LIBRARIES})
+    set(GTEST_MAIN_LIBRARY ${GTEST_MAIN_LIBRARIES})
+    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY})
+endif()
+
+if (NOT GTEST_FOUND)
+    include(ExternalProject)
+
+    find_path(GTEST_ROOT
+        NAMES CMakeLists.txt
+        PATHS /usr/src/gtest /usr/src/googletest/googletest/
+        DOC "Path to GTest CMake project")
+
+    ExternalProject_Add(GTest PREFIX ./gtest
+            SOURCE_DIR ${GTEST_ROOT}
+            CMAKE_ARGS
+                -DCMAKE_CXX_COMPILER_WORKS=1
+                -DCMAKE_CXX_FLAGS='${CMAKE_CXX_FLAGS}'
+                -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+            INSTALL_COMMAND true
+            BUILD_BYPRODUCTS
+                ${CMAKE_CURRENT_BINARY_DIR}/gtest/src/GTest-build/libgtest.a
+                ${CMAKE_CURRENT_BINARY_DIR}/gtest/src/GTest-build/libgtest_main.a
+                ${CMAKE_CURRENT_BINARY_DIR}/gtest/src/GMock-build/libgmock.a)
+
+    ExternalProject_Get_Property(GTest binary_dir)
+
+    add_library(gtest UNKNOWN IMPORTED)
+    set_target_properties(gtest      PROPERTIES IMPORTED_LOCATION ${binary_dir}/libgtest.a)
+    add_dependencies(gtest GTest)
+    set(GTEST_LIBRARY "gtest")
+
+    add_library(gtest_main UNKNOWN IMPORTED)
+    set_target_properties(gtest_main PROPERTIES IMPORTED_LOCATION ${binary_dir}/libgtest_main.a)
+    add_dependencies(gtest_main GTest)
+    set(GTEST_MAIN_LIBRARY "gtest_main")
+
+    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY})
+    find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h)
+    find_package_handle_standard_args(GTest GTEST_LIBRARY GTEST_BOTH_LIBRARIES GTEST_INCLUDE_DIRS)
+endif()
+
+find_file(GMOCK_SOURCE
+        NAMES gmock-all.cc
+        DOC "GMock source"
+        PATHS /usr/src/googletest/googlemock/src/ /usr/src/gmock/ /usr/src/gmock/src)
+
+if (EXISTS ${GMOCK_SOURCE})
+    find_path(GMOCK_INCLUDE_DIR gmock/gmock.h PATHS /usr/src/googletest/googlemock/include)
+
+    add_library(GMock STATIC ${GMOCK_SOURCE})
+
+    if (EXISTS /usr/src/googletest/googlemock/src)
+        set_source_files_properties(${GMOCK_SOURCE} PROPERTIES COMPILE_FLAGS "-I/usr/src/googletest/googlemock")
+    endif()
+
+    if (EXISTS /usr/src/gmock/src)
+        set_source_files_properties(${GMOCK_SOURCE} PROPERTIES COMPILE_FLAGS "-I/usr/src/gmock")
+    endif()
+
+    find_package_handle_standard_args(GMock DEFAULT_MSG GMOCK_INCLUDE_DIR)
+
+    set(GMOCK_LIBRARY GMock)
 else()
-    set(GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory")
-    set(GMOCK_INCLUDE_DIRS "/usr/include" CACHE PATH "gmock source include directory")
-    set(GTEST_INCLUDE_DIRS "/usr/include" CACHE PATH "gtest source include directory")
+    # Assume gmock is no longer source, we'll find out soon enough if that's wrong
+    add_custom_target(GMock)
+    string(REPLACE gtest gmock GMOCK_LIBRARY ${GTEST_LIBRARY})
 endif()
 
-# We add -g so we get debug info for the gtest stack frames with gdb.
-# The warnings are suppressed so we get a noise-free build for gtest and gmock if the caller
-# has these warnings enabled.
-set(findgmock_cxx_flags "${CMAKE_CXX_FLAGS} -g -Wno-old-style-cast -Wno-missing-field-initializers -Wno-ctor-dtor-privacy -Wno-switch-default")
-
-set(findgmock_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/gmock")
-set(findgmock_gtest_lib "${findgmock_bin_dir}/gtest/libgtest.a")
-set(findgmock_gtest_main_lib "${findgmock_bin_dir}/gtest/libgtest_main.a")
-set(findgmock_gmock_lib "${findgmock_bin_dir}/libgmock.a")
-set(findgmock_gmock_main_lib "${findgmock_bin_dir}/libgmock_main.a")
-
-include(ExternalProject)
-ExternalProject_Add(GMock SOURCE_DIR "${GMOCK_SOURCE_DIR}"
-                          BINARY_DIR "${findgmock_bin_dir}"
-                          BUILD_BYPRODUCTS "${findgmock_gtest_lib}"
-                                           "${findgmock_gtest_main_lib}"
-                                           "${findgmock_gmock_lib}"
-                                           "${findgmock_gmock_main_lib}"
-                          INSTALL_COMMAND ""
-                          CMAKE_ARGS "-DCMAKE_CXX_FLAGS=${findgmock_cxx_flags}")
-
-add_library(gtest INTERFACE)
-target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
-target_link_libraries(gtest INTERFACE ${findgmock_gtest_lib} ${CMAKE_THREAD_LIBS_INIT})
-add_dependencies(gtest GMock)
-
-add_library(gtest_main INTERFACE)
-target_include_directories(gtest_main INTERFACE ${GTEST_INCLUDE_DIRS})
-target_link_libraries(gtest_main INTERFACE ${findgmock_gtest_main_lib} gtest)
-
-add_library(gmock INTERFACE)
-target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIRS})
-target_link_libraries(gmock INTERFACE ${findgmock_gmock_lib} gtest)
-
-add_library(gmock_main INTERFACE)
-target_include_directories(gmock_main INTERFACE ${GMOCK_INCLUDE_DIRS})
-target_link_libraries(gmock_main INTERFACE ${findgmock_gmock_main_lib} gmock)
-
-set(GTEST_LIBRARIES gtest)
-set(GTEST_MAIN_LIBRARIES gtest_main)
-set(GMOCK_LIBRARIES gmock gmock_main)
-set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
-
-unset(findgmock_cxx_flags)
-unset(findgmock_bin_dir)
-unset(findgmock_gtest_lib)
-unset(findgmock_gtest_main_lib)
-unset(findgmock_gmock_lib)
-unset(findgmock_gmock_main_lib)
+set(GMOCK_LIBRARIES ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY})