Mercurial > irccd
changeset 989:73fdae7aa902
cmake: improve IDE support for plugins
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 10 Feb 2021 17:56:14 +0100 |
parents | 2e02fbb8b32b |
children | daaf92c097e6 |
files | cmake/IrccdDefinePlugin.cmake |
diffstat | 1 files changed, 44 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/cmake/IrccdDefinePlugin.cmake Wed Feb 10 17:45:55 2021 +0100 +++ b/cmake/IrccdDefinePlugin.cmake Wed Feb 10 17:56:14 2021 +0100 @@ -16,6 +16,17 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # +function(_idp_install_man file) + get_filename_component(basename ${file} NAME) + configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/${basename}) + + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${basename} + DESTINATION ${CMAKE_INSTALL_MANDIR}/man7 + RENAME irccd-plugin-${basename} + ) +endfunction () + function(irccd_define_js_plugin) set(options "") set(oneValueArgs MAN NAME SCRIPT) @@ -29,6 +40,13 @@ message(FATAL_ERROR "Missing SCRIPT argument") endif () + # Create a dummy custom target just to get it through the IDE. + add_custom_target( + irccd-plugin-${PLG_NAME} + SOURCES ${PLG_SCRIPT} ${PLG_MAN} + ) + set_target_properties(irccd-plugin-${PLG_NAME} PROPERTIES FOLDER "plugins") + # Install script. get_filename_component(basename ${PLG_SCRIPT} NAME) configure_file(${PLG_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/${basename}) @@ -38,23 +56,15 @@ DESTINATION ${CMAKE_INSTALL_LIBDIR}/irccd ) - # Install manual page. if (PLG_MAN) - get_filename_component(basename ${PLG_MAN} NAME) - configure_file(${PLG_MAN} ${CMAKE_CURRENT_BINARY_DIR}/${basename}) - - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${basename} - DESTINATION ${CMAKE_INSTALL_MANDIR}/man7 - RENAME irccd-plugin-${basename} - ) + _idp_install_man(${PLG_MAN}) endif () endfunction() function(irccd_define_c_plugin) set(options "") set(oneValueArgs NAME MAN) - set(multiValueArgs LIBRARIES SOURCES) + set(multiValueArgs INCLUDES LIBRARIES SOURCES) cmake_parse_arguments(PLG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -64,35 +74,46 @@ message(FATAL_ERROR "Missing SOURCES argument") endif () - add_library(${PLG_NAME} MODULE ${PLG_SOURCES}) + add_library(irccd-plugin-${PLG_NAME} MODULE ${PLG_SOURCES} ${PLG_MAN}) get_target_property(LIBIRCCD_INCLUDES libirccd INCLUDE_DIRECTORIES) get_target_property(LIBCOMPAT_INCLUDES libirccd-compat INCLUDE_DIRECTORIES) target_include_directories( - ${PLG_NAME} + irccd-plugin-${PLG_NAME} PRIVATE + ${PLG_INCLUDES} ${LIBIRCCD_INCLUDES} ${LIBCOMPAT_INCLUDES} ${OPENSSL_INCLUDE_DIR} ) - target_link_libraries(${PLG_NAME} ${PLG_LIBRARIES}) - set_target_properties(${PLG_NAME} PROPERTIES PREFIX "") + target_link_libraries(irccd-plugin-${PLG_NAME} ${PLG_LIBRARIES}) + set_target_properties(irccd-plugin-${PLG_NAME} + PROPERTIES + PREFIX "" + PROJECT_LABEL "irccd" + FOLDER "plugins" + OUTPUT_NAME ${PLG_NAME} + RUNTIME_OUTPUT_NAME_${c} ${PLG_NAME} + ) + install(TARGETS irccd-plugin-${PLG_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/irccd) + + foreach (c ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${c} c) + set_target_properties(irccd-plugin-${PLG_NAME} + PROPERTIES + OUTPUT_NAME_${c} ${PLG_NAME} + RUNTIME_OUTPUT_NAME_${c} ${PLG_NAME} + ) + endforeach () # # This is required but not enabled by default, otherwise we get # undefined errors from any libirccd functions. # if (APPLE) - set_target_properties(${PLG_NAME} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") + set_target_properties(irccd-plugin-${PLG_NAME} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif () if (PLG_MAN) - get_filename_component(basename ${PLG_MAN} NAME) - configure_file(${PLG_MAN} ${CMAKE_CURRENT_BINARY_DIR}/${basename}) - - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${basename} - DESTINATION ${CMAKE_INSTALL_MANDIR}/man7 - RENAME irccd-plugin-${basename} - ) + _idp_install_man(${PLG_MAN}) endif () endfunction()