-
Notifications
You must be signed in to change notification settings - Fork 67
/
version.cmake
136 lines (114 loc) · 5.29 KB
/
version.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
130
131
132
133
134
135
136
# Copyright (c) 2016, 2024, 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 designed to work 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 either included with
# the program or referenced in the documentation.
#
# 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
IF(NOT ROOT_PROJECT_DIR)
SET(ROOT_PROJECT_DIR ${CMAKE_SOURCE_DIR})
ENDIF()
# Generate "something" to trigger cmake rerun when VERSION changes
CONFIGURE_FILE(
${ROOT_PROJECT_DIR}/MYSQL_VERSION
${CMAKE_BINARY_DIR}/MYSQL_VERSION.dep
)
# Read value for a variable from VERSION.
MACRO(MYSQL_GET_CONFIG_VALUE config_file keyword var)
IF(NOT ${var})
FILE (STRINGS "${config_file}" str REGEX "^[ ]*${keyword}=")
IF(str)
STRING(REPLACE "${keyword}=" "" str ${str})
STRING(REGEX REPLACE "[ ].*" "" str "${str}")
SET(${var} ${str})
ENDIF()
ENDIF()
ENDMACRO()
# Read mysql version for configure script
MACRO(GET_MYSH_VERSION)
MYSQL_GET_CONFIG_VALUE("${ROOT_PROJECT_DIR}/MYSQL_VERSION" "MYSQL_VERSION_MAJOR" MAJOR_VERSION)
MYSQL_GET_CONFIG_VALUE("${ROOT_PROJECT_DIR}/MYSQL_VERSION" "MYSQL_VERSION_MINOR" MINOR_VERSION)
MYSQL_GET_CONFIG_VALUE("${ROOT_PROJECT_DIR}/MYSQL_VERSION" "MYSQL_VERSION_PATCH" PATCH_VERSION)
MYSQL_GET_CONFIG_VALUE("${ROOT_PROJECT_DIR}/MYSQL_VERSION" "MYSQL_VERSION_EXTRA" EXTRA_VERSION)
IF(NOT DEFINED MAJOR_VERSION OR
NOT DEFINED MINOR_VERSION OR
NOT DEFINED PATCH_VERSION)
MESSAGE(FATAL_ERROR "MYSQL_VERSION file cannot be parsed.")
ENDIF()
SET(MYSH_VERSION
"${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}${EXTRA_VERSION}")
MESSAGE(STATUS "MySQL Shell ${MYSH_VERSION}")
SET(MYSH_BASE_VERSION
"${MAJOR_VERSION}.${MINOR_VERSION}" CACHE INTERNAL "MySQL Shell Base version")
SET(MYSH_NO_DASH_VERSION
"${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
SET(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
SET(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
SET(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
ENDMACRO()
MACRO(GET_MYSQL_VERSION)
IF(MYSQL_SOURCE_DIR)
FILE(TO_CMAKE_PATH "${MYSQL_SOURCE_DIR}" MYSQL_SRC_ROOT)
MYSQL_GET_CONFIG_VALUE("${MYSQL_SRC_ROOT}/MYSQL_VERSION" "MYSQL_VERSION_MAJOR" MYSQL_MAJOR_VERSION)
MYSQL_GET_CONFIG_VALUE("${MYSQL_SRC_ROOT}/MYSQL_VERSION" "MYSQL_VERSION_MINOR" MYSQL_MINOR_VERSION)
MYSQL_GET_CONFIG_VALUE("${MYSQL_SRC_ROOT}/MYSQL_VERSION" "MYSQL_VERSION_PATCH" MYSQL_PATCH_VERSION)
MYSQL_GET_CONFIG_VALUE("${MYSQL_SRC_ROOT}/MYSQL_VERSION" "MYSQL_VERSION_EXTRA" MYSQL_EXTRA_VERSION)
IF(NOT DEFINED MYSQL_MAJOR_VERSION OR
NOT DEFINED MYSQL_MINOR_VERSION OR
NOT DEFINED MYSQL_PATCH_VERSION)
MESSAGE(FATAL_ERROR "MYSQL_VERSION file for server cannot be parsed.")
ENDIF()
SET(MYSQL_VERSION
"${MYSQL_MAJOR_VERSION}.${MYSQL_MINOR_VERSION}.${MYSQL_PATCH_VERSION}${MYSQL_EXTRA_VERSION}")
ELSEIF(BUNDLED_MYSQL_CONFIG_EDITOR)
EXECUTE_PROCESS(
COMMAND ${BUNDLED_MYSQL_CONFIG_EDITOR} --version
OUTPUT_VARIABLE _mysql_version
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Clean up so only numeric, in case of "-alpha" or similar
STRING(REGEX MATCHALL "([0-9]+.[0-9]+.[0-9]+)" MYSQL_VERSION "${_mysql_version}")
ENDIF()
IF(MYSQL_VERSION)
MESSAGE(STATUS "MySQL ${MYSQL_VERSION}")
# To create a fully numeric version, first normalize so N.NN.NN
STRING(REGEX REPLACE "[.]([0-9])[.]" ".0\\1." MYSQL_NUM_VERSION "${MYSQL_VERSION}")
STRING(REGEX REPLACE "[.]([0-9])$" ".0\\1" MYSQL_NUM_VERSION "${MYSQL_NUM_VERSION}")
# Finally remove the dot
STRING(REGEX REPLACE "[.]" "" MYSQL_NUM_VERSION "${MYSQL_NUM_VERSION}")
MESSAGE(STATUS "MySQL Num Version ${MYSQL_NUM_VERSION}")
ENDIF()
ENDMACRO()
# Get mysql version and other interesting variables
GET_MYSH_VERSION()
GET_MYSQL_VERSION()
SET(MYSH_BUILD_ID "$ENV{PARENT_ID}")
SET(MYSH_COMMIT_ID "$ENV{PUSH_REVISION}")
SET(MYSH_PRODUCT_ID "$ENV{PRODUCT_ID}")
IF(MYSH_PRODUCT_ID)
STRING(REPLACE "_" ";" MYSH_PRODUCT_ID_LIST "${MYSH_PRODUCT_ID}")
LIST(LENGTH MYSH_PRODUCT_ID_LIST MYSH_PRODUCT_ID_LIST_LEN)
IF(MYSH_PRODUCT_ID_LIST_LEN GREATER_EQUAL 2)
LIST(GET MYSH_PRODUCT_ID_LIST -2 MYSH_PRODUCT_OS)
LIST(GET MYSH_PRODUCT_ID_LIST -1 MYSH_PRODUCT_PACKAGE)
SET(MYSH_PRODUCT_ID "${MYSH_PRODUCT_OS} ${MYSH_PRODUCT_PACKAGE}")
ENDIF()
ENDIF()
# On Windows, AssemblyVersion does not allow slashes. Example: 1.0.5-labs
IF(WIN32)
SET(MYSH_VERSION_WIN "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}.0")
ENDIF()