Skip to content

Commit c7a9215

Browse files
committed
MDEV-40608 MariaDB-devel is incomplete for plugins
* create and install mariadb-plugin-config.cmake * adjust plugin.cmake to work for external plugins * move server-internal part to top-level CMakeLists.txt * remove WITH_WSREP from my_config.h (it upsets external plugins) * remove double-defined macros from unireg.h (the guard doesn't help if unireg.h is included first) ColumnStore, until fixed, needs a backward-compatibility workaround
1 parent eccf9ca commit c7a9215

11 files changed

Lines changed: 212 additions & 81 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ support-files/mariadb-extra.socket
264264
support-files/mariadb@.service
265265
support-files/mariadb@.socket
266266
support-files/mariadb-extra@.socket
267+
support-files/mariadb-plugin-config.cmake
267268
support-files/mini-benchmark
268269
support-files/my-huge.cnf
269270
support-files/my-innodb-heavy-4G.cnf

CMakeLists.txt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Copyright (c) 2006, 2017, Oracle and/or its affiliates.
2-
# Copyright (c) 2008, 2022, MariaDB Corporation.
2+
# Copyright (c) 2008, 2026, MariaDB Corporation.
33
#
44
# This program is free software; you can redistribute it and/or modify
55
# it under the terms of the GNU General Public License as published by
@@ -493,7 +493,18 @@ SET(PYTHON_SHEBANG "/usr/bin/env python3" CACHE STRING "python shebang")
493493
MARK_AS_ADVANCED(PYTHON_SHEBANG)
494494

495495
# Add storage engines and plugins.
496-
CONFIGURE_PLUGINS()
496+
IF(NOT WITHOUT_SERVER)
497+
FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
498+
ENDIF()
499+
500+
FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
501+
FOREACH(dir ${dirs_storage} ${dirs_plugin})
502+
IF (EXISTS ${dir}/CMakeLists.txt)
503+
ADD_SUBDIRECTORY(${dir})
504+
ENDIF()
505+
ENDFOREACH()
506+
507+
VERIFY_PLUGINS()
497508

498509
ADD_SUBDIRECTORY(include)
499510
ADD_SUBDIRECTORY(dbug)

cmake/install_macros.cmake

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -300,36 +300,3 @@ ENDFUNCTION()
300300
# For Makefile generators we default Debug build directory to ${buildroot}/../debug.
301301
GET_FILENAME_COMPONENT(BINARY_PARENTDIR ${CMAKE_BINARY_DIR} PATH)
302302
SET(DEBUGBUILDDIR "${BINARY_PARENTDIR}/debug" CACHE INTERNAL "Directory of debug build")
303-
304-
FUNCTION(INSTALL_MYSQL_TEST from to)
305-
IF(INSTALL_MYSQLTESTDIR)
306-
IF(NOT WITH_WSREP)
307-
SET(EXCL_GALERA "(suite/(galera|wsrep|sys_vars/[rt]/(sysvars_)?wsrep).*|std_data/(galera|wsrep).*)")
308-
ELSE()
309-
SET(EXCL_GALERA "^DOES_NOT_EXIST$")
310-
ENDIF()
311-
INSTALL(
312-
DIRECTORY ${from}
313-
DESTINATION "${INSTALL_MYSQLTESTDIR}/${to}"
314-
USE_SOURCE_PERMISSIONS
315-
COMPONENT Test
316-
PATTERN "var" EXCLUDE
317-
PATTERN "lib/My/SafeProcess" EXCLUDE
318-
PATTERN "lib/t*" EXCLUDE
319-
PATTERN "CPack" EXCLUDE
320-
PATTERN "CMake*" EXCLUDE
321-
PATTERN "cmake_install.cmake" EXCLUDE
322-
PATTERN "mtr.out*" EXCLUDE
323-
PATTERN ".cvsignore" EXCLUDE
324-
PATTERN "*.am" EXCLUDE
325-
PATTERN "*.in" EXCLUDE
326-
PATTERN "Makefile" EXCLUDE
327-
PATTERN "*.vcxproj" EXCLUDE
328-
PATTERN "*.vcxproj.filters" EXCLUDE
329-
PATTERN "*.vcxproj.user" EXCLUDE
330-
PATTERN "CTest*" EXCLUDE
331-
PATTERN "*~" EXCLUDE
332-
REGEX "${EXCL_GALERA}" EXCLUDE
333-
)
334-
ENDIF()
335-
ENDFUNCTION()

cmake/plugin.cmake

Lines changed: 81 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,46 @@
1414
# along with this program; if not, write to the Free Software
1515
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
1616

17+
IF(NOT EXTERNAL_PLUGIN)
18+
STRING(CONCAT PARENT_SCOPE PARENT_SCOPE) # cannot use SET here
19+
ENDIF()
20+
21+
FUNCTION(INSTALL_MYSQL_TEST from to)
22+
IF(INSTALL_MYSQLTESTDIR)
23+
IF(NOT WITH_WSREP)
24+
SET(EXCL_GALERA "(suite/(galera|wsrep|sys_vars/[rt]/(sysvars_)?wsrep).*|std_data/(galera|wsrep).*)")
25+
ELSE()
26+
SET(EXCL_GALERA "^DOES_NOT_EXIST$")
27+
ENDIF()
28+
INSTALL(
29+
DIRECTORY ${from}
30+
DESTINATION "${INSTALL_MYSQLTESTDIR}/${to}"
31+
USE_SOURCE_PERMISSIONS
32+
COMPONENT Test
33+
PATTERN "var" EXCLUDE
34+
PATTERN "lib/My/SafeProcess" EXCLUDE
35+
PATTERN "lib/t*" EXCLUDE
36+
PATTERN "CPack" EXCLUDE
37+
PATTERN "CMake*" EXCLUDE
38+
PATTERN "cmake_install.cmake" EXCLUDE
39+
PATTERN "mtr.out*" EXCLUDE
40+
PATTERN ".cvsignore" EXCLUDE
41+
PATTERN "*.am" EXCLUDE
42+
PATTERN "*.in" EXCLUDE
43+
PATTERN "Makefile" EXCLUDE
44+
PATTERN "*.vcxproj" EXCLUDE
45+
PATTERN "*.vcxproj.filters" EXCLUDE
46+
PATTERN "*.vcxproj.user" EXCLUDE
47+
PATTERN "CTest*" EXCLUDE
48+
PATTERN "*~" EXCLUDE
49+
REGEX "${EXCL_GALERA}" EXCLUDE
50+
)
51+
ENDIF()
52+
ENDFUNCTION()
1753

1854
INCLUDE(CMakeParseArguments)
1955

20-
# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN
56+
# MARIADB_ADD_PLUGIN(plugin_name source1...sourceN
2157
# [STORAGE_ENGINE]
2258
# [STATIC_ONLY|MODULE_ONLY]
2359
# [MANDATORY|DEFAULT]
@@ -32,10 +68,10 @@ INCLUDE(CMakeParseArguments)
3268
# [LINK_LIBRARIES lib1...libN]
3369
# [DEPENDS target1...targetN]
3470

35-
MACRO(MYSQL_ADD_PLUGIN)
71+
MACRO(MARIADB_ADD_PLUGIN)
3672
CMAKE_PARSE_ARGUMENTS(ARG
3773
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;NOT_EMBEDDED;RECOMPILE_FOR_EMBEDDED;CLIENT"
38-
"MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG;VERSION"
74+
"MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG;VERSION;AUTHOR;DESCRIPTION"
3975
"LINK_LIBRARIES;DEPENDS"
4076
${ARGN}
4177
)
@@ -108,6 +144,10 @@ MACRO(MYSQL_ADD_PLUGIN)
108144
MESSAGE(FATAL_ERROR "Invalid value for PLUGIN_${plugin}")
109145
ENDIF()
110146

147+
IF(EXTERNAL_PLUGIN)
148+
EXTERNAL_PLUGIN_PRE()
149+
ENDIF()
150+
111151
# Validate that the requested build mode is compatible with what the
112152
# plugin actually supports. STATIC_ONLY plugins cannot be built as
113153
# dynamic modules, and MODULE_ONLY plugins cannot be linked statically.
@@ -130,10 +170,17 @@ MACRO(MYSQL_ADD_PLUGIN)
130170
SET(ARG_DEPENDS)
131171
ENDIF()
132172

173+
SET(definitions ";PLUGIN_NAME=\"${target}\";PLUGIN_LICENSE=PLUGIN_LICENSE_GPL")
133174
IF(ARG_VERSION)
134-
SET(version_string ";PLUGIN_${plugin}_VERSION=\"${ARG_VERSION}\"")
175+
SET(definitions "${definitions};PLUGIN_VERSION=\"${ARG_VERSION}\";PLUGIN_HEX_VERSION=${V_MAJOR}*256+${V_MINOR}")
176+
ENDIF()
177+
IF(ARG_AUTHOR)
178+
SET(definitions "${definitions};PLUGIN_AUTHOR=\"${ARG_AUTHOR}\"")
135179
ENDIF()
136-
180+
IF(ARG_DESCRIPTION)
181+
SET(definitions "${definitions};PLUGIN_DESCRIPTION=\"${ARG_DESCRIPTION}\"")
182+
ENDIF()
183+
137184
IF(NOT ARG_MODULE_OUTPUT_NAME)
138185
IF(ARG_STORAGE_ENGINE)
139186
SET(ARG_MODULE_OUTPUT_NAME "ha_${target}")
@@ -169,7 +216,7 @@ MACRO(MYSQL_ADD_PLUGIN)
169216
DTRACE_INSTRUMENT(${target}_embedded)
170217
IF(ARG_RECOMPILE_FOR_EMBEDDED)
171218
SET_TARGET_PROPERTIES(${target}_embedded
172-
PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY${version_string}")
219+
PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY${definitions}")
173220
ENDIF()
174221
ADD_DEPENDENCIES(${target}_embedded GenError ${ARG_DEPENDS})
175222
IF(ARG_LINK_LIBRARIES)
@@ -207,11 +254,11 @@ MACRO(MYSQL_ADD_PLUGIN)
207254
IF(ARG_MANDATORY)
208255
SET (mysql_mandatory_plugins
209256
"${mysql_mandatory_plugins}${builtin_entry}\n")
210-
SET (mysql_mandatory_plugins ${mysql_mandatory_plugins} PARENT_SCOPE)
257+
SET (mysql_mandatory_plugins ${mysql_mandatory_plugins} ${PARENT_SCOPE})
211258
ELSE()
212259
SET (mysql_optional_plugins
213260
"${mysql_optional_plugins}${builtin_entry}\n")
214-
SET (mysql_optional_plugins ${mysql_optional_plugins} PARENT_SCOPE)
261+
SET (mysql_optional_plugins ${mysql_optional_plugins} ${PARENT_SCOPE})
215262
ENDIF()
216263
ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)"
217264
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
@@ -223,7 +270,7 @@ MACRO(MYSQL_ADD_PLUGIN)
223270
SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "")
224271
IF (NOT ARG_CLIENT)
225272
SET_TARGET_PROPERTIES (${target} PROPERTIES
226-
COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN${version_string}")
273+
COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN${definitions}")
227274
ENDIF()
228275

229276
TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES})
@@ -263,34 +310,39 @@ MACRO(MYSQL_ADD_PLUGIN)
263310
IF(CPACK_COMPONENTS_ALL AND
264311
NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT}
265312
AND INSTALL_SYSCONF2DIR)
266-
IF (ARG_STORAGE_ENGINE)
267-
STRING(REPLACE "-" "_" ver ${SERVER_VERSION})
268-
SET(ver " = ${ver}-%{release}")
313+
IF (ARG_STORAGE_ENGINE OR ARG_RECOMPILE_FOR_EMBEDDED)
314+
IF(RPM)
315+
STRING(REPLACE "-" "_" ver ${SERVER_VERSION})
316+
SET(ver " = ${ver}-%{release}")
317+
ELSE() # DEB
318+
SET(ver " (= ${SERVER_VERSION})")
319+
ENDIF()
269320
ELSE()
270321
SET(ver "")
271322
ENDIF()
272323
STRING(TOUPPER ${ARG_COMPONENT} ARG_COMPONENT_UPPER)
273-
SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}SYMLINKS_GROUP ${ARG_COMPONENT} PARENT_SCOPE)
274-
SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}_GROUP ${ARG_COMPONENT} PARENT_SCOPE)
324+
SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}SYMLINKS_GROUP ${ARG_COMPONENT} ${PARENT_SCOPE})
325+
SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}_GROUP ${ARG_COMPONENT} ${PARENT_SCOPE})
275326
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} ${ARG_COMPONENT}Symlinks)
276-
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE)
327+
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${PARENT_SCOPE})
277328

