summaryrefslogtreecommitdiffstats
path: root/libmariadb/cmake/plugins.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'libmariadb/cmake/plugins.cmake')
-rw-r--r--libmariadb/cmake/plugins.cmake94
1 files changed, 94 insertions, 0 deletions
diff --git a/libmariadb/cmake/plugins.cmake b/libmariadb/cmake/plugins.cmake
new file mode 100644
index 00000000..1f321b14
--- /dev/null
+++ b/libmariadb/cmake/plugins.cmake
@@ -0,0 +1,94 @@
+#
+# Copyright (C) 2013-2018 MariaDB Corporation AB
+#
+# Redistribution and use is allowed according to the terms of the New
+# BSD license.
+# For details see the COPYING-CMAKE-SCRIPTS file.
+#
+# plugin configuration
+
+include(${CC_SOURCE_DIR}/cmake/install_plugins.cmake)
+include(${CC_SOURCE_DIR}/cmake/sign.cmake)
+
+FUNCTION(REGISTER_PLUGIN)
+
+ SET(one_value_keywords TARGET DEFAULT TYPE)
+ SET(multi_value_keywords CONFIGURATIONS SOURCES LIBRARIES INCLUDES COMPILE_OPTIONS)
+
+ cmake_parse_arguments(CC_PLUGIN
+ "${options}"
+ "${one_value_keywords}"
+ "${multi_value_keywords}"
+ ${ARGN})
+
+ # overwrite default if it was specified with cmake option
+ string(TOUPPER ${CC_PLUGIN_TARGET} cc_plugin)
+ if(NOT "${CLIENT_PLUGIN_${cc_plugin}}" STREQUAL "")
+ SET(CC_PLUGIN_DEFAULT ${CLIENT_PLUGIN_${cc_plugin}})
+ endif()
+
+ # use uppercase
+ string(TOUPPER ${CC_PLUGIN_TARGET} target_name)
+ string(TOUPPER "${CC_PLUGIN_CONFIGURATIONS}" CC_PLUGIN_CONFIGURATIONS)
+
+ if(NOT ${PLUGIN_${target_name}} STREQUAL "")
+ string(TOUPPER ${PLUGIN_${target_name}} PLUGIN_${target_name})
+ set(CC_PLUGIN_DEFAULT ${PLUGIN_${target_name}})
+ endif()
+
+# check if default value is valid
+ string(TOUPPER ${CC_PLUGIN_DEFAULT} CC_PLUGIN_DEFAULT)
+ list(FIND CC_PLUGIN_CONFIGURATIONS ${CC_PLUGIN_DEFAULT} configuration_found)
+ if(${configuration_found} EQUAL -1)
+ message(FATAL_ERROR "Invalid plugin type ${CC_PLUGIN_DEFAULT}. Allowed plugin types are ${CC_PLUGIN_CONFIGURATIONS}")
+ endif()
+
+ if(NOT ${CC_PLUGIN_DEFAULT} STREQUAL "OFF")
+ set(PLUGIN_${CC_PLUGIN_TARGET}_TYPE ${CC_PLUGIN_TYPE})
+
+ if(${CC_PLUGIN_DEFAULT} STREQUAL "DYNAMIC")
+
+ set(PLUGINS_DYNAMIC ${PLUGINS_DYNAMIC} ${CC_PLUGIN_TARGET} PARENT_SCOPE)
+ if(WIN32)
+ set(target ${CC_PLUGIN_TARGET})
+ set(FILE_TYPE "VFT_DLL")
+ set(FILE_DESCRIPTION "MariaDB client plugin")
+ set(FILE_VERSION ${CPACK_PACKAGE_VERSION})
+ set(ORIGINAL_FILE_NAME "${target}.dll")
+ configure_file(${CC_SOURCE_DIR}/win/resource.rc.in
+ ${CC_BINARY_DIR}/win/${target}.rc
+ @ONLY)
+ set(CC_PLUGIN_SOURCES ${CC_PLUGIN_SOURCES} ${CC_BINARY_DIR}/win/${target}.rc ${CC_SOURCE_DIR}/plugins/plugin.def)
+ endif()
+ add_library(${CC_PLUGIN_TARGET} MODULE ${CC_PLUGIN_SOURCES})
+ target_link_libraries(${CC_PLUGIN_TARGET} ${CC_PLUGIN_LIBRARIES})
+ set_target_properties(${CC_PLUGIN_TARGET} PROPERTIES PREFIX "")
+ set_target_properties(${CC_PLUGIN_TARGET}
+ PROPERTIES COMPILE_FLAGS
+ "-DPLUGIN_DYNAMIC=1 ${CC_PLUGIN_COMPILE_OPTIONS}")
+ if (NOT "${CC_PLUGIN_INCLUDES}" STREQUAL "")
+ if(CMAKE_VERSION VERSION_LESS 2.8.11)
+ include_directories(${CC_PLUGIN_INCLUDES})
+ else()
+ target_include_directories(${CC_PLUGIN_TARGET} PRIVATE ${CC_PLUGIN_INCLUDES})
+ endif()
+ endif()
+ if (${CC_TARGET_COMPILE_OPTIONS})
+ target_compile_options(${CC_PLUGIN_TARGET} ${CC_TARGET_COMPILE_OPTIONS})
+ endif()
+
+ if(WIN32)
+ SIGN_TARGET(${target})
+ endif()
+ INSTALL_PLUGIN(${CC_PLUGIN_TARGET} ${CMAKE_CURRENT_BINARY_DIR})
+ elseif(${CC_PLUGIN_DEFAULT} STREQUAL "STATIC")
+ set(PLUGINS_STATIC ${PLUGINS_STATIC} ${CC_PLUGIN_TARGET} PARENT_SCOPE)
+ set(LIBMARIADB_PLUGIN_CFLAGS ${LIBMARIADB_PLUGIN_CFLAGS} ${CC_PLUGIN_COMPILE_OPTIONS} PARENT_SCOPE)
+ set(LIBMARIADB_PLUGIN_INCLUDES ${LIBMARIADB_PLUGIN_INCLUDES} ${CC_PLUGIN_INCLUDES} PARENT_SCOPE)
+ set(LIBMARIADB_PLUGIN_SOURCES ${LIBMARIADB_PLUGIN_SOURCES} ${CC_PLUGIN_SOURCES} PARENT_SCOPE)
+ set(LIBMARIADB_PLUGIN_LIBS ${LIBMARIADB_PLUGIN_LIBS} ${CC_PLUGIN_LIBRARIES} PARENT_SCOPE)
+ endif()
+ else()
+ set(PLUGINS_OFF ${PLUGINS_OFF} ${CC_PLUGIN_TARGET})
+ endif()
+endfunction()