diff --git a/.gitignore b/.gitignore index 11a6c4600d711..551a2e8fa7d79 100644 --- a/.gitignore +++ b/.gitignore @@ -264,6 +264,7 @@ support-files/mariadb-extra.socket support-files/mariadb@.service support-files/mariadb@.socket support-files/mariadb-extra@.socket +support-files/mariadb-plugin-config.cmake support-files/mini-benchmark support-files/my-huge.cnf support-files/my-innodb-heavy-4G.cnf diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f68ec93a13ae..49b2cfaa57f4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (c) 2006, 2017, Oracle and/or its affiliates. -# Copyright (c) 2008, 2022, MariaDB Corporation. +# Copyright (c) 2008, 2026, MariaDB Corporation. # # This program is free software; you can redistribute it and/or modify # 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") MARK_AS_ADVANCED(PYTHON_SHEBANG) # Add storage engines and plugins. -CONFIGURE_PLUGINS() +IF(NOT WITHOUT_SERVER) + FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*) +ENDIF() + +FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*) +FOREACH(dir ${dirs_storage} ${dirs_plugin}) + IF (EXISTS ${dir}/CMakeLists.txt) + ADD_SUBDIRECTORY(${dir}) + ENDIF() +ENDFOREACH() + +VERIFY_PLUGINS() ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(dbug) diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index 282800a3285e8..557f0d693d758 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -300,36 +300,3 @@ ENDFUNCTION() # For Makefile generators we default Debug build directory to ${buildroot}/../debug. GET_FILENAME_COMPONENT(BINARY_PARENTDIR ${CMAKE_BINARY_DIR} PATH) SET(DEBUGBUILDDIR "${BINARY_PARENTDIR}/debug" CACHE INTERNAL "Directory of debug build") - -FUNCTION(INSTALL_MYSQL_TEST from to) - IF(INSTALL_MYSQLTESTDIR) - IF(NOT WITH_WSREP) - SET(EXCL_GALERA "(suite/(galera|wsrep|sys_vars/[rt]/(sysvars_)?wsrep).*|std_data/(galera|wsrep).*)") - ELSE() - SET(EXCL_GALERA "^DOES_NOT_EXIST$") - ENDIF() - INSTALL( - DIRECTORY ${from} - DESTINATION "${INSTALL_MYSQLTESTDIR}/${to}" - USE_SOURCE_PERMISSIONS - COMPONENT Test - PATTERN "var" EXCLUDE - PATTERN "lib/My/SafeProcess" EXCLUDE - PATTERN "lib/t*" EXCLUDE - PATTERN "CPack" EXCLUDE - PATTERN "CMake*" EXCLUDE - PATTERN "cmake_install.cmake" EXCLUDE - PATTERN "mtr.out*" EXCLUDE - PATTERN ".cvsignore" EXCLUDE - PATTERN "*.am" EXCLUDE - PATTERN "*.in" EXCLUDE - PATTERN "Makefile" EXCLUDE - PATTERN "*.vcxproj" EXCLUDE - PATTERN "*.vcxproj.filters" EXCLUDE - PATTERN "*.vcxproj.user" EXCLUDE - PATTERN "CTest*" EXCLUDE - PATTERN "*~" EXCLUDE - REGEX "${EXCL_GALERA}" EXCLUDE - ) - ENDIF() -ENDFUNCTION() diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index a0deacbcb578b..0e06dd8d7ef31 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -14,10 +14,46 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +IF(NOT EXTERNAL_PLUGIN) + STRING(CONCAT PARENT_SCOPE PARENT_SCOPE) # cannot use SET here +ENDIF() + +FUNCTION(INSTALL_MYSQL_TEST from to) + IF(INSTALL_MYSQLTESTDIR) + IF(NOT WITH_WSREP) + SET(EXCL_GALERA "(suite/(galera|wsrep|sys_vars/[rt]/(sysvars_)?wsrep).*|std_data/(galera|wsrep).*)") + ELSE() + SET(EXCL_GALERA "^DOES_NOT_EXIST$") + ENDIF() + INSTALL( + DIRECTORY ${from} + DESTINATION "${INSTALL_MYSQLTESTDIR}/${to}" + USE_SOURCE_PERMISSIONS + COMPONENT Test + PATTERN "var" EXCLUDE + PATTERN "lib/My/SafeProcess" EXCLUDE + PATTERN "lib/t*" EXCLUDE + PATTERN "CPack" EXCLUDE + PATTERN "CMake*" EXCLUDE + PATTERN "cmake_install.cmake" EXCLUDE + PATTERN "mtr.out*" EXCLUDE + PATTERN ".cvsignore" EXCLUDE + PATTERN "*.am" EXCLUDE + PATTERN "*.in" EXCLUDE + PATTERN "Makefile" EXCLUDE + PATTERN "*.vcxproj" EXCLUDE + PATTERN "*.vcxproj.filters" EXCLUDE + PATTERN "*.vcxproj.user" EXCLUDE + PATTERN "CTest*" EXCLUDE + PATTERN "*~" EXCLUDE + REGEX "${EXCL_GALERA}" EXCLUDE + ) + ENDIF() +ENDFUNCTION() INCLUDE(CMakeParseArguments) -# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN +# MARIADB_ADD_PLUGIN(plugin_name source1...sourceN # [STORAGE_ENGINE] # [STATIC_ONLY|MODULE_ONLY] # [MANDATORY|DEFAULT] @@ -32,10 +68,10 @@ INCLUDE(CMakeParseArguments) # [LINK_LIBRARIES lib1...libN] # [DEPENDS target1...targetN] -MACRO(MYSQL_ADD_PLUGIN) +MACRO(MARIADB_ADD_PLUGIN) CMAKE_PARSE_ARGUMENTS(ARG "STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;NOT_EMBEDDED;RECOMPILE_FOR_EMBEDDED;CLIENT" - "MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG;VERSION" + "MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG;VERSION;AUTHOR;DESCRIPTION" "LINK_LIBRARIES;DEPENDS" ${ARGN} ) @@ -108,6 +144,10 @@ MACRO(MYSQL_ADD_PLUGIN) MESSAGE(FATAL_ERROR "Invalid value for PLUGIN_${plugin}") ENDIF() + IF(EXTERNAL_PLUGIN) + EXTERNAL_PLUGIN_PRE() + ENDIF() + # Validate that the requested build mode is compatible with what the # plugin actually supports. STATIC_ONLY plugins cannot be built as # dynamic modules, and MODULE_ONLY plugins cannot be linked statically. @@ -130,10 +170,17 @@ MACRO(MYSQL_ADD_PLUGIN) SET(ARG_DEPENDS) ENDIF() + SET(definitions ";PLUGIN_NAME=\"${target}\";PLUGIN_LICENSE=PLUGIN_LICENSE_GPL") IF(ARG_VERSION) - SET(version_string ";PLUGIN_${plugin}_VERSION=\"${ARG_VERSION}\"") + SET(definitions "${definitions};PLUGIN_VERSION=\"${ARG_VERSION}\";PLUGIN_HEX_VERSION=${V_MAJOR}*256+${V_MINOR}") + ENDIF() + IF(ARG_AUTHOR) + SET(definitions "${definitions};PLUGIN_AUTHOR=\"${ARG_AUTHOR}\"") ENDIF() - + IF(ARG_DESCRIPTION) + SET(definitions "${definitions};PLUGIN_DESCRIPTION=\"${ARG_DESCRIPTION}\"") + ENDIF() + IF(NOT ARG_MODULE_OUTPUT_NAME) IF(ARG_STORAGE_ENGINE) SET(ARG_MODULE_OUTPUT_NAME "ha_${target}") @@ -169,7 +216,7 @@ MACRO(MYSQL_ADD_PLUGIN) DTRACE_INSTRUMENT(${target}_embedded) IF(ARG_RECOMPILE_FOR_EMBEDDED) SET_TARGET_PROPERTIES(${target}_embedded - PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY${version_string}") + PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY${definitions}") ENDIF() ADD_DEPENDENCIES(${target}_embedded GenError ${ARG_DEPENDS}) IF(ARG_LINK_LIBRARIES) @@ -207,11 +254,11 @@ MACRO(MYSQL_ADD_PLUGIN) IF(ARG_MANDATORY) SET (mysql_mandatory_plugins "${mysql_mandatory_plugins}${builtin_entry}\n") - SET (mysql_mandatory_plugins ${mysql_mandatory_plugins} PARENT_SCOPE) + SET (mysql_mandatory_plugins ${mysql_mandatory_plugins} ${PARENT_SCOPE}) ELSE() SET (mysql_optional_plugins "${mysql_optional_plugins}${builtin_entry}\n") - SET (mysql_optional_plugins ${mysql_optional_plugins} PARENT_SCOPE) + SET (mysql_optional_plugins ${mysql_optional_plugins} ${PARENT_SCOPE}) ENDIF() ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)" AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS) @@ -223,7 +270,7 @@ MACRO(MYSQL_ADD_PLUGIN) SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "") IF (NOT ARG_CLIENT) SET_TARGET_PROPERTIES (${target} PROPERTIES - COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN${version_string}") + COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN${definitions}") ENDIF() TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES}) @@ -263,24 +310,29 @@ MACRO(MYSQL_ADD_PLUGIN) IF(CPACK_COMPONENTS_ALL AND NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT} AND INSTALL_SYSCONF2DIR) - IF (ARG_STORAGE_ENGINE) - STRING(REPLACE "-" "_" ver ${SERVER_VERSION}) - SET(ver " = ${ver}-%{release}") + IF (ARG_STORAGE_ENGINE OR ARG_RECOMPILE_FOR_EMBEDDED) + IF(RPM) + STRING(REPLACE "-" "_" ver ${SERVER_VERSION}) + SET(ver " = ${ver}-%{release}") + ELSE() # DEB + SET(ver " (= 1:${SERVER_VERSION}+maria~${DEBIAN_ABBR})") + ENDIF() ELSE() SET(ver "") ENDIF() STRING(TOUPPER ${ARG_COMPONENT} ARG_COMPONENT_UPPER) - SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}SYMLINKS_GROUP ${ARG_COMPONENT} PARENT_SCOPE) - SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}_GROUP ${ARG_COMPONENT} PARENT_SCOPE) + SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}SYMLINKS_GROUP ${ARG_COMPONENT} ${PARENT_SCOPE}) + SET(CPACK_COMPONENT_${ARG_COMPONENT_UPPER}_GROUP ${ARG_COMPONENT} ${PARENT_SCOPE}) SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} ${ARG_COMPONENT}Symlinks) - SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE) + SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${PARENT_SCOPE}) IF (NOT ARG_CLIENT) - SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB-server${ver}" PARENT_SCOPE) + SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB-server${ver}" ${PARENT_SCOPE}) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS "mariadb-server${ver}") ENDIF() - SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} PARENT_SCOPE) + SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} ${PARENT_SCOPE}) IF (ARG_VERSION) - SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_VERSION ${SERVER_VERSION}_${ARG_VERSION} PARENT_SCOPE) + SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_VERSION ${SERVER_VERSION}_${ARG_VERSION} ${PARENT_SCOPE}) SET_PLUGIN_DEB_VERSION(${target} ${SERVER_VERSION}-${ARG_VERSION}) ENDIF() IF(NOT ARG_CLIENT AND UNIX) @@ -288,9 +340,9 @@ MACRO(MYSQL_ADD_PLUGIN) SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.cnf") FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n") ENDIF() - SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" PARENT_SCOPE) - SET(CPACK_RPM_${ARG_COMPONENT}_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/plugin-postin.sh PARENT_SCOPE) - SET(CPACK_RPM_${ARG_COMPONENT}_POST_TRANS_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-posttrans.sh PARENT_SCOPE) + SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" ${PARENT_SCOPE}) + SET(CPACK_RPM_${ARG_COMPONENT}_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/plugin-postin.sh ${PARENT_SCOPE}) + SET(CPACK_RPM_${ARG_COMPONENT}_POST_TRANS_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-posttrans.sh ${PARENT_SCOPE}) ENDIF() ENDIF() ELSE() @@ -323,23 +375,17 @@ MACRO(MYSQL_ADD_PLUGIN) ADD_FEATURE_INFO(${plugin} ${have_target} "Server plugin ${plugin_type}") ENDIF() ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT) -ENDMACRO() - - -# Add all CMake projects under storage and plugin -# subdirectories, configure sql_builtins.cc -MACRO(CONFIGURE_PLUGINS) - IF(NOT WITHOUT_SERVER) - FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*) + IF (EXTERNAL_PLUGIN) + EXTERNAL_PLUGIN_POST() ENDIF() +ENDMACRO() - FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*) - FOREACH(dir ${dirs_storage} ${dirs_plugin}) - IF (EXISTS ${dir}/CMakeLists.txt) - ADD_SUBDIRECTORY(${dir}) - ENDIF() - ENDFOREACH() +MACRO(MYSQL_ADD_PLUGIN) + MARIADB_ADD_PLUGIN(${ARGV}) +ENDMACRO() +# verify that all -DPLUGIN_xxx=YES plugins are being built +MACRO(VERIFY_PLUGINS) GET_CMAKE_PROPERTY(ALL_VARS VARIABLES) FOREACH (V ${ALL_VARS}) IF (V MATCHES "^PLUGIN_") diff --git a/cmake/wsrep.cmake b/cmake/wsrep.cmake index 91f040bcdb6ef..748ed705e3751 100644 --- a/cmake/wsrep.cmake +++ b/cmake/wsrep.cmake @@ -35,6 +35,7 @@ IF(WITH_WSREP) # Set the patch version SET(WSREP_PATCH_VERSION "22") + ADD_DEFINITIONS(-DWITH_WSREP) ADD_SUBMODULE(wsrep-lib) # Obtain wsrep API version diff --git a/config.h.cmake b/config.h.cmake index 193fcf83fb97c..89bc700efdfe6 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -545,7 +545,6 @@ #ifndef EMBEDDED_LIBRARY #cmakedefine WSREP_INTERFACE_VERSION "@WSREP_INTERFACE_VERSION@" -#cmakedefine WITH_WSREP 1 #endif #if !defined(__STDC_FORMAT_MACROS) diff --git a/debian/libmariadb-dev.install b/debian/libmariadb-dev.install index 48120822f8136..72147bb60ee46 100644 --- a/debian/libmariadb-dev.install +++ b/debian/libmariadb-dev.install @@ -4,8 +4,7 @@ usr/include/mariadb/errmsg.h usr/include/mariadb/ma_list.h usr/include/mariadb/ma_pvio.h usr/include/mariadb/ma_tls.h -usr/include/mariadb/mariadb/ -usr/include/mariadb/mariadb/ma_io.h +usr/include/mariadb/mariadb usr/include/mariadb/mariadb_com.h usr/include/mariadb/mariadb_ctype.h usr/include/mariadb/mariadb_dyncol.h @@ -16,13 +15,12 @@ usr/include/mariadb/my_alloca.h usr/include/mariadb/my_config.h usr/include/mariadb/my_global.h usr/include/mariadb/my_sys.h +usr/include/mariadb/mysql usr/include/mariadb/mysql.h -usr/include/mariadb/mysql/ -usr/include/mariadb/mysql/client_plugin.h -usr/include/mariadb/mysql/plugin_auth.h usr/include/mariadb/mysql_com.h usr/include/mariadb/mysql_version.h usr/include/mariadb/mysqld_error.h +usr/include/mariadb/server usr/lib/*/libmariadb.a usr/lib/*/libmariadb.so usr/lib/*/libmariadbclient.a @@ -30,6 +28,7 @@ usr/lib/*/libmariadbclient.so usr/lib/*/libmysqlservices.a usr/lib/*/pkgconfig/libmariadb.pc usr/share/aclocal/mysql.m4 +usr/share/cmake/mariadb-plugin usr/share/man/man1/mariadb_config.1 usr/share/man/man1/mysql_config.1 usr/share/man/man3/*.3 diff --git a/debian/libmariadbd-dev.install b/debian/libmariadbd-dev.install index 3eebe631b9eab..13d961409ccf4 100644 --- a/debian/libmariadbd-dev.install +++ b/debian/libmariadbd-dev.install @@ -1,4 +1,3 @@ -usr/include/mariadb/server usr/lib/*/libmariadbd.a usr/lib/*/libmariadbd.so usr/lib/*/libmysqld.a diff --git a/include/my_global.h b/include/my_global.h index 9a2d80519bb52..86872231da2a9 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -1173,6 +1173,7 @@ typedef struct { const char *dli_fname, dli_fbase; } Dl_info; /* Things we don't need in the embedded version of MySQL */ /* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ +#undef WITH_WSREP #else #define HAVE_REPLICATION #define HAVE_EXTERNAL_CLIENT diff --git a/libservices/CMakeLists.txt b/libservices/CMakeLists.txt index 37c24646791f7..dc6c477baea82 100644 --- a/libservices/CMakeLists.txt +++ b/libservices/CMakeLists.txt @@ -48,4 +48,6 @@ SET(MYSQLSERVICES_SOURCES ) ADD_CONVENIENCE_LIBRARY(mysqlservices ${MYSQLSERVICES_SOURCES}) -INSTALL(TARGETS mysqlservices DESTINATION ${INSTALL_LIBDIR} COMPONENT Development) + +INSTALL(TARGETS mysqlservices EXPORT mariadb-plugin-targets + DESTINATION ${INSTALL_LIBDIR} COMPONENT Development) diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 83e64f8c1a58d..a17096d849d04 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -307,6 +307,11 @@ IF(MSVC OR CMAKE_SYSTEM_NAME MATCHES AIX) SET_TARGET_PROPERTIES(server PROPERTIES AIX_EXPORT_ALL_SYMBOLS TRUE) ENDIF() MYSQL_INSTALL_TARGETS(server DESTINATION ${INSTALL_BINDIR} COMPONENT Server) + IF(MSVC) + # ARCHIVE = server.lib only, not server.dll, enough for linking plugins + INSTALL(TARGETS server EXPORT mariadb-plugin-targets ARCHIVE + DESTINATION ${INSTALL_LIBDIR} COMPONENT Development) + ENDIF() ENDIF() ADD_LIBRARY(sql_builtins STATIC ${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc) diff --git a/sql/unireg.h b/sql/unireg.h index 7a7e97c082c20..694aba5a7dd1e 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -33,15 +33,6 @@ #define TEMP_PREFIX "MY" #define LOG_PREFIX "ML" #define PROGDIR "bin/" -#ifndef MYSQL_DATADIR -#define MYSQL_DATADIR "data/" -#endif -#ifndef SHAREDIR -#define SHAREDIR "share/" -#endif -#ifndef PLUGINDIR -#define PLUGINDIR "lib/plugin" -#endif #define MAX_ERROR_RANGES 4 /* 1000-2000, 2000-3000, 3000-4000, 4000-5000 */ #define ERRORS_PER_RANGE 1000 diff --git a/storage/columnstore/CMakeLists.txt b/storage/columnstore/CMakeLists.txt index 52f30b67161c2..d29f91f6615e4 100644 --- a/storage/columnstore/CMakeLists.txt +++ b/storage/columnstore/CMakeLists.txt @@ -9,6 +9,7 @@ add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS) IF(NOT PLUGIN_PERFSCHEMA STREQUAL NO) add_definitions(-DHAVE_PSI_INTERFACE=) ENDIF() +add_definitions(-DPLUGIN_COLUMNSTORE_VERSION=PLUGIN_VERSION) # let's temporarily disable the warning, until ColumnStore is fixed MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-error=suggest-override") diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt index 8dc3d235dcddc..c9aad16bf75e8 100644 --- a/support-files/CMakeLists.txt +++ b/support-files/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (c) 2006, 2016, Oracle and/or its affiliates. -# Copyright (c) 2012, 2022, MariaDB +# Copyright (c) 2012, 2026, MariaDB plc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -254,3 +254,15 @@ IF(UNIX AND NOT WITHOUT_SERVER) COMPONENT SupportFiles) ENDIF(INSTALL_SYSCONFDIR) ENDIF() + +# mariadb-plugin-config.cmake lets out-of-tree plugins build against an +# installed MariaDB-devel / MariaDB SDK; needed on Windows same as on UNIX. +IF(NOT WITHOUT_SERVER) + FILE(READ ${CMAKE_SOURCE_DIR}/cmake/install_layout.cmake install_layout.cmake) + FILE(READ ${CMAKE_SOURCE_DIR}/cmake/plugin.cmake plugin.cmake) + CONFIGURE_FILE(mariadb-plugin-config.cmake.in mariadb-plugin-config.cmake @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mariadb-plugin-config.cmake + DESTINATION ${INSTALL_SHAREDIR}/cmake/mariadb-plugin/ COMPONENT Development) + INSTALL(EXPORT mariadb-plugin-targets FILE mariadb-plugin-targets.cmake + DESTINATION ${INSTALL_SHAREDIR}/cmake/mariadb-plugin/ COMPONENT Development) +ENDIF() diff --git a/support-files/mariadb-plugin-config.cmake.in b/support-files/mariadb-plugin-config.cmake.in new file mode 100644 index 0000000000000..bc7a788e29d68 --- /dev/null +++ b/support-files/mariadb-plugin-config.cmake.in @@ -0,0 +1,125 @@ +# Copyright (c) 2026, MariaDB plc +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# 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 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-1335 USA + +SET(EXTERNAL_PLUGIN TRUE) +SET(SERVER_VERSION @SERVER_VERSION@) +STRING(TOLOWER @SYSTEM_NAME_AND_PROCESSOR@ SYSTEM_NAME_AND_PROCESSOR) + +GET_FILENAME_COMPONENT(basedir "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) +SET(CMAKE_C_FLAGS "-DDBUG_OFF ${CMAKE_C_FLAGS}") +SET(CMAKE_CXX_FLAGS "-DDBUG_OFF ${CMAKE_CXX_FLAGS}") + +MACRO(DTRACE_INSTRUMENT) +ENDMACRO() +MACRO(ADD_VERSION_INFO) +ENDMACRO() +MACRO(MYSQL_INSTALL_TARGETS) + INSTALL(TARGETS ${ARGV}) +ENDMACRO() +MACRO(SET_PLUGIN_DEB_VERSION plugin ver) + SET(CPACK_DEBIAN_PACKAGE_VERSION "1:${ver}+maria~${DEBIAN_ABBR}") +ENDMACRO() + +ADD_CUSTOM_TARGET(GenError) + +INCLUDE(FeatureSummary) +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/mariadb-plugin-targets.cmake") +INCLUDE_DIRECTORIES(${basedir}/@INSTALL_INCLUDEDIR@/server) + +# Run at the beginning of MARIADB_ADD_PLUGIN +MACRO(EXTERNAL_PLUGIN_PRE) + IF (NOT ARG_COMPONENT) + SET(ARG_COMPONENT ${target}) + ENDIF() + IF (ARG_STATIC_ONLY OR PLUGIN_${plugin} MATCHES "STATIC") + MESSAGE(FATAL_ERROR "Static plugin ${plugin} must be built from server source tree") + ENDIF() + IF(NOT ARG_AUTHOR) + MESSAGE(FATAL_ERROR "Plugin ${plugin} has no AUTHOR") + ENDIF() + IF(NOT ARG_DESCRIPTION) + MESSAGE(FATAL_ERROR "Plugin ${plugin} has no DESCRIPTION") + ENDIF() + IF(NOT ARG_VERSION MATCHES "^([0-9]+)\\.([0-9]+)" OR CMAKE_MATCH_2 GREATER 255) + MESSAGE(FATAL_ERROR "Plugin ${plugin} has no or invalid VERSION") + ENDIF() + SET(V_MAJOR ${CMAKE_MATCH_1}) + SET(V_MINOR ${CMAKE_MATCH_2}) + CMAKE_POLICY(SET CMP0048 NEW) + PROJECT(${target} VERSION ${ARG_VERSION} DESCRIPTION "${ARG_DESCRIPTION}") + SET(CPACK_PACKAGE_NAME "mariadb-plugin-${ARG_COMPONENT}") + SET(CPACK_RPM_PACKAGE_NAME "MariaDB-plugin-${ARG_COMPONENT}") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${ARG_DESCRIPTION}") + SET(CPACK_RPM_PACKAGE_DESCRIPTION "${ARG_DESCRIPTION}") + SET(CPACK_RPM_FILE_NAME RPM-DEFAULT) + SET(CPACK_RPM_PACKAGE_LICENSE "GPLv2") + SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases") + SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}") + SET(CPACK_RPM_PACKAGE_VENDOR "${ARG_AUTHOR}") + SET(CPACK_PACKAGE_RELOCATABLE FALSE) + + FOREACH(p ${INSTALL_PLUGINDIRABS} ${INSTALL_MYSQLTESTDIRABS}/plugin ${INSTALL_SYSCONF2DIR}) + WHILE(NOT prev STREQUAL ${p}) + LIST(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${p}") + SET(prev ${p}) + GET_FILENAME_COMPONENT(p "${p}" DIRECTORY) + ENDWHILE() + ENDFOREACH() + + IF(ARG_RECOMPILE_FOR_EMBEDDED OR ARG_STORAGE_ENGINE) + INCLUDE_DIRECTORIES(${basedir}/@INSTALL_INCLUDEDIR@/server/private) + ENDIF() + + SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "${ARG_AUTHOR}") + SET(CPACK_COMPONENTS_ALL TRUE) # for version-fiddling IF in plugin.cmake + IF (DEB) + # match autobake-deb.sh naming + EXECUTE_PROCESS(COMMAND sh -c "echo $(lsb_release -si) $(lsb_release -sr)|sed 's/^\\(...\\)[^ ]* /\\L\\1/;s/\\.//g'" + RESULT_VARIABLE res OUTPUT_VARIABLE DEBIAN_ABBR OUTPUT_STRIP_TRAILING_WHITESPACE) + EXECUTE_PROCESS(COMMAND sh -c "dpkg --print-architecture" + RESULT_VARIABLE res OUTPUT_VARIABLE DEBIAN_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (NOT ("${DEBIAN_ABBR}_${DEBIAN_ARCH}" MATCHES "^(deb|ubu)[0-9]+_[a-z0-9_]+$")) + message(FATAL_ERROR "Cannot get debian version (${DEBIAN_ABBR}) or architecture (${DEBIAN_ARCH})") + endif() + ENDIF() +ENDMACRO(EXTERNAL_PLUGIN_PRE) + +# Run at the end of MARIADB_ADD_PLUGIN +MACRO(EXTERNAL_PLUGIN_POST) + SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_RPM_${ARG_COMPONENT}_PACKAGE_VERSION}) + SET(CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES}) + SET(CPACK_DEBIAN_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_DEBIAN_PACKAGE_VERSION}_${DEBIAN_ARCH}.deb") + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${SERVER_VERSION}-${ARG_VERSION}-${SYSTEM_NAME_AND_PROCESSOR}") + INCLUDE(CPack) +ENDMACRO(EXTERNAL_PLUGIN_POST) + +@install_layout.cmake@ + +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX ${basedir} + CACHE PATH "install prefix" FORCE) +ENDIF() + +@plugin.cmake@ + +IF(RPM) + set(CPACK_GENERATOR "RPM") +ELSEIF(DEB) + set(CPACK_GENERATOR "DEB") +ELSEIF(WIN32) + set(CPACK_GENERATOR "ZIP") +ELSE() + set(CPACK_GENERATOR "TGZ") +ENDIF()