278329
IF (NOT ARG_CLIENT)
279-
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB-server${ver}" PARENT_SCOPE)
330+
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB-server${ver}" ${PARENT_SCOPE})
331+
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "mariadb-server${ver}")
280332
ENDIF()
281-
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} PARENT_SCOPE)
333+
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} ${PARENT_SCOPE})
282334
IF (ARG_VERSION)
283-
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_VERSION ${SERVER_VERSION}_${ARG_VERSION} PARENT_SCOPE)
335+
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_VERSION ${SERVER_VERSION}_${ARG_VERSION} ${PARENT_SCOPE})
284336
SET_PLUGIN_DEB_VERSION(${target} ${SERVER_VERSION}-${ARG_VERSION})
285337
ENDIF()
286338
IF(NOT ARG_CLIENT AND UNIX)
287339
IF (NOT ARG_CONFIG)
288340
SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.cnf")
289341
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
290342
ENDIF()
291-
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" PARENT_SCOPE)
292-
SET(CPACK_RPM_${ARG_COMPONENT}_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/plugin-postin.sh PARENT_SCOPE)
293-
SET(CPACK_RPM_${ARG_COMPONENT}_POST_TRANS_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-posttrans.sh PARENT_SCOPE)
343+
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" ${PARENT_SCOPE})
344+
SET(CPACK_RPM_${ARG_COMPONENT}_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/plugin-postin.sh ${PARENT_SCOPE})
345+
SET(CPACK_RPM_${ARG_COMPONENT}_POST_TRANS_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-posttrans.sh ${PARENT_SCOPE})
294346
ENDIF()
295347
ENDIF()
296348
ELSE()
@@ -323,23 +375,17 @@ MACRO(MYSQL_ADD_PLUGIN)
323375
ADD_FEATURE_INFO(${plugin} ${have_target} "Server plugin ${plugin_type}")
324376
ENDIF()
325377
ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT)
326-
ENDMACRO()
327-
328-
329-
# Add all CMake projects under storage and plugin
330-
# subdirectories, configure sql_builtins.cc
331-
MACRO(CONFIGURE_PLUGINS)
332-
IF(NOT WITHOUT_SERVER)
333-
FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
378+
IF (EXTERNAL_PLUGIN)
379+
EXTERNAL_PLUGIN_POST()
334380
ENDIF()
381+
ENDMACRO()
335382

