forked from facebook/mysql-5.6
-
Notifications
You must be signed in to change notification settings - Fork 0
/
protobuf.cmake
129 lines (118 loc) · 4.77 KB
/
protobuf.cmake
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
# Copyright (c) 2015, 2021, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# 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 General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# Usage:
#
# cmake -DWITH_PROTOBUF="bundled"|"system"
#
# Default is "bundled"
# Other values will be ignored, and we fall back to "bundled"
#
MACRO(RESET_PROTOBUF_VARIABLES)
UNSET(PROTOBUF_INCLUDE_DIR CACHE)
UNSET(PROTOBUF_INCLUDE_DIR)
UNSET(PROTOBUF_INCLUDE_DIRS CACHE)
UNSET(PROTOBUF_INCLUDE_DIRS)
UNSET(PROTOBUF_LIBRARIES CACHE)
UNSET(PROTOBUF_LIBRARIES)
UNSET(PROTOBUF_LIBRARY CACHE)
UNSET(PROTOBUF_LIBRARY)
UNSET(PROTOBUF_LIBRARY_DEBUG CACHE)
UNSET(PROTOBUF_LIBRARY_DEBUG)
UNSET(PROTOBUF_LITE_LIBRARY CACHE)
UNSET(PROTOBUF_LITE_LIBRARY)
UNSET(PROTOBUF_LITE_LIBRARY_DEBUG CACHE)
UNSET(PROTOBUF_LITE_LIBRARY_DEBUG)
UNSET(PROTOBUF_PROTOC_EXECUTABLE CACHE)
UNSET(PROTOBUF_PROTOC_EXECUTABLE)
UNSET(PROTOBUF_PROTOC_LIBRARY_DEBUG CACHE)
UNSET(PROTOBUF_PROTOC_LIBRARY_DEBUG)
ENDMACRO()
MACRO(ECHO_PROTOBUF_VARIABLES)
MESSAGE(STATUS "PROTOBUF_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIR}")
MESSAGE(STATUS "PROTOBUF_LIBRARY ${PROTOBUF_LIBRARY}")
MESSAGE(STATUS "PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}")
ENDMACRO()
MACRO(COULD_NOT_FIND_PROTOBUF)
ECHO_PROTOBUF_VARIABLES()
MESSAGE(STATUS "Could not find (the correct version of) protobuf.")
MESSAGE(STATUS "MySQL currently requires at least protobuf version 2.5")
MESSAGE(FATAL_ERROR
"You can build with the bundled sources"
)
ENDMACRO()
SET(BUNDLED_PROTO_SRCDIR ${CMAKE_SOURCE_DIR}/extra/protobuf/protobuf-2.6.1/src)
MACRO(MYSQL_USE_BUNDLED_PROTOBUF)
SET(WITH_PROTOBUF "bundled" CACHE INTERNAL
"Bundled protoc and protobuf library")
# Set the same variables as FindProtobuf.cmake
SET(PROTOBUF_FOUND 1 CACHE INTERNAL "")
SET(PROTOBUF_INCLUDE_DIR ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
SET(PROTOBUF_INCLUDE_DIRS ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
SET(PROTOBUF_LIBRARY protobuf CACHE INTERNAL "")
SET(PROTOBUF_LIBRARY_DEBUG protobuf CACHE INTERNAL "")
SET(PROTOBUF_LIBRARIES protobuf CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_EXECUTABLE protoc CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_LIBRARY protoclib CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_LIBRARY_DEBUG protoclib CACHE INTERNAL "")
SET(PROTOBUF_LITE_LIBRARY protobuf-lite CACHE INTERNAL "")
SET(PROTOBUF_LITE_LIBRARY_DEBUG protobuf-lite CACHE INTERNAL "")
ADD_SUBDIRECTORY(extra/protobuf)
ENDMACRO()
MACRO(MYSQL_CHECK_PROTOBUF)
IF (NOT WITH_PROTOBUF OR
NOT WITH_PROTOBUF STREQUAL "system")
SET(WITH_PROTOBUF "bundled")
ENDIF()
MESSAGE(STATUS "WITH_PROTOBUF=${WITH_PROTOBUF}")
IF(WITH_PROTOBUF STREQUAL "bundled")
MYSQL_USE_BUNDLED_PROTOBUF()
ELSE()
FIND_PACKAGE(Protobuf)
ENDIF()
IF(NOT PROTOBUF_FOUND)
MESSAGE(WARNING "Protobuf could not be found")
ENDIF()
IF(PROTOBUF_FOUND)
# Verify protobuf version number. Version information looks like:
# // The current version, represented as a single integer to make comparison
# // easier: major * 10^6 + minor * 10^3 + micro
# #define GOOGLE_PROTOBUF_VERSION 2006000
FILE(STRINGS "${PROTOBUF_INCLUDE_DIR}/google/protobuf/stubs/common.h"
PROTOBUF_VERSION_NUMBER
REGEX "^#define[\t ]+GOOGLE_PROTOBUF_VERSION[\t ][0-9]+.*"
)
STRING(REGEX REPLACE
"^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
"\\1"
PROTOBUF_MAJOR_VERSION "${PROTOBUF_VERSION_NUMBER}")
STRING(REGEX REPLACE
"^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
"\\2"
PROTOBUF_MINOR_VERSION "${PROTOBUF_VERSION_NUMBER}")
MESSAGE(STATUS
"protobuf version is ${PROTOBUF_MAJOR_VERSION}.${PROTOBUF_MINOR_VERSION}")
IF("${PROTOBUF_MAJOR_VERSION}.${PROTOBUF_MINOR_VERSION}" VERSION_LESS "2.5")
COULD_NOT_FIND_PROTOBUF()
ENDIF()
ENDIF()
ENDMACRO()