|
@@ -1,4 +1,8 @@
|
|
|
-
|
|
|
+# framework.cmake
|
|
|
+ # add_framework_plugin <target> [dir...|file...]
|
|
|
+ # 提供本地构建
|
|
|
+ # add_framework_plugin_with_git <git> [arg...]
|
|
|
+ # 提供 with_git 在线引用构建
|
|
|
|
|
|
# add_framework_plugin [<dir>...] [<file>...]
|
|
|
# 构建一个基于 framework 的插件
|
|
@@ -136,103 +140,22 @@ macro(add_framework_plugin_with_git GIT_REPO_URL)
|
|
|
message("URL_REPO: ${URL_REPO}")
|
|
|
|
|
|
# 4. 处理自动化 git clone
|
|
|
- if(NOT EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git)
|
|
|
+ if(NOT EXISTS ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${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)
|
|
|
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rd_plugins_cache)
|
|
|
+ else()
|
|
|
+ execute_process(COMMAND git pull
|
|
|
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git)
|
|
|
+ endif(NOT EXISTS ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git)
|
|
|
|
|
|
# 6. 处理加入构建,如果这个仓库里有 plugin.cmake 的话
|
|
|
- if(EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
+ if(EXISTS ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
message("-- [GIT_PLUGIN] Found new plugin with git: ")
|
|
|
- message(" ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake")
|
|
|
+ message(" ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git/plugin.cmake")
|
|
|
set(WITH_GIT ON)
|
|
|
- include(${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
+ include(${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
else()
|
|
|
return()
|
|
|
- endif(EXISTS ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
+ endif(EXISTS ${CMAKE_SOURCE_DIR}/3rd_plugins_cache/${URL_USER}_${URL_REPO}_git/plugin.cmake)
|
|
|
|
|
|
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: ")
|
|
|
- message(" ${FRAMEWORK_INCLUDE_EXPORTS}")
|
|
|
- message("-- [FRAMEWORK ANALYZE]: ${_target} Want Files: ")
|
|
|
- message(" ${_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})
|
|
|
- # else()
|
|
|
- # execute_process(COMMAND git pull
|
|
|
- # WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${URL_USER}_${URL_REPO}_git)
|
|
|
- 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")
|
|
|
- message("-- [WANT_GIT_PLUGIN] Found new plugin with git: ")
|
|
|
- message(" ${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)
|