336-
FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
337-
FOREACH(dir ${dirs_storage} ${dirs_plugin})
338-
IF (EXISTS ${dir}/CMakeLists.txt)
339-
ADD_SUBDIRECTORY(${dir})
340-
ENDIF()
341-
ENDFOREACH()
383+
MACRO(MYSQL_ADD_PLUGIN)
384+
MARIADB_ADD_PLUGIN(${ARGV})
385+
ENDMACRO()
342386

387+
# verify that all -DPLUGIN_xxx=YES plugins are being built
388+
MACRO(VERIFY_PLUGINS)
343389
GET_CMAKE_PROPERTY(ALL_VARS VARIABLES)
344390
FOREACH (V ${ALL_VARS})
345391
IF (V MATCHES "^PLUGIN_")

cmake/wsrep.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ IF(WITH_WSREP)
3535
# Set the patch version
3636
SET(WSREP_PATCH_VERSION "22")
3737

38+
ADD_DEFINITIONS(-DWITH_WSREP)
3839
ADD_SUBMODULE(wsrep-lib)
3940

4041
# Obtain wsrep API version

config.h.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,6 @@
543543

544544
#ifndef EMBEDDED_LIBRARY
545545
#cmakedefine WSREP_INTERFACE_VERSION "@WSREP_INTERFACE_VERSION@"
546-
#cmakedefine WITH_WSREP 1
547546
#endif
548547

