cmake-plugin: 引入插件间在线共享资源引用的插件框架构建声明模式

This commit is contained in:
zinface 2024-03-21 19:32:18 +08:00
parent 1770af797d
commit 93b66b1651
2 changed files with 82 additions and 8 deletions

View File

@ -44,14 +44,8 @@ if(USE_NOTEPAD_PLUGIN)
# add_framework_plugin_with_git(https://gitee.com/ndd-community/notepad--plugin.plantuml-preview --branch=cmake-plugins-dev)
# # svg
# add_framework_plugin(framework-svg-preview
# framework-plugins/svg-preview
# )
# if(framework-svg-preview_ENABLE)
# find_package(Qt5Svg)
# target_link_libraries(framework-svg-preview Qt5::Svg)
# endif(framework-svg-preview_ENABLE)
# svg 预览插件(使用 with_git 引用的在线构建,它使用了 plantuml 共享的资源定义)
# add_framework_plugin_with_git(https://gitee.com/ndd-community/notepad--plugin.svg-preview --branch=cmake-plugins-dev)
# opencc 项目(基于 git)
# add_subdirectory(opencc-demo-plugin)

View File

@ -5,6 +5,11 @@
#
macro(add_framework_plugin _target)
# FRAMEWORK_WANT_INCLUDE
if(FRAMEWORK_WANT_INCLUDE)
return()
endif(FRAMEWORK_WANT_INCLUDE)
set(${_target}_ALIAS ${_target})
if(WITH_GIT)
set(${_target}_ALIAS online-${_target})
@ -149,4 +154,79 @@ macro(add_framework_plugin_with_git GIT_REPO_URL)
endmacro(add_framework_plugin_with_git GIT_REPO_URL)
# framework_plugin_include <target> <git_repo_url> [git_args...]
# plugin.cmake
# FRAMEWORK_WANT_INCLUDE ON include(plugin.cmake)
# FRAMEWORK_INCLUDE_EXPORTS 以便干净的引用资源(头文件目录)
# FRAMEWORK_SOURCES_EXPORTS 以便干净的引用资源(源文件声明)
# 使
# 使 spark_file_glob
macro(framework_plugin_include _target _plug_cmake)
if(EXISTS ${_plug_cmake})
message("-- [FRAMEWORK WANT]: ${_target}")
set(FRAMEWORK_WANT_INCLUDE TRUE)
set(FRAMEWORK_INCLUDE_EXPORTS)
set(FRAMEWORK_SOURCES_EXPORTS)
include(${_plug_cmake})
spark_file_glob(_want_files ${FRAMEWORK_SOURCES_EXPORTS})
message("-- [FRAMEWORK ANALYZE]: ${_target} Want Dirs: ${FRAMEWORK_INCLUDE_EXPORTS}")
message("-- [FRAMEWORK ANALYZE]: ${_target} Want Files: ${_want_files}")
target_include_directories(${_target} PUBLIC ${FRAMEWORK_INCLUDE_EXPORTS})
target_sources(${_target} PUBLIC ${_want_files})
set(FRAMEWORK_WANT_INCLUDE FALSE)
endif(EXISTS ${_plug_cmake})
endmacro(framework_plugin_include _target _plug_cmake)
# framework_plugin_include_with_git <target> <git_repo_url> [git_args...]
# git plugin.cmake
macro(framework_plugin_include_with_git _target GIT_REPO_URL)
set(GIT_ARGS ${ARGN})
# 1.
string(REGEX MATCHALL "^http://" HTTP_VAR "${GIT_REPO_URL}")
string(REGEX MATCHALL "^https://" HTTPS_VAR "${GIT_REPO_URL}")
# 2.
if(HTTP_VAR STREQUAL "http://")
string(REPLACE "${HTTP_VAR}" "" REPO_URL "${GIT_REPO_URL}")
elseif(HTTPS_VAR STREQUAL "https://")
string(REPLACE "${HTTPS_VAR}" "" REPO_URL "${GIT_REPO_URL}")
else()
return()
endif(HTTP_VAR STREQUAL "http://")
# 3. cmake LIST
string(REPLACE "/" ";" URLSEGS ${REPO_URL})
list(LENGTH URLSEGS URLSEGS_LENGTH)
# 4.
if(URLSEGS_LENGTH GREATER_EQUAL 3)
list(GET URLSEGS 1 URL_USER)
list(GET URLSEGS 2 URL_REPO)
else()
return()
endif(URLSEGS_LENGTH GREATER_EQUAL 3)
message("HTTP_VAR: ${HTTP_VAR}")
message("HTTPS_VAR: ${HTTPS_VAR}")
message("URL_USER: ${URL_USER}")
message("URL_REPO: ${URL_REPO}")
# 4. git clone
if(NOT EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git)
execute_process(COMMAND git clone ${GIT_REPO_URL} ${URL_USER}_${URL_REPO}_git ${GIT_ARGS}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
endif(NOT EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git)
if(EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
message("-- [WANT_GIT_PLUGIN] Found new plugin with git: ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake")
# set(WITH_GIT ON)
framework_plugin_include(${_target}
${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
else()
message("-- [WANT_GIT_PLUGIN] Not Found plugin.cmake with git: ${GIT_REPO_URL}")
return()
endif(EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
endmacro(framework_plugin_include_with_git _target GIT_REPO_URL)
# add_framework_plugin_with_git(https://gitee.com/ndd-community/notepad--plugin.plantuml-preview --branch=cmake-plugins-dev)