diff options
Diffstat (limited to 'libmariadb/cmake/plugins.cmake')
-rw-r--r-- | libmariadb/cmake/plugins.cmake | 94 |
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() |