549548
#if !defined(__STDC_FORMAT_MACROS)

include/my_global.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,7 @@ typedef struct { const char *dli_fname, dli_fbase; } Dl_info;
11581158
/* Things we don't need in the embedded version of MySQL */
11591159
/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
11601160

1161+
#undef WITH_WSREP
11611162
#else
11621163
#define HAVE_REPLICATION
11631164
#define HAVE_EXTERNAL_CLIENT

sql/unireg.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,6 @@
3333
#define TEMP_PREFIX "MY"
3434
#define LOG_PREFIX "ML"
3535
#define PROGDIR "bin/"
36-
#ifndef MYSQL_DATADIR
37-
#define MYSQL_DATADIR "data/"
38-
#endif
39-
#ifndef SHAREDIR
40-
#define SHAREDIR "share/"
41-
#endif
42-
#ifndef PLUGINDIR
43-
#define PLUGINDIR "lib/plugin"
44-
#endif
4536

4637
#define MAX_ERROR_RANGES 4 /* 1000-2000, 2000-3000, 3000-4000, 4000-5000 */
4738
#define ERRORS_PER_RANGE 1000

storage/columnstore/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
99
IF(NOT PLUGIN_PERFSCHEMA STREQUAL NO)
1010
add_definitions(-DHAVE_PSI_INTERFACE=)
1111
ENDIF()
12+
add_definitions(-DPLUGIN_COLUMNSTORE_VERSION=PLUGIN_VERSION)
1213

