File: FindGooglemock.cmake

package info (click to toggle)
amarok 3.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 112,344 kB
  • sloc: cpp: 195,053; xml: 4,329; ansic: 2,634; javascript: 673; ruby: 528; python: 507; sh: 252; makefile: 12
file content (160 lines) | stat: -rw-r--r-- 5,463 bytes parent folder | download | duplicates (3)
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
# - Find Googlemock
# Find the google mock includes and the google mock libraries
# This module defines
# GOOGLEMOCK_INCLUDE_DIR, root google mock include dir
# GOOGLEMOCK_LIBRARY, the path to Google Mock library
# GOOGLEMOCK_LIBRARIES, the path to Google Mock and Google Test library
# GOOGLEMOCK_FOUND, whether Google Mock was found
#
# since google test and google mock is not supposed to be supplied pre-compiled
# we try to find the google mock sources as a fallback

find_program(GMOCK-CONFIG_EXECUTABLE NAMES gmock-config PATHS
       ${BIN_INSTALL_DIR}
       /opt/local/bin
       /usr/bin
)

if(GMOCK-CONFIG_EXECUTABLE)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --includedir OUTPUT_VARIABLE GOOGLEMOCK_INCLUDE_DIR)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --ldflags OUTPUT_VARIABLE GOOGLEMOCK_LDFLAGS)
exec_program(${GMOCK-CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE GOOGLEMOCK_libs_tmp)
set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LDFLAGS} ${GOOGLEMOCK_libs_tmp})

if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARIES)
   set(GOOGLEMOCK_FOUND TRUE)
   message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")
else()
   set(GOOGLEMOCK_FOUND FALSE)
   if (GOOGLEMOCK_FIND_REQUIRED)
      message(FATAL_ERROR "Could NOT find required package Googlemock")
   endif()
endif()

else()

find_path(GOOGLEMOCK_INCLUDE_DIR NAMES gmock/gmock.h
   HINTS
   ~/usr/include
   /opt/local/include
   /usr/include
   /usr/local/include
)

find_library( GOOGLEMOCK_LIBRARY NAMES gmock
    PATHS
    ~/usr/lib
   /opt/local/lib
   /usr/lib
   /usr/lib64
   /usr/local/lib
)

find_library( GOOGLEMOCK_DEP_GTEST_LIBRARY NAMES gtest
    PATHS
    ~/usr/lib
   /opt/local/lib
   /usr/lib
   /usr/lib64
   /usr/local/lib
)

# google-mock >= 1.5 requires pthread
# see: http://code.google.com/p/googlemock/source/browse/trunk/CHANGES
if( NOT WIN32 AND GOOGLEMOCK_LIBRARY )
    find_library( GOOGLEMOCK_DEP_PTHREAD_LIBRARY NAMES pthread
        PATHS
        ~/usr/lib
       /opt/local/lib
       /usr/lib
       /usr/lib64
       /usr/local/lib
    )

endif()

# Google recommends not to distribute a pre-build libary and ubuntu is following
# this advice with libgtest 1.6.0
# However they are distributing sources, so we are looking if we at least have
# them available
if( NOT GOOGLEMOCK_DEP_GTEST_LIBRARY )
    find_path( GOOGLEMOCK_SOURCES NAMES gmock
        PATHS /usr/src
        NO_DEFAULT_PATH
        NO_CMAKE_PATH
    )

    # found googlemock as sources. then we also have the gtest sources since they
    # are included
    if( GOOGLEMOCK_SOURCES )
        find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
            PATHS "${GOOGLEMOCK_SOURCES}/gmock"
            NO_DEFAULT_PATH
            NO_CMAKE_PATH
        )

        # make sure that we use the gtest supplied with googlemock
        set(GOOGLEMOCK_INCLUDE_DIR
            "${GOOGLEMOCK_INCLUDE_DIR}"
            "${GOOGLEMOCK_SOURCES}/gmock"
            "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest/include"
        )

    elseif( GOOGLEMOCK_SOURCES )
        find_path( GOOGLEMOCK_DEP_GTEST_SOURCES NAMES gtest
            PATHS /usr/src
            NO_DEFAULT_PATH
            NO_CMAKE_PATH
        )

        # in this case we also have to use the static google mock library
        set( OLD_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
        set( CMAKE_FIND_LIBRARY_SUFFIXES .a)
        find_library( GOOGLEMOCK_LIBRARY_STATIC NAMES gmock
            PATHS
            ~/usr/lib
           /opt/local/lib
           /usr/lib
           /usr/lib64
           /usr/local/lib
        )
        set( CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_CMAKE_FIND_LIBRARY_SUFFIXES})
    endif()

endif()

# -- googlemock and gtest library available
if(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_LIBRARY)
   set(GOOGLEMOCK_FOUND TRUE)
   set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY} ${GOOGLEMOCK_DEP_GTEST_LIBRARY} ${GOOGLEMOCK_DEP_PTHREAD_LIBRARY})
   message(STATUS "Found libgmock: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES}")


# -- googlemock and gtest sources available
elseif(GOOGLEMOCK_INCLUDE_DIR AND GOOGLEMOCK_LIBRARY AND GOOGLEMOCK_DEP_GTEST_SOURCES)
   set(GOOGLEMOCK_FOUND TRUE)
   set(GOOGLEMOCK_LIBRARIES ${GOOGLEMOCK_LIBRARY_STATIC} gtest)
   set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
   message(STATUS "Found libgmock but need to build gtest: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_LIBRARIES} ${GOOGLEMOCK_DEP_GTEST_SOURCES}")

# -- googlemock sources and gtest sources available
elseif(GOOGLEMOCK_SOURCES)
   set(GOOGLEMOCK_FOUND TRUE)
   set(GOOGLEMOCK_LIBRARIES gtest)
   set(GOOGLEMOCK_SRCS "${GOOGLEMOCK_SOURCES}/gmock/src/gmock-all.cc" CACHE PATH "Google mock source file that needs to be added")
   set(GOOGLEMOCK_SOURCES "${GOOGLEMOCK_SOURCES}/gmock" CACHE PATH "Path to the google-mock sources")
   set(GOOGLEMOCK_GTEST_SOURCES "${GOOGLEMOCK_DEP_GTEST_SOURCES}/gtest" CACHE PATH "Path to the gtest sources")
   message(STATUS "Found gmock and gtest but need to build both: ${GOOGLEMOCK_INCLUDE_DIR}, ${GOOGLEMOCK_DEP_GTEST_SOURCES}")
   mark_as_advanced(GOOGLEMOCK_SRCS)

# -- googlemock but no gtest
else()
   set(GOOGLEMOCK_FOUND FALSE)
   if (GOOGLEMOCK_FIND_REQUIRED)
      message(FATAL_ERROR "Could NOT find required package Googlemock or gtest")
   endif()
endif()

endif()

mark_as_advanced(GOOGLEMOCK_INCLUDE_DIR GOOGLEMOCK_LIBRARIES)