04fa814479db3243487cffc365b9ab90142f6f7e
[iec.git] / src / type3_AndroidCloud / anbox-master / cmake / FindGMock.cmake
1 # Copyright (C) 2014 Canonical Ltd
2 #
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the GNU Lesser General Public License version 3 as
5 # published by the Free Software Foundation.
6 #
7 # This program is distributed in the hope that it will be useful,
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 # GNU Lesser General Public License for more details.
11 #
12 # You should have received a copy of the GNU Lesser General Public License
13 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
14
15 # Build with system gmock and embedded gtest
16 #
17 # Usage:
18 #
19 # find_package(GMock)
20 #
21 # ...
22 #
23 # target_link_libraries(
24 #   my-target
25 #   ${GTEST_BOTH_LIBRARIES}
26 # )
27 #
28 # NOTE: Due to the way this package finder is implemented, do not attempt
29 # to find the GMock package more than once.
30
31 find_package(Threads)
32
33 pkg_check_modules(GTEST      gtest     )
34 pkg_check_modules(GTEST_MAIN gtest_main)
35 pkg_check_modules(GMOCK      gmock     )
36 pkg_check_modules(GMOCK_MAIN gmock_main)
37
38 if (NOT (GTEST_FOUND AND GTEST_MAIN_FOUND AND GMOCK_FOUND AND GMOCK_MAIN_FOUND))
39
40     if (EXISTS "/usr/src/googletest")
41         # As of version 1.8.0
42         set(GMOCK_SOURCE_DIR "/usr/src/googletest/googlemock" CACHE PATH "gmock source directory")
43         set(GMOCK_INCLUDE_DIRS "${GMOCK_SOURCE_DIR}/include" CACHE PATH "gmock source include directory")
44         set(GTEST_INCLUDE_DIRS "/usr/src/googletest/googletest/include" CACHE PATH "gtest source include directory")
45     else()
46         set(GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory")
47         set(GMOCK_INCLUDE_DIRS "/usr/include" CACHE PATH "gmock source include directory")
48         set(GTEST_INCLUDE_DIRS "/usr/include" CACHE PATH "gtest source include directory")
49     endif()
50
51     # We add -g so we get debug info for the gtest stack frames with gdb.
52     # The warnings are suppressed so we get a noise-free build for gtest and gmock if the caller
53     # has these warnings enabled.
54     set(findgmock_cxx_flags "${CMAKE_CXX_FLAGS} -g -Wno-old-style-cast -Wno-missing-field-initializers -Wno-ctor-dtor-privacy -Wno-switch-default")
55
56     set(findgmock_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/gmock")
57     set(findgmock_gtest_lib "${findgmock_bin_dir}/gtest/libgtest.a")
58     set(findgmock_gtest_main_lib "${findgmock_bin_dir}/gtest/libgtest_main.a")
59     set(findgmock_gmock_lib "${findgmock_bin_dir}/libgmock.a")
60     set(findgmock_gmock_main_lib "${findgmock_bin_dir}/libgmock_main.a")
61
62     include(ExternalProject)
63     ExternalProject_Add(GMock SOURCE_DIR "${GMOCK_SOURCE_DIR}"
64                               BINARY_DIR "${findgmock_bin_dir}"
65                               BUILD_BYPRODUCTS "${findgmock_gtest_lib}"
66                                                "${findgmock_gtest_main_lib}"
67                                                "${findgmock_gmock_lib}"
68                                                "${findgmock_gmock_main_lib}"
69                               INSTALL_COMMAND ""
70                               CMAKE_ARGS "-DCMAKE_CXX_FLAGS=${findgmock_cxx_flags}")
71
72     add_library(gtest INTERFACE)
73     target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
74     target_link_libraries(gtest INTERFACE ${findgmock_gtest_lib} ${CMAKE_THREAD_LIBS_INIT})
75     add_dependencies(gtest GMock)
76
77     add_library(gtest_main INTERFACE)
78     target_include_directories(gtest_main INTERFACE ${GTEST_INCLUDE_DIRS})
79     target_link_libraries(gtest_main INTERFACE ${findgmock_gtest_main_lib} gtest)
80
81     add_library(gmock INTERFACE)
82     target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIRS})
83     target_link_libraries(gmock INTERFACE ${findgmock_gmock_lib} gtest)
84
85     add_library(gmock_main INTERFACE)
86     target_include_directories(gmock_main INTERFACE ${GMOCK_INCLUDE_DIRS})
87     target_link_libraries(gmock_main INTERFACE ${findgmock_gmock_main_lib} gmock gtest_main)
88
89     set(GTEST_LIBRARIES gtest)
90     set(GTEST_MAIN_LIBRARIES gtest_main)
91     set(GMOCK_LIBRARIES gmock gmock_main)
92
93     unset(findgmock_cxx_flags)
94     unset(findgmock_bin_dir)
95     unset(findgmock_gtest_lib)
96     unset(findgmock_gtest_main_lib)
97     unset(findgmock_gmock_lib)
98     unset(findgmock_gmock_main_lib)
99
100 endif()
101
102 set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})