1314
# let's temporarily disable the warning, until ColumnStore is fixed
1415
MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-error=suggest-override")

support-files/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Copyright (c) 2006, 2016, Oracle and/or its affiliates.
2-
# Copyright (c) 2012, 2022, MariaDB
2+
# Copyright (c) 2012, 2026, MariaDB plc
33
#
44
# This program is free software; you can redistribute it and/or modify
55
# it under the terms of the GNU General Public License as published by
@@ -256,4 +256,10 @@ IF(UNIX AND NOT WITHOUT_SERVER)
256256
WORKING_DIRECTORY \$ENV{DESTDIR}${prefix})"
257257
COMPONENT SupportFiles)
258258
ENDIF(INSTALL_SYSCONFDIR)
259+
260+
FILE(READ ${CMAKE_SOURCE_DIR}/cmake/install_layout.cmake install_layout.cmake)
261+
FILE(READ ${CMAKE_SOURCE_DIR}/cmake/plugin.cmake plugin.cmake)
262+
CONFIGURE_FILE(mariadb-plugin-config.cmake.in mariadb-plugin-config.cmake @ONLY)
263+
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mariadb-plugin-config.cmake DESTINATION ${INSTALL_SHAREDIR}/cmake/mariadb-plugin/
264+
COMPONENT Development)
259265
ENDIF()

0 commit comments

Comments
 (0)