summaryrefslogtreecommitdiff
path: root/cmake/plugin.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/plugin.cmake')
-rw-r--r--cmake/plugin.cmake192
1 files changed, 91 insertions, 101 deletions
diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake
index 40e31aeea02..3ad52ce4c98 100644
--- a/cmake/plugin.cmake
+++ b/cmake/plugin.cmake
@@ -13,15 +13,27 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-# Creates a project to build plugin either as static or shared library
-# Parameters:
-# plugin - storage engine name.
-# variable BUILD_TYPE should be set to "STATIC" or "DYNAMIC"
-# Remarks:
-# ${PLUGIN}_SOURCES variable containing source files to produce the
-# library must set before calling this macro
-MACRO(MYSQL_PLUGIN plugin)
+GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
+
+# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN
+# [STORAGE_ENGINE]
+# [MANDATORY|DEFAULT]
+# [STATIC_ONLY|DYNAMIC_ONLY]
+# [MODULE_OUTPUT_NAME module_name]
+# [STATIC_OUTPUT_NAME static_name]
+# [RECOMPILE_FOR_EMBEDDED]
+# [LINK_LIBRARIES lib1...libN]
+# [DEPENDENCIES target1...targetN]
+
+MACRO(MYSQL_ADD_PLUGIN)
+ CMAKE_PARSE_ARGUMENTS(ARG
+ "LINK_LIBRARIES;DEPENDENCIES;MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME"
+ "STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED"
+ ${ARGN}
+ )
+
# Add common include directories
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/sql
@@ -29,90 +41,91 @@ MACRO(MYSQL_PLUGIN plugin)
${SSL_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIR})
+ LIST(GET ARG_DEFAULT_ARGS 0 plugin)
+ SET(SOURCES ${ARG_DEFAULT_ARGS})
+ LIST(REMOVE_AT SOURCES 0)
STRING(TOUPPER ${plugin} plugin)
STRING(TOLOWER ${plugin} target)
-
- IF(NOT ${plugin}_PLUGIN_STATIC AND NOT ${plugin}_PLUGIN_DYNAMIC)
- MESSAGE(FATAL_ERROR
- "Neither ${plugin}_PLUGIN_STATIC nor ${plugin}_PLUGIN_DYNAMIC is defined.
- Please set at least one of these variables to the name of the output
- library in CMakeLists.txt prior to calling MYSQL_PLUGIN"
- )
- ENDIF()
+ # Figure out whether to build plugin
IF(WITH_PLUGIN_${plugin})
SET(WITH_${plugin} 1)
ENDIF()
- IF(WITH_${plugin}_STORAGE_ENGINE OR WITH_{$plugin} OR WITH_ALL
- OR WITH_MAX AND NOT WITHOUT_${plugin}_STORAGE_ENGINE AND NOT
- WITHOUT_${plugin})
+ IF(WITH_${plugin}_STORAGE_ENGINE
+ OR WITH_{$plugin}
+ OR WITH_ALL
+ OR WITH_MAX
+ OR ARG_DEFAULT
+ AND NOT WITHOUT_${plugin}_STORAGE_ENGINE
+ AND NOT WITHOUT_${plugin}
+ AND NOT ARG_MODULE_ONLY)
+
SET(WITH_${plugin} 1)
ELSEIF(WITHOUT_${plugin}_STORAGE_ENGINE OR WITH_NONE OR ${plugin}_DISABLED)
SET(WITHOUT_${plugin} 1)
SET(WITH_${plugin}_STORAGE_ENGINE 0)
SET(WITH_${plugin} 0)
ENDIF()
-
- IF(${plugin}_PLUGIN_MANDATORY)
- SET(WITH_${plugin} 1)
- ENDIF()
- IF(${plugin} MATCHES NDBCLUSTER AND WITH_MAX_NO_NDB)
- SET(WITH_${plugin} 0)
- SET(WITH_${plugin}_STORAGE_ENGINE 0)
- SET(WITHOUT_${plugin} 1)
- SET(WITHOUT_${plugin}_STORAGE_ENGINE 0)
+
+ IF(ARG_MANDATORY)
+ SET(WITH_${plugin} 1)
ENDIF()
+
- IF(STORAGE_ENGINE)
- SET(with_var "WITH_${plugin}_STORAGE_ENGINE" )
+ IF(ARG_STORAGE_ENGINE)
+ SET(with_var "WITH_${plugin}_STORAGE_ENGINE" )
ELSE()
- SET(with_var "WITH_${plugin}")
+ SET(with_var "WITH_${plugin}")
ENDIF()
-
- IF (WITH_${plugin} AND ${plugin}_PLUGIN_STATIC)
- ADD_DEFINITIONS(-DMYSQL_SERVER)
- #Create static library.
- ADD_LIBRARY(${target} ${${plugin}_SOURCES})
- DTRACE_INSTRUMENT(${target})
- ADD_DEPENDENCIES(${target} GenError)
- IF(WITH_EMBEDDED_SERVER AND NOT ${plugin}_PLUGIN_DYNAMIC)
- # Recompile couple of plugins for embedded
- ADD_LIBRARY(${target}_embedded ${${plugin}_SOURCES})
- DTRACE_INSTRUMENT(${target}_embedded)
- SET_TARGET_PROPERTIES(${target}_embedded
- PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY")
- ADD_DEPENDENCIES(${target}_embedded GenError)
- ENDIF()
- IF(${plugin}_LIBS)
- TARGET_LINK_LIBRARIES(${target} ${${plugin}_LIBS})
+ IF(NOT ARG_DEPENDENCIES)
+ SET(ARG_DEPENDENCIES)
+ ENDIF()
+ # Build either static library or module
+ IF (WITH_${plugin} AND NOT ARG_MODULE_ONLY)
+ ADD_LIBRARY(${target} STATIC ${SOURCES})
+ SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITONS "MYSQL_SERVER")
+ DTRACE_INSTRUMENT(${target})
+ ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
+ IF(WITH_EMBEDDED_SERVER)
+ # Embedded library should contain PIC code and be linkable
+ # to shared libraries (on systems that need PIC)
+ IF(ARG_RECOMPILE_FOR_EMBEDDED OR NOT _SKIP_PIC)
+ # Recompile some plugins for embedded
+ ADD_CONVENIENCE_LIBRARY(${target}_embedded ${SOURCES})
+ DTRACE_INSTRUMENT(${target}_embedded)
+ IF(ARG_RECOMPILE_FOR_EMBEDDED)
+ SET_TARGET_PROPERTIES(${target}_embedded
+ PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER;EMBEDDED_LIBRARY")
+ ENDIF()
+ ADD_DEPENDENCIES(${target}_embedded GenError)
+ ENDIF()
ENDIF()
- SET_TARGET_PROPERTIES(${target} PROPERTIES
- OUTPUT_NAME "${${plugin}_PLUGIN_STATIC}")
+ IF(ARG_STATIC_OUTPUT_NAME)
+ SET_TARGET_PROPERTIES(${target} PROPERTIES
+ OUTPUT_NAME ${ARG_STATIC_OUTPUT_NAME})
+ ENDIF()
+
# Update mysqld dependencies
SET (MYSQLD_STATIC_PLUGIN_LIBS ${MYSQLD_STATIC_PLUGIN_LIBS}
- ${target} PARENT_SCOPE)
+ ${target} CACHE INTERNAL "")
+
SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_${target}_plugin"
- PARENT_SCOPE)
- SET(${with_var} ON CACHE BOOL "Link ${plugin} statically to the server"
- FORCE)
-
- ELSEIF(NOT WITHOUT_${plugin} AND ${plugin}_PLUGIN_DYNAMIC
- AND NOT WITHOUT_DYNAMIC_PLUGINS)
-
- # Create a shared module.
- ADD_DEFINITIONS(-DMYSQL_DYNAMIC_PLUGIN)
- ADD_LIBRARY(${target} MODULE ${${plugin}_SOURCES})
- IF(${plugin}_LIBS)
- TARGET_LINK_LIBRARIES(${target} ${${plugin}_LIBS})
- ENDIF()
- DTRACE_INSTRUMENT(${target})
- SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "")
+ PARENT_SCOPE)
+ IF(ARG_STORAGE_ENGINE)
+ SET(${with_var} ON CACHE BOOL "Link ${plugin} statically to the server"
+ FORCE)
+ ENDIF()
+ ELSEIF(NOT WITHOUT_${plugin} AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
+
+ ADD_LIBRARY(${target} MODULE ${SOURCES})
+ DTRACE_INSTRUMENT(${target})
+ SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX ""
+ COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN")
TARGET_LINK_LIBRARIES (${target} mysqlservices)
-
# Plugin uses symbols defined in mysqld executable.
# Some operating systems like Windows and OSX and are pretty strict about
# unresolved symbols. Others are less strict and allow unresolved symbols
@@ -121,41 +134,26 @@ MACRO(MYSQL_PLUGIN plugin)
# Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate
# an additional dependency.
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
- TARGET_LINK_LIBRARIES (${target} mysqld)
- ENDIF()
- ADD_DEPENDENCIES(${target} GenError)
-
- IF(${plugin}_PLUGIN_DYNAMIC)
- SET_TARGET_PROPERTIES(${target} PROPERTIES
- OUTPUT_NAME "${${plugin}_PLUGIN_DYNAMIC}")
+ TARGET_LINK_LIBRARIES (${target} mysqld ${ARG_LINK_LIBRARIES})
ENDIF()
-
- # Update cache "WITH" variable for plugins that support static linking
- IF(${plugin}_PLUGIN_STATIC)
- SET(${with_var} OFF CACHE BOOL "Link ${plugin} statically to the server"
- FORCE)
+ ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
+
+ IF(NOT ARG_MODULE_OUTPUT_NAME)
+ IF(ARG_STORAGE_ENGINE)
+ SET(ARG_MODULE_OUTPUT_NAME "ha_${target}")
+ ELSE()
+ SET(ARG_MODULE_OUTPUT_NAME "${target}")
+ ENDIF()
ENDIF()
-
+ SET_TARGET_PROPERTIES(${target} PROPERTIES
+ OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}")
# Install dynamic library
SET(INSTALL_LOCATION lib/plugin)
INSTALL(TARGETS ${target} DESTINATION ${INSTALL_LOCATION})
INSTALL_DEBUG_SYMBOLS(${target})
- ELSE()
- IF(STORAGE_ENGINE)
- SET(without_var "WITHOUT_${plugin}_STORAGE_ENGINE")
- ELSE()
- SET(without_var "WITHOUT_${plugin}")
- ENDIF()
- SET(${without_var} ON CACHE BOOL "Link ${plugin} statically to the server"
- FORCE)
- MARK_AS_ADVANCED(${without_var})
ENDIF()
ENDMACRO()
-MACRO (MYSQL_STORAGE_ENGINE engine)
- SET(STORAGE_ENGINE 1)
- MYSQL_PLUGIN(${engine})
-ENDMACRO()
# Add all CMake projects under storage and plugin
# subdirectories, configure sql_builtins.cc
@@ -167,12 +165,4 @@ MACRO(CONFIGURE_PLUGINS)
ADD_SUBDIRECTORY(${dir})
ENDIF()
ENDFOREACH()
- # Special handling for partition(not really pluggable)
- IF(NOT WITHOUT_PARTITION_STORAGE_ENGINE)
- SET (WITH_PARTITION_STORAGE_ENGINE 1)
- SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_partition_plugin")
- ENDIF(NOT WITHOUT_PARTITION_STORAGE_ENGINE)
- ADD_DEFINITIONS(${STORAGE_ENGINE_DEFS})
- CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
- ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
ENDMACRO()