From 506f3787da79c56ecd3a5849250981d37f25dd09 Mon Sep 17 00:00:00 2001
From: wyc <1104749580@qq.com>
Date: Mon, 20 Jul 2026 16:05:05 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E5=91=BD=E5=90=8D=E7=A9=BA?=
=?UTF-8?q?=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
0_cmake_library/clear.cmake | 2 +-
0_cmake_library/cmake_bash_library/core.cmake | 4 +-
.../cmake_bash_library/export.cmake | 2 +-
.../cmake_library/base/codec/codec.cmake | 6 +
.../composite/registry/registry.cmake | 45 +-
.../cmake_library/domain/action/action.cmake | 7 +-
.../domain/library/library.cmake | 861 +++++++++-------
.../cmake_library/scripts/library/library.sh | 139 ++-
.../composite/registry/registry_test.cmake | 4 +-
.../library/library_namespace_test.cmake | 105 ++
.../test/domain/library/library_test.cmake | 100 +-
.../cmake_library/test/test_all.cmake | 1 +
.../cmake_library/test/test_common.cmake | 2 +-
.../create_linux_driver_proj.cmake | 10 +-
0_cmake_library/main.cmake | 2 +-
.../ninja_build_analyze/build_analyze.sh | 2 +-
.../ninja_build_analyze/export.cmake | 2 +-
.../register}/base.cmake | 49 +-
.../register}/computer_graphics.cmake | 83 +-
0_cmake_library/register/export.cmake | 8 +
.../register}/libarchive.cmake | 86 +-
0_cmake_library/register/osg_earth.cmake | 959 ++++++++++++++++++
.../register}/register_library.cmake | 131 +--
.../register}/with_qt.cmake | 12 +-
.../register_libaray/rcl_register_ex.cmake | 317 ++++--
0_cmake_library/调试选项.md | 121 ---
3rdParty/库编译规范.txt | 4 -
CMakeLists.txt | 57 +-
end.cmake | 5 +-
register/export.cmake | 8 -
register/osgearth.cmake | 375 -------
register/图表库.md | 24 -
register_project.cmake | 4 +-
start.cmake | 5 +-
toolchain/交叉编译工具链.md | 46 -
toolchain/注意事项.txt | 16 -
toolchain/示例CMakePresets.json | 401 --------
37 files changed, 2216 insertions(+), 1789 deletions(-)
create mode 100644 0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake
rename {register => 0_cmake_library/register}/base.cmake (79%)
rename {register => 0_cmake_library/register}/computer_graphics.cmake (68%)
create mode 100644 0_cmake_library/register/export.cmake
rename {register => 0_cmake_library/register}/libarchive.cmake (85%)
create mode 100644 0_cmake_library/register/osg_earth.cmake
rename {register => 0_cmake_library/register}/register_library.cmake (66%)
rename {register => 0_cmake_library/register}/with_qt.cmake (65%)
delete mode 100644 0_cmake_library/调试选项.md
delete mode 100644 3rdParty/库编译规范.txt
delete mode 100644 register/export.cmake
delete mode 100644 register/osgearth.cmake
delete mode 100644 register/图表库.md
delete mode 100644 toolchain/交叉编译工具链.md
delete mode 100644 toolchain/注意事项.txt
delete mode 100644 toolchain/示例CMakePresets.json
diff --git a/0_cmake_library/clear.cmake b/0_cmake_library/clear.cmake
index efd6e33..0f17945 100644
--- a/0_cmake_library/clear.cmake
+++ b/0_cmake_library/clear.cmake
@@ -312,7 +312,7 @@ endfunction()
macro(attach_current_source_dir )
- get_property(_targets DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY BUILDSYSTEM_TARGETS)
+ get_property(_targets DIRECTORY "." PROPERTY BUILDSYSTEM_TARGETS)
foreach(target IN LISTS _targets)
get_target_property(target_type "${target}" TYPE)
diff --git a/0_cmake_library/cmake_bash_library/core.cmake b/0_cmake_library/cmake_bash_library/core.cmake
index d09e14c..ac599cc 100644
--- a/0_cmake_library/cmake_bash_library/core.cmake
+++ b/0_cmake_library/cmake_bash_library/core.cmake
@@ -1,6 +1,6 @@
include_guard(GLOBAL)
-include(${CMAKE_CURRENT_LIST_DIR}/base.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/prop.cmake)
+include(base.cmake)
+include(prop.cmake)
diff --git a/0_cmake_library/cmake_bash_library/export.cmake b/0_cmake_library/cmake_bash_library/export.cmake
index 60b2441..4f57923 100644
--- a/0_cmake_library/cmake_bash_library/export.cmake
+++ b/0_cmake_library/cmake_bash_library/export.cmake
@@ -1,2 +1,2 @@
include_guard(GLOBAL)
-include(${CMAKE_CURRENT_LIST_DIR}/core.cmake)
+include(core.cmake)
diff --git a/0_cmake_library/cmake_library/base/codec/codec.cmake b/0_cmake_library/cmake_library/base/codec/codec.cmake
index fd6df16..7095364 100644
--- a/0_cmake_library/cmake_library/base/codec/codec.cmake
+++ b/0_cmake_library/cmake_library/base/codec/codec.cmake
@@ -63,6 +63,12 @@ endfunction()
# 注意: 所有结构层和业务层的导出文件都应使用这个函数,避免 Windows CRLF/CR 残留进入 Bash 解析链路。
function(codec_write_text_file path text)
codec_normalize_line_endings(_text "${text}")
+ if(EXISTS "${path}")
+ file(READ "${path}" _current_text)
+ if("${_current_text}" STREQUAL "${_text}")
+ return()
+ endif()
+ endif()
file(WRITE "${path}" "${_text}")
endfunction()
diff --git a/0_cmake_library/cmake_library/composite/registry/registry.cmake b/0_cmake_library/cmake_library/composite/registry/registry.cmake
index 14da14d..41943d6 100644
--- a/0_cmake_library/cmake_library/composite/registry/registry.cmake
+++ b/0_cmake_library/cmake_library/composite/registry/registry.cmake
@@ -20,12 +20,13 @@ include("${CMAKE_CURRENT_LIST_DIR}/../../base/codec/codec.cmake")
#
/items.txt
# /order.txt
# /graph.mmd
-# /nodes//map.txt
-# /nodes//init.cmake
-# /nodes//clear.cmake
-# 10. registry_deserialize_dir 从同样的文件夹结构恢复 registry。
-# 11. graph.txt 中的 N 行第三列就是 map id;反序列化时用这个 map id 定位 nodes//map.txt。
-# 12. init.cmake 和 clear.cmake 是节点 map 中 INIT_SCRIPT_CONTENT / CLEAR_SCRIPT_CONTENT 的文件投影。
+# /nodes//map.txt
+# /nodes//init.cmake
+# /nodes//clear.cmake
+# 10. 带 :: 的节点名按命名空间层级展开为 node_path;普通节点继续使用 map id。
+# 11. registry_deserialize_dir 从同样的文件夹结构恢复 registry。
+# 12. graph.txt 中的 N 行第三列仍然保存 map id,只用于恢复内存中的属性 map。
+# 13. init.cmake 和 clear.cmake 是节点 map 中 INIT_SCRIPT_CONTENT / CLEAR_SCRIPT_CONTENT 的文件投影。
# 反序列化时会读取同目录下的 init.cmake / clear.cmake 并回写到该节点 map。
# API: registry_create()
@@ -61,9 +62,11 @@ function(registry_add self name)
get_property(_graph GLOBAL PROPERTY "__registry.${self}.graph")
get_property(_items GLOBAL PROPERTY "__registry.${self}.items")
get_property(_order GLOBAL PROPERTY "__registry.${self}.order")
-
- set(_map_id "__registry_${self}_map_${name}")
-
+ if(ARGC GREATER 2)
+ set(_map_id "${ARGV2}")
+ else()
+ set(_map_id "__registry_${self}_map_${name}")
+ endif()
graph_add_node("${_graph}" "${name}" "${_map_id}")
set_add("${_items}" "${name}")
list_push_back("${_order}" "${name}")
@@ -232,21 +235,31 @@ function(registry_export_mermaid self out)
set(${out} "${_text}" PARENT_SCOPE)
endfunction()
+function(__registry_node_relative_dir name map_id out)
+ if("${name}" MATCHES "^[A-Za-z0-9_+-]+(::[A-Za-z0-9_+-]+)+$")
+ string(REPLACE "::" "/" _relative_dir "${name}")
+ else()
+ set(_relative_dir "${map_id}")
+ endif()
+ set(${out} "${_relative_dir}" PARENT_SCOPE)
+endfunction()
+
# API: registry_node_dir( )
# 作用: 返回对象 name 在 registry 序列化目录中的节点目录。
# 参数: self 是 registry 名称;name 是对象名;dir 是 registry_serialize_dir 的根目录;out 是接收目录路径的变量名。
# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 目录规则固定为 /nodes/;map_id 来自 graph 节点 data。
+# 注意: 带 :: 的节点按命名空间层级展开;普通节点继续使用 map id。
function(registry_node_dir self name dir out)
registry_get_map_id("${self}" "${name}" _map_id)
- set(${out} "${dir}/nodes/${_map_id}" PARENT_SCOPE)
+ __registry_node_relative_dir("${name}" "${_map_id}" _relative_dir)
+ set(${out} "${dir}/nodes/${_relative_dir}" PARENT_SCOPE)
endfunction()
# API: registry_serialize_dir( )
# 作用: 将 registry 分层序列化到文件夹。
# 参数: self 是 registry 名称;dir 是输出文件夹路径。
# 返回: 无。
-# 注意: 复用 graph/map/set/list 的 serialize_file;graph 节点 data 决定 nodes/ 目录。
+# 注意: 复用 graph/map/set/list 的 serialize_file;带命名空间的节点使用 nodes//,普通节点使用 nodes/。
function(registry_serialize_dir self dir)
get_property(_graph GLOBAL PROPERTY "__registry.${self}.graph")
get_property(_items GLOBAL PROPERTY "__registry.${self}.items")
@@ -265,7 +278,8 @@ function(registry_serialize_dir self dir)
graph_nodes("${_graph}" _nodes)
foreach(_node IN LISTS _nodes)
graph_get_node_data("${_graph}" "${_node}" _map_id)
- set(_node_dir "${dir}/nodes/${_map_id}")
+ __registry_node_relative_dir("${_node}" "${_map_id}" _relative_dir)
+ set(_node_dir "${dir}/nodes/${_relative_dir}")
file(MAKE_DIRECTORY "${_node_dir}")
map_serialize_file("${_map_id}" "${_node_dir}/map.txt")
map_get("${_map_id}" INIT_SCRIPT_CONTENT _init_script_content)
@@ -279,7 +293,7 @@ endfunction()
# 作用: 从 registry_serialize_dir 输出的文件夹恢复 registry。
# 参数: self 是新 registry 名称;dir 是输入文件夹路径。
# 返回: 无。
-# 注意: 先清空已有 registry 当前可枚举内容,再恢复外层 graph,并按 graph 节点 data 读取 nodes//map.txt。
+# 注意: 先清空已有 registry 当前可枚举内容,再恢复外层 graph,并按节点名规则读取对应的 map.txt。
function(registry_deserialize_dir self dir)
get_property(_old_graph GLOBAL PROPERTY "__registry.${self}.graph")
@@ -318,7 +332,8 @@ function(registry_deserialize_dir self dir)
graph_nodes("${_graph}" _nodes)
foreach(_node IN LISTS _nodes)
graph_get_node_data("${_graph}" "${_node}" _map_id)
- set(_node_dir "${dir}/nodes/${_map_id}")
+ __registry_node_relative_dir("${_node}" "${_map_id}" _relative_dir)
+ set(_node_dir "${dir}/nodes/${_relative_dir}")
file(READ "${_node_dir}/map.txt" _map_text)
map_deserialize("${_map_id}" "${_map_text}")
file(READ "${_node_dir}/init.cmake" _init_script_content)
diff --git a/0_cmake_library/cmake_library/domain/action/action.cmake b/0_cmake_library/cmake_library/domain/action/action.cmake
index 3a11fd8..0756504 100644
--- a/0_cmake_library/cmake_library/domain/action/action.cmake
+++ b/0_cmake_library/cmake_library/domain/action/action.cmake
@@ -147,7 +147,7 @@ endfunction()
# 返回: 通过 PARENT_SCOPE 设置 out。
# 注意: 当前只把 '-' 转成 '_';业务层仍要保证 action 名是安全 id。
function(action_target_name operation out)
- string(REPLACE "-" "_" _target_name "${operation}")
+ string(REGEX REPLACE "[^A-Za-z0-9_]+" "_" _target_name "${operation}")
set(${out} "${_target_name}" PARENT_SCOPE)
endfunction()
@@ -191,15 +191,16 @@ endfunction()
# 注意: target 名为 _- _。item/action 名必须由业务层保证安全。
function(action_add_item_operation_targets prefix dir bash script items operations folder_root)
foreach(_item IN LISTS items)
+ action_target_name("${_item}" _item_target)
foreach(_op IN LISTS operations)
action_target_name("${_op}" _op_target)
- add_custom_target("${prefix}_${_item}_${_op_target}"
+ add_custom_target("${prefix}_${_item_target}_${_op_target}"
COMMAND "${bash}" "${script}" "${_op}" --data-dir "${dir}" --config "$" "${_item}"
COMMENT "Run action ${_op} for ${_item}"
USES_TERMINAL
VERBATIM
)
- action_set_target_folder("${prefix}_${_item}_${_op_target}" "${folder_root}" "items/${_item}")
+ action_set_target_folder("${prefix}_${_item_target}_${_op_target}" "${folder_root}" "items/${_item}")
endforeach()
endforeach()
endfunction()
diff --git a/0_cmake_library/cmake_library/domain/library/library.cmake b/0_cmake_library/cmake_library/domain/library/library.cmake
index b1618ff..160bd3b 100644
--- a/0_cmake_library/cmake_library/domain/library/library.cmake
+++ b/0_cmake_library/cmake_library/domain/library/library.cmake
@@ -122,103 +122,265 @@ endfunction()
# 6. 操作枚举来自 Bash:CMake 配置期执行 library.sh list-ops,结果缓存后用于生成 custom target。
# 7. 操作枚举不传参数文件;实际操作必须传 --data-dir 指向导出目录。
# 8. 对象名、属性名和 self 仍然是安全 id;复杂值由底层 codec 自动处理。
-# 9. 每个库的 map.txt、init.cmake、clear.cmake 统一由 registry 导出到 registry/nodes//。
+# 9. 每个库的 map.txt、init.cmake、clear.cmake 统一由 registry 导出到 registry/nodes///。
# 10. library_init_environment 和 library_clear_environment 是 macro,保证 init/clear 中设置或 unset 的变量作用到调用者作用域。
# 11. OTHER_USE_OPT 是库导出给依赖方使用的 CMake configure 参数;Bash 构建依赖方时会按依赖闭包顺序自动追加。
-# INTERNAL: __library_registry_id( )
-# 作用: 计算 library 业务对象内部 registry id。
-# 参数: self 是 library 名称;out 是接收 registry id 的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: registry id 是内部结构名,调用层不直接使用。
function(__library_registry_id self out)
- set(${out} "__library_${self}_registry" PARENT_SCOPE)
+ string(SHA256 _hash "registry:${self}")
+ set(${out} "__library_registry_${_hash}" PARENT_SCOPE)
endfunction()
-
-# INTERNAL: __library_globals_id( )
-# 作用: 计算 library 业务对象内部全局参数 map id。
-# 参数: self 是 library 名称;out 是接收 map id 的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: globals map 与 registry 一对一;导出为 globals.txt。
function(__library_globals_id self out)
- set(${out} "__library_${self}_globals" PARENT_SCOPE)
+ string(SHA256 _hash "globals:${self}")
+ set(${out} "__library_globals_${_hash}" PARENT_SCOPE)
endfunction()
-
-# INTERNAL: __library_operations_id( )
-# 作用: 计算 library 业务对象内部操作列表 list id。
-# 参数: self 是 library 名称;out 是接收 list id 的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 操作列表来自 Bash 的 list-ops 输出,用于 CMake target 生成。
function(__library_operations_id self out)
- set(${out} "__library_${self}_operations" PARENT_SCOPE)
+ string(SHA256 _hash "operations:${self}")
+ set(${out} "__library_operations_${_hash}" PARENT_SCOPE)
+endfunction()
+function(__library_export_registry_id self out)
+ string(SHA256 _hash "export:${self}")
+ set(${out} "__library_export_registry_${_hash}" PARENT_SCOPE)
+endfunction()
+function(__library_map_id scope full_name out)
+ string(SHA256 _hash "${scope}:${full_name}")
+ set(${out} "__library_map_${_hash}" PARENT_SCOPE)
+endfunction()
+function(__library_storage_path full_name out)
+ string(REPLACE "::" "/" _path "${full_name}")
+ set(${out} "${_path}" PARENT_SCOPE)
+endfunction()
+function(__library_namespace_parent namespace out)
+ if("${namespace}" MATCHES "::")
+ string(REGEX REPLACE "::[^:]+$" "" _parent "${namespace}")
+ else()
+ set(_parent "")
+ endif()
+ set(${out} "${_parent}" PARENT_SCOPE)
+endfunction()
+function(__library_namespace_leaf namespace out)
+ string(REGEX REPLACE "^.*::" "" _leaf "${namespace}")
+ set(${out} "${_leaf}" PARENT_SCOPE)
+endfunction()
+function(__library_register_namespace_path namespace)
+ string(REPLACE "::" ";" _parts "${namespace}")
+ set(_current "")
+ foreach(_part IN LISTS _parts)
+ if("${_part}" STREQUAL "" OR NOT "${_part}" MATCHES "^[A-Za-z0-9_+-]+$")
+ message(FATAL_ERROR "invalid namespace: ${namespace}")
+ endif()
+ if("${_current}" STREQUAL "")
+ set(_current "${_part}")
+ else()
+ string(APPEND _current "::${_part}")
+ endif()
+ get_property(_names GLOBAL PROPERTY "__library.namespaces")
+ list(FIND _names "${_current}" _index)
+ if(_index EQUAL -1)
+ set_property(GLOBAL APPEND PROPERTY "__library.namespaces" "${_current}")
+ set_property(GLOBAL PROPERTY "__library.namespace.${_current}.dependencies" "")
+ endif()
+ endforeach()
+endfunction()
+function(__library_namespace_initialized namespace out)
+ get_property(_initialized GLOBAL PROPERTY "__library.namespace.${namespace}.initialized")
+ if(_initialized)
+ set(${out} TRUE PARENT_SCOPE)
+ else()
+ set(${out} FALSE PARENT_SCOPE)
+ endif()
+endfunction()
+function(__library_resolve_namespace self reference out)
+ get_property(_names GLOBAL PROPERTY "__library.namespaces")
+ set(_candidates "")
+ list(FIND _names "${reference}" _exact_index)
+ if(NOT _exact_index EQUAL -1)
+ list(APPEND _candidates "${reference}")
+ endif()
+ if(NOT "${reference}" MATCHES "::")
+ __library_namespace_parent("${self}" _parent)
+ if(NOT "${_parent}" STREQUAL "")
+ set(_sibling "${_parent}::${reference}")
+ list(FIND _names "${_sibling}" _sibling_index)
+ if(NOT _sibling_index EQUAL -1)
+ list(APPEND _candidates "${_sibling}")
+ endif()
+ endif()
+ foreach(_name IN LISTS _names)
+ __library_namespace_leaf("${_name}" _leaf)
+ if("${_leaf}" STREQUAL "${reference}")
+ list(APPEND _candidates "${_name}")
+ endif()
+ endforeach()
+ endif()
+ list(REMOVE_DUPLICATES _candidates)
+ list(LENGTH _candidates _count)
+ if(_count EQUAL 0)
+ message(FATAL_ERROR "namespace not found: ${reference}")
+ endif()
+ if(_count GREATER 1)
+ string(REPLACE ";" ", " _text "${_candidates}")
+ message(FATAL_ERROR "ambiguous namespace '${reference}': ${_text}")
+ endif()
+ list(GET _candidates 0 _resolved)
+ set(${out} "${_resolved}" PARENT_SCOPE)
+endfunction()
+function(library_namespace_depends self)
+ __library_namespace_initialized("${self}" _initialized)
+ if(NOT _initialized)
+ message(FATAL_ERROR "namespace is not initialized: ${self}")
+ endif()
+ get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${self}.dependencies")
+ foreach(_reference IN LISTS ARGN)
+ __library_resolve_namespace("${self}" "${_reference}" _dependency)
+ if("${_dependency}" STREQUAL "${self}")
+ message(FATAL_ERROR "namespace cannot depend on itself: ${self}")
+ endif()
+ list(APPEND _dependencies "${_dependency}")
+ message(STATUS "[namespace-depends] ${self} -> ${_dependency}")
+ endforeach()
+ list(REMOVE_DUPLICATES _dependencies)
+ set_property(GLOBAL PROPERTY "__library.namespace.${self}.dependencies" "${_dependencies}")
+endfunction()
+function(library_namespace_dependencies self out)
+ get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${self}.dependencies")
+ set(${out} "${_dependencies}" PARENT_SCOPE)
+endfunction()
+function(__library_visible_namespaces self out)
+ set(_visible "")
+ set(_current "${self}")
+ while(NOT "${_current}" STREQUAL "")
+ list(APPEND _visible "${_current}")
+ get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${_current}.dependencies")
+ list(APPEND _visible ${_dependencies})
+ __library_namespace_parent("${_current}" _current)
+ endwhile()
+ list(REMOVE_DUPLICATES _visible)
+ set(${out} "${_visible}" PARENT_SCOPE)
+endfunction()
+function(__library_full_name namespace id out)
+ set(${out} "${namespace}::${id}" PARENT_SCOPE)
+endfunction()
+function(__library_split_full_name full_name namespace_out id_out)
+ if(NOT "${full_name}" MATCHES "::")
+ message(FATAL_ERROR "library full name must contain '::': ${full_name}")
+ endif()
+ string(REGEX REPLACE "::[^:]+$" "" _namespace "${full_name}")
+ string(REGEX REPLACE "^.*::" "" _id "${full_name}")
+ set(${namespace_out} "${_namespace}" PARENT_SCOPE)
+ set(${id_out} "${_id}" PARENT_SCOPE)
+endfunction()
+function(__library_local_has namespace full_name out)
+ __library_namespace_initialized("${namespace}" _initialized)
+ if(NOT _initialized)
+ set(${out} FALSE PARENT_SCOPE)
+ return()
+ endif()
+ __library_registry_id("${namespace}" _registry)
+ registry_has("${_registry}" "${full_name}" _has)
+ set(${out} "${_has}" PARENT_SCOPE)
+endfunction()
+function(library_resolve self reference out)
+ if("${reference}" MATCHES "::")
+ __library_split_full_name("${reference}" _namespace _id)
+ __library_local_has("${_namespace}" "${reference}" _has)
+ if(NOT _has)
+ message(FATAL_ERROR "library not found: ${reference}")
+ endif()
+ set(${out} "${reference}" PARENT_SCOPE)
+ return()
+ endif()
+ set(_candidates "")
+ __library_visible_namespaces("${self}" _visible)
+ foreach(_namespace IN LISTS _visible)
+ __library_full_name("${_namespace}" "${reference}" _candidate)
+ __library_local_has("${_namespace}" "${_candidate}" _has)
+ if(_has)
+ list(APPEND _candidates "${_candidate}")
+ endif()
+ endforeach()
+ list(REMOVE_DUPLICATES _candidates)
+ list(LENGTH _candidates _count)
+ if(_count EQUAL 0)
+ message(FATAL_ERROR "library not found from namespace '${self}': ${reference}")
+ endif()
+ if(_count GREATER 1)
+ string(REPLACE ";" ", " _text "${_candidates}")
+ message(FATAL_ERROR "ambiguous library '${reference}' from namespace '${self}': ${_text}; use a full name")
+ endif()
+ list(GET _candidates 0 _resolved)
+ set(${out} "${_resolved}" PARENT_SCOPE)
+endfunction()
+function(__library_resolve_owner self reference full_out namespace_out registry_out)
+ library_resolve("${self}" "${reference}" _full_name)
+ __library_split_full_name("${_full_name}" _namespace _id)
+ __library_registry_id("${_namespace}" _registry)
+ set(${full_out} "${_full_name}" PARENT_SCOPE)
+ set(${namespace_out} "${_namespace}" PARENT_SCOPE)
+ set(${registry_out} "${_registry}" PARENT_SCOPE)
endfunction()
-
-# INTERNAL: __library_get_bash_executable( )
-# 作用: 获取当前 library 业务对象要调用的 Bash 可执行文件路径。
-# 参数: self 是 library 名称;out 是接收 Bash 可执行文件的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 不做候选命令搜索;Windows 默认 C:/Program Files/Git/bin/bash.exe,其他平台默认 bash。调用层可用 BASH_EXECUTABLE 覆盖。
function(__library_get_bash_executable self out)
__library_globals_id("${self}" _globals)
map_get("${_globals}" BASH_EXECUTABLE _bash)
-
- if ("${_bash}" STREQUAL "")
+ if("${_bash}" STREQUAL "")
set(_bash "${__library_default_bash_executable}")
- endif ()
-
+ endif()
set(${out} "${_bash}" PARENT_SCOPE)
endfunction()
-
-# INTERNAL: __library_get_bash_script( )
-# 作用: 获取当前 library 业务对象要调用的 Bash 主脚本路径。
-# 参数: self 是 library 名称;out 是接收脚本路径的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 优先读取 globals 中的 BASH_SCRIPT;没有设置时使用 scripts/library/library.sh。
function(__library_get_bash_script self out)
__library_globals_id("${self}" _globals)
map_get("${_globals}" BASH_SCRIPT _script)
-
- if ("${_script}" STREQUAL "")
+ if("${_script}" STREQUAL "")
set(_script "${__library_default_bash_script}")
- endif ()
-
+ endif()
set(${out} "${_script}" PARENT_SCOPE)
endfunction()
+function(__library_namespace_storage_id self out)
+ string(REGEX REPLACE "[^A-Za-z0-9_]" "_" _namespace_storage "${self}")
+ set(${out} "${_namespace_storage}" PARENT_SCOPE)
+endfunction()
-# API: library_create()
-# 作用: 创建库依赖业务对象,并初始化 registry、globals map 和 operations list。
-# 参数: self 是业务对象名称。
-# 返回: 无。
-# 注意: 会自动捕获当前 CMake 配置环境参数;不做重复创建检查。
-function(library_create self root_dir)
- define_property(GLOBAL PROPERTY "__library.${self}"
- BRIEF_DOCS "library business object ${self}"
- FULL_DOCS "domain library object ${self}"
- )
-
+# 经常修改的函数位置
+function(__library_set_default_dirs self root_dir)
+ __library_globals_id("${self}" _globals)
+ __library_namespace_storage_id("${self}" _namespace_storage)
+ get_filename_component(_source_cache_root "${root_dir}/../source" ABSOLUTE)
+ map_set("${_globals}" ROOT_DIR "${root_dir}")
+ map_set("${_globals}" CACHE_ROOT "${root_dir}")
+ map_set("${_globals}" SOURCE_CACHE_ROOT "${_source_cache_root}")
+ map_set("${_globals}" INSTALL_CACHE_ROOT "${root_dir}/install")
+ map_set("${_globals}" DATA_EXPORT_DIR "${root_dir}/library_data")
+ map_set("${_globals}" BUILD_CACHE_ROOT "${CMAKE_BINARY_DIR}/_yc_deps_${_namespace_storage}")
+endfunction()
+function(library_set_root_dir self root_dir)
+ __library_set_default_dirs("${self}" "${root_dir}")
+endfunction()
+function(library_create self)
+ set(root_dir "${ARGV1}")
+ __library_register_namespace_path("${self}")
+ __library_namespace_initialized("${self}" _initialized)
+ if(_initialized)
+ message(FATAL_ERROR "namespace already initialized: ${self}")
+ endif()
+ if("${root_dir}" STREQUAL "")
+ set(root_dir "${CMAKE_BINARY_DIR}")
+ endif()
+ define_property(GLOBAL PROPERTY "__library.${self}" BRIEF_DOCS "library namespace ${self}" FULL_DOCS "library namespace ${self}")
__library_registry_id("${self}" _registry)
__library_globals_id("${self}" _globals)
__library_operations_id("${self}" _operations)
-
set_property(GLOBAL PROPERTY "__library.${self}.registry" "${_registry}")
set_property(GLOBAL PROPERTY "__library.${self}.globals" "${_globals}")
set_property(GLOBAL PROPERTY "__library.${self}.operations" "${_operations}")
-
+ set_property(GLOBAL PROPERTY "__library.namespace.${self}.initialized" TRUE)
registry_create("${_registry}")
map_create("${_globals}")
list_create("${_operations}")
-
library_capture_cmake_environment("${self}" "${root_dir}")
endfunction()
-
-# API: library_capture_cmake_environment()
-# 作用: 将当前 CMake 配置过程的工具链参数写入 globals map。
-# 参数: self 是业务对象名称。
-# 返回: 无。
-# 注意: Bash 不猜 generator/toolchain/preset;统一读取这里导出的全局参数。
function(library_capture_cmake_environment self root_dir)
__library_globals_id("${self}" _globals)
-
+ __library_namespace_storage_id("${self}" _namespace_storage)
map_set("${_globals}" CMAKE_COMMAND "${CMAKE_COMMAND}")
map_set("${_globals}" CMAKE_GENERATOR "${CMAKE_GENERATOR}")
map_set("${_globals}" CMAKE_GENERATOR_PLATFORM "${CMAKE_GENERATOR_PLATFORM}")
@@ -232,209 +394,262 @@ function(library_capture_cmake_environment self root_dir)
map_set("${_globals}" CMAKE_SOURCE_DIR "${CMAKE_SOURCE_DIR}")
map_set("${_globals}" CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}")
map_set("${_globals}" CMAKE_PROJECT_NAME "${CMAKE_PROJECT_NAME}")
-
- # CMake preset 名称在不同版本/入口下不一定有统一变量;这里保留显式覆盖端口。
map_set("${_globals}" CMAKE_CONFIGURE_PRESET "${CMAKE_CONFIGURE_PRESET}")
map_set("${_globals}" CMAKE_BUILD_PRESET "${CMAKE_BUILD_PRESET}")
map_set("${_globals}" CMAKE_INSTALL_PRESET "${CMAKE_INSTALL_PRESET}")
-
map_set("${_globals}" BASH_EXECUTABLE "${__library_default_bash_executable}")
map_set("${_globals}" BASH_SCRIPT "${__library_default_bash_script}")
map_set("${_globals}" SCRIPT_ROOT "${__library_project_root}/scripts")
-
- map_set("${_globals}" CACHE_ROOT "${root_dir}/${self}")
- map_set("${_globals}" SOURCE_CACHE_ROOT "${root_dir}/../source")
- map_set("${_globals}" INSTALL_CACHE_ROOT "${root_dir}_${self}/install")
- map_set("${_globals}" DATA_EXPORT_DIR "${root_dir}_${self}/library_data")
- map_set("${_globals}" BUILD_CACHE_ROOT "${CMAKE_BINARY_DIR}/_yc_deps_${self}")
+ map_set("${_globals}" NAMESPACE "${self}")
+ map_set("${_globals}" NAMESPACE_STORAGE_ID "${_namespace_storage}")
+ __library_set_default_dirs("${self}" "${root_dir}")
endfunction()
-
-# API: library_set_global( [value...])
-# 作用: 设置业务层全局参数。
-# 参数: self 是业务对象名称;key 是全局参数名;ARGN 是参数值。
-# 返回: 无。
-# 注意: 用于覆盖 CMake 自动捕获值,例如 BASH_SCRIPT、CACHE_ROOT、CMAKE_TOOLCHAIN_FILE、CMAKE_CONFIGURE_PRESET。
function(library_set_global self key)
__library_globals_id("${self}" _globals)
map_set("${_globals}" "${key}" "${ARGN}")
endfunction()
-
-# API: library_get_global( )
-# 作用: 读取业务层全局参数。
-# 参数: self 是业务对象名称;key 是全局参数名;out 是接收值的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 读取结果已由 map/codec 自动 decode。
function(library_get_global self key out)
__library_globals_id("${self}" _globals)
map_get("${_globals}" "${key}" _value)
set(${out} "${_value}" PARENT_SCOPE)
endfunction()
-
-# API: library_register( )
-# 作用: 注册一个库对象。
-# 参数: self 是业务对象名称;name 是库对象安全 id。
-# 返回: 无。
-# 注意: 实际写入内部 registry;属性默认写入 name 对应的 map。
-function(library_register self name)
+function(library_register self id)
+ if("${id}" MATCHES "::" OR NOT "${id}" MATCHES "^[A-Za-z0-9_+-]+$")
+ message(FATAL_ERROR "invalid library id '${id}' in namespace '${self}'")
+ endif()
+ __library_namespace_initialized("${self}" _initialized)
+ if(NOT _initialized)
+ message(FATAL_ERROR "namespace is not initialized: ${self}")
+ endif()
+ __library_full_name("${self}" "${id}" _full_name)
__library_registry_id("${self}" _registry)
- registry_add("${_registry}" "${name}")
- registry_set("${_registry}" "${name}" NAME "${name}")
+ registry_has("${_registry}" "${_full_name}" _has)
+ if(_has)
+ message(FATAL_ERROR "duplicate library id '${id}' in namespace '${self}'")
+ endif()
+ __library_map_id("${_registry}" "${_full_name}" _map_id)
+ registry_add("${_registry}" "${_full_name}" "${_map_id}")
+ registry_set("${_registry}" "${_full_name}" ID "${id}")
+ registry_set("${_registry}" "${_full_name}" NAME "${_full_name}")
+ registry_set("${_registry}" "${_full_name}" FULL_NAME "${_full_name}")
+ registry_set("${_registry}" "${_full_name}" NAMESPACE "${self}")
+ registry_set("${_registry}" "${_full_name}" STORAGE_ID "${id}")
+ registry_set("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES "")
+ message(STATUS "[register] ${_full_name}")
endfunction()
-
-# API: library_set( [value...])
-# 作用: 设置库对象属性。
-# 参数: self 是业务对象名称;name 是库对象名;key 是属性名;ARGN 是属性值。
-# 返回: 无。
-# 注意: 常用字段包括 GIT_URL、GIT_BRANCH、LOCAL_SOURCE_DIR、PATCH_FILES、CMAKE_OPTIONS、OTHER_USE_OPT;OTHER_USE_OPT 会在依赖方的 CMake configure 阶段自动追加。专用可选字段优先使用 library_set_find_package_scripts、library_set_cmake_source_subdir 和 library_set_patch_files。
function(library_set self name key)
- __library_registry_id("${self}" _registry)
-
- if ("${key}" STREQUAL "CMAKE_OPTIONS" OR "${key}" STREQUAL "OTHER_USE_OPT")
- # CMAKE_OPTIONS/OTHER_USE_OPT 可以传 CMake list,也可以传一段带引号的命令行片段。
- # 单参数命令行片段在 CMake 侧拆成 list 后再导出,Bash 侧只按分号恢复 argv,不按空格拆。
- set(_library_option_args "${ARGN}")
- list(LENGTH _library_option_args _library_option_arg_count)
- if (_library_option_arg_count EQUAL 1)
- set(_library_option_text "${ARGN}")
- separate_arguments(_library_option_args NATIVE_COMMAND "${_library_option_text}")
- endif ()
- registry_set("${_registry}" "${name}" "${key}" "${_library_option_args}")
- else ()
- registry_set("${_registry}" "${name}" "${key}" "${ARGN}")
- endif ()
+ __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry)
+ if("${key}" STREQUAL "CMAKE_OPTIONS" OR "${key}" STREQUAL "OTHER_USE_OPT")
+ set(_option_args "${ARGN}")
+ list(LENGTH _option_args _option_count)
+ if(_option_count EQUAL 1)
+ separate_arguments(_option_args NATIVE_COMMAND "${ARGN}")
+ endif()
+ registry_set("${_registry}" "${_full_name}" "${key}" "${_option_args}")
+ else()
+ registry_set("${_registry}" "${_full_name}" "${key}" "${ARGN}")
+ endif()
endfunction()
-
-# API: library_get( )
-# 作用: 读取库对象属性。
-# 参数: self 是业务对象名称;name 是库对象名;key 是属性名;out 是接收值的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 读取结果已由 registry/map/codec 自动 decode。
function(library_get self name key out)
- __library_registry_id("${self}" _registry)
- registry_get("${_registry}" "${name}" "${key}" _value)
+ __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry)
+ registry_get("${_registry}" "${_full_name}" "${key}" _value)
set(${out} "${_value}" PARENT_SCOPE)
endfunction()
-
-# API: library_set_find_package_scripts( )
-# 作用: 设置库对象的 find_package 前置初始化脚本内容和后置清理脚本内容。
-# 参数: self 是业务对象名称;name 是库对象名;init_script_content 是 init.cmake 内容;clear_script_content 是 clear.cmake 内容。
-# 返回: 无。
-# 注意: 这是可选属性,不在 library_register 中设置。内容写入 registry 节点 map,导出时由 registry 生成 nodes//init.cmake 和 clear.cmake。
function(library_set_find_package_scripts self name init_script_content clear_script_content)
- __library_registry_id("${self}" _registry)
- registry_set("${_registry}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}")
- registry_set("${_registry}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}")
+ library_set("${self}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}")
+ library_set("${self}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}")
endfunction()
-
-
function(library_set_init_scripts self name init_script_content)
- __library_registry_id("${self}" _registry)
- registry_set("${_registry}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}")
+ library_set("${self}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}")
endfunction()
-
-
function(library_set_clear_scripts self name clear_script_content)
- __library_registry_id("${self}" _registry)
- registry_set("${_registry}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}")
+ library_set("${self}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}")
endfunction()
-
-
-# API: library_set_cmake_source_subdir( )
-# 作用: 设置源码缓存目录内部真正包含 CMakeLists.txt 的相对目录。
-# 参数: self 是业务对象名称;name 是库对象名;relative_dir 是相对源码根目录的路径,默认语义为空。
-# 返回: 无。
-# 注意: Bash 构建阶段读取 CMAKE_SOURCE_SUBDIR;为空时使用源码缓存根目录作为 cmake -S。
function(library_set_cmake_source_subdir self name relative_dir)
- __library_registry_id("${self}" _registry)
- registry_set("${_registry}" "${name}" CMAKE_SOURCE_SUBDIR "${relative_dir}")
+ library_set("${self}" "${name}" CMAKE_SOURCE_SUBDIR "${relative_dir}")
endfunction()
-
-# API: library_set_patch_files( [files...])
-# 作用: 设置 CMake 配置前要应用的本地 patch 文件列表,覆盖已有 patch 队列。
-# 参数: self 是业务对象名称;name 是库对象名;files 是 patch 文件路径列表。
-# 返回: 无。
-# 注意: 兼容旧接口;新代码优先使用 library_add_patch_file/library_add_patch_url。
function(library_set_patch_files self name)
- __library_registry_id("${self}" _registry)
- set(_library_patch_items)
- foreach (_library_patch_file IN LISTS ARGN)
- list(APPEND _library_patch_items "file|${_library_patch_file}")
- endforeach ()
- registry_set("${_registry}" "${name}" PATCH_FILES "${ARGN}")
- registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}")
+ set(_patch_items "")
+ foreach(_patch_file IN LISTS ARGN)
+ list(APPEND _patch_items "file|${_patch_file}")
+ endforeach()
+ library_set("${self}" "${name}" PATCH_FILES "${ARGN}")
+ library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}")
endfunction()
-
-# API: library_add_patch_file( )
-# 作用: 按调用顺序追加本地 patch 文件。
-# 参数: self 是业务对象名称;name 是库对象名;file 是本地 patch 路径。
-# 返回: 无。
-# 注意: 多个 patch 按注册顺序在 build/configure 前统一应用。
function(library_add_patch_file self name)
- __library_registry_id("${self}" _registry)
- registry_get("${_registry}" "${name}" PATCH_ITEMS _library_patch_items)
- foreach (_library_patch_file IN LISTS ARGN)
- list(APPEND _library_patch_items "file|${_library_patch_file}")
- endforeach ()
- registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}")
+ library_get("${self}" "${name}" PATCH_ITEMS _patch_items)
+ foreach(_patch_file IN LISTS ARGN)
+ list(APPEND _patch_items "file|${_patch_file}")
+ endforeach()
+ library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}")
endfunction()
-
-# API: library_add_patch_url( [sha256])
-# 作用: 按调用顺序追加网络 patch;Bash 端下载到 patch 缓存后按本地 patch 应用。
-# 参数: self 是业务对象名称;name 是库对象名;url 是 patch 地址;filename 是缓存文件名;sha256 是可选校验值。
-# 返回: 无。
-# 注意: sha256 为空时不校验,适合临时开发;正式依赖建议固定校验值。
function(library_add_patch_url self name url filename)
- __library_registry_id("${self}" _registry)
- set(_library_patch_sha256 "${ARGN}")
- registry_get("${_registry}" "${name}" PATCH_ITEMS _library_patch_items)
- list(APPEND _library_patch_items "url|${url}|${filename}|${_library_patch_sha256}")
- registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}")
+ set(_sha256 "${ARGN}")
+ library_get("${self}" "${name}" PATCH_ITEMS _patch_items)
+ list(APPEND _patch_items "url|${url}|${filename}|${_sha256}")
+ library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}")
endfunction()
-
-# API: library_depends( [deps...])
-# 作用: 设置 name 依赖的一组库对象。
-# 参数: self 是业务对象名称;name 是依赖方;ARGN 是被依赖方列表。
-# 返回: 无。
-# 注意: 边方向是 name -> dep;构建顺序中 dep 会在 name 前面。
function(library_depends self name)
- __library_registry_id("${self}" _registry)
-
- foreach (_dep IN LISTS ARGN)
- registry_depends("${_registry}" "${name}" "${_dep}")
- endforeach ()
+ __library_resolve_owner("${self}" "${name}" _full_name _source_namespace _registry)
+ registry_get("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES _dependencies)
+ foreach(_reference IN LISTS ARGN)
+ library_resolve("${_source_namespace}" "${_reference}" _dependency)
+ list(APPEND _dependencies "${_dependency}")
+ registry_depends("${_registry}" "${_full_name}" "${_dependency}")
+ message(STATUS "[depends] ${_full_name} -> ${_dependency}")
+ endforeach()
+ list(REMOVE_DUPLICATES _dependencies)
+ registry_set("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES "${_dependencies}")
+endfunction()
+function(library_dependencies self name out)
+ library_get("${self}" "${name}" RESOLVED_DEPENDENCIES _dependencies)
+ set(${out} "${_dependencies}" PARENT_SCOPE)
endfunction()
-
-# API: library_items( )
-# 作用: 返回注册过的库对象列表。
-# 参数: self 是业务对象名称;out 是接收列表的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 顺序是注册顺序,不是构建顺序。
function(library_items self out)
__library_registry_id("${self}" _registry)
registry_items("${_registry}" _items)
set(${out} "${_items}" PARENT_SCOPE)
endfunction()
-
-# API: library_build_order( )
-# 作用: 返回依赖优先的构建顺序。
-# 参数: self 是业务对象名称;out 是接收构建顺序列表的变量名。
-# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 调用前应先 library_assert_acyclic;本函数不额外判环。
+function(__library_collect_graph_nodes self out)
+ library_items("${self}" _queue)
+ set(_nodes "")
+ while(_queue)
+ list(POP_FRONT _queue _item)
+ list(FIND _nodes "${_item}" _index)
+ if(NOT _index EQUAL -1)
+ continue()
+ endif()
+ list(APPEND _nodes "${_item}")
+ library_get("${self}" "${_item}" RESOLVED_DEPENDENCIES _dependencies)
+ list(APPEND _queue ${_dependencies})
+ endwhile()
+ set(${out} "${_nodes}" PARENT_SCOPE)
+endfunction()
+function(__library_copy_to_registry self full_name target_registry)
+ __library_split_full_name("${full_name}" _namespace _id)
+ __library_registry_id("${_namespace}" _source_registry)
+ __library_map_id("${target_registry}" "${full_name}" _target_map_id)
+ registry_add("${target_registry}" "${full_name}" "${_target_map_id}")
+ registry_get_map_id("${_source_registry}" "${full_name}" _source_map_id)
+ map_keys("${_source_map_id}" _keys)
+ foreach(_key IN LISTS _keys)
+ map_get("${_source_map_id}" "${_key}" _value)
+ registry_set("${target_registry}" "${full_name}" "${_key}" "${_value}")
+ endforeach()
+ __library_globals_id("${_namespace}" _source_globals)
+ map_keys("${_source_globals}" _global_keys)
+ registry_get_map_id("${target_registry}" "${full_name}" _target_map_id)
+ foreach(_key IN LISTS _global_keys)
+ map_has("${_target_map_id}" "${_key}" _has)
+ if(NOT _has)
+ map_get("${_source_globals}" "${_key}" _value)
+ registry_set("${target_registry}" "${full_name}" "${_key}" "${_value}")
+ endif()
+ endforeach()
+endfunction()
+function(__library_build_registry self out)
+ __library_export_registry_id("${self}" _registry)
+ registry_create("${_registry}")
+ __library_collect_graph_nodes("${self}" _nodes)
+ foreach(_item IN LISTS _nodes)
+ __library_copy_to_registry("${self}" "${_item}" "${_registry}")
+ endforeach()
+ foreach(_item IN LISTS _nodes)
+ library_get("${self}" "${_item}" RESOLVED_DEPENDENCIES _dependencies)
+ foreach(_dependency IN LISTS _dependencies)
+ registry_depends("${_registry}" "${_item}" "${_dependency}")
+ endforeach()
+ endforeach()
+ set(${out} "${_registry}" PARENT_SCOPE)
+endfunction()
function(library_build_order self out)
- __library_registry_id("${self}" _registry)
+ __library_build_registry("${self}" _registry)
+ registry_assert_acyclic("${_registry}")
registry_build_order("${_registry}" _order)
set(${out} "${_order}" PARENT_SCOPE)
endfunction()
-
-# API: library_assert_acyclic()
-# 作用: 断言库依赖图无环。
-# 参数: self 是业务对象名称。
-# 返回: 无;有环时 FATAL_ERROR。
-# 注意: 直接复用 registry_assert_acyclic。
function(library_assert_acyclic self)
- __library_registry_id("${self}" _registry)
+ __library_build_registry("${self}" _registry)
registry_assert_acyclic("${_registry}")
endfunction()
+function(__library_get_effective_dir self name dir_key root_key out)
+ __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry)
+ registry_get("${_registry}" "${_full_name}" "${dir_key}" _dir)
+ if("${_dir}" STREQUAL "")
+ library_get_global("${_namespace}" "${root_key}" _root)
+ registry_get("${_registry}" "${_full_name}" ID _id)
+ set(_dir "${_root}/${_id}")
+ endif()
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_set_source_dir self name dir)
+ library_set("${self}" "${name}" SOURCE_DIR "${dir}")
+endfunction()
+function(library_set_build_dir self name dir)
+ library_set("${self}" "${name}" BUILD_DIR "${dir}")
+endfunction()
+function(library_set_install_dir self name dir)
+ library_set("${self}" "${name}" INSTALL_DIR "${dir}")
+endfunction()
+function(library_get_effective_source_dir self name out)
+ __library_get_effective_dir("${self}" "${name}" SOURCE_DIR SOURCE_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_get_effective_build_dir self name out)
+ __library_get_effective_dir("${self}" "${name}" BUILD_DIR BUILD_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_get_effective_install_dir self name out)
+ __library_get_effective_dir("${self}" "${name}" INSTALL_DIR INSTALL_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_set_patch_cache_dir self name dir)
+ library_set("${self}" "${name}" PATCH_CACHE_DIR "${dir}")
+endfunction()
+function(library_set_log_dir self name dir)
+ library_set("${self}" "${name}" LOG_DIR "${dir}")
+endfunction()
+function(library_set_local_source_dir self name dir)
+ library_set("${self}" "${name}" LOCAL_SOURCE_DIR "${dir}")
+endfunction()
+function(library_get_effective_patch_cache_dir self name out)
+ __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry)
+ registry_get("${_registry}" "${_full_name}" PATCH_CACHE_DIR _dir)
+ if("${_dir}" STREQUAL "")
+ library_get_global("${_namespace}" PATCH_CACHE_ROOT _patch_root)
+ registry_get("${_registry}" "${_full_name}" ID _id)
+ if("${_patch_root}" STREQUAL "")
+ library_get_global("${_namespace}" SOURCE_CACHE_ROOT _source_root)
+ set(_dir "${_source_root}/${_id}_patch")
+ else()
+ set(_dir "${_patch_root}/${_id}")
+ endif()
+ endif()
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_get_effective_log_dir self name out)
+ __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry)
+ registry_get("${_registry}" "${_full_name}" LOG_DIR _dir)
+ if("${_dir}" STREQUAL "")
+ library_get_global("${_namespace}" LOG_CACHE_ROOT _log_root)
+ __library_storage_path("${_full_name}" _storage_path)
+ if("${_log_root}" STREQUAL "")
+ __library_data_export_dir("${self}" _data_dir)
+ set(_dir "${_data_dir}/registry/nodes/${_storage_path}")
+ else()
+ set(_dir "${_log_root}/${_storage_path}")
+ endif()
+ endif()
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_get_effective_cmake_cache_dir self name out)
+ library_get_effective_build_dir("${self}" "${name}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+function(library_get_effective_data_export_dir self out)
+ __library_data_export_dir("${self}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
# API: library_cache_operations( )
# 作用: 调用 Bash 端 list-ops,缓存并返回当前业务对象可用 action 列表。
@@ -460,31 +675,30 @@ endfunction()
# 作用: 将业务层数据导出成 Bash 可读取的目录。
# 参数: self 是业务对象名称;dir 是输出目录。
# 返回: 无。
-# 注意: 输出 registry/、globals.txt、build_order.txt、operations.txt、dependencies/;每个库的 map/init/clear 统一在 registry/nodes//。
+# 注意: 输出 registry/、globals.txt、build_order.txt、operations.txt、dependencies/;每个库的 map/init/clear 统一在 registry/nodes///。
function(library_export_dir self dir)
- __library_registry_id("${self}" _registry)
__library_globals_id("${self}" _globals)
__library_operations_id("${self}" _operations)
-
+ __library_build_registry("${self}" _registry)
file(MAKE_DIRECTORY "${dir}")
- file(MAKE_DIRECTORY "${dir}/dependencies")
-
+ file(GLOB _legacy_node_dirs LIST_DIRECTORIES TRUE "${dir}/registry/nodes/__library_map_*")
+ if(_legacy_node_dirs)
+ file(REMOVE_RECURSE ${_legacy_node_dirs})
+ endif()
registry_serialize_dir("${_registry}" "${dir}/registry")
map_serialize_file("${_globals}" "${dir}/globals.txt")
list_serialize_file("${_operations}" "${dir}/operations.txt")
-
registry_assert_acyclic("${_registry}")
registry_build_order("${_registry}" _order)
string(REPLACE ";" "\n" _order_text "${_order}")
codec_write_text_file("${dir}/build_order.txt" "${_order_text}\n")
-
registry_items("${_registry}" _items)
- foreach (_item IN LISTS _items)
+ foreach(_item IN LISTS _items)
registry_collect_deps("${_registry}" "${_item}" _deps)
string(REPLACE ";" "\n" _deps_text "${_deps}")
- codec_write_text_file("${dir}/dependencies/${_item}.txt" "${_deps_text}\n")
-
- endforeach ()
+ registry_node_dir("${_registry}" "${_item}" "${dir}/registry" _node_dir)
+ codec_write_text_file("${_node_dir}/dependencies.txt" "${_deps_text}\n")
+ endforeach()
endfunction()
@@ -492,12 +706,14 @@ endfunction()
# 作用: 返回 library 默认数据导出目录。
# 参数: self 是业务对象名称;out 是接收目录路径的变量名。
# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 优先使用 globals 中的 DATA_EXPORT_DIR;为空时使用 ${CMAKE_BINARY_DIR}/library_data/。
+# 注意: 优先使用 globals 中的 DATA_EXPORT_DIR;为空时使用 INSTALL_CACHE_ROOT 同级 library_data。
function(__library_data_export_dir self out)
library_get_global("${self}" DATA_EXPORT_DIR _dir)
- if ("${_dir}" STREQUAL "")
- set(_dir "${CMAKE_BINARY_DIR}/library_data/${self}")
- endif ()
+ if("${_dir}" STREQUAL "")
+ library_get_global("${self}" INSTALL_CACHE_ROOT _install_root)
+ get_filename_component(_ctx_root "${_install_root}" DIRECTORY)
+ set(_dir "${_ctx_root}/library_data")
+ endif()
set(${out} "${_dir}" PARENT_SCOPE)
endfunction()
@@ -507,110 +723,72 @@ endfunction()
# 返回: 通过 PARENT_SCOPE 设置 out。
# 注意: 输出顺序是依赖优先;ARGN 为空时使用全部注册对象。
function(__library_environment_order self out)
- __library_registry_id("${self}" _registry)
+ __library_build_registry("${self}" _registry)
registry_assert_acyclic("${_registry}")
-
set(_requested "${ARGN}")
- if ("${_requested}" STREQUAL "")
- registry_items("${_registry}" _requested)
- endif ()
-
+ if("${_requested}" STREQUAL "")
+ library_items("${self}" _requested)
+ else()
+ set(_resolved_requested "")
+ foreach(_item IN LISTS _requested)
+ library_resolve("${self}" "${_item}" _resolved)
+ list(APPEND _resolved_requested "${_resolved}")
+ endforeach()
+ set(_requested "${_resolved_requested}")
+ endif()
set(_wanted "")
- foreach (_item IN LISTS _requested)
+ foreach(_item IN LISTS _requested)
registry_collect_deps("${_registry}" "${_item}" _deps)
- foreach (_dep IN LISTS _deps)
- list(FIND _wanted "${_dep}" _dep_index)
- if (_dep_index EQUAL -1)
- list(APPEND _wanted "${_dep}")
- endif ()
- endforeach ()
- list(FIND _wanted "${_item}" _item_index)
- if (_item_index EQUAL -1)
- list(APPEND _wanted "${_item}")
- endif ()
- endforeach ()
-
+ list(APPEND _wanted ${_deps} "${_item}")
+ endforeach()
+ list(REMOVE_DUPLICATES _wanted)
registry_build_order("${_registry}" _build_order)
set(_result "")
- foreach (_item IN LISTS _build_order)
- list(FIND _wanted "${_item}" _wanted_index)
- if (NOT _wanted_index EQUAL -1)
+ foreach(_item IN LISTS _build_order)
+ list(FIND _wanted "${_item}" _index)
+ if(NOT _index EQUAL -1)
list(APPEND _result "${_item}")
- endif ()
- endforeach ()
-
+ endif()
+ endforeach()
set(${out} "${_result}" PARENT_SCOPE)
endfunction()
# MACRO API: library_init_environment( [items...])
-# 作用: 对一组库对象递归 include 其 init.cmake,用于 find_package 前准备变量环境。
-# 参数: self 是业务对象名称;ARGN 是库 id 列表,空列表表示全部库。
+# 作用: 对一组库对象递归执行其 init 脚本,用于 find_package 前准备变量环境。
+# 参数: self 是业务对象名称;ARGN 是库完整名称列表,空列表表示全部库。
# 返回: 无。
-# 注意: 这是 macro,不是 function;init.cmake 中 set 的变量会作用到调用者当前作用域。顺序是依赖优先。
-#macro(library_init_environment self)
-# __library_data_export_dir("${self}" _library_env_data_dir)
-# library_export_dir("${self}" "${_library_env_data_dir}")
-# __library_environment_order("${self}" _library_env_order ${ARGN})
-# __library_registry_id("${self}" _library_env_registry)
-#
-# foreach (_library_env_item IN LISTS _library_env_order)
-# registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir)
-# set(_init_file "${_library_env_node_dir}/init.cmake")
-# if (EXISTS "${_init_file}" AND NOT IS_DIRECTORY "${_init_file}")
-# include("${_init_file}")
-# message("加载 init.cmake: ${_init_file}")
-# else ()
-# message(FATAL_ERROR "找不到 init.cmake: ${_init_file}")
-# endif ()
-# endforeach ()
-#endmacro()
-
-function(library_init_environment self list_name)
- __library_data_export_dir("${self}" _library_env_data_dir)
- library_export_dir("${self}" "${_library_env_data_dir}")
+# 注意: 这是 macro,脚本中的 set/unset 作用于调用者当前作用域;顺序是依赖优先。
+macro(library_init_environment self)
__library_environment_order("${self}" _library_env_order ${ARGN})
- __library_registry_id("${self}" _library_env_registry)
- set(ret)
- foreach (_library_env_item IN LISTS _library_env_order)
- registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir)
- set(_init_file "${_library_env_node_dir}/init.cmake")
- if (EXISTS "${_init_file}" AND NOT IS_DIRECTORY "${_init_file}")
- # include("${_init_file}")
- list(APPEND ret ${_init_file})
- # message("加载 init.cmake: ${_init_file}")
- else ()
- message(FATAL_ERROR "找不到 init.cmake: ${_init_file}")
- endif ()
- endforeach ()
- set(${list_name} "${ret}" PARENT_SCOPE)
-endfunction()
-
+ foreach(_library_env_item IN LISTS _library_env_order)
+ library_get("${self}" "${_library_env_item}" INIT_SCRIPT_CONTENT _library_env_script)
+ if(NOT "${_library_env_script}" STREQUAL "")
+ cmake_language(EVAL CODE "${_library_env_script}")
+ endif()
+ endforeach()
+ unset(_library_env_script)
+ unset(_library_env_item)
+ unset(_library_env_order)
+endmacro()
# MACRO API: library_clear_environment( [items...])
-# 作用: 对一组库对象递归 include 其 clear.cmake,用于 find_package 后清理变量环境。
-# 参数: self 是业务对象名称;ARGN 是库 id 列表,空列表表示全部库。
+# 作用: 对一组库对象递归执行其 clear 脚本,用于 find_package 后清理变量环境。
+# 参数: self 是业务对象名称;ARGN 是库完整名称列表,空列表表示全部库。
# 返回: 无。
-# 注意: 这是 macro,不是 function;clear.cmake 中 unset/set 会作用到调用者当前作用域。顺序是 init 的反向。
-macro(library_clear_environment self list_name)
- __library_data_export_dir("${self}" _library_env_data_dir)
- library_export_dir("${self}" "${_library_env_data_dir}")
+# 注意: 这是 macro,脚本中的 set/unset 作用于调用者当前作用域;顺序是 init 的反向。
+macro(library_clear_environment self)
__library_environment_order("${self}" _library_env_order ${ARGN})
list(REVERSE _library_env_order)
- __library_registry_id("${self}" _library_env_registry)
- set(ret)
- foreach (_library_env_item IN LISTS _library_env_order)
- registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir)
- set(_clear_file "${_library_env_node_dir}/clear.cmake")
- if (EXISTS "${_clear_file}" AND NOT IS_DIRECTORY "${_clear_file}")
- # include("${_clear_file}")
- list(APPEND ret ${_clear_file})
- else ()
- message(FATAL_ERROR "找不到 clear.cmake: ${_clear_file}")
- endif ()
- endforeach ()
- set(${list_name} "${ret}" PARENT_SCOPE)
+ foreach(_library_env_item IN LISTS _library_env_order)
+ library_get("${self}" "${_library_env_item}" CLEAR_SCRIPT_CONTENT _library_env_script)
+ if(NOT "${_library_env_script}" STREQUAL "")
+ cmake_language(EVAL CODE "${_library_env_script}")
+ endif()
+ endforeach()
+ unset(_library_env_script)
+ unset(_library_env_item)
+ unset(_library_env_order)
endmacro()
-
# INTERNAL: __library_target_folder_root( )
# 作用: 计算当前 library 业务对象生成的 CMake target 在 IDE 中使用的 Folder 根路径。
# 参数: self 是业务对象名称;out 是接收 Folder 根路径的变量名。
@@ -683,42 +861,31 @@ function(library_add_item_operation_targets self prefix dir)
endfunction()
-# API: library_is_installed_with_rely( [items...])
-# 作用: 判断一组库对象及其递归依赖库是否全部 install 成功。
-# 参数: self 是业务对象名称;out 是接收 TRUE/FALSE 的变量名;ARGN 是库 id 列表,空列表表示全部库。
+# API: library_is_installed_with_rely( )
+# 作用: 判断一组完整库名及其递归依赖库是否全部 install 成功。
+# 参数: out 是接收 TRUE/FALSE 的变量名;ARGN 是完整库名列表。
# 返回: 通过 PARENT_SCOPE 设置 out。
-# 注意: 判断依据是 Bash 端写出的 INSTALL_CACHE_ROOT/
- /install.success。
-function(library_is_installed_with_rely self out)
- __library_registry_id("${self}" _registry)
- __library_data_export_dir("${self}" _data_dir)
-
- set(_requested "${ARGN}")
- if ("${_requested}" STREQUAL "")
- registry_items("${_registry}" _requested)
- endif ()
-
- set(_items "")
- foreach (_item IN LISTS _requested)
- registry_collect_deps("${_registry}" "${_item}" _deps)
-
- foreach (_dep IN LISTS _deps)
- list(APPEND _items "${_dep}")
- endforeach ()
-
- list(APPEND _items "${_item}")
- endforeach ()
-
- list(REMOVE_DUPLICATES _items)
-
+# 注意: 每个库名必须包含命名空间,例如 global::zlib。
+function(library_is_installed_with_rely out)
+ set(_queue "${ARGN}")
+ set(_visited "")
set(_installed TRUE)
- library_get_global("${self}" INSTALL_CACHE_ROOT _install_cache_root)
-
- foreach (_item IN LISTS _items)
- if (NOT EXISTS "${_install_cache_root}/${_item}/install.success")
+ while(_queue)
+ list(POP_FRONT _queue _item)
+ list(FIND _visited "${_item}" _visited_index)
+ if(NOT _visited_index EQUAL -1)
+ continue()
+ endif()
+ list(APPEND _visited "${_item}")
+ __library_split_full_name("${_item}" _namespace _id)
+ library_resolve("${_namespace}" "${_item}" _full_name)
+ library_get("${_namespace}" "${_full_name}" RESOLVED_DEPENDENCIES _dependencies)
+ list(APPEND _queue ${_dependencies})
+ library_get_effective_install_dir("${_namespace}" "${_full_name}" _install_dir)
+ if(NOT EXISTS "${_install_dir}/install.success")
set(_installed FALSE)
break()
- endif ()
- endforeach ()
-
+ endif()
+ endwhile()
set(${out} "${_installed}" PARENT_SCOPE)
endfunction()
\ No newline at end of file
diff --git a/0_cmake_library/cmake_library/scripts/library/library.sh b/0_cmake_library/cmake_library/scripts/library/library.sh
index 4f43217..1f8bedc 100644
--- a/0_cmake_library/cmake_library/scripts/library/library.sh
+++ b/0_cmake_library/cmake_library/scripts/library/library.sh
@@ -147,30 +147,14 @@ library_registry_graph() {
printf '%s/registry/graph.txt' "$LIBRARY_DATA_DIR"
}
-library_registry_map_id() {
+library_target_storage_path() {
local target="$1"
- local line rest node data
-
- while IFS= read -r line || [[ -n "$line" ]]; do
- line="$(library_strip_line_cr "$line")"
- [[ "$line" == N\|* ]] || continue
- rest="${line#N|}"
- node="${rest%%|*}"
- data="${rest#*|}"
- if [[ "$node" == "$target" ]]; then
- printf '%s' "$data"
- return 0
- fi
- done <"$(library_registry_graph)"
-
- printf ''
+ printf '%s' "${target//:://}"
}
library_target_node_dir() {
local target="$1"
- local map_id
- map_id="$(library_registry_map_id "$target")"
- printf '%s/registry/nodes/%s' "$LIBRARY_DATA_DIR" "$map_id"
+ printf '%s/registry/nodes/%s' "$LIBRARY_DATA_DIR" "$(library_target_storage_path "$target")"
}
library_target_map_file() {
@@ -178,6 +162,11 @@ library_target_map_file() {
printf '%s/map.txt' "$(library_target_node_dir "$target")"
}
+library_target_dependencies_file() {
+ local target="$1"
+ printf '%s/dependencies.txt' "$(library_target_node_dir "$target")"
+}
+
library_registry_get() {
local target="$1"
local key="$2"
@@ -233,11 +222,11 @@ library_resolve_targets() {
requested=("$@")
for target in "${requested[@]}"; do
want["$target"]=1
- if [[ -f "$LIBRARY_DATA_DIR/dependencies/$target.txt" ]]; then
+ if [[ -f "$(library_target_dependencies_file "$target")" ]]; then
while IFS= read -r dep || [[ -n "$dep" ]]; do
dep="$(library_strip_line_cr "$dep")"
[[ -n "$dep" ]] && want["$dep"]=1
- done <"$LIBRARY_DATA_DIR/dependencies/$target.txt"
+ done <"$(library_target_dependencies_file "$target")"
fi
done
@@ -273,11 +262,11 @@ library_resolve_dependencies() {
declare -A want=()
for target in "$@"; do
- if [[ -f "$LIBRARY_DATA_DIR/dependencies/$target.txt" ]]; then
+ if [[ -f "$(library_target_dependencies_file "$target")" ]]; then
while IFS= read -r dep || [[ -n "$dep" ]]; do
dep="$(library_strip_line_cr "$dep")"
[[ -n "$dep" ]] && want["$dep"]=1
- done <"$LIBRARY_DATA_DIR/dependencies/$target.txt"
+ done <"$(library_target_dependencies_file "$target")"
fi
done
@@ -297,16 +286,40 @@ library_cache_root() {
printf '%s' "$value"
}
+library_target_id() {
+ local target="$1"
+ library_registry_get "$target" ID
+}
+
+library_target_cache_root() {
+ local target="$1"
+ local key="$2"
+ library_target_get_or_global "$target" "$key"
+}
+
+library_target_effective_dir() {
+ local target="$1"
+ local dir_key="$2"
+ local root_key="$3"
+ local dir
+ dir="$(library_registry_get "$target" "$dir_key")"
+ if [[ -n "$dir" ]]; then
+ printf '%s' "$dir"
+ return
+ fi
+ printf '%s/%s' "$(library_target_cache_root "$target" "$root_key")" "$(library_target_id "$target")"
+}
+
library_source_dir() {
- printf '%s/%s' "$(library_cache_root SOURCE_CACHE_ROOT)" "$1"
+ library_target_effective_dir "$1" SOURCE_DIR SOURCE_CACHE_ROOT
}
library_build_dir() {
- printf '%s/%s' "$(library_cache_root BUILD_CACHE_ROOT)" "$1"
+ library_target_effective_dir "$1" BUILD_DIR BUILD_CACHE_ROOT
}
library_install_dir() {
- printf '%s/%s' "$(library_cache_root INSTALL_CACHE_ROOT)" "$1"
+ library_target_effective_dir "$1" INSTALL_DIR INSTALL_CACHE_ROOT
}
library_lock_file() {
@@ -322,10 +335,26 @@ library_lock_file() {
printf '%s/%s.success' "$dir" "$step"
}
+library_log_dir() {
+ local target="$1"
+ local dir root
+ dir="$(library_registry_get "$target" LOG_DIR)"
+ if [[ -n "$dir" ]]; then
+ printf '%s' "$dir"
+ return
+ fi
+ root="$(library_target_get_or_global "$target" LOG_CACHE_ROOT)"
+ if [[ -n "$root" ]]; then
+ printf '%s/%s' "$root" "$(library_target_storage_path "$target")"
+ return
+ fi
+ library_target_node_dir "$target"
+}
+
library_log_file() {
local step="$1"
local target="$2"
- printf '%s/%s.log' "$(library_target_node_dir "$target")" "$step"
+ printf '%s/%s.log' "$(library_log_dir "$target")" "$step"
}
library_log() {
@@ -406,9 +435,19 @@ library_parent_dir() {
library_patch_cache_root() {
local target="$1"
- local source_cache_root
- source_cache_root="$(library_cache_root SOURCE_CACHE_ROOT)"
- printf '%s/%s_patch' "$source_cache_root" "$target"
+ local dir root source_cache_root
+ dir="$(library_registry_get "$target" PATCH_CACHE_DIR)"
+ if [[ -n "$dir" ]]; then
+ printf '%s' "$dir"
+ return
+ fi
+ root="$(library_target_get_or_global "$target" PATCH_CACHE_ROOT)"
+ if [[ -n "$root" ]]; then
+ printf '%s/%s' "$root" "$(library_target_id "$target")"
+ return
+ fi
+ source_cache_root="$(library_target_cache_root "$target" SOURCE_CACHE_ROOT)"
+ printf '%s/%s_patch' "$source_cache_root" "$(library_target_id "$target")"
}
library_sha256_file() {
@@ -652,6 +691,44 @@ library_build_config() {
printf '%s' "$value"
}
+library_normalize_existing_dir() {
+ local dir="$1"
+ if [[ -d "$dir" ]]; then
+ (cd "$dir" && (pwd -W 2>/dev/null || pwd))
+ return
+ fi
+ printf '%s' "$dir"
+}
+
+library_cmake_cache_home_directory() {
+ local cache="$1"
+ if [[ -f "$cache" ]]; then
+ sed -n 's/^CMAKE_HOME_DIRECTORY:INTERNAL=//p' "$cache" | tail -n 1
+ fi
+}
+
+library_prepare_build_dir_for_source() {
+ local target="$1"
+ local source="$2"
+ local build="$3"
+ local cache old_source new_source
+ cache="$build/CMakeCache.txt"
+ if [[ ! -f "$cache" ]]; then
+ return
+ fi
+ old_source="$(library_cmake_cache_home_directory "$cache")"
+ if [[ -z "$old_source" ]]; then
+ return
+ fi
+ new_source="$(library_normalize_existing_dir "$source")"
+ if [[ "${old_source,,}" == "${new_source,,}" ]]; then
+ return
+ fi
+ library_log build "$target" "build cache source changed, remove build dir: old_source=$old_source new_source=$new_source build=$build"
+ rm -rf "$build"
+ rm -f "$(library_lock_file build "$target")"
+}
+
library_build_one() {
local target="$1"
local source source_root source_subdir build install cmake_cmd generator platform toolset toolchain build_type options configure_preset build_preset config dep dep_options
@@ -665,12 +742,14 @@ library_build_one() {
install="$(library_install_dir "$target")"
cmake_cmd="$(library_cmake_command)"
+ library_prepare_build_dir_for_source "$target" "$source" "$build"
if library_is_success build "$target"; then
library_log build "$target" 'build cache already successful, skip'
return 0
fi
library_prepare_patched_source_one "$target" "$source_root"
+ library_prepare_build_dir_for_source "$target" "$source" "$build"
mkdir -p "$build" "$install"
generator="$(library_target_get_or_global "$target" CMAKE_GENERATOR)"
platform="$(library_target_get_or_global "$target" CMAKE_GENERATOR_PLATFORM)"
diff --git a/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake b/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake
index cd673b2..e617c4e 100644
--- a/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake
+++ b/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake
@@ -98,7 +98,7 @@ test_assert_contains("${_mermaid}" " app --> util")
test_assert_contains("${_mermaid}" " plugin --> app")
test_write_file_strequal("libs/mermaid.mmd" "${_mermaid}" _registry_mermaid_file)
-# 分层目录序列化:graph.txt 存外层 graph,nodes//map.txt 存每个节点的属性 map。
+# 分层目录序列化:graph.txt 存外层 graph,nodes//map.txt 存每个节点的属性 map。
test_output_path("libs/registry_dir" _registry_dir)
file(REMOVE_RECURSE "${_registry_dir}")
registry_serialize_dir(registry_test_libs "${_registry_dir}")
@@ -152,7 +152,7 @@ test_assert_list_before(_loaded_order core util)
test_assert_list_before(_loaded_order util app)
test_assert_list_before(_loaded_order app plugin)
-# 节点目录脚本投影:map.txt、init.cmake、clear.cmake 必须在同一个 nodes// 目录。
+# 节点目录脚本投影:map.txt、init.cmake、clear.cmake 必须在同一个 nodes// 目录。
set(_registry_init_script "set(REGISTRY_TEST_VALUE \"a;b|c%\")\n")
set(_registry_clear_script "unset(REGISTRY_TEST_VALUE)\n")
registry_create(registry_test_scripts)
diff --git a/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake b/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake
new file mode 100644
index 0000000..5dadf55
--- /dev/null
+++ b/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake
@@ -0,0 +1,105 @@
+include("${CMAKE_CURRENT_LIST_DIR}/../../test_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/../../../domain/library/library.cmake")
+test_set_output_dir("domain/library_namespace")
+test_section("library namespace api")
+set(_root "${TEST_OUTPUT_DIR}/cache")
+library_create(ns_case "${_root}")
+library_create(ns_case::image "${_root}")
+library_create(ns_case::network "${_root}")
+library_create(ns_case::graphics "${_root}")
+library_create(ns_case::graphics::osgearth "${_root}")
+library_register(ns_case base)
+library_register(ns_case::image png)
+library_register(ns_case::network curl)
+library_register(ns_case::graphics renderer)
+library_register(ns_case::graphics::osgearth engine)
+library_namespace_depends(ns_case::graphics image network)
+library_namespace_dependencies(ns_case::graphics _namespace_dependencies)
+test_assert_strequal("${_namespace_dependencies}" "ns_case::image;ns_case::network")
+library_resolve(ns_case::graphics png _resolved_png)
+test_assert_strequal("${_resolved_png}" "ns_case::image::png")
+library_resolve(ns_case::graphics ns_case::network::curl _resolved_curl)
+test_assert_strequal("${_resolved_curl}" "ns_case::network::curl")
+library_resolve(ns_case::graphics base _resolved_base)
+test_assert_strequal("${_resolved_base}" "ns_case::base")
+library_depends(ns_case::graphics renderer png ns_case::network::curl base)
+library_dependencies(ns_case::graphics renderer _renderer_dependencies)
+test_assert_strequal("${_renderer_dependencies}" "ns_case::image::png;ns_case::network::curl;ns_case::base")
+library_depends(ns_case::graphics::osgearth engine ns_case::graphics::renderer)
+library_build_order(ns_case::graphics::osgearth _order)
+test_assert_list_before(_order ns_case::image::png ns_case::graphics::renderer)
+test_assert_list_before(_order ns_case::network::curl ns_case::graphics::renderer)
+test_assert_list_before(_order ns_case::base ns_case::graphics::renderer)
+test_assert_list_before(_order ns_case::graphics::renderer ns_case::graphics::osgearth::engine)
+test_output_path("export" _export_dir)
+library_export_dir(ns_case::graphics::osgearth "${_export_dir}")
+file(READ "${_export_dir}/registry/graph.txt" _graph_text)
+test_assert_contains("${_graph_text}" "N|ns_case::graphics::osgearth::engine|")
+test_assert_contains("${_graph_text}" "E|ns_case::graphics::renderer|ns_case::image::png|")
+test_assert_contains("${_graph_text}" "E|ns_case::graphics::osgearth::engine|ns_case::graphics::renderer|")
+set(_runtime_fixture_root "${TEST_OUTPUT_DIR}/runtime_fixture")
+file(REMOVE_RECURSE "${_runtime_fixture_root}")
+foreach(_runtime_name IN ITEMS image_png graphics_png engine)
+ file(MAKE_DIRECTORY "${_runtime_fixture_root}/${_runtime_name}")
+ file(WRITE "${_runtime_fixture_root}/${_runtime_name}/payload.txt" "${_runtime_name}\n")
+ file(WRITE "${_runtime_fixture_root}/${_runtime_name}/CMakeLists.txt" "cmake_minimum_required(VERSION 3.19)\nproject(${_runtime_name} NONE)\ninstall(FILES \"\${CMAKE_CURRENT_LIST_DIR}/payload.txt\" DESTINATION \".\")\n")
+endforeach()
+library_create(ns_runtime "${TEST_OUTPUT_DIR}/runtime_cache")
+library_create(ns_runtime::image "${TEST_OUTPUT_DIR}/runtime_cache")
+library_create(ns_runtime::graphics "${TEST_OUTPUT_DIR}/runtime_cache")
+library_create(ns_runtime::graphics::osgearth "${TEST_OUTPUT_DIR}/runtime_cache")
+library_register(ns_runtime::image png)
+library_set(ns_runtime::image png LOCAL_SOURCE_DIR "${_runtime_fixture_root}/image_png")
+library_register(ns_runtime::graphics png)
+library_set(ns_runtime::graphics png LOCAL_SOURCE_DIR "${_runtime_fixture_root}/graphics_png")
+library_register(ns_runtime::graphics::osgearth engine)
+library_set(ns_runtime::graphics::osgearth engine LOCAL_SOURCE_DIR "${_runtime_fixture_root}/engine")
+library_namespace_depends(ns_runtime::graphics ns_runtime::image)
+library_depends(ns_runtime::graphics::osgearth engine ns_runtime::image::png ns_runtime::graphics::png)
+library_set_source_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_source")
+library_set_build_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_build")
+library_set_install_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_install")
+library_get_effective_source_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_source)
+library_get_effective_build_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_build)
+library_get_effective_install_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_install)
+test_assert_strequal("${_runtime_image_source}" "${TEST_OUTPUT_DIR}/custom/image_source")
+test_assert_strequal("${_runtime_image_build}" "${TEST_OUTPUT_DIR}/custom/image_build")
+test_assert_strequal("${_runtime_image_install}" "${TEST_OUTPUT_DIR}/custom/image_install")
+library_get_effective_install_dir(ns_runtime::graphics::osgearth ns_runtime::graphics::png _runtime_graphics_install)
+if("${_runtime_image_install}" STREQUAL "${_runtime_graphics_install}")
+ message(FATAL_ERROR "different namespaces resolved to the same install directory: ${_runtime_image_install}")
+endif()
+test_output_path("runtime_export" _runtime_export_dir)
+library_export_dir(ns_runtime::graphics::osgearth "${_runtime_export_dir}")
+library_get_global(ns_runtime::graphics::osgearth BASH_EXECUTABLE _runtime_bash)
+execute_process(
+ COMMAND "${_runtime_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" ns_runtime::graphics::osgearth::engine
+ RESULT_VARIABLE _runtime_result
+ OUTPUT_VARIABLE _runtime_stdout
+ ERROR_VARIABLE _runtime_stderr
+)
+test_assert_process_ok("[BASH][NAMESPACE][WITH_RELY_AUTO]" "${_runtime_result}" "${_runtime_bash} library.sh with_rely_auto ns_runtime::graphics::osgearth::engine" "${_runtime_stdout}" "${_runtime_stderr}" "${_runtime_export_dir}")
+test_assert_contains("${_runtime_stdout}" "[ns_runtime::image::png][source]")
+test_assert_contains("${_runtime_stdout}" "[ns_runtime::graphics::png][source]")
+test_assert_contains("${_runtime_stdout}" "[ns_runtime::graphics::osgearth::engine][source]")
+test_report_file("${_runtime_image_install}/payload.txt")
+test_report_file("${_runtime_graphics_install}/payload.txt")
+library_get_effective_install_dir(ns_runtime::graphics::osgearth engine _runtime_engine_install)
+test_report_file("${_runtime_engine_install}/payload.txt")
+set(_library_file "${CMAKE_CURRENT_LIST_DIR}/../../../domain/library/library.cmake")
+set(_fail_root "${TEST_OUTPUT_DIR}/failure_cache")
+set(_sibling_code "include(\"${_library_file}\")\nlibrary_create(fail_sibling \"${_fail_root}\")\nlibrary_create(fail_sibling::image \"${_fail_root}\")\nlibrary_create(fail_sibling::graphics \"${_fail_root}\")\nlibrary_register(fail_sibling::image png)\nlibrary_register(fail_sibling::graphics renderer)\nlibrary_depends(fail_sibling::graphics renderer png)")
+test_cmake_configure_should_fail("sibling_not_visible" "${_sibling_code}" _sibling_error)
+test_assert_contains("${_sibling_error}" "library not found from namespace 'fail_sibling::graphics': png")
+set(_child_code "include(\"${_library_file}\")\nlibrary_create(fail_child \"${_fail_root}\")\nlibrary_create(fail_child::graphics \"${_fail_root}\")\nlibrary_register(fail_child parent_lib)\nlibrary_register(fail_child::graphics child_lib)\nlibrary_depends(fail_child parent_lib child_lib)")
+test_cmake_configure_should_fail("child_not_visible" "${_child_code}" _child_error)
+test_assert_contains("${_child_error}" "library not found from namespace 'fail_child': child_lib")
+set(_ambiguous_code "include(\"${_library_file}\")\nlibrary_create(fail_ambiguous \"${_fail_root}\")\nlibrary_create(fail_ambiguous::image \"${_fail_root}\")\nlibrary_create(fail_ambiguous::network \"${_fail_root}\")\nlibrary_create(fail_ambiguous::graphics \"${_fail_root}\")\nlibrary_register(fail_ambiguous::image png)\nlibrary_register(fail_ambiguous::network png)\nlibrary_register(fail_ambiguous::graphics renderer)\nlibrary_namespace_depends(fail_ambiguous::graphics fail_ambiguous::image fail_ambiguous::network)\nlibrary_depends(fail_ambiguous::graphics renderer png)")
+test_cmake_configure_should_fail("ambiguous_short_id" "${_ambiguous_code}" _ambiguous_error)
+test_assert_contains("${_ambiguous_error}" "ambiguous library 'png'")
+test_assert_contains("${_ambiguous_error}" "fail_ambiguous::image::png")
+test_assert_contains("${_ambiguous_error}" "fail_ambiguous::network::png")
+set(_duplicate_code "include(\"${_library_file}\")\nlibrary_create(fail_duplicate \"${_fail_root}\")\nlibrary_register(fail_duplicate png)\nlibrary_register(fail_duplicate png)")
+test_cmake_configure_should_fail("duplicate_local_id" "${_duplicate_code}" _duplicate_error)
+test_assert_contains("${_duplicate_error}" "duplicate library id 'png'")
+test_pass("library_namespace_test")
diff --git a/0_cmake_library/cmake_library/test/domain/library/library_test.cmake b/0_cmake_library/cmake_library/test/domain/library/library_test.cmake
index 95d53fa..75017e5 100644
--- a/0_cmake_library/cmake_library/test/domain/library/library_test.cmake
+++ b/0_cmake_library/cmake_library/test/domain/library/library_test.cmake
@@ -106,7 +106,7 @@ library_set(library_test_libs presetlib CMAKE_CONFIGURE_PRESET preset-test)
library_items(library_test_libs _items)
-test_assert_strequal("${_items}" "core;util;app;presetlib")
+test_assert_strequal("${_items}" "library_test_libs::core;library_test_libs::util;library_test_libs::app;library_test_libs::presetlib")
library_get(library_test_libs core CMAKE_OPTIONS _core_options)
test_assert_strequal("${_core_options}" "-DCORE_SPACE_PATH=${_fixture_root}/path with space;-DCORE_FLAG=ON;-DCORE_TEXT=abc")
@@ -123,8 +123,8 @@ test_assert_strequal("${_app_subdir}" "cmake")
library_assert_acyclic(library_test_libs)
library_build_order(library_test_libs _order)
-test_assert_list_before(_order core util)
-test_assert_list_before(_order util app)
+test_assert_list_before(_order library_test_libs::core library_test_libs::util)
+test_assert_list_before(_order library_test_libs::util library_test_libs::app)
library_cache_operations(library_test_libs _ops)
test_assert_contains("${_ops}" "auto")
@@ -139,11 +139,17 @@ unset(LIBRARY_TEST_INIT_ORDER)
unset(LIBRARY_TEST_CLEAR_ORDER)
unset(CORE_FIND_ROOT)
unset(CORE_FIND_LIST)
-library_init_environment(library_test_libs app)
+library_init_environment(library_test_libs _init_files app)
+foreach(_init_file IN LISTS _init_files)
+ include("${_init_file}")
+endforeach()
test_assert_strequal("${LIBRARY_TEST_INIT_ORDER}" "core;util;app")
test_assert_strequal("${CORE_FIND_ROOT}" "C:/sdk/core|x")
test_assert_strequal("${CORE_FIND_LIST}" "a;b;c")
-library_clear_environment(library_test_libs app)
+library_clear_environment(library_test_libs _clear_files app)
+foreach(_clear_file IN LISTS _clear_files)
+ include("${_clear_file}")
+endforeach()
test_assert_strequal("${LIBRARY_TEST_CLEAR_ORDER}" "app;util;core")
test_assert_strequal("${CORE_FIND_ROOT}" "")
test_assert_strequal("${CORE_FIND_LIST}" "")
@@ -155,11 +161,12 @@ test_report_file("${_export_dir}/registry/graph.txt")
test_report_file("${_export_dir}/registry/graph.mmd")
test_report_file("${_export_dir}/build_order.txt")
test_report_file("${_export_dir}/operations.txt")
-test_report_file("${_export_dir}/dependencies/app.txt")
-set(_core_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core")
-set(_util_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_util")
-set(_app_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app")
-set(_preset_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_presetlib")
+__library_export_registry_id(library_test_libs _export_registry)
+registry_node_dir("${_export_registry}" library_test_libs::core "${_export_dir}/registry" _core_node_dir)
+registry_node_dir("${_export_registry}" library_test_libs::util "${_export_dir}/registry" _util_node_dir)
+registry_node_dir("${_export_registry}" library_test_libs::app "${_export_dir}/registry" _app_node_dir)
+registry_node_dir("${_export_registry}" library_test_libs::presetlib "${_export_dir}/registry" _preset_node_dir)
+test_report_file("${_app_node_dir}/dependencies.txt")
test_report_file("${_core_node_dir}/map.txt")
test_report_file("${_core_node_dir}/init.cmake")
test_report_file("${_core_node_dir}/clear.cmake")
@@ -188,9 +195,10 @@ test_assert_contains("${_globals_text}" "K|BASH_SCRIPT|")
test_assert_contains("${_globals_text}" "K|BASH_EXECUTABLE|")
file(READ "${_export_dir}/registry/graph.txt" _graph_text)
-test_assert_contains("${_graph_text}" "N|core|__registry___library_library_test_libs_registry_map_core")
-test_assert_contains("${_graph_text}" "E|app|util|")
-test_assert_contains("${_graph_text}" "E|app|core|")
+registry_get_map_id("${_export_registry}" library_test_libs::core _core_export_map_id)
+test_assert_contains("${_graph_text}" "N|library_test_libs::core|${_core_export_map_id}")
+test_assert_contains("${_graph_text}" "E|library_test_libs::app|library_test_libs::util|")
+test_assert_contains("${_graph_text}" "E|library_test_libs::app|library_test_libs::core|")
file(READ "${_app_node_dir}/map.txt" _app_map_text)
test_assert_contains("${_app_map_text}" "K|CMAKE_SOURCE_SUBDIR|cmake")
file(READ "${_core_node_dir}/map.txt" _core_map_text)
@@ -255,17 +263,17 @@ test_assert_contains("${_list_targets_stdout}" "app")
test_assert_contains("${_list_targets_stdout}" "presetlib")
test_write_file_strequal("list_targets_stdout.txt" "${_list_targets_stdout}" _list_targets_stdout_file)
-set(_deps_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh deps --data-dir ${_export_dir} app")
+set(_deps_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh deps --data-dir ${_export_dir} library_test_libs::app")
execute_process(
- COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" deps --data-dir "${_export_dir}" app
+ COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" deps --data-dir "${_export_dir}" library_test_libs::app
RESULT_VARIABLE _deps_result
OUTPUT_VARIABLE _deps_stdout
ERROR_VARIABLE _deps_stderr
)
test_assert_process_ok("[BASH][DEPS]" "${_deps_result}" "${_deps_command}" "${_deps_stdout}" "${_deps_stderr}" "${_export_dir}")
# deps 查询只输出依赖闭包,不包含请求对象自身;真正执行 source/build/install/auto 时才会包含请求对象。
-test_assert_strequal("${_deps_stdout}" "core
-util
+test_assert_strequal("${_deps_stdout}" "library_test_libs::core
+library_test_libs::util
")
test_assert_contains("${_deps_stdout}" "core")
test_assert_contains("${_deps_stdout}" "util")
@@ -287,21 +295,23 @@ library_set_global(library_test_libs BUILD_CACHE_ROOT "${TEST_OUTPUT_DIR}/runtim
library_set_global(library_test_libs INSTALL_CACHE_ROOT "${TEST_OUTPUT_DIR}/runtime_self/install")
library_export_dir(library_test_libs "${_runtime_self_export_dir}")
-set(_self_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_self_export_dir} app")
+set(_self_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_self_export_dir} library_test_libs::app")
execute_process(
- COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_self_export_dir}" app
+ COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_self_export_dir}" library_test_libs::app
RESULT_VARIABLE _self_auto_result
OUTPUT_VARIABLE _self_auto_stdout
ERROR_VARIABLE _self_auto_stderr
)
test_assert_process_ok("[BASH][AUTO][APP][SELF]" "${_self_auto_result}" "${_self_auto_command}" "${_self_auto_stdout}" "${_self_auto_stderr}" "${_runtime_self_export_dir}")
-test_assert_contains("${_self_auto_stdout}" "[app][source]")
-test_assert_not_contains("${_self_auto_stdout}" "[core][source]")
-test_assert_not_contains("${_self_auto_stdout}" "[util][source]")
+test_assert_contains("${_self_auto_stdout}" "[library_test_libs::app][source]")
+test_assert_not_contains("${_self_auto_stdout}" "[library_test_libs::core][source]")
+test_assert_not_contains("${_self_auto_stdout}" "[library_test_libs::util][source]")
test_report_file("${TEST_OUTPUT_DIR}/runtime_self/source/app/source.success")
test_report_file("${TEST_OUTPUT_DIR}/runtime_self/install/app/payload.txt")
# self-only auto 也要在 app configure 阶段追加依赖库 OTHER_USE_OPT;不需要先执行依赖库自身 action。
-file(READ "${_runtime_self_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app/build.log" _runtime_self_app_build_log)
+__library_export_registry_id(library_test_libs _runtime_self_registry)
+registry_node_dir("${_runtime_self_registry}" library_test_libs::app "${_runtime_self_export_dir}/registry" _runtime_self_app_node_dir)
+file(READ "${_runtime_self_app_node_dir}/build.log" _runtime_self_app_build_log)
test_assert_contains("${_runtime_self_app_build_log}" "-DCORE_USE_OPT=core-visible")
test_assert_contains("${_runtime_self_app_build_log}" "-DCORE_USE_PATH=C:/sdk/core\\ with\\ space")
test_assert_contains("${_runtime_self_app_build_log}" "-DUTIL_USE_OPT=util-visible")
@@ -325,31 +335,33 @@ test_log("[LINE_ENDING][LF][OK]" "runtime export txt files use LF by default")
# 显式切换 CRLF 时,写出文件应按配置输出 CRLF;测试后恢复 LF,避免影响后续业务执行。
codec_set_line_ending(CRLF)
-map_serialize_file("__library_library_test_libs_globals" "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt")
+__library_globals_id(library_test_libs _library_test_globals)
+map_serialize_file("${_library_test_globals}" "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt")
file(READ "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt" _library_test_crlf_file_hex HEX)
test_assert_contains("${_library_test_crlf_file_hex}" "0d0a")
codec_set_line_ending(LF)
-set(_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh with_rely_auto --data-dir ${_runtime_export_dir} app")
+set(_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh with_rely_auto --data-dir ${_runtime_export_dir} library_test_libs::app")
execute_process(
- COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" app
+ COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" library_test_libs::app
RESULT_VARIABLE _auto_result
OUTPUT_VARIABLE _auto_stdout
ERROR_VARIABLE _auto_stderr
)
test_assert_process_ok("[BASH][WITH_RELY_AUTO][APP]" "${_auto_result}" "${_auto_command}" "${_auto_stdout}" "${_auto_stderr}" "${_runtime_export_dir}")
# with_rely_auto 执行集合必须包含依赖和请求对象自身,并且日志按 build_order 输出。
-test_assert_contains("${_auto_stdout}" "[core][source]")
-test_assert_contains("${_auto_stdout}" "[util][source]")
-test_assert_contains("${_auto_stdout}" "[app][source]")
-set(_runtime_core_node_dir "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core")
+test_assert_contains("${_auto_stdout}" "[library_test_libs::core][source]")
+test_assert_contains("${_auto_stdout}" "[library_test_libs::util][source]")
+test_assert_contains("${_auto_stdout}" "[library_test_libs::app][source]")
+__library_export_registry_id(library_test_libs _runtime_registry)
+registry_node_dir("${_runtime_registry}" library_test_libs::core "${_runtime_export_dir}/registry" _runtime_core_node_dir)
file(READ "${_runtime_core_node_dir}/build.log" _runtime_core_build_log)
test_assert_not_contains("${_runtime_core_build_log}" "%00")
test_assert_not_contains("${_runtime_core_build_log}" "--preset %00")
-set(_preset_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_export_dir} presetlib")
+set(_preset_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_export_dir} library_test_libs::presetlib")
execute_process(
- COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_export_dir}" presetlib
+ COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_export_dir}" library_test_libs::presetlib
RESULT_VARIABLE _preset_auto_result
OUTPUT_VARIABLE _preset_auto_stdout
ERROR_VARIABLE _preset_auto_stderr
@@ -357,21 +369,21 @@ execute_process(
test_assert_process_ok("[BASH][AUTO][PRESETLIB]" "${_preset_auto_result}" "${_preset_auto_command}" "${_preset_auto_stdout}" "${_preset_auto_stderr}" "${_runtime_export_dir}")
if(_library_test_git_result EQUAL 0)
- set(_git_current_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh git-current-branch --data-dir ${_runtime_export_dir} core")
+ set(_git_current_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh git-current-branch --data-dir ${_runtime_export_dir} library_test_libs::core")
execute_process(
- COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" git-current-branch --data-dir "${_runtime_export_dir}" core
+ COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" git-current-branch --data-dir "${_runtime_export_dir}" library_test_libs::core
RESULT_VARIABLE _git_current_result
OUTPUT_VARIABLE _git_current_stdout
ERROR_VARIABLE _git_current_stderr
)
test_assert_process_ok("[BASH][GIT_CURRENT_BRANCH]" "${_git_current_result}" "${_git_current_command}" "${_git_current_stdout}" "${_git_current_stderr}" "${_runtime_export_dir}")
test_assert_contains("${_git_current_stdout}" "main")
- test_report_file("${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core/git-current-branch.success")
- test_report_file("${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core/git-current-branch.log")
+ test_report_file("${_runtime_core_node_dir}/git-current-branch.success")
+ test_report_file("${_runtime_core_node_dir}/git-current-branch.log")
endif()
foreach(_name IN ITEMS core util app presetlib)
- set(_runtime_node_dir "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_${_name}")
+ registry_node_dir("${_runtime_registry}" "library_test_libs::${_name}" "${_runtime_export_dir}/registry" _runtime_node_dir)
test_report_file("${TEST_OUTPUT_DIR}/runtime/source/${_name}/source.success")
test_report_file("${_runtime_node_dir}/source.log")
test_report_file("${TEST_OUTPUT_DIR}/runtime/build/${_name}/build.success")
@@ -381,10 +393,12 @@ foreach(_name IN ITEMS core util app presetlib)
test_report_file("${TEST_OUTPUT_DIR}/runtime/install/${_name}/payload.txt")
endforeach()
-file(READ "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app/build.log" _app_build_log)
+registry_node_dir("${_runtime_registry}" library_test_libs::app "${_runtime_export_dir}/registry" _runtime_app_node_dir)
+file(READ "${_runtime_app_node_dir}/build.log" _app_build_log)
test_assert_contains("${_app_build_log}" "source_subdir=cmake")
test_assert_contains("${_app_build_log}" "source=${TEST_OUTPUT_DIR}/runtime/source/app/cmake")
-file(READ "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_presetlib/build.log" _preset_build_log)
+registry_node_dir("${_runtime_registry}" library_test_libs::presetlib "${_runtime_export_dir}/registry" _runtime_preset_node_dir)
+file(READ "${_runtime_preset_node_dir}/build.log" _preset_build_log)
test_assert_contains("${_preset_build_log}" "--preset")
test_assert_contains("${_preset_build_log}" "preset-test")
@@ -398,10 +412,10 @@ get_property(_folder_all_auto TARGET library_test_all_auto PROPERTY FOLDER)
test_assert_strequal("${_folder_all_auto}" "library/library_test_libs/all")
get_property(_folder_all_with_rely_auto TARGET library_test_all_with_rely_auto PROPERTY FOLDER)
test_assert_strequal("${_folder_all_with_rely_auto}" "library/library_test_libs/all")
-get_property(_folder_item_app_auto TARGET library_test_item_app_auto PROPERTY FOLDER)
-test_assert_strequal("${_folder_item_app_auto}" "library/library_test_libs/items/app")
-get_property(_folder_item_app_with_rely_auto TARGET library_test_item_app_with_rely_auto PROPERTY FOLDER)
-test_assert_strequal("${_folder_item_app_with_rely_auto}" "library/library_test_libs/items/app")
+get_property(_folder_item_app_auto TARGET library_test_item_library_test_libs_app_auto PROPERTY FOLDER)
+test_assert_strequal("${_folder_item_app_auto}" "library/library_test_libs/items/library_test_libs::app")
+get_property(_folder_item_app_with_rely_auto TARGET library_test_item_library_test_libs_app_with_rely_auto PROPERTY FOLDER)
+test_assert_strequal("${_folder_item_app_with_rely_auto}" "library/library_test_libs/items/library_test_libs::app")
library_create(library_test_other)
library_register(library_test_other other_core)
diff --git a/0_cmake_library/cmake_library/test/test_all.cmake b/0_cmake_library/cmake_library/test/test_all.cmake
index 7fe7ebb..abeac91 100644
--- a/0_cmake_library/cmake_library/test/test_all.cmake
+++ b/0_cmake_library/cmake_library/test/test_all.cmake
@@ -6,6 +6,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/base/set/set_test.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/base/list/list_test.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/composite/registry/registry_test.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/domain/action/action_test.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/domain/library/library_namespace_test.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/domain/library/library_test.cmake")
string(TIMESTAMP _test_all_finished_at "%Y-%m-%d %H:%M:%S")
diff --git a/0_cmake_library/cmake_library/test/test_common.cmake b/0_cmake_library/cmake_library/test/test_common.cmake
index 59daf26..d629623 100644
--- a/0_cmake_library/cmake_library/test/test_common.cmake
+++ b/0_cmake_library/cmake_library/test/test_common.cmake
@@ -228,7 +228,7 @@ function(test_assert_process_ok title result command_text stdout_text stderr_tex
endfunction()
macro(test_cmake_configure_should_fail name cmake_code out)
- string(REPLACE "/" "_" _test_fail_project_name "${name}")
+ string(REPLACE "." "_" _test_fail_project_name "${name}")
set(_test_fail_dir "${TEST_OUTPUT_DIR}/${name}_project")
file(REMOVE_RECURSE "${_test_fail_dir}")
file(MAKE_DIRECTORY "${_test_fail_dir}")
diff --git a/0_cmake_library/create_linux_driver_proj.cmake b/0_cmake_library/create_linux_driver_proj.cmake
index d0395d7..3b5e252 100644
--- a/0_cmake_library/create_linux_driver_proj.cmake
+++ b/0_cmake_library/create_linux_driver_proj.cmake
@@ -63,7 +63,7 @@ function(get_common_path list_var out_var)
# 取第一个路径作为初始公共路径
list(GET ${list_var} 0 _first_path)
- string(REPLACE "\\" "/" _first_path "${_first_path}")
+ string(REPLACE "\\" "." _first_path "${_first_path}")
# 检查路径是否以 / 开头
set(_has_leading_slash 0)
@@ -72,12 +72,12 @@ function(get_common_path list_var out_var)
endif()
# 将路径拆分为部分
- string(REPLACE "/" ";" _common_parts "${_first_path}")
+ string(REPLACE "." ";" _common_parts "${_first_path}")
# 遍历所有路径
foreach(_path IN LISTS ${list_var})
- string(REPLACE "\\" "/" _path_norm "${_path}")
- string(REPLACE "/" ";" _cur_parts "${_path_norm}")
+ string(REPLACE "\\" "." _path_norm "${_path}")
+ string(REPLACE "." ";" _cur_parts "${_path_norm}")
# 取两个列表的较小长度,避免越界
list(LENGTH _common_parts _len1)
@@ -120,7 +120,7 @@ function(get_common_path list_var out_var)
# 拼回路径
if(_common_parts)
- list(JOIN _common_parts "/" _common_path)
+ list(JOIN _common_parts "." _common_path)
else()
set(_common_path "")
endif()
diff --git a/0_cmake_library/main.cmake b/0_cmake_library/main.cmake
index a5f84dd..e2fea37 100644
--- a/0_cmake_library/main.cmake
+++ b/0_cmake_library/main.cmake
@@ -86,7 +86,7 @@ macro(_load_cmake_library)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
endif ()
- _find_upwards_directory(${CMAKE_CURRENT_LIST_DIR} 0_cmake_library G_Root_Cmake_Library_Dir)
+ _find_upwards_directory(${CMAKE_CURRENT_LIST_DIR}/../ 0_cmake_library G_Root_Cmake_Library_Dir)
# 外部库构建目录
# if(WIN32)
# set(_root_dir "D:/ae")
diff --git a/0_cmake_library/ninja_build_analyze/build_analyze.sh b/0_cmake_library/ninja_build_analyze/build_analyze.sh
index 782c61c..8cadecc 100644
--- a/0_cmake_library/ninja_build_analyze/build_analyze.sh
+++ b/0_cmake_library/ninja_build_analyze/build_analyze.sh
@@ -5,7 +5,7 @@ set -euo pipefail
SCRIPT_NAME="$(basename "$0")"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ -f "$SCRIPT_DIR/../cmake_bash_library/cmake_bash_args.bash" ]]; then
- # shellcheck source=../cmake_bash_library/cmake_bash_args.bash
+ # shellcheck source=../cmake_bash_library/cmake_bash_args.bash
source "$SCRIPT_DIR/../cmake_bash_library/cmake_bash_args.bash"
fi
diff --git a/0_cmake_library/ninja_build_analyze/export.cmake b/0_cmake_library/ninja_build_analyze/export.cmake
index a6f540a..71a60fb 100644
--- a/0_cmake_library/ninja_build_analyze/export.cmake
+++ b/0_cmake_library/ninja_build_analyze/export.cmake
@@ -2,7 +2,7 @@
# 执行顺序不再由 CMake target 依赖表达,全部由 build_analyze.sh 参数控制。
-include("${CMAKE_CURRENT_LIST_DIR}/../cmake_bash_library/export.cmake")
+include("../cmake_bash_library/export.cmake")
diff --git a/register/base.cmake b/0_cmake_library/register/base.cmake
similarity index 79%
rename from register/base.cmake
rename to 0_cmake_library/register/base.cmake
index 2331c0b..d85e764 100644
--- a/register/base.cmake
+++ b/0_cmake_library/register/base.cmake
@@ -2,7 +2,7 @@ include_guard(GLOBAL)
block()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
if (NOT CMAKE_SYSROOT)
- set(CMAKE_SYSROOT /)
+ set(CMAKE_SYSROOT .)
endif ()
endif ()
if (CMAKE_SYSROOT)
@@ -10,13 +10,12 @@ block()
endif ()
set(zlib_opts)
list(APPEND zlib_opts "-DZLIB_BUILD_EXAMPLES=OFF")
- _register_git_cmake_library(
+ _register_git_cmake_library(global
zlib
- ZLIB
https://github.com/madler/zlib.git
v1.3.1
)
- rcl_get_effective_install_dir(zlib ZLIB_ROOT)
+ rcl_get_effective_install_dir(global zlib ZLIB_ROOT)
set(ZLIB_INCLUDE_DIR ${ZLIB_ROOT}/include)
if (MSVC)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
@@ -27,20 +26,20 @@ block()
else ()
set(ZLIB_LIBRARY ${ZLIB_ROOT}/lib/libz.a)
endif ()
- rcl_cmake_library_set_cmake_options(zlib ${zlib_opts})
- rcl_cmake_library_set_other_use_opt(zlib
+ rcl_cmake_library_set_cmake_options(global zlib ${zlib_opts})
+ rcl_cmake_library_set_other_use_opt(global zlib
"-DZLIB_ROOT=\"${ZLIB_ROOT}\""
"-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\""
"-DZLIB_INCLUDE_DIR=\"${ZLIB_ROOT}/include\""
)
- rcl_cmake_library_set_init_script(zlib
+ rcl_cmake_library_set_init_script(global zlib
"set(ZLIB_ROOT \"${ZLIB_ROOT}\")"
"set(ZLIB_INCLUDE_DIR \"${ZLIB_INCLUDE_DIR}\")"
"set(ZLIB_INCLUDE_DIRS \"${ZLIB_INCLUDE_DIR}\")"
"set(ZLIB_LIBRARY \"${ZLIB_LIBRARY}\")"
"set(ZLIB_LIBRARIES \"${ZLIB_LIBRARY}\")"
)
- rcl_cmake_library_set_clear_script(zlib
+ rcl_cmake_library_set_clear_script(global zlib
"unset(ZLIB_ROOT)"
"unset(ZLIB_INCLUDE_DIR)"
"unset(ZLIB_INCLUDE_DIRS)"
@@ -75,28 +74,26 @@ block()
list(APPEND libpng_opts "-DZLIB_ROOT=\"${ZLIB_ROOT}\"")
list(APPEND libpng_opts "-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\"")
list(APPEND libpng_opts "-DZLIB_INCLUDE_DIR=\"${ZLIB_INCLUDE_DIR}\"")
- _register_git_cmake_library(
- libpng
+ _register_git_cmake_library(global
libpng
https://github.com/glennrp/libpng.git
v1.6.58
)
- rcl_cmake_library_set_cmake_options(libpng ${libpng_opts})
- rcl_cmake_library_set_other_use_opt(libpng
+ rcl_cmake_library_set_cmake_options(global libpng ${libpng_opts})
+ rcl_cmake_library_set_other_use_opt(global libpng
"-DPNG_LIBRARY=\"${PNG_LIBRARY}\""
"-DPNG_PNG_INCLUDE_DIR=\"${PNG_PNG_INCLUDE_DIR}\""
)
set(GTest_opts)
list(APPEND GTest_opts "-Dgtest_force_shared_crt=ON")
- _register_git_cmake_library(
+ _register_git_cmake_library(global
googletest
- GTest
https://github.com/google/googletest.git
v1.17.0
)
- rcl_cmake_library_set_cmake_options(googletest ${GTest_opts})
+ rcl_cmake_library_set_cmake_options(global googletest ${GTest_opts})
set(GTest_DIR ${EXTERNAL_INSTALL_DIR}/googletest/lib/cmake)
- #_register_git_cmake_library(
+ #_register_git_cmake_library(global
# libarchive
# libarchive
# "https://github.com/libarchive/libarchive.git"
@@ -111,14 +108,13 @@ block()
list(APPEND libzip_opts "-DBUILD_REGRESS=OFF")
list(APPEND libzip_opts "-DBUILD_TOOLS=OFF")
list(APPEND libzip_opts "-DBUILD_SHARED_LIBS=OFF")
- _register_git_cmake_library(
- libzip
+ _register_git_cmake_library(global
libzip
"https://github.com/nih-at/libzip"
"v1.11.4"
)
- rcl_cmake_library_set_cmake_options(libzip ${libzip_opts})
- rcl_cmake_library_set_deps(libzip zlib)
+ rcl_cmake_library_set_cmake_options(global libzip ${libzip_opts})
+ rcl_cmake_library_set_deps(global libzip zlib)
#set(ucoro_opts)
#_register_git_cmake_library_opt(
# "ucoro"
@@ -135,25 +131,22 @@ block()
"-DSPDLOG_INSTALL=ON"
"-DSPDLOG_FMT_EXTERNAL=OFF"
)
- _register_git_cmake_library(
- spdlog
+ _register_git_cmake_library(global
spdlog
"https://github.com/gabime/spdlog.git"
"v1.17.0"
)
- rcl_cmake_library_set_cmake_options(spdlog ${spdlog_opts})
- _register_git_cmake_library(
- pfr
+ rcl_cmake_library_set_cmake_options(global spdlog ${spdlog_opts})
+ _register_git_cmake_library(global
pfr
"https://github.com/boostorg/pfr.git"
"2.2.0"
)
- _register_git_cmake_library(
- llvm
+ _register_git_cmake_library(global
llvm
"https://github.com/llvm/llvm-project.git"
"llvmorg-22.1.8"
)
- rcl_cmake_library_set_cmake_source_relative_dir(llvm "llvm")
+ rcl_cmake_library_set_cmake_source_relative_dir(global llvm "llvm")
message("base.cmake load complete!")
endblock()
\ No newline at end of file
diff --git a/register/computer_graphics.cmake b/0_cmake_library/register/computer_graphics.cmake
similarity index 68%
rename from register/computer_graphics.cmake
rename to 0_cmake_library/register/computer_graphics.cmake
index e93aa8e..5f5837d 100644
--- a/register/computer_graphics.cmake
+++ b/0_cmake_library/register/computer_graphics.cmake
@@ -1,6 +1,6 @@
include_guard(GLOBAL)
-include(${CMAKE_CURRENT_LIST_DIR}/../0_cmake_library/register_libaray/export.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/base.cmake)
+include("${CMAKE_CURRENT_LIST_DIR}/export.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/base.cmake")
block()
set(freetype_opts)
set(freetype_root ${EXTERNAL_INSTALL_DIR}/freetype_VER-2-13-3)
@@ -12,14 +12,13 @@ block()
else ()
set(FREETYPE_LIBRARY "${freetype_root}/lib/freetype.lib")
endif ()
- _register_git_cmake_library(
- freetype
+ _register_git_cmake_library(global
freetype
https://github.com/freetype/freetype.git
VER-2-13-3
)
- rcl_cmake_library_set_cmake_options(freetype ${freetype_opts})
- rcl_cmake_library_set_other_use_opt(freetype
+ rcl_cmake_library_set_cmake_options(global freetype ${freetype_opts})
+ rcl_cmake_library_set_other_use_opt(global freetype
"-DFREETYPE_INCLUDE_DIRS=\"${FREETYPE_INCLUDE_DIRS}\""
"-DFREETYPE_INCLUDE_DIR_ft2build=\"${FREETYPE_INCLUDE_DIR_ft2build}\""
"-DFREETYPE_INCLUDE_DIR_freetype2=\"${FREETYPE_INCLUDE_DIR_freetype2}\""
@@ -30,14 +29,13 @@ block()
list(APPEND msdfgen_cmake_option "-DMSDFGEN_USE_SKIA=OFF -DMSDFGEN_USE_VCPKG=OFF")
list(APPEND msdfgen_cmake_option "-DBUILD_SHARED_LIBS=ON -DMSDFGEN_DYNAMIC_RUNTIME=ON")
list(APPEND msdfgen_cmake_option "-DMSDFGEN_INSTALL=ON")
- _register_git_cmake_library(
- msdfgen
+ _register_git_cmake_library(global
msdfgen
https://github.com/Chlumsky/msdfgen.git
v1.12
)
- rcl_cmake_library_set_cmake_options(msdfgen ${msdfgen_cmake_option})
- rcl_cmake_library_set_deps(msdfgen zlib libpng freetype tinyxml2)
+ rcl_cmake_library_set_cmake_options(global msdfgen ${msdfgen_cmake_option})
+ rcl_cmake_library_set_deps(global msdfgen zlib libpng freetype tinyxml2)
#https://github.com/nyyManni/msdfgl.git
set(msdfgl_cmake_option "")
set(PThreads4W_option
@@ -45,13 +43,12 @@ block()
)
list(APPEND PThreads4W_option "-DBUILD_TESTING=OFF")
list(APPEND PThreads4W_option "-DDIST_ROOT=${EXTERNAL_INSTALL_DIR}/PThreads4W")
- _register_git_cmake_library(
- PThreads4W
+ _register_git_cmake_library(global
PThreads4W
https://github.com/jwinarske/pthreads4w.git
"cmake"
)
- rcl_cmake_library_set_cmake_options(PThreads4W ${PThreads4W_option})
+ rcl_cmake_library_set_cmake_options(global PThreads4W ${PThreads4W_option})
# C:\VulkanSDK\1.4.350.0
# SDK涓嬭浇 https://vulkan.lunarg.com/sdk/home
# https://docs.vulkan.org/tutorial/latest/00_Introduction.html
@@ -59,13 +56,12 @@ block()
# https://github.com/KhronosGroup/Vulkan-Samples.git
# https://github.com/SaschaWillems/Vulkan.git
set(glfw3_option ${base_options})
- _register_git_cmake_library(
- glfw3
+ _register_git_cmake_library(global
glfw3
https://github.com/glfw/glfw.git
"3.4"
)
- rcl_cmake_library_set_cmake_options(glfw3 ${glfw3_option})
+ rcl_cmake_library_set_cmake_options(global glfw3 ${glfw3_option})
set(glfw3_option ${base_options})
set(msdf-atlas-gen_option ${base_options})
list(APPEND msdf-atlas-gen_option
@@ -81,98 +77,87 @@ block()
"-DBUILD_SHARED_LIBS=OFF"
)
set(msdf-atlas-gen_rely ZLIB freetype png)
- _register_git_cmake_library(
- msdf-atlas-gen
+ _register_git_cmake_library(global
msdf-atlas-gen
https://github.com/Chlumsky/msdf-atlas-gen.git
v1.4
)
- rcl_cmake_library_set_cmake_options(msdf-atlas-gen ${msdf-atlas-gen_option})
+ rcl_cmake_library_set_cmake_options(global msdf-atlas-gen ${msdf-atlas-gen_option})
set(cglm_option ${base_options})
- _register_git_cmake_library(
- cglm
+ _register_git_cmake_library(global
cglm
"https://github.com/recp/cglm.git"
v0.9.6
)
- rcl_cmake_library_set_cmake_options(cglm ${cglm_option})
+ rcl_cmake_library_set_cmake_options(global cglm ${cglm_option})
set(glm_option ${base_options})
- _register_git_cmake_library(
- glm
+ _register_git_cmake_library(global
glm
"https://github.com/g-truc/glm.git"
"1.0.3"
)
- rcl_cmake_library_set_cmake_options(glm ${glm_option})
+ rcl_cmake_library_set_cmake_options(global glm ${glm_option})
set(tinyobjloader_option ${base_options})
list(APPEND tinyobjloader_option "-DCMAKE_POLICY_VERSION_MINIMUM=3.20")
- _register_git_cmake_library(
- tinyobjloader
+ _register_git_cmake_library(global
tinyobjloader
"https://github.com/tinyobjloader/tinyobjloader.git"
"v1.0.7"
)
- rcl_cmake_library_set_cmake_options(tinyobjloader ${tinyobjloader_option})
+ rcl_cmake_library_set_cmake_options(global tinyobjloader ${tinyobjloader_option})
set(vk-bootstrap_option ${base_options})
- _register_git_cmake_library(
- vk-bootstrap
+ _register_git_cmake_library(global
vk-bootstrap
"https://github.com/charles-lunarg/vk-bootstrap.git"
"v1.4.350"
)
- rcl_cmake_library_set_cmake_options(vk-bootstrap ${vk-bootstrap_option})
+ rcl_cmake_library_set_cmake_options(global vk-bootstrap ${vk-bootstrap_option})
set(Vulkan-Hpp_option ${base_options})
- _register_git_cmake_library(
- Vulkan-Hpp
+ _register_git_cmake_library(global
Vulkan-Hpp
"https://github.com/KhronosGroup/Vulkan-Hpp.git"
"v1.4.350"
)
- rcl_cmake_library_set_cmake_options(Vulkan-Hpp ${Vulkan-Hpp_option})
+ rcl_cmake_library_set_cmake_options(global Vulkan-Hpp ${Vulkan-Hpp_option})
set(volk_option ${base_options})
list(APPEND volk_option "-DVOLK_INSTALL=ON")
list(APPEND volk_option "-DVOLK_PULL_IN_VULKAN=ON")
list(APPEND volk_option "-DVOLK_HEADERS_ONLY=OFF")
list(APPEND volk_option "-DVOLK_NAMESPACE=ON")
#list(APPEND volk_option "-DVOLK_STATIC_DEFINES=VK_USE_PLATFORM_WIN32_KHR")
- _register_git_cmake_library(
- volk
+ _register_git_cmake_library(global
volk
"https://github.com/zeux/volk.git"
"vulkan-sdk-1.4.350.0"
)
- rcl_cmake_library_set_cmake_options(volk ${volk_option})
+ rcl_cmake_library_set_cmake_options(global volk ${volk_option})
# vma
set(VulkanMemoryAllocator_option ${base_options})
- _register_git_cmake_library(
- VulkanMemoryAllocator
+ _register_git_cmake_library(global
VulkanMemoryAllocator
"https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git"
"v3.3.0"
)
- rcl_cmake_library_set_cmake_options(VulkanMemoryAllocator ${VulkanMemoryAllocator_option})
+ rcl_cmake_library_set_cmake_options(global VulkanMemoryAllocator ${VulkanMemoryAllocator_option})
set(tinygltf_option ${base_options})
- _register_git_cmake_library(
- tinygltf
+ _register_git_cmake_library(global
tinygltf
"https://github.com/syoyo/tinygltf.git"
"v3.0.0"
)
- rcl_cmake_library_set_cmake_options(tinygltf ${tinygltf_option})
+ rcl_cmake_library_set_cmake_options(global tinygltf ${tinygltf_option})
set(fastgltf_option ${base_options})
- _register_git_cmake_library(
- fastgltf
+ _register_git_cmake_library(global
fastgltf
"https://github.com/spnda/fastgltf.git"
"v0.9.0"
)
- rcl_cmake_library_set_cmake_options(fastgltf ${fastgltf_option})
+ rcl_cmake_library_set_cmake_options(global fastgltf ${fastgltf_option})
set(VulkanSceneGraph_option ${base_options})
- _register_git_cmake_library(
- VulkanSceneGraph
+ _register_git_cmake_library(global
VulkanSceneGraph
"https://github.com/vsg-dev/VulkanSceneGraph.git"
"v1.1.15"
)
- rcl_cmake_library_set_cmake_options(VulkanSceneGraph ${VulkanSceneGraph_option})
+ rcl_cmake_library_set_cmake_options(global VulkanSceneGraph ${VulkanSceneGraph_option})
endblock()
diff --git a/0_cmake_library/register/export.cmake b/0_cmake_library/register/export.cmake
new file mode 100644
index 0000000..a9dd5ed
--- /dev/null
+++ b/0_cmake_library/register/export.cmake
@@ -0,0 +1,8 @@
+include_guard(GLOBAL)
+include("${CMAKE_CURRENT_LIST_DIR}/base.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/register_library.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/computer_graphics.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/libarchive.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/with_qt.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/osg_earth.cmake")
+
diff --git a/register/libarchive.cmake b/0_cmake_library/register/libarchive.cmake
similarity index 85%
rename from register/libarchive.cmake
rename to 0_cmake_library/register/libarchive.cmake
index c9b4710..ce0cbde 100644
--- a/register/libarchive.cmake
+++ b/0_cmake_library/register/libarchive.cmake
@@ -1,22 +1,23 @@
+include_guard(GLOBAL)
+
block()
set(bzip2_opts)
list(APPEND bzip2_opts -DENABLE_SHARED_LIB=OFF)
list(APPEND bzip2_opts -DENABLE_STATIC_LIB=ON)
list(APPEND bzip2_opts -DENABLE_APP=OFF)
- _register_git_cmake_library(
- bzip2
+ _register_git_cmake_library(global
bzip2
"https://github.com/libarchive/bzip2"
"master"
)
- rcl_cmake_library_set_cmake_options(bzip2 ${bzip2_opts})
- rcl_get_effective_install_dir(bzip2 BZIP2_ROOT)
+ rcl_cmake_library_set_cmake_options(global bzip2 ${bzip2_opts})
+ rcl_get_effective_install_dir(global bzip2 BZIP2_ROOT)
if (MSVC)
set(BZIP2_LIBRARY "${BZIP2_ROOT}/lib/bz2_static.lib")
else ()
set(BZIP2_LIBRARY "${BZIP2_ROOT}/lib/libbz2_static.a")
endif ()
- rcl_cmake_library_set_other_use_opt(bzip2
+ rcl_cmake_library_set_other_use_opt(global bzip2
"-DBZIP2_INCLUDE_DIR=\"${BZIP2_ROOT}/include\""
"-DBZIP2_INCLUDE_DIRS=\"${BZIP2_ROOT}/include\""
"-DBZIP2_LIBRARY=\"${BZIP2_LIBRARY}\""
@@ -24,7 +25,7 @@ block()
"-DBZIP2_LIBRARY_DEBUG=\"${BZIP2_LIBRARY}\""
"-DBZIP2_LIBRARIES=\"${BZIP2_LIBRARY}\""
)
- rcl_cmake_library_set_init_script(bzip2
+ rcl_cmake_library_set_init_script(global bzip2
"set(LIBARCHIVE_BZIP2_ROOT \"${BZIP2_ROOT}\")"
"set(LIBARCHIVE_BZIP2_LIBRARY \"${BZIP2_LIBRARY}\")"
"set(BZIP2_ROOT \"${BZIP2_ROOT}\")"
@@ -33,7 +34,7 @@ block()
"set(BZIP2_LIBRARY \"${BZIP2_LIBRARY}\")"
"set(BZIP2_LIBRARIES \"${BZIP2_LIBRARY}\")"
)
- rcl_cmake_library_set_clear_script(bzip2
+ rcl_cmake_library_set_clear_script(global bzip2
"unset(LIBARCHIVE_BZIP2_ROOT)"
"unset(LIBARCHIVE_BZIP2_LIBRARY)"
"unset(BZIP2_ROOT)"
@@ -61,14 +62,13 @@ block()
elseif (WIN32)
list(APPEND lzma_opts -DXZ_THREADS=vista)
endif ()
- _register_git_cmake_library(
+ _register_git_cmake_library(global
lzma
- liblzma
"https://github.com/tukaani-project/xz.git"
"v5.8.3"
)
- rcl_cmake_library_set_cmake_options(lzma ${lzma_opts})
- rcl_get_effective_install_dir(lzma LIBLZMA_ROOT)
+ rcl_cmake_library_set_cmake_options(global lzma ${lzma_opts})
+ rcl_get_effective_install_dir(global lzma LIBLZMA_ROOT)
set(LIBLZMA_INCLUDE_DIR "${LIBLZMA_ROOT}/include")
set(LIBARCHIVE_STATIC_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
string(STRIP "${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}" LIBARCHIVE_STATIC_EXE_LINKER_FLAGS)
@@ -90,7 +90,7 @@ block()
list(APPEND LIBLZMA_THREAD_LINK_LIBS "-pthread")
endif ()
endif ()
- rcl_cmake_library_set_other_use_opt(lzma
+ rcl_cmake_library_set_other_use_opt(global lzma
"-DLIBLZMA_INCLUDE_DIR=\"${LIBLZMA_INCLUDE_DIR}\""
"-DLIBLZMA_INCLUDE_DIRS=\"${LIBLZMA_INCLUDE_DIR}\""
"-DLIBLZMA_LIBRARY=\"${LIBLZMA_LIBRARY}\""
@@ -103,7 +103,7 @@ block()
"-DCMAKE_REQUIRED_FLAGS:STRING=\"${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}\""
"${LIBARCHIVE_LZMA_FORCE_MT_OPT}"
)
- rcl_cmake_library_set_init_script(lzma
+ rcl_cmake_library_set_init_script(global lzma
"set(LIBARCHIVE_LZMA_ROOT \"${LIBLZMA_ROOT}\")"
"set(LIBARCHIVE_LZMA_LIBRARY \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})"
"set(LIBARCHIVE_LZMA_LIBRARIES \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})"
@@ -113,7 +113,7 @@ block()
"set(LIBLZMA_LIBRARY \"${LIBLZMA_LIBRARY}\")"
"set(LIBLZMA_LIBRARIES \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})"
)
- rcl_cmake_library_set_clear_script(lzma
+ rcl_cmake_library_set_clear_script(global lzma
"unset(LIBARCHIVE_LZMA_ROOT)"
"unset(LIBARCHIVE_LZMA_LIBRARY)"
"unset(LIBARCHIVE_LZMA_LIBRARIES)"
@@ -127,21 +127,20 @@ block()
list(APPEND lz4_opts "-DBUILD_SHARED_LIBS=OFF")
list(APPEND lz4_opts "-DLZ4_BUILD_CLI=OFF")
# LZ4
- _register_git_cmake_library(
- lz4
+ _register_git_cmake_library(global
lz4
"https://github.com/lz4/lz4.git"
"v1.10.0"
)
- rcl_cmake_library_set_cmake_options(lz4 ${lz4_opts})
- rcl_cmake_library_set_cmake_source_relative_dir(lz4 "build/cmake")
- rcl_get_effective_install_dir(lz4 LZ4_ROOT)
+ rcl_cmake_library_set_cmake_options(global lz4 ${lz4_opts})
+ rcl_cmake_library_set_cmake_source_relative_dir(global lz4 "build/cmake")
+ rcl_get_effective_install_dir(global lz4 LZ4_ROOT)
if (MSVC)
set(LZ4_LIBRARY "${LZ4_ROOT}/lib/lz4.lib")
else ()
set(LZ4_LIBRARY "${LZ4_ROOT}/lib/liblz4.a")
endif ()
- rcl_cmake_library_set_other_use_opt(lz4
+ rcl_cmake_library_set_other_use_opt(global lz4
"-DLZ4_ROOT=\"${LZ4_ROOT}\""
"-DLZ4_INCLUDE_DIR=\"${LZ4_ROOT}/include\""
"-DLZ4_INCLUDE_DIRS=\"${LZ4_ROOT}/include\""
@@ -150,7 +149,7 @@ block()
"-DLZ4_LIBRARY_DEBUG=\"${LZ4_LIBRARY}\""
"-DLZ4_LIBRARIES=\"${LZ4_LIBRARY}\""
)
- rcl_cmake_library_set_init_script(lz4
+ rcl_cmake_library_set_init_script(global lz4
"set(LIBARCHIVE_LZ4_ROOT \"${LZ4_ROOT}\")"
"set(LIBARCHIVE_LZ4_LIBRARY \"${LZ4_LIBRARY}\")"
"set(LZ4_ROOT \"${LZ4_ROOT}\")"
@@ -159,7 +158,7 @@ block()
"set(LZ4_LIBRARY \"${LZ4_LIBRARY}\")"
"set(LZ4_LIBRARIES \"${LZ4_LIBRARY}\")"
)
- rcl_cmake_library_set_clear_script(lz4
+ rcl_cmake_library_set_clear_script(global lz4
"unset(LIBARCHIVE_LZ4_ROOT)"
"unset(LIBARCHIVE_LZ4_LIBRARY)"
"unset(LZ4_ROOT)"
@@ -177,15 +176,14 @@ block()
-DZSTD_ZLIB_SUPPORT=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
)
- _register_git_cmake_library(
- zstd
+ _register_git_cmake_library(global
zstd
"https://github.com/facebook/zstd.git"
"v1.5.7"
)
- rcl_cmake_library_set_cmake_options(zstd ${zstd_opts})
- rcl_cmake_library_set_cmake_source_relative_dir(zstd "build/cmake")
- rcl_get_effective_install_dir(zstd ZSTD_ROOT)
+ rcl_cmake_library_set_cmake_options(global zstd ${zstd_opts})
+ rcl_cmake_library_set_cmake_source_relative_dir(global zstd "build/cmake")
+ rcl_get_effective_install_dir(global zstd ZSTD_ROOT)
set(ZSTD_INCLUDE_DIR "${ZSTD_ROOT}/include")
set(ZSTD_CMAKE_DIR "${ZSTD_ROOT}/lib/cmake/zstd")
set(ZSTD_THREAD_LINK_LIBS)
@@ -195,7 +193,7 @@ block()
set(ZSTD_LIBRARY "${ZSTD_ROOT}/lib/libzstd.a")
list(APPEND ZSTD_THREAD_LINK_LIBS "-pthread")
endif ()
- rcl_cmake_library_set_other_use_opt(zstd
+ rcl_cmake_library_set_other_use_opt(global zstd
"-DZSTD_ROOT=\"${ZSTD_ROOT}\""
"-Dzstd_ROOT=\"${ZSTD_ROOT}\""
"-Dzstd_DIR=\"${ZSTD_CMAKE_DIR}\""
@@ -207,7 +205,7 @@ block()
"-DZSTD_LIBRARIES=\"${ZSTD_LIBRARY}\""
"-DCMAKE_EXE_LINKER_FLAGS:STRING=\"${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}\""
)
- rcl_cmake_library_set_init_script(zstd
+ rcl_cmake_library_set_init_script(global zstd
"set(LIBARCHIVE_ZSTD_ROOT \"${ZSTD_ROOT}\")"
"set(LIBARCHIVE_ZSTD_LIBRARY \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})"
"set(LIBARCHIVE_ZSTD_LIBRARIES \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})"
@@ -219,7 +217,7 @@ block()
"set(ZSTD_LIBRARY \"${ZSTD_LIBRARY}\")"
"set(ZSTD_LIBRARIES \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})"
)
- rcl_cmake_library_set_clear_script(zstd
+ rcl_cmake_library_set_clear_script(global zstd
"unset(LIBARCHIVE_ZSTD_ROOT)"
"unset(LIBARCHIVE_ZSTD_LIBRARY)"
"unset(LIBARCHIVE_ZSTD_LIBRARIES)"
@@ -244,15 +242,14 @@ block()
-DBUILD_SHARED_LIBS=OFF
-DEXPAT_ENABLE_INSTALL=ON
)
- _register_git_cmake_library(
- expat
+ _register_git_cmake_library(global
expat
"https://github.com/libexpat/libexpat.git"
"R_2_8_1"
)
- rcl_cmake_library_set_cmake_options(expat ${expat_opts})
- rcl_cmake_library_set_cmake_source_relative_dir(expat "expat")
- rcl_get_effective_install_dir(expat EXPAT_ROOT)
+ rcl_cmake_library_set_cmake_options(global expat ${expat_opts})
+ rcl_cmake_library_set_cmake_source_relative_dir(global expat "expat")
+ rcl_get_effective_install_dir(global expat EXPAT_ROOT)
if (MSVC)
set(EXPAT_STATIC_C_FLAG "/DXML_STATIC")
else ()
@@ -267,7 +264,7 @@ block()
else ()
set(EXPAT_LIBRARY "${EXPAT_ROOT}/lib/libexpat.a")
endif ()
- rcl_cmake_library_set_other_use_opt(expat
+ rcl_cmake_library_set_other_use_opt(global expat
"-DEXPAT_USE_STATIC_LIBS=ON"
"-DEXPAT_INCLUDE_DIR=\"${EXPAT_ROOT}/include\""
"-DEXPAT_INCLUDE_DIRS=\"${EXPAT_ROOT}/include\""
@@ -280,7 +277,7 @@ block()
"-DCMAKE_C_FLAGS:STRING=\"${CMAKE_C_FLAGS} ${EXPAT_STATIC_C_FLAG}\""
"-DCMAKE_CXX_FLAGS:STRING=\"${CMAKE_CXX_FLAGS} ${EXPAT_STATIC_C_FLAG}\""
)
- rcl_cmake_library_set_init_script(expat
+ rcl_cmake_library_set_init_script(global expat
"set(LIBARCHIVE_EXPAT_ROOT \"${EXPAT_ROOT}\")"
"set(LIBARCHIVE_EXPAT_LIBRARY \"${EXPAT_LIBRARY}\")"
"set(EXPAT_ROOT \"${EXPAT_ROOT}\")"
@@ -290,7 +287,7 @@ block()
"set(EXPAT_LIBRARIES \"${EXPAT_LIBRARY}\")"
"set(EXPAT_USE_STATIC_LIBS ON)"
)
- rcl_cmake_library_set_clear_script(expat
+ rcl_cmake_library_set_clear_script(global expat
"unset(LIBARCHIVE_EXPAT_ROOT)"
"unset(LIBARCHIVE_EXPAT_LIBRARY)"
"unset(EXPAT_ROOT)"
@@ -331,15 +328,14 @@ block()
-DENABLE_INSTALL=ON
-DBUILD_SHARED_LIBS=OFF
)
- _register_git_cmake_library(
- libarchive
+ _register_git_cmake_library(global
libarchive
"https://github.com/libarchive/libarchive.git"
"v3.8.7"
)
- rcl_cmake_library_set_cmake_options(libarchive ${libarchive_opts})
- rcl_cmake_library_set_deps(libarchive zlib zstd lzma bzip2 lz4 expat)
- rcl_get_effective_install_dir(libarchive LibArchive_Root)
+ rcl_cmake_library_set_cmake_options(global libarchive ${libarchive_opts})
+ rcl_cmake_library_set_deps(global libarchive zlib zstd lzma bzip2 lz4 expat)
+ rcl_get_effective_install_dir(global libarchive LibArchive_Root)
set(LibArchive_INCLUDE_DIR "${LibArchive_Root}/include")
if (MSVC)
set(LibArchive_LIBRARY "${LibArchive_Root}/lib/archive.lib")
@@ -357,7 +353,7 @@ block()
)
list(JOIN LibArchive_SUB_LIBRARIES "\" \"" LibArchive_SUB_LIBRARIES_SCRIPT)
- rcl_cmake_library_set_init_script(libarchive
+ rcl_cmake_library_set_init_script(global libarchive
"set(LibArchive_Root \"${LibArchive_Root}\")"
"set(LibArchive_INCLUDE_DIR \"${LibArchive_INCLUDE_DIR}\")"
"set(LibArchive_LIBRARY \"${LibArchive_LIBRARY}\")"
@@ -365,7 +361,7 @@ block()
"find_package(LibArchive REQUIRED)"
)
- rcl_cmake_library_set_clear_script(libarchive
+ rcl_cmake_library_set_clear_script(global libarchive
"unset(LibArchive_Root)"
"unset(LibArchive_INCLUDE_DIR)"
"unset(LibArchive_LIBRARY)"
diff --git a/0_cmake_library/register/osg_earth.cmake b/0_cmake_library/register/osg_earth.cmake
new file mode 100644
index 0000000..7d199e1
--- /dev/null
+++ b/0_cmake_library/register/osg_earth.cmake
@@ -0,0 +1,959 @@
+include_guard(GLOBAL)
+block()
+ set(suffix)
+ if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(suffix "d")
+ endif()
+ rcl_init(osg_earth)
+ rcl_set_root_dir(osg_earth "${EXTERNAL_DIR}/${G_Architecture_Name}_osg_earth")
+ rcl_set_build_cache_root(osg_earth "C:/b/osg_earth")
+ if(WIN32)
+ rcl_set_build_cache_root(osg_earth "C:/b/osg_earth")
+ endif()
+ set(zlib_opts)
+ list(APPEND zlib_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DCMAKE_DEBUG_POSTFIX=d
+ -DZLIB_BUILD_EXAMPLES=OFF
+ )
+ _register_git_cmake_library(osg_earth
+ zlib
+ "https://github.com/madler/zlib.git"
+ "v1.3.1"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth zlib ${zlib_opts})
+ rcl_get_effective_install_dir(osg_earth zlib ZLIB_ROOT)
+ set(ZLIB_DEBUG_SUFFIX)
+ if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(ZLIB_DEBUG_SUFFIX "d")
+ endif ()
+ set(ZLIB_INCLUDE_DIR "${ZLIB_ROOT}/include")
+ if (MSVC)
+ set(ZLIB_LIBRARY_DEBUG "${ZLIB_ROOT}/lib/zlibd.lib")
+ set(ZLIB_LIBRARY_RELEASE "${ZLIB_ROOT}/lib/zlib.lib")
+ set(ZLIB_LIBRARY "${ZLIB_ROOT}/lib/zlib${ZLIB_DEBUG_SUFFIX}.lib")
+ else ()
+ set(ZLIB_LIBRARY_DEBUG "${ZLIB_ROOT}/lib/libz.so")
+ set(ZLIB_LIBRARY_RELEASE "${ZLIB_ROOT}/lib/libz.so")
+ set(ZLIB_LIBRARY "${ZLIB_ROOT}/lib/libz.so")
+ endif ()
+ set(ZLIB_LIBRARIES "${ZLIB_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth zlib
+ "-DCMAKE_PREFIX_PATH=\"${ZLIB_ROOT}\""
+ "-DZLIB_ROOT=\"${ZLIB_ROOT}\""
+ "-DZLIB_INCLUDE_DIR=\"${ZLIB_INCLUDE_DIR}\""
+ "-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\""
+ "-DZLIB_LIBRARIES=\"${ZLIB_LIBRARIES}\""
+ "-DZLIB_LIBRARY_DEBUG=\"${ZLIB_LIBRARY_DEBUG}\""
+ "-DZLIB_LIBRARY_RELEASE=\"${ZLIB_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth zlib
+ "list(APPEND CMAKE_PREFIX_PATH \"${ZLIB_ROOT}\")"
+ "set(ZLIB_ROOT \"${ZLIB_ROOT}\")"
+ "set(ZLIB_INCLUDE_DIR \"${ZLIB_INCLUDE_DIR}\")"
+ "set(ZLIB_LIBRARY \"${ZLIB_LIBRARY}\")"
+ "set(ZLIB_LIBRARIES \"${ZLIB_LIBRARIES}\")"
+ "set(ZLIB_LIBRARY_DEBUG \"${ZLIB_LIBRARY_DEBUG}\")"
+ "set(ZLIB_LIBRARY_RELEASE \"${ZLIB_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth zlib
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${ZLIB_ROOT}\")"
+ "unset(ZLIB_ROOT)"
+ "unset(ZLIB_INCLUDE_DIR)"
+ "unset(ZLIB_LIBRARY)"
+ "unset(ZLIB_LIBRARIES)"
+ "unset(ZLIB_LIBRARY_DEBUG)"
+ "unset(ZLIB_LIBRARY_RELEASE)"
+ )
+ set(png_opts)
+ list(APPEND png_opts
+ -DPNG_SHARED=ON
+ -DPNG_STATIC=OFF
+ -DPNG_TESTS=OFF
+ -DPNG_TOOLS=OFF
+ -DPNG_EXECUTABLES=OFF
+ -DPNG_DEBUG_POSTFIX=
+ "-DCMAKE_PREFIX_PATH=${ZLIB_ROOT}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ png
+ "https://github.com/pnggroup/libpng.git"
+ "v1.6.50"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth png ${png_opts})
+ rcl_cmake_library_set_deps(osg_earth png zlib)
+ rcl_get_effective_install_dir(osg_earth png PNG_ROOT)
+ set(PNG_INCLUDE_DIR "${PNG_ROOT}/include")
+ set(PNG_PNG_INCLUDE_DIR "${PNG_ROOT}/include")
+ if (MSVC)
+ set(PNG_LIBRARY "${PNG_ROOT}/lib/libpng16.lib")
+ else ()
+ set(PNG_LIBRARY "${PNG_ROOT}/lib/libpng16.so")
+ endif ()
+ set(PNG_LIBRARIES "${PNG_LIBRARY}")
+ set(PNG_LIBRARY_DEBUG "${PNG_LIBRARY}")
+ set(PNG_LIBRARY_RELEASE "${PNG_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth png
+ "-DCMAKE_PREFIX_PATH=\"${PNG_ROOT}\""
+ "-DPNG_ROOT=\"${PNG_ROOT}\""
+ "-DPNG_INCLUDE_DIR=\"${PNG_INCLUDE_DIR}\""
+ "-DPNG_PNG_INCLUDE_DIR=\"${PNG_PNG_INCLUDE_DIR}\""
+ "-DPNG_LIBRARY=\"${PNG_LIBRARY}\""
+ "-DPNG_LIBRARIES=\"${PNG_LIBRARIES}\""
+ "-DPNG_LIBRARY_DEBUG=\"${PNG_LIBRARY_DEBUG}\""
+ "-DPNG_LIBRARY_RELEASE=\"${PNG_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth png
+ "list(APPEND CMAKE_PREFIX_PATH \"${PNG_ROOT}\")"
+ "set(PNG_ROOT \"${PNG_ROOT}\")"
+ "set(PNG_INCLUDE_DIR \"${PNG_INCLUDE_DIR}\")"
+ "set(PNG_PNG_INCLUDE_DIR \"${PNG_PNG_INCLUDE_DIR}\")"
+ "set(PNG_LIBRARY \"${PNG_LIBRARY}\")"
+ "set(PNG_LIBRARIES \"${PNG_LIBRARIES}\")"
+ "set(PNG_LIBRARY_DEBUG \"${PNG_LIBRARY_DEBUG}\")"
+ "set(PNG_LIBRARY_RELEASE \"${PNG_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth png
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PNG_ROOT}\")"
+ "unset(PNG_ROOT)"
+ "unset(PNG_INCLUDE_DIR)"
+ "unset(PNG_PNG_INCLUDE_DIR)"
+ "unset(PNG_LIBRARY)"
+ "unset(PNG_LIBRARIES)"
+ "unset(PNG_LIBRARY_DEBUG)"
+ "unset(PNG_LIBRARY_RELEASE)"
+ )
+ set(jpeg_opts)
+ list(APPEND jpeg_opts
+ -DENABLE_SHARED=ON
+ -DENABLE_STATIC=OFF
+ -DWITH_CRT_DLL=ON
+ -DWITH_TURBOJPEG=ON
+ -DWITH_TOOLS=OFF
+ -DWITH_TESTS=OFF
+ -DWITH_JAVA=OFF
+ )
+ _register_git_cmake_library(osg_earth
+ jpeg
+ "https://github.com/libjpeg-turbo/libjpeg-turbo.git"
+ "3.1.2"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth jpeg ${jpeg_opts})
+ rcl_get_effective_install_dir(osg_earth jpeg JPEG_ROOT)
+ set(JPEG_INCLUDE_DIR "${JPEG_ROOT}/include")
+ if (MSVC)
+ set(JPEG_LIBRARY "${JPEG_ROOT}/lib/jpeg.lib")
+ else ()
+ set(JPEG_LIBRARY "${JPEG_ROOT}/lib/libjpeg.so")
+ endif ()
+ set(JPEG_LIBRARIES "${JPEG_LIBRARY}")
+ set(JPEG_LIBRARY_DEBUG "${JPEG_LIBRARY}")
+ set(JPEG_LIBRARY_RELEASE "${JPEG_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth jpeg
+ "-DCMAKE_PREFIX_PATH=\"${JPEG_ROOT}\""
+ "-DJPEG_ROOT=\"${JPEG_ROOT}\""
+ "-DJPEG_INCLUDE_DIR=\"${JPEG_INCLUDE_DIR}\""
+ "-DJPEG_LIBRARY=\"${JPEG_LIBRARY}\""
+ "-DJPEG_LIBRARIES=\"${JPEG_LIBRARIES}\""
+ "-DJPEG_LIBRARY_DEBUG=\"${JPEG_LIBRARY_DEBUG}\""
+ "-DJPEG_LIBRARY_RELEASE=\"${JPEG_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth jpeg
+ "list(APPEND CMAKE_PREFIX_PATH \"${JPEG_ROOT}\")"
+ "set(JPEG_ROOT \"${JPEG_ROOT}\")"
+ "set(JPEG_INCLUDE_DIR \"${JPEG_INCLUDE_DIR}\")"
+ "set(JPEG_LIBRARY \"${JPEG_LIBRARY}\")"
+ "set(JPEG_LIBRARIES \"${JPEG_LIBRARIES}\")"
+ "set(JPEG_LIBRARY_DEBUG \"${JPEG_LIBRARY_DEBUG}\")"
+ "set(JPEG_LIBRARY_RELEASE \"${JPEG_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth jpeg
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${JPEG_ROOT}\")"
+ "unset(JPEG_ROOT)"
+ "unset(JPEG_INCLUDE_DIR)"
+ "unset(JPEG_LIBRARY)"
+ "unset(JPEG_LIBRARIES)"
+ "unset(JPEG_LIBRARY_DEBUG)"
+ "unset(JPEG_LIBRARY_RELEASE)"
+ )
+ set(TIFF_PREFIX_PATH "${ZLIB_ROOT}" "${JPEG_ROOT}")
+ list(JOIN TIFF_PREFIX_PATH "\\;" TIFF_PREFIX_PATH_ARG)
+ set(tiff_opts)
+ list(APPEND tiff_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DCMAKE_DEBUG_POSTFIX=d
+ -Dtiff-tools=OFF
+ -Dtiff-tests=OFF
+ -Dtiff-contrib=OFF
+ -Dtiff-docs=OFF
+ -Dtiff-install=ON
+ -Dzlib=ON
+ -Djpeg=ON
+ -Dlibdeflate=OFF
+ -Djbig=OFF
+ -Dlerc=OFF
+ -Dlzma=OFF
+ -Dzstd=OFF
+ -Dwebp=OFF
+ -Dcxx=ON
+ "-DCMAKE_PREFIX_PATH=${TIFF_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ "-DJPEG_ROOT=${JPEG_ROOT}"
+ "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}"
+ "-DJPEG_LIBRARY=${JPEG_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ tiff
+ "https://github.com/libsdl-org/libtiff.git"
+ "v4.7.0"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth tiff ${tiff_opts})
+ rcl_cmake_library_set_deps(osg_earth tiff zlib jpeg)
+ rcl_get_effective_install_dir(osg_earth tiff TIFF_ROOT)
+ set(TIFF_INCLUDE_DIR "${TIFF_ROOT}/include")
+ if (MSVC)
+ set(TIFF_LIBRARY_DEBUG "${TIFF_ROOT}/lib/tiffd.lib")
+ set(TIFF_LIBRARY_RELEASE "${TIFF_ROOT}/lib/tiff.lib")
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(TIFF_LIBRARY "${TIFF_LIBRARY_DEBUG}")
+ else ()
+ set(TIFF_LIBRARY "${TIFF_LIBRARY_RELEASE}")
+ endif ()
+ else ()
+ set(TIFF_LIBRARY_DEBUG "${TIFF_ROOT}/lib/libtiff.so")
+ set(TIFF_LIBRARY_RELEASE "${TIFF_ROOT}/lib/libtiff.so")
+ set(TIFF_LIBRARY "${TIFF_ROOT}/lib/libtiff.so")
+ endif ()
+ set(TIFF_LIBRARIES "${TIFF_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth tiff
+ "-DCMAKE_PREFIX_PATH=\"${TIFF_ROOT}\""
+ "-DTIFF_ROOT=\"${TIFF_ROOT}\""
+ "-DTIFF_INCLUDE_DIR=\"${TIFF_INCLUDE_DIR}\""
+ "-DTIFF_LIBRARY=\"${TIFF_LIBRARY}\""
+ "-DTIFF_LIBRARIES=\"${TIFF_LIBRARIES}\""
+ "-DTIFF_LIBRARY_DEBUG=\"${TIFF_LIBRARY_DEBUG}\""
+ "-DTIFF_LIBRARY_RELEASE=\"${TIFF_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth tiff
+ "list(APPEND CMAKE_PREFIX_PATH \"${TIFF_ROOT}\")"
+ "set(TIFF_ROOT \"${TIFF_ROOT}\")"
+ "set(TIFF_INCLUDE_DIR \"${TIFF_INCLUDE_DIR}\")"
+ "set(TIFF_LIBRARY \"${TIFF_LIBRARY}\")"
+ "set(TIFF_LIBRARIES \"${TIFF_LIBRARIES}\")"
+ "set(TIFF_LIBRARY_DEBUG \"${TIFF_LIBRARY_DEBUG}\")"
+ "set(TIFF_LIBRARY_RELEASE \"${TIFF_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth tiff
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${TIFF_ROOT}\")"
+ "unset(TIFF_ROOT)"
+ "unset(TIFF_INCLUDE_DIR)"
+ "unset(TIFF_LIBRARY)"
+ "unset(TIFF_LIBRARIES)"
+ "unset(TIFF_LIBRARY_DEBUG)"
+ "unset(TIFF_LIBRARY_RELEASE)"
+ )
+ set(FREETYPE_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}")
+ list(JOIN FREETYPE_PREFIX_PATH "\\;" FREETYPE_PREFIX_PATH_ARG)
+ set(freetype_opts)
+ list(APPEND freetype_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DCMAKE_DEBUG_POSTFIX=
+ -DFT_REQUIRE_ZLIB=ON
+ -DFT_REQUIRE_PNG=ON
+ -DFT_DISABLE_BZIP2=ON
+ -DFT_DISABLE_HARFBUZZ=ON
+ -DFT_DISABLE_BROTLI=ON
+ -DFT_ENABLE_ERROR_STRINGS=ON
+ "-DCMAKE_PREFIX_PATH=${FREETYPE_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ "-DPNG_ROOT=${PNG_ROOT}"
+ "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}"
+ "-DPNG_LIBRARY=${PNG_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ freetype
+ "https://github.com/freetype/freetype.git"
+ "VER-2-14-3"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth freetype ${freetype_opts})
+ rcl_cmake_library_set_deps(osg_earth freetype zlib png)
+ rcl_get_effective_install_dir(osg_earth freetype FREETYPE_ROOT)
+ set(FREETYPE_INCLUDE_DIRS "${FREETYPE_ROOT}/include/freetype2")
+ set(FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_ROOT}/include/freetype2")
+ set(FREETYPE_INCLUDE_DIR_ft2build "${FREETYPE_ROOT}/include/freetype2")
+ if (MSVC)
+ set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/freetype${suffix}.lib")
+ else ()
+ set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/libfreetype.so")
+ endif ()
+ set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
+ set(FREETYPE_LIBRARY_DEBUG "${FREETYPE_LIBRARY}")
+ set(FREETYPE_LIBRARY_RELEASE "${FREETYPE_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth freetype
+ "-DCMAKE_PREFIX_PATH=\"${FREETYPE_ROOT}\""
+ "-DFREETYPE_ROOT=\"${FREETYPE_ROOT}\""
+ "-DFREETYPE_INCLUDE_DIRS=\"${FREETYPE_INCLUDE_DIRS}\""
+ "-DFREETYPE_INCLUDE_DIR_freetype2=\"${FREETYPE_INCLUDE_DIR_freetype2}\""
+ "-DFREETYPE_INCLUDE_DIR_ft2build=\"${FREETYPE_INCLUDE_DIR_ft2build}\""
+ "-DFREETYPE_LIBRARY=\"${FREETYPE_LIBRARY}\""
+ "-DFREETYPE_LIBRARIES=\"${FREETYPE_LIBRARIES}\""
+ "-DFREETYPE_LIBRARY_DEBUG=\"${FREETYPE_LIBRARY_DEBUG}\""
+ "-DFREETYPE_LIBRARY_RELEASE=\"${FREETYPE_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth freetype
+ "list(APPEND CMAKE_PREFIX_PATH \"${FREETYPE_ROOT}\")"
+ "set(FREETYPE_ROOT \"${FREETYPE_ROOT}\")"
+ "set(FREETYPE_INCLUDE_DIRS \"${FREETYPE_INCLUDE_DIRS}\")"
+ "set(FREETYPE_INCLUDE_DIR_freetype2 \"${FREETYPE_INCLUDE_DIR_freetype2}\")"
+ "set(FREETYPE_INCLUDE_DIR_ft2build \"${FREETYPE_INCLUDE_DIR_ft2build}\")"
+ "set(FREETYPE_LIBRARY \"${FREETYPE_LIBRARY}\")"
+ "set(FREETYPE_LIBRARIES \"${FREETYPE_LIBRARIES}\")"
+ "set(FREETYPE_LIBRARY_DEBUG \"${FREETYPE_LIBRARY_DEBUG}\")"
+ "set(FREETYPE_LIBRARY_RELEASE \"${FREETYPE_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth freetype
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${FREETYPE_ROOT}\")"
+ "unset(FREETYPE_ROOT)"
+ "unset(FREETYPE_INCLUDE_DIRS)"
+ "unset(FREETYPE_INCLUDE_DIR_freetype2)"
+ "unset(FREETYPE_INCLUDE_DIR_ft2build)"
+ "unset(FREETYPE_LIBRARY)"
+ "unset(FREETYPE_LIBRARIES)"
+ "unset(FREETYPE_LIBRARY_DEBUG)"
+ "unset(FREETYPE_LIBRARY_RELEASE)"
+ )
+ set(sqlite3_opts)
+ list(APPEND sqlite3_opts
+ -DCMAKE_DEBUG_POSTFIX=
+ -DBUILD_SHELL=ON
+ -DBUILD_SHELL_STATIC=OFF
+ -DSQLITE_ENABLE_COLUMN_METADATA=ON
+ -DSQLITE_OMIT_DECLTYPE=OFF
+ -DSQLITE_ENABLE_RTREE=ON
+ -DSQLITE_ENABLE_FTS5=ON
+ -DSQLITE_OMIT_JSON=OFF
+ )
+ _register_git_cmake_library(osg_earth
+ sqlite3
+ "https://github.com/azadkuh/sqlite-amalgamation.git"
+ "master"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth sqlite3 ${sqlite3_opts})
+ rcl_get_effective_install_dir(osg_earth sqlite3 SQLITE3_ROOT)
+ set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT}/include")
+ if (MSVC)
+ set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/sqlite3${suffix}.lib")
+ set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3.exe")
+ else ()
+ set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/libsqlite3.a")
+ set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3")
+ endif ()
+ rcl_cmake_library_set_other_use_opt(osg_earth sqlite3
+ "-DCMAKE_PREFIX_PATH=\"${SQLITE3_ROOT}\""
+ "-DSQLite3_ROOT=\"${SQLITE3_ROOT}\""
+ "-DSQLite3_INCLUDE_DIR=\"${SQLITE3_INCLUDE_DIR}\""
+ "-DSQLite3_INCLUDE_DIRS=\"${SQLITE3_INCLUDE_DIR}\""
+ "-DSQLite3_LIBRARY=\"${SQLITE3_LIBRARY}\""
+ "-DSQLite3_LIBRARIES=\"${SQLITE3_LIBRARY}\""
+ "-DSQLite3_EXECUTABLE=\"${SQLITE3_EXECUTABLE}\""
+ "-DEXE_SQLITE3=\"${SQLITE3_EXECUTABLE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth sqlite3
+ "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
+ "set(SQLite3_ROOT \"${SQLITE3_ROOT}\")"
+ "set(SQLite3_INCLUDE_DIR \"${SQLITE3_INCLUDE_DIR}\")"
+ "set(SQLite3_INCLUDE_DIRS \"${SQLITE3_INCLUDE_DIR}\")"
+ "set(SQLite3_LIBRARY \"${SQLITE3_LIBRARY}\")"
+ "set(SQLite3_LIBRARIES \"${SQLITE3_LIBRARY}\")"
+ "set(SQLite3_EXECUTABLE \"${SQLITE3_EXECUTABLE}\")"
+ "set(EXE_SQLITE3 \"${SQLITE3_EXECUTABLE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth sqlite3
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
+ "unset(SQLite3_ROOT)"
+ "unset(SQLite3_INCLUDE_DIR)"
+ "unset(SQLite3_INCLUDE_DIRS)"
+ "unset(SQLite3_LIBRARY)"
+ "unset(SQLite3_LIBRARIES)"
+ "unset(SQLite3_EXECUTABLE)"
+ "unset(EXE_SQLITE3)"
+ )
+ set(LIBZIP_PREFIX_PATH "${ZLIB_ROOT}")
+ list(JOIN LIBZIP_PREFIX_PATH "\\;" LIBZIP_PREFIX_PATH_ARG)
+ set(libzip_opts)
+ list(APPEND libzip_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DBUILD_TOOLS=OFF
+ -DBUILD_REGRESS=OFF
+ -DBUILD_OSSFUZZ=OFF
+ -DBUILD_EXAMPLES=OFF
+ -DBUILD_DOC=OFF
+ -DLIBZIP_DO_INSTALL=ON
+ -DENABLE_COMMONCRYPTO=OFF
+ -DENABLE_GNUTLS=OFF
+ -DENABLE_MBEDTLS=OFF
+ -DENABLE_OPENSSL=OFF
+ -DENABLE_WINDOWS_CRYPTO=ON
+ -DENABLE_BZIP2=OFF
+ -DENABLE_LZMA=OFF
+ -DENABLE_ZSTD=OFF
+ "-DCMAKE_PREFIX_PATH=${LIBZIP_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ libzip
+ "https://github.com/nih-at/libzip.git"
+ "v1.11.4"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth libzip ${libzip_opts})
+ rcl_cmake_library_set_deps(osg_earth libzip zlib)
+ rcl_get_effective_install_dir(osg_earth libzip LIBZIP_ROOT)
+ rcl_cmake_library_set_other_use_opt(osg_earth libzip
+ "-DCMAKE_PREFIX_PATH=\"${LIBZIP_ROOT}\""
+ "-DLibZip_ROOT=\"${LIBZIP_ROOT}\""
+ "-DLIBZIP_ROOT=\"${LIBZIP_ROOT}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth libzip
+ "list(APPEND CMAKE_PREFIX_PATH \"${LIBZIP_ROOT}\")"
+ "set(LibZip_ROOT \"${LIBZIP_ROOT}\")"
+ "set(LIBZIP_ROOT \"${LIBZIP_ROOT}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth libzip
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${LIBZIP_ROOT}\")"
+ "unset(LibZip_ROOT)"
+ "unset(LIBZIP_ROOT)"
+ )
+ set(PROTOBUF_PREFIX_PATH "${ZLIB_ROOT}")
+ list(JOIN PROTOBUF_PREFIX_PATH "\\;" PROTOBUF_PREFIX_PATH_ARG)
+ set(protobuf_opts)
+ list(APPEND protobuf_opts
+ -Dprotobuf_BUILD_TESTS=OFF
+ -Dprotobuf_BUILD_SHARED_LIBS=OFF
+ -Dprotobuf_BUILD_PROTOC_BINARIES=ON
+ -Dprotobuf_BUILD_LIBPROTOC=ON
+ -Dprotobuf_BUILD_EXAMPLES=OFF
+ -Dprotobuf_MSVC_STATIC_RUNTIME=OFF
+ -Dprotobuf_WITH_ZLIB=ON
+ "-DCMAKE_PREFIX_PATH=${PROTOBUF_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ protobuf
+ "https://github.com/protocolbuffers/protobuf.git"
+ "v21.12"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth protobuf ${protobuf_opts})
+ rcl_cmake_library_set_deps(osg_earth protobuf zlib)
+ rcl_get_effective_install_dir(osg_earth protobuf PROTOBUF_ROOT)
+ rcl_cmake_library_set_other_use_opt(osg_earth protobuf
+ "-DCMAKE_PREFIX_PATH=\"${PROTOBUF_ROOT}\""
+ "-DProtobuf_ROOT=\"${PROTOBUF_ROOT}\""
+ "-DProtobuf_DIR=\"${PROTOBUF_ROOT}/lib/cmake/protobuf\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth protobuf
+ "list(APPEND CMAKE_PREFIX_PATH \"${PROTOBUF_ROOT}\")"
+ "set(Protobuf_ROOT \"${PROTOBUF_ROOT}\")"
+ "set(Protobuf_DIR \"${PROTOBUF_ROOT}/lib/cmake/protobuf\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth protobuf
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROTOBUF_ROOT}\")"
+ "unset(Protobuf_ROOT)"
+ "unset(Protobuf_DIR)"
+ )
+ set(geos_opts)
+ list(APPEND geos_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DCMAKE_DEBUG_POSTFIX=
+ -DBUILD_TESTING=OFF
+ -DBUILD_DOCUMENTATION=OFF
+ -DBUILD_GEOSOP=OFF
+ )
+ _register_git_cmake_library(osg_earth
+ geos
+ "https://github.com/libgeos/geos.git"
+ "3.13.1"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth geos ${geos_opts})
+ rcl_get_effective_install_dir(osg_earth geos GEOS_ROOT)
+ rcl_cmake_library_set_other_use_opt(osg_earth geos
+ "-DCMAKE_PREFIX_PATH=\"${GEOS_ROOT}\""
+ "-DGEOS_ROOT=\"${GEOS_ROOT}\""
+ "-Dgeos_DIR=\"${GEOS_ROOT}/lib/cmake/GEOS\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth geos
+ "list(APPEND CMAKE_PREFIX_PATH \"${GEOS_ROOT}\")"
+ "set(GEOS_ROOT \"${GEOS_ROOT}\")"
+ "set(geos_DIR \"${GEOS_ROOT}/lib/cmake/GEOS\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth geos
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GEOS_ROOT}\")"
+ "unset(GEOS_ROOT)"
+ "unset(geos_DIR)"
+ )
+ set(CURL_PREFIX_PATH "${ZLIB_ROOT}")
+ list(JOIN CURL_PREFIX_PATH "\\;" CURL_PREFIX_PATH_ARG)
+ set(curl_opts)
+ list(APPEND curl_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DBUILD_STATIC_LIBS=OFF
+ -DBUILD_CURL_EXE=OFF
+ -DBUILD_EXAMPLES=OFF
+ -DBUILD_TESTING=OFF
+ -DBUILD_LIBCURL_DOCS=OFF
+ -DBUILD_MISC_DOCS=OFF
+ -DENABLE_CURL_MANUAL=OFF
+ -DCURL_USE_LIBPSL=OFF
+ -DCURL_USE_LIBSSH2=OFF
+ -DCURL_BROTLI=OFF
+ -DCURL_ZSTD=OFF
+ -DCURL_ZLIB=ON
+ "-DCMAKE_PREFIX_PATH=${CURL_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ )
+ if (WIN32)
+ list(APPEND curl_opts
+ -DCURL_USE_SCHANNEL=ON
+ -DCURL_USE_OPENSSL=OFF
+ -DCURL_WINDOWS_SSPI=ON
+ -DUSE_WIN32_IDN=ON
+ )
+ endif ()
+ _register_git_cmake_library(osg_earth
+ curl
+ "https://github.com/curl/curl.git"
+ "curl-8_21_0"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth curl ${curl_opts})
+ rcl_cmake_library_set_deps(osg_earth curl zlib)
+ rcl_get_effective_install_dir(osg_earth curl CURL_ROOT)
+ if (MSVC)
+ set(CURL_LIBRARY_DEBUG "${CURL_ROOT}/lib/libcurl-d_imp.lib")
+ set(CURL_LIBRARY_RELEASE "${CURL_ROOT}/lib/libcurl_imp.lib")
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(CURL_LIBRARY "${CURL_LIBRARY_DEBUG}")
+ else ()
+ set(CURL_LIBRARY "${CURL_LIBRARY_RELEASE}")
+ endif ()
+ else ()
+ set(CURL_LIBRARY_DEBUG "${CURL_ROOT}/lib/libcurl.so")
+ set(CURL_LIBRARY_RELEASE "${CURL_ROOT}/lib/libcurl.so")
+ set(CURL_LIBRARY "${CURL_ROOT}/lib/libcurl.so")
+ endif ()
+ set(CURL_LIBRARIES "${CURL_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth curl
+ "-DCMAKE_PREFIX_PATH=\"${CURL_ROOT}\""
+ "-DCURL_ROOT=\"${CURL_ROOT}\""
+ "-DCURL_LIBRARY=\"${CURL_LIBRARY}\""
+ "-DCURL_LIBRARIES=\"${CURL_LIBRARIES}\""
+ "-DCURL_LIBRARY_DEBUG=\"${CURL_LIBRARY_DEBUG}\""
+ "-DCURL_LIBRARY_RELEASE=\"${CURL_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth curl
+ "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
+ "set(CURL_ROOT \"${CURL_ROOT}\")"
+ "set(CURL_LIBRARY \"${CURL_LIBRARY}\")"
+ "set(CURL_LIBRARIES \"${CURL_LIBRARIES}\")"
+ "set(CURL_LIBRARY_DEBUG \"${CURL_LIBRARY_DEBUG}\")"
+ "set(CURL_LIBRARY_RELEASE \"${CURL_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth curl
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
+ "unset(CURL_ROOT)"
+ "unset(CURL_LIBRARY)"
+ "unset(CURL_LIBRARIES)"
+ "unset(CURL_LIBRARY_DEBUG)"
+ "unset(CURL_LIBRARY_RELEASE)"
+ )
+ set(PROJ_PREFIX_PATH "${SQLITE3_ROOT}" "${CURL_ROOT}" "${TIFF_ROOT}")
+ list(JOIN PROJ_PREFIX_PATH "\\;" PROJ_PREFIX_PATH_ARG)
+ set(proj_opts)
+ list(APPEND proj_opts
+ -DBUILD_SHARED_LIBS=ON
+ -DBUILD_APPS=OFF
+ -DBUILD_TESTING=OFF
+ -DENABLE_CURL=ON
+ -DENABLE_TIFF=ON
+ "-DCMAKE_PREFIX_PATH=${PROJ_PREFIX_PATH_ARG}"
+ "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
+ "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
+ "-DSQLite3_EXECUTABLE=${SQLITE3_EXECUTABLE}"
+ "-DEXE_SQLITE3=${SQLITE3_EXECUTABLE}"
+ "-DCURL_ROOT=${CURL_ROOT}"
+ "-DTIFF_ROOT=${TIFF_ROOT}"
+ "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}"
+ "-DTIFF_LIBRARY=${TIFF_LIBRARY}"
+ )
+ _register_git_cmake_library(osg_earth
+ proj
+ "https://github.com/OSGeo/PROJ.git"
+ "9.4.1"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth proj ${proj_opts})
+ rcl_cmake_library_set_deps(osg_earth proj sqlite3 curl tiff)
+ rcl_get_effective_install_dir(osg_earth proj PROJ_ROOT)
+ rcl_cmake_library_set_other_use_opt(osg_earth proj
+ "-DCMAKE_PREFIX_PATH=\"${PROJ_ROOT}\""
+ "-DPROJ_ROOT=\"${PROJ_ROOT}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth proj
+ "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
+ "set(PROJ_ROOT \"${PROJ_ROOT}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth proj
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
+ "unset(PROJ_ROOT)"
+ )
+ set(GDAL_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}" "${JPEG_ROOT}" "${TIFF_ROOT}" "${CURL_ROOT}" "${SQLITE3_ROOT}" "${PROJ_ROOT}" "${GEOS_ROOT}")
+ list(JOIN GDAL_PREFIX_PATH "\\;" GDAL_PREFIX_PATH_ARG)
+ set(gdal_opts)
+ list(APPEND gdal_opts
+ -DCMAKE_DEBUG_POSTFIX=d
+ -DBUILD_SHARED_LIBS=ON
+ -DBUILD_APPS=OFF
+ -DBUILD_TESTING=OFF
+ -DBUILD_PYTHON_BINDINGS=OFF
+ -DGDAL_BUILD_OPTIONAL_DRIVERS=ON
+ -DOGR_BUILD_OPTIONAL_DRIVERS=ON
+ -DGDAL_USE_EXTERNAL_LIBS=ON
+ -DGDAL_USE_INTERNAL_LIBS=WHEN_NO_EXTERNAL
+ -DGDAL_USE_CURL=ON
+ -DGDAL_USE_SQLITE3=ON
+ -DGDAL_USE_PROJ=ON
+ -DGDAL_USE_GEOS=ON
+ -DGDAL_USE_ZLIB=ON
+ -DGDAL_USE_PNG=ON
+ -DGDAL_USE_JPEG=ON
+ -DGDAL_USE_TIFF=ON
+ -DGDAL_USE_EXPAT=OFF
+ "-DCMAKE_PREFIX_PATH=${GDAL_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ "-DPNG_ROOT=${PNG_ROOT}"
+ "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}"
+ "-DPNG_LIBRARY=${PNG_LIBRARY}"
+ "-DJPEG_ROOT=${JPEG_ROOT}"
+ "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}"
+ "-DJPEG_LIBRARY=${JPEG_LIBRARY}"
+ "-DTIFF_ROOT=${TIFF_ROOT}"
+ "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}"
+ "-DTIFF_LIBRARY=${TIFF_LIBRARY}"
+ "-DCURL_ROOT=${CURL_ROOT}"
+ "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
+ "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
+ "-DPROJ_ROOT=${PROJ_ROOT}"
+ "-DGEOS_ROOT=${GEOS_ROOT}"
+ )
+ _register_git_cmake_library(osg_earth
+ gdal
+ "https://github.com/OSGeo/gdal.git"
+ "v3.9.3"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth gdal ${gdal_opts})
+ rcl_cmake_library_set_deps(osg_earth gdal zlib png jpeg tiff curl sqlite3 proj geos)
+ rcl_get_effective_install_dir(osg_earth gdal GDAL_ROOT)
+ set(GDAL_INCLUDE_DIR "${GDAL_ROOT}/include")
+ if (MSVC)
+ set(GDAL_LIBRARY_DEBUG "${GDAL_ROOT}/lib/gdald.lib")
+ set(GDAL_LIBRARY_RELEASE "${GDAL_ROOT}/lib/gdal.lib")
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(GDAL_LIBRARY "${GDAL_LIBRARY_DEBUG}")
+ else ()
+ set(GDAL_LIBRARY "${GDAL_LIBRARY_RELEASE}")
+ endif ()
+ else ()
+ set(GDAL_LIBRARY_DEBUG "${GDAL_ROOT}/lib/libgdal.so")
+ set(GDAL_LIBRARY_RELEASE "${GDAL_ROOT}/lib/libgdal.so")
+ set(GDAL_LIBRARY "${GDAL_ROOT}/lib/libgdal.so")
+ endif ()
+ set(GDAL_LIBRARIES "${GDAL_LIBRARY}")
+ rcl_cmake_library_set_other_use_opt(osg_earth gdal
+ "-DCMAKE_PREFIX_PATH=\"${GDAL_ROOT}\""
+ "-DGDAL_ROOT=\"${GDAL_ROOT}\""
+ "-DGDAL_INCLUDE_DIR=\"${GDAL_INCLUDE_DIR}\""
+ "-DGDAL_LIBRARY=\"${GDAL_LIBRARY}\""
+ "-DGDAL_LIBRARIES=\"${GDAL_LIBRARIES}\""
+ "-DGDAL_LIBRARY_DEBUG=\"${GDAL_LIBRARY_DEBUG}\""
+ "-DGDAL_LIBRARY_RELEASE=\"${GDAL_LIBRARY_RELEASE}\""
+ )
+ rcl_cmake_library_set_init_script(osg_earth gdal
+ "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
+ "set(GDAL_ROOT \"${GDAL_ROOT}\")"
+ "set(GDAL_INCLUDE_DIR \"${GDAL_INCLUDE_DIR}\")"
+ "set(GDAL_LIBRARY \"${GDAL_LIBRARY}\")"
+ "set(GDAL_LIBRARIES \"${GDAL_LIBRARIES}\")"
+ "set(GDAL_LIBRARY_DEBUG \"${GDAL_LIBRARY_DEBUG}\")"
+ "set(GDAL_LIBRARY_RELEASE \"${GDAL_LIBRARY_RELEASE}\")"
+ )
+ rcl_cmake_library_set_clear_script(osg_earth gdal
+ "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
+ "unset(GDAL_ROOT)"
+ "unset(GDAL_INCLUDE_DIR)"
+ "unset(GDAL_LIBRARY)"
+ "unset(GDAL_LIBRARIES)"
+ "unset(GDAL_LIBRARY_DEBUG)"
+ "unset(GDAL_LIBRARY_RELEASE)"
+ )
+ set(OSG_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}" "${JPEG_ROOT}" "${TIFF_ROOT}" "${FREETYPE_ROOT}" "${CURL_ROOT}" "${GDAL_ROOT}")
+ list(JOIN OSG_PREFIX_PATH "\\;" OSG_PREFIX_PATH_ARG)
+ set(osg_opts)
+ list(APPEND osg_opts
+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5
+ -DBUILD_SHARED_LIBS=ON
+ -DDYNAMIC_OPENSCENEGRAPH=ON
+ -DDYNAMIC_OPENTHREADS=ON
+ -DBUILD_OSG_APPLICATIONS=OFF
+ -DBUILD_OSG_EXAMPLES=OFF
+ -DBUILD_DOCUMENTATION=OFF
+ -DBUILD_OSG_DEPRECATED_SERIALIZERS=ON
+ -DBUILD_OSG_PLUGINS_BY_DEFAULT=ON
+ -DBUILD_OSG_PLUGIN_PNG=ON
+ -DBUILD_OSG_PLUGIN_JPEG=ON
+ -DBUILD_OSG_PLUGIN_TIFF=ON
+ -DBUILD_OSG_PLUGIN_FREETYPE=ON
+ -DBUILD_OSG_PLUGIN_CURL=ON
+ -DBUILD_OSG_PLUGIN_GZ=ON
+ -DBUILD_OSG_PLUGIN_ZIP=ON
+ -DBUILD_OSG_PLUGIN_GDAL=ON
+ -DBUILD_OSG_PLUGIN_OGR=ON
+ -DBUILD_OSG_PLUGIN_LUA=ON
+ -DOSG_USE_LOCAL_LUA_SOURCE=ON
+ -DOSG_USE_UTF8_FILENAME=ON
+ "-DCMAKE_PREFIX_PATH=${OSG_PREFIX_PATH_ARG}"
+ "-DZLIB_ROOT=${ZLIB_ROOT}"
+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}"
+ "-DZLIB_LIBRARY=${ZLIB_LIBRARY}"
+ "-DPNG_ROOT=${PNG_ROOT}"
+ "-DPNG_INCLUDE_DIR=${PNG_INCLUDE_DIR}"
+ "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}"
+ "-DPNG_LIBRARY=${PNG_LIBRARY}"
+ "-DJPEG_ROOT=${JPEG_ROOT}"
+ "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}"
+ "-DJPEG_LIBRARY=${JPEG_LIBRARY}"
+ "-DTIFF_ROOT=${TIFF_ROOT}"
+ "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}"
+ "-DTIFF_LIBRARY=${TIFF_LIBRARY}"
+ "-DFREETYPE_ROOT=${FREETYPE_ROOT}"
+ "-DFREETYPE_INCLUDE_DIRS=${FREETYPE_INCLUDE_DIRS}"
+ "-DFREETYPE_INCLUDE_DIR_freetype2=${FREETYPE_INCLUDE_DIR_freetype2}"
+ "-DFREETYPE_INCLUDE_DIR_ft2build=${FREETYPE_INCLUDE_DIR_ft2build}"
+ "-DFREETYPE_LIBRARY=${FREETYPE_LIBRARY}"
+ "-DCURL_ROOT=${CURL_ROOT}"
+ "-DCURL_LIBRARY=${CURL_LIBRARY}"
+ "-DGDAL_ROOT=${GDAL_ROOT}"
+ "-DGDAL_INCLUDE_DIR=${GDAL_INCLUDE_DIR}"
+ "-DGDAL_LIBRARY=${GDAL_LIBRARY}"
+ )
+ if (MSVC)
+ list(APPEND osg_opts -DWIN32_USE_MP=ON)
+ endif ()
+ _register_git_cmake_library(osg_earth
+ openscenegraph
+ "https://github.com/openscenegraph/OpenSceneGraph.git"
+ "OpenSceneGraph-3.6.5"
+ )
+ rcl_cmake_library_add_patch_url(osg_earth openscenegraph
+ "https://github.com/openscenegraph/OpenSceneGraph/pull/973.patch"
+ "001-pr-973-msvc-ninja-pdb.patch"
+ ""
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth openscenegraph ${osg_opts})
+ rcl_cmake_library_set_deps(osg_earth openscenegraph zlib png jpeg tiff freetype curl gdal)
+ rcl_get_effective_install_dir(osg_earth openscenegraph OSG_ROOT)
+ set(OSG_DEBUG_SUFFIX)
+ if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(OSG_DEBUG_SUFFIX "d")
+ endif ()
+ set(OSG_LIB_DIR "${OSG_ROOT}/lib")
+ set(OSG_COMPONENTS
+ osg
+ osgAnimation
+ osgDB
+ osgFX
+ osgGA
+ osgManipulator
+ osgParticle
+ osgPresentation
+ osgShadow
+ osgSim
+ osgTerrain
+ osgText
+ osgUtil
+ osgViewer
+ osgVolume
+ osgWidget
+ OpenThreads
+ )
+ set(osg_other_use_opt
+ "-DOpenSceneGraph_ROOT=\"${OSG_ROOT}\""
+ "-DOSG_ROOT=\"${OSG_ROOT}\""
+ "-DOPENSCENEGRAPH_INCLUDE_DIR=\"${OSG_ROOT}/include\""
+ )
+ set(osg_init_script
+ "set(OpenSceneGraph_ROOT \"${OSG_ROOT}\")"
+ "set(OSG_ROOT \"${OSG_ROOT}\")"
+ "set(OPENSCENEGRAPH_INCLUDE_DIR \"${OSG_ROOT}/include\")"
+ )
+ set(osg_clear_script
+ "unset(OpenSceneGraph_ROOT)"
+ "unset(OSG_ROOT)"
+ "unset(OPENSCENEGRAPH_INCLUDE_DIR)"
+ )
+ foreach (OSG_COMPONENT IN LISTS OSG_COMPONENTS)
+ string(TOUPPER "${OSG_COMPONENT}" OSG_COMPONENT_UPPER)
+ set(OSG_COMPONENT_INCLUDE_VAR "${OSG_COMPONENT_UPPER}_INCLUDE_DIR")
+ set(OSG_COMPONENT_LIBRARY_VAR "${OSG_COMPONENT_UPPER}_LIBRARY")
+ set(${OSG_COMPONENT_INCLUDE_VAR} "${OSG_ROOT}/include")
+ if (MSVC)
+ set(${OSG_COMPONENT_LIBRARY_VAR} "${OSG_LIB_DIR}/${OSG_COMPONENT}${OSG_DEBUG_SUFFIX}.lib")
+ else ()
+ set(${OSG_COMPONENT_LIBRARY_VAR} "${OSG_LIB_DIR}/lib${OSG_COMPONENT}.so")
+ endif ()
+ list(APPEND osg_other_use_opt
+ "-D${OSG_COMPONENT_INCLUDE_VAR}=\"${${OSG_COMPONENT_INCLUDE_VAR}}\""
+ "-D${OSG_COMPONENT_LIBRARY_VAR}=\"${${OSG_COMPONENT_LIBRARY_VAR}}\""
+ )
+ list(APPEND osg_init_script
+ "set(${OSG_COMPONENT_INCLUDE_VAR} \"${${OSG_COMPONENT_INCLUDE_VAR}}\")"
+ "set(${OSG_COMPONENT_LIBRARY_VAR} \"${${OSG_COMPONENT_LIBRARY_VAR}}\")"
+ )
+ list(APPEND osg_clear_script
+ "unset(${OSG_COMPONENT_INCLUDE_VAR})"
+ "unset(${OSG_COMPONENT_LIBRARY_VAR})"
+ )
+ endforeach ()
+ rcl_cmake_library_set_other_use_opt(osg_earth openscenegraph ${osg_other_use_opt})
+ rcl_cmake_library_set_init_script(osg_earth openscenegraph ${osg_init_script})
+ rcl_cmake_library_set_clear_script(osg_earth openscenegraph ${osg_clear_script})
+ set(OSGEARTH_PREFIX_PATH
+ "${OSG_ROOT}"
+ "${SQLITE3_ROOT}"
+ "${CURL_ROOT}"
+ "${PROJ_ROOT}"
+ "${GDAL_ROOT}"
+ "${LIBZIP_ROOT}"
+ "${PROTOBUF_ROOT}"
+ "${GEOS_ROOT}"
+ "${ZLIB_ROOT}"
+ "${PNG_ROOT}"
+ "${JPEG_ROOT}"
+ "${TIFF_ROOT}"
+ "${FREETYPE_ROOT}"
+ )
+ list(JOIN OSGEARTH_PREFIX_PATH "\\;" OSGEARTH_PREFIX_PATH_ARG)
+ set(osgearth_opts)
+ list(APPEND osgearth_opts
+ "-DCMAKE_PREFIX_PATH=${OSGEARTH_PREFIX_PATH_ARG}"
+ "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
+ "-DSQLite3_INCLUDE_DIRS=${SQLITE3_INCLUDE_DIR}"
+ "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
+ "-DSQLite3_LIBRARIES=${SQLITE3_LIBRARY}"
+ "-DOpenSceneGraph_ROOT=${OSG_ROOT}"
+ "-DOSG_ROOT=${OSG_ROOT}"
+ "-DCURL_ROOT=${CURL_ROOT}"
+ "-DGDAL_ROOT=${GDAL_ROOT}"
+ "-DLibZip_ROOT=${LIBZIP_ROOT}"
+ "-DProtobuf_ROOT=${PROTOBUF_ROOT}"
+ "-DProtobuf_DIR=${PROTOBUF_ROOT}/lib/cmake/protobuf"
+ "-DGEOS_ROOT=${GEOS_ROOT}"
+ -DOSGEARTH_BUILD_SHARED_LIBS=ON
+ -DOSGEARTH_BUILD_TOOLS=ON
+ -DOSGEARTH_BUILD_EXAMPLES=OFF
+ -DOSGEARTH_BUILD_IMGUI_NODEKIT=ON
+ -DOSGEARTH_BUILD_CESIUM_NODEKIT=OFF
+ -DOSGEARTH_BUILD_TRITON_NODEKIT=OFF
+ -DOSGEARTH_BUILD_SILVERLINING_NODEKIT=OFF
+ -DOSGEARTH_BUILD_TESTS=OFF
+ -DOSGEARTH_BUILD_BENCHMARKS=OFF
+ -DOSGEARTH_BUILD_DOCS=OFF
+ -DOSGEARTH_BUILD_PROCEDURAL_NODEKIT=ON
+ -DOSGEARTH_BUILD_LEGACY_SPLAT_NODEKIT=ON
+ -DOSGEARTH_BUILD_LEGACY_CONTROLS_API=ON
+ -DOSGEARTH_BUILD_ZIP_PLUGIN=ON
+ -DOSGEARTH_ENABLE_GEOCODER=ON
+ -DOSGEARTH_ENABLE_PROFILING=OFF
+ -DOSGEARTH_ENABLE_S3=OFF
+ -DOSGEARTH_INSTALL_SHADERS=ON
+ -DOSGEARTH_PROTOBUF_FORCE_CONFIG_MODE=ON
+ -DPROTOBUF_USE_DLLS=FALSE
+ )
+ if (WIN32)
+ list(APPEND osgearth_opts -DOSGEARTH_INSTALL_PDBS=ON)
+ endif ()
+ _register_git_cmake_library(osg_earth
+ osgearth
+ "https://github.com/pelicanmapping/osgearth.git"
+ "osgearth-3.8.1"
+ )
+ rcl_cmake_library_set_cmake_options(osg_earth osgearth ${osgearth_opts})
+ rcl_cmake_library_set_deps(osg_earth osgearth openscenegraph sqlite3 curl proj gdal libzip protobuf geos zlib png jpeg tiff freetype)
+ rcl_get_effective_install_dir(osg_earth osgearth OSGEARTH_ROOT)
+ set(osgEarth_DIR "${OSGEARTH_ROOT}/lib/cmake/osgearth")
+ set(OSGEARTH_DEBUG_SUFFIX)
+ if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(OSGEARTH_DEBUG_SUFFIX "d")
+ endif ()
+ if (MSVC)
+ set(OSGEARTH_LIBRARY "${OSGEARTH_ROOT}/lib/osgEarth${OSGEARTH_DEBUG_SUFFIX}.lib")
+ else ()
+ set(OSGEARTH_LIBRARY "${OSGEARTH_ROOT}/lib/libosgEarth.so")
+ endif ()
+ set(OSGEARTH_USE_PREFIX_PATH
+ "${OSGEARTH_ROOT}"
+ "${OSG_ROOT}"
+ "${SQLITE3_ROOT}"
+ "${CURL_ROOT}"
+ "${PROJ_ROOT}"
+ "${GDAL_ROOT}"
+ "${LIBZIP_ROOT}"
+ "${PROTOBUF_ROOT}"
+ "${GEOS_ROOT}"
+ "${ZLIB_ROOT}"
+ "${PNG_ROOT}"
+ "${JPEG_ROOT}"
+ "${TIFF_ROOT}"
+ "${FREETYPE_ROOT}"
+ )
+ list(JOIN OSGEARTH_USE_PREFIX_PATH "\\;" OSGEARTH_USE_PREFIX_PATH_ARG)
+ rcl_cmake_library_set_other_use_opt(osg_earth osgearth
+ "-DCMAKE_PREFIX_PATH=\"${OSGEARTH_USE_PREFIX_PATH_ARG}\""
+ "-DosgEarth_DIR=\"${osgEarth_DIR}\""
+ "-DOSGEARTH_ROOT=\"${OSGEARTH_ROOT}\""
+ "-DOSGEARTH_INCLUDE_DIR=\"${OSGEARTH_ROOT}/include\""
+ "-DOSGEARTH_LIBRARY=\"${OSGEARTH_LIBRARY}\""
+ )
+ set(osgearth_init_script)
+ set(osgearth_clear_script)
+ foreach (OSGEARTH_USE_ROOT IN LISTS OSGEARTH_USE_PREFIX_PATH)
+ list(APPEND osgearth_init_script "list(APPEND CMAKE_PREFIX_PATH \"${OSGEARTH_USE_ROOT}\")")
+ list(APPEND osgearth_clear_script "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSGEARTH_USE_ROOT}\")")
+ endforeach ()
+ list(APPEND osgearth_init_script
+ "set(osgEarth_DIR \"${osgEarth_DIR}\")"
+ "set(OSGEARTH_ROOT \"${OSGEARTH_ROOT}\")"
+ "set(OSGEARTH_INCLUDE_DIR \"${OSGEARTH_ROOT}/include\")"
+ "set(OSGEARTH_LIBRARY \"${OSGEARTH_LIBRARY}\")"
+ "find_package(osgEarth CONFIG REQUIRED)"
+ )
+ list(APPEND osgearth_clear_script
+ "unset(osgEarth_DIR)"
+ "unset(OSGEARTH_ROOT)"
+ "unset(OSGEARTH_INCLUDE_DIR)"
+ "unset(OSGEARTH_LIBRARY)"
+ )
+ rcl_cmake_library_set_init_script(osg_earth osgearth ${osgearth_init_script})
+ rcl_cmake_library_set_clear_script(osg_earth osgearth ${osgearth_clear_script})
+endblock()
diff --git a/register/register_library.cmake b/0_cmake_library/register/register_library.cmake
similarity index 66%
rename from register/register_library.cmake
rename to 0_cmake_library/register/register_library.cmake
index f73b433..4ee4f6a 100644
--- a/register/register_library.cmake
+++ b/0_cmake_library/register/register_library.cmake
@@ -1,14 +1,13 @@
include_guard(GLOBAL)
-include(${CMAKE_CURRENT_LIST_DIR}/base.cmake)
+include("${CMAKE_CURRENT_LIST_DIR}/base.cmake")
block()
set(tinyxml2_opts)
- _register_git_cmake_library(
- tinyxml2
+ _register_git_cmake_library(global
tinyxml2
https://github.com/leethomason/tinyxml2.git
11.0.0
)
- rcl_cmake_library_set_cmake_options(tinyxml2 ${tinyxml2_opts})
+ rcl_cmake_library_set_cmake_options(global tinyxml2 ${tinyxml2_opts})
set(jsoncpp_opts ${base_options})
list(APPEND jsoncpp_opts
"-DJSONCPP_WITH_TESTS=OFF"
@@ -16,7 +15,12 @@ block()
"-DJSONCPP_WITH_EXAMPLE=OFF"
"-DJSONCPP_WITH_DOC=OFF"
)
- rcl_get_effective_install_dir(jsoncpp _jsoncpp_install_dir)
+ _register_git_cmake_library(global
+ jsoncpp
+ https://github.com/open-source-parsers/jsoncpp.git
+ "1.9.6"
+ )
+ rcl_get_effective_install_dir(global jsoncpp _jsoncpp_install_dir)
set(JSONCPP_ROOT ${_jsoncpp_install_dir})
set(JSONCPP_INCLUDE_DIRS ${JSONCPP_ROOT}/include)
if (MSVC)
@@ -24,23 +28,17 @@ block()
else ()
set(JSONCPP_LIBRARIES ${JSONCPP_ROOT}/lib/libjsoncpp.a)
endif ()
- _register_git_cmake_library(
- jsoncpp
- jsoncpp
- https://github.com/open-source-parsers/jsoncpp.git
- "1.9.6"
- )
- rcl_cmake_library_set_cmake_options(jsoncpp ${jsoncpp_opts})
- rcl_cmake_library_set_other_use_opt(jsoncpp
+ rcl_cmake_library_set_cmake_options(global jsoncpp ${jsoncpp_opts})
+ rcl_cmake_library_set_other_use_opt(global jsoncpp
"-DJSONCPP_INCLUDE_DIRS=\"${JSONCPP_INCLUDE_DIRS}\""
"-DJSONCPP_LIBRARIES=\"${JSONCPP_LIBRARIES}\""
)
- rcl_cmake_library_set_init_script(jsoncpp
+ rcl_cmake_library_set_init_script(global jsoncpp
"set(JSONCPP_ROOT \"${JSONCPP_ROOT}\")"
"set(JSONCPP_INCLUDE_DIRS \"${JSONCPP_INCLUDE_DIRS}\")"
"set(JSONCPP_LIBRARIES \"${JSONCPP_LIBRARIES}\")"
)
- rcl_cmake_library_set_clear_script(jsoncpp
+ rcl_cmake_library_set_clear_script(global jsoncpp
"unset(JSONCPP_ROOT)"
"unset(JSONCPP_INCLUDE_DIRS)"
"unset(JSONCPP_LIBRARIES)"
@@ -54,13 +52,12 @@ block()
# asio_opts
#)
set(fmt_option ${base_options})
- _register_git_cmake_library(
- fmt
+ _register_git_cmake_library(global
fmt
"https://github.com/fmtlib/fmt.git"
"12.1.0"
)
- rcl_cmake_library_set_cmake_options(fmt ${fmt_option})
+ rcl_cmake_library_set_cmake_options(global fmt ${fmt_option})
#set(imgui_option ${base_options})
#_register_git_cmake_library_opt(
# imgui
@@ -72,47 +69,42 @@ block()
#BENCHMARK_USE_BUNDLED_GTEST
set(benchmark_opt ${base_options})
list(APPEND benchmark_opt "-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON")
- _register_git_cmake_library(
- benchmark
+ _register_git_cmake_library(global
benchmark
"https://github.com/google/benchmark.git"
"v1.9.5"
)
- rcl_cmake_library_set_cmake_options(benchmark ${benchmark_opt})
+ rcl_cmake_library_set_cmake_options(global benchmark ${benchmark_opt})
set(mbedtls_opts ${base_options})
- _register_git_cmake_library(
- mbedtls
+ _register_git_cmake_library(global
mbedtls
"https://github.com/Mbed-TLS/mbedtls.git"
"v3.6.4"
)
- rcl_cmake_library_set_cmake_options(mbedtls ${mbedtls_opts})
+ rcl_cmake_library_set_cmake_options(global mbedtls ${mbedtls_opts})
set(libxml2_opts ${base_options})
- _register_git_cmake_library(
- libxml2
+ _register_git_cmake_library(global
libxml2
"https://github.com/GNOME/libxml2.git"
"v2.15.1"
)
- rcl_cmake_library_set_cmake_options(libxml2 ${libxml2_opts})
+ rcl_cmake_library_set_cmake_options(global libxml2 ${libxml2_opts})
set(websocketpp_opts ${base_options})
- _register_git_cmake_library(
- websocketpp
+ _register_git_cmake_library(global
websocketpp
"https://github.com/zaphoyd/websocketpp.git"
"0.8.2"
)
- rcl_cmake_library_set_cmake_options(websocketpp ${websocketpp_opts})
+ rcl_cmake_library_set_cmake_options(global websocketpp ${websocketpp_opts})
set(trantor_opts ${base_options})
- _register_git_cmake_library(
+ _register_git_cmake_library(global
trantor
- Trantor
"https://github.com/an-tao/trantor.git"
"v1.5.28"
)
- rcl_cmake_library_set_cmake_options(trantor ${trantor_opts})
- rcl_get_effective_install_dir(trantor _trantor_install_dir)
- rcl_cmake_library_set_other_use_opt(trantor
+ rcl_cmake_library_set_cmake_options(global trantor ${trantor_opts})
+ rcl_get_effective_install_dir(global trantor _trantor_install_dir)
+ rcl_cmake_library_set_other_use_opt(global trantor
"-DTrantor_DIR=${_trantor_install_dir}/lib/cmake/Trantor"
)
#find_path()
@@ -127,15 +119,14 @@ block()
list(APPEND drogon_opts "-DBUILD_YAML_CONFIG=ON")
list(APPEND drogon_opts "-DUSE_SUBMODULE=OFF")
list(APPEND drogon_opts "-DUSE_STATIC_LIBS_ONLY=ON")
- _register_git_cmake_library(
+ _register_git_cmake_library(global
drogon
- Drogon
"https://github.com/drogonframework/drogon.git"
"v1.9.13"
)
- rcl_cmake_library_set_cmake_options(drogon ${drogon_opts})
- rcl_cmake_library_set_deps(drogon libzip trantor jsoncpp zlib)
- rcl_cmake_library_set_init_script(
+ rcl_cmake_library_set_cmake_options(global drogon ${drogon_opts})
+ rcl_cmake_library_set_deps(global drogon libzip trantor jsoncpp zlib)
+ rcl_cmake_library_set_init_script(global
drogon
"if (NOT TARGET std::filesystem)"
" add_library(std::filesystem INTERFACE IMPORTED GLOBAL)"
@@ -146,106 +137,94 @@ block()
"message(drogon 加载filesystem!)"
)
set(ghc_filesystem_opts ${base_options})
- _register_git_cmake_library(
- ghc_filesystem
+ _register_git_cmake_library(global
ghc_filesystem
"https://github.com/gulrak/filesystem.git"
"v1.5.14"
)
- rcl_cmake_library_set_cmake_options(ghc_filesystem ${ghc_filesystem_opts})
+ rcl_cmake_library_set_cmake_options(global ghc_filesystem ${ghc_filesystem_opts})
set(cppzmq_opts ${base_options})
- _register_git_cmake_library(
- cppzmq
+ _register_git_cmake_library(global
cppzmq
"https://github.com/zeromq/cppzmq.git"
"v4.11.0"
)
- rcl_cmake_library_set_cmake_options(cppzmq ${cppzmq_opts})
+ rcl_cmake_library_set_cmake_options(global cppzmq ${cppzmq_opts})
set(eigen_opts ${base_options})
- _register_git_cmake_library(
- eigen
+ _register_git_cmake_library(global
eigen
"https://github.com/eigenteam/eigen-git-mirror.git"
"3.3.7"
)
- rcl_cmake_library_set_cmake_options(eigen ${eigen_opts})
+ rcl_cmake_library_set_cmake_options(global eigen ${eigen_opts})
set(libzmq_opts ${base_options})
- _register_git_cmake_library(
- libzmq
+ _register_git_cmake_library(global
libzmq
"https://github.com/zeromq/libzmq.git"
"v4.3.5"
)
- rcl_cmake_library_set_cmake_options(libzmq ${libzmq_opts})
+ rcl_cmake_library_set_cmake_options(global libzmq ${libzmq_opts})
set(protobuf_opts ${base_options})
list(APPEND protobuf_opts "-Dprotobuf_BUILD_TESTS=OFF")
list(APPEND protobuf_opts "-Dprotobuf_BUILD_SHARED_LIBS=OFF")
- _register_git_cmake_library(
- protobuf
+ _register_git_cmake_library(global
protobuf
"https://github.com/protocolbuffers/protobuf.git"
"v33.2"
)
- rcl_cmake_library_set_cmake_options(protobuf ${protobuf_opts})
+ rcl_cmake_library_set_cmake_options(global protobuf ${protobuf_opts})
set(gflags_opts ${base_options})
- _register_git_cmake_library(
- gflags
+ _register_git_cmake_library(global
gflags
"https://github.com/gflags/gflags.git"
"v2.3.0"
)
- rcl_cmake_library_set_cmake_options(gflags ${gflags_opts})
+ rcl_cmake_library_set_cmake_options(global gflags ${gflags_opts})
set(brpc_opts ${base_options})
- _register_git_cmake_library(
- brpc
+ _register_git_cmake_library(global
brpc
"https://github.com/apache/brpc.git"
"1.15.0"
)
- rcl_cmake_library_set_cmake_options(brpc ${brpc_opts})
+ rcl_cmake_library_set_cmake_options(global brpc ${brpc_opts})
- _register_git_cmake_library(
- cmocka
+ _register_git_cmake_library(global
cmocka
"https://github.com/clibs/cmocka.git"
"cmocka-1.1.5"
)
- rcl_cmake_library_set_cmake_options(cmocka ${cmocka_opts})
+ rcl_cmake_library_set_cmake_options(global cmocka ${cmocka_opts})
- _register_git_cmake_library(
- expected
+ _register_git_cmake_library(global
expected
"https://github.com/palacaze/sigslot.git"
"v1.3.1"
)
- rcl_cmake_library_set_cmake_options(expected ${expected_opts})
+ rcl_cmake_library_set_cmake_options(global expected ${expected_opts})
set(sigslot_opts ${base_options})
- _register_git_cmake_library(
- sigslot
+ _register_git_cmake_library(global
sigslot
"https://github.com/palacaze/sigslot.git"
"v1.2.3"
)
- rcl_cmake_library_set_cmake_options(sigslot ${sigslot_opts})
+ rcl_cmake_library_set_cmake_options(global sigslot ${sigslot_opts})
#add_compile_options("$<$:/utf-8>")
#add_compile_options("$<$:/utf-8>")
set(SQLiteCpp_opts ${base_options})
list(APPEND SQLiteCpp_opts "-DSQLITECPP_RUN_CPPCHECK=OFF")
- _register_git_cmake_library(
- SQLiteCpp
+ _register_git_cmake_library(global
SQLiteCpp
"https://github.com/SRombauts/SQLiteCpp.git"
"3.3.3"
)
- rcl_cmake_library_set_cmake_options(SQLiteCpp ${SQLiteCpp_opts})
- _register_git_cmake_library(
- pybind11
+ rcl_cmake_library_set_cmake_options(global SQLiteCpp ${SQLiteCpp_opts})
+ _register_git_cmake_library(global
pybind11
"https://github.com/pybind/pybind11.git"
"v3.0.4"
)
- rcl_cmake_library_set_cmake_options(pybind11 ${SQLiteCpp_opts})
+ rcl_cmake_library_set_cmake_options(global pybind11 ${SQLiteCpp_opts})
#set(boost_locale_opts ${base_options})
#_register_git_cmake_library_opt(
# "boost_locale"
diff --git a/register/with_qt.cmake b/0_cmake_library/register/with_qt.cmake
similarity index 65%
rename from register/with_qt.cmake
rename to 0_cmake_library/register/with_qt.cmake
index 63cd616..09cd72d 100644
--- a/register/with_qt.cmake
+++ b/0_cmake_library/register/with_qt.cmake
@@ -1,25 +1,25 @@
+include_guard(GLOBAL)
+
block()
set(base_qt_opts "-DCMAKE_PREFIX_PATH:PATH=D:/Qt/Qt5.15.2/5.15.2/msvc2019_64")
set(maplibre-native-qt-opts ${base_qt_opts})
list(APPEND maplibre-native-qt-opts "-DMLN_WITH_OPENGL=ON")
- _register_git_cmake_library(
- QMapLibre_qt_5_15_2
+ _register_git_cmake_library(global
QMapLibre_qt_5_15_2
"https://github.com/maplibre/maplibre-native-qt.git"
"v3.0.0"
)
- rcl_cmake_library_set_cmake_options(maplibre-native-qt ${maplibre-native-qt-opts})
+ rcl_cmake_library_set_cmake_options(global QMapLibre_qt_5_15_2 ${maplibre-native-qt-opts})
set(ElaWidgetTools_opts ${base_options})
list(APPEND ElaWidgetTools_opts ${base_qt_opts})
- _register_git_cmake_library(
- ElaWidgetTools
+ _register_git_cmake_library(global
ElaWidgetTools
"https://github.com/Liniyous/ElaWidgetTools.git"
"main"
)
- rcl_cmake_library_set_cmake_options(ElaWidgetTools ${ElaWidgetTools_opts})
+ rcl_cmake_library_set_cmake_options(global ElaWidgetTools ${ElaWidgetTools_opts})
diff --git a/0_cmake_library/register_libaray/rcl_register_ex.cmake b/0_cmake_library/register_libaray/rcl_register_ex.cmake
index ffbacbb..5d10291 100644
--- a/0_cmake_library/register_libaray/rcl_register_ex.cmake
+++ b/0_cmake_library/register_libaray/rcl_register_ex.cmake
@@ -1,136 +1,283 @@
-include(${CMAKE_CURRENT_LIST_DIR}/../cmake_library/domain/library/library.cmake)
+include("${CMAKE_CURRENT_LIST_DIR}/../cmake_library/domain/library/library.cmake")
+set(__rcl_register_module_dir "${CMAKE_CURRENT_LIST_DIR}")
+get_filename_component(__rcl_register_package_root "${__rcl_register_module_dir}/.." ABSOLUTE)
-function(rcl_init)
- library_create(global "${EXTERNAL_DIR}/${G_Architecture_Name}")
- library_get_global(global INSTALL_CACHE_ROOT _install_cache_root)
+function(__rcl_namespace_storage_id namespace out)
+ string(REGEX REPLACE "[^A-Za-z0-9_]" "_" _namespace_storage "${namespace}")
+ set(${out} "${_namespace_storage}" PARENT_SCOPE)
+endfunction()
- # if(NOT EXISTS "${_install_cache_root}")
- # message(FATAL_ERROR "INSTALL_CACHE_ROOT 不存在: ${_install_cache_root}")
- # endif()
+function(__rcl_default_root_dir namespace out)
+ __rcl_namespace_storage_id("${namespace}" _namespace_storage)
+ if(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "" AND DEFINED G_Architecture_Name AND NOT "${G_Architecture_Name}" STREQUAL "")
+ set(_root "${EXTERNAL_DIR}/${G_Architecture_Name}_${_namespace_storage}")
+ elseif(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "")
+ set(_root "${EXTERNAL_DIR}/_rcl_external_${_namespace_storage}")
+ else()
+ set(_root "${CMAKE_BINARY_DIR}/_rcl_external_${_namespace_storage}")
+ endif()
+ set(${out} "${_root}" PARENT_SCOPE)
+endfunction()
- # 给普通 find_package CONFIG 搜索用
+function(rcl_init namespace)
+ set(_root_dir "${ARGV1}")
+ if("${_root_dir}" STREQUAL "")
+ __rcl_default_root_dir("${namespace}" _root_dir)
+ endif()
+ library_create("${namespace}" "${_root_dir}")
+ library_get_global("${namespace}" INSTALL_CACHE_ROOT _install_cache_root)
list(APPEND CMAKE_PREFIX_PATH "${_install_cache_root}")
-
- # 给交叉编译 CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY 时使用
list(APPEND CMAKE_FIND_ROOT_PATH "${_install_cache_root}")
-
- # 去重
list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH)
-
- # 传回调用者作用域
set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" PARENT_SCOPE)
set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}" PARENT_SCOPE)
-
message(STATUS "rcl_init CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
message(STATUS "rcl_init CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
endfunction()
-
-function(_register_git_cmake_library id rcl_find_package_name git_url ver)
- library_register(global "${id}")
- library_set(global "${id}" "GIT_URL" "${git_url}")
- library_set(global "${id}" "GIT_BRANCH" "${ver}")
+function(rcl_set_root_dir namespace dir)
+ library_set_root_dir("${namespace}" "${dir}")
endfunction()
-
-function(rcl_get_effective_install_dir id rcl_install_dir)
- library_get_global(global INSTALL_CACHE_ROOT _install_cache_root)
- set("${rcl_install_dir}" "${_install_cache_root}/${id}" PARENT_SCOPE)
+function(rcl_get_root_dir namespace out)
+ library_get_global("${namespace}" ROOT_DIR _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
endfunction()
-function(rcl_cmake_library_set_cmake_options id)
+function(rcl_set_cache_root namespace dir)
+ library_set_global("${namespace}" CACHE_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_cache_root namespace out)
+ library_get_global("${namespace}" CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_source_cache_root namespace dir)
+ library_set_global("${namespace}" SOURCE_CACHE_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_source_cache_root namespace out)
+ library_get_global("${namespace}" SOURCE_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_build_cache_root namespace dir)
+ library_set_global("${namespace}" BUILD_CACHE_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_build_cache_root namespace out)
+ library_get_global("${namespace}" BUILD_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_install_cache_root namespace dir)
+ library_set_global("${namespace}" INSTALL_CACHE_ROOT "${dir}")
+ library_get_global("${namespace}" DATA_EXPORT_DIR_EXPLICIT _data_export_explicit)
+ if(NOT _data_export_explicit)
+ get_filename_component(_ctx_root "${dir}" DIRECTORY)
+ library_set_global("${namespace}" DATA_EXPORT_DIR "${_ctx_root}/library_data")
+ endif()
+endfunction()
+
+function(rcl_get_install_cache_root namespace out)
+ library_get_global("${namespace}" INSTALL_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_patch_cache_root namespace dir)
+ library_set_global("${namespace}" PATCH_CACHE_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_patch_cache_root namespace out)
+ library_get_global("${namespace}" PATCH_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_log_cache_root namespace dir)
+ library_set_global("${namespace}" LOG_CACHE_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_log_cache_root namespace out)
+ library_get_global("${namespace}" LOG_CACHE_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_data_export_dir namespace dir)
+ library_set_global("${namespace}" DATA_EXPORT_DIR "${dir}")
+ library_set_global("${namespace}" DATA_EXPORT_DIR_EXPLICIT TRUE)
+endfunction()
+
+function(rcl_get_data_export_dir namespace out)
+ library_get_effective_data_export_dir("${namespace}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_script_root namespace dir)
+ library_set_global("${namespace}" SCRIPT_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_script_root namespace out)
+ library_get_global("${namespace}" SCRIPT_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_bash_script namespace file)
+ library_set_global("${namespace}" BASH_SCRIPT "${file}")
+endfunction()
+
+function(rcl_get_bash_script namespace out)
+ library_get_global("${namespace}" BASH_SCRIPT _file)
+ set(${out} "${_file}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_bash_executable namespace file)
+ library_set_global("${namespace}" BASH_EXECUTABLE "${file}")
+endfunction()
+
+function(rcl_get_bash_executable namespace out)
+ library_get_global("${namespace}" BASH_EXECUTABLE _file)
+ set(${out} "${_file}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_target_folder_root namespace dir)
+ library_set_global("${namespace}" TARGET_FOLDER_ROOT "${dir}")
+endfunction()
+
+function(rcl_get_target_folder_root namespace out)
+ library_get_global("${namespace}" TARGET_FOLDER_ROOT _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_set_source_dir namespace id dir)
+ library_set_source_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_set_build_dir namespace id dir)
+ library_set_build_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_set_install_dir namespace id dir)
+ library_set_install_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_set_patch_cache_dir namespace id dir)
+ library_set_patch_cache_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_set_log_dir namespace id dir)
+ library_set_log_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_set_local_source_dir namespace id dir)
+ library_set_local_source_dir("${namespace}" "${id}" "${dir}")
+endfunction()
+
+function(rcl_get_effective_source_dir namespace id out)
+ library_get_effective_source_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_get_effective_build_dir namespace id out)
+ library_get_effective_build_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_get_effective_install_dir namespace id out)
+ library_get_effective_install_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_get_effective_patch_cache_dir namespace id out)
+ library_get_effective_patch_cache_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_get_effective_log_dir namespace id out)
+ library_get_effective_log_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(rcl_get_effective_cmake_cache_dir namespace id out)
+ library_get_effective_cmake_cache_dir("${namespace}" "${id}" _dir)
+ set(${out} "${_dir}" PARENT_SCOPE)
+endfunction()
+
+function(_register_git_cmake_library namespace id git_url ver)
+ library_register("${namespace}" "${id}")
+ library_set("${namespace}" "${id}" "GIT_URL" "${git_url}")
+ library_set("${namespace}" "${id}" "GIT_BRANCH" "${ver}")
+endfunction()
+
+function(rcl_cmake_library_set_cmake_options namespace id)
string(REPLACE ";" " " content "${ARGN}")
- library_set(global "${id}" "CMAKE_OPTIONS" "${content}")
+ library_set("${namespace}" "${id}" "CMAKE_OPTIONS" "${content}")
endfunction()
-function(rcl_cmake_library_set_other_use_opt id)
+function(rcl_cmake_library_set_other_use_opt namespace id)
string(REPLACE ";" " " content "${ARGN}")
- library_set(global "${id}" "OTHER_USE_OPT" "${content}")
+ library_set("${namespace}" "${id}" "OTHER_USE_OPT" "${content}")
endfunction()
-function(rcl_cmake_library_set_init_script id)
+function(rcl_cmake_library_set_init_script namespace id)
string(REPLACE ";" "\n" content "${ARGN}")
- library_set_init_scripts(global "${id}" "${content}")
+ library_set_init_scripts("${namespace}" "${id}" "${content}")
endfunction()
-function(rcl_cmake_library_set_clear_script id)
+function(rcl_cmake_library_set_clear_script namespace id)
string(REPLACE ";" "\n" content "${ARGN}")
- library_set_clear_scripts(global "${id}" "${content}")
+ library_set_clear_scripts("${namespace}" "${id}" "${content}")
endfunction()
-function(rcl_cmake_library_set_cmake_source_relative_dir id rcl_cmakelists_relative_dir)
- library_set_cmake_source_subdir(global "${id}" "${rcl_cmakelists_relative_dir}")
+function(rcl_cmake_library_set_cmake_source_relative_dir namespace id rcl_cmakelists_relative_dir)
+ library_set_cmake_source_subdir("${namespace}" "${id}" "${rcl_cmakelists_relative_dir}")
endfunction()
-function(rcl_cmake_library_set_patches id)
- library_set_patch_files(global "${id}" ${ARGN})
+function(rcl_cmake_library_set_patches namespace id)
+ library_set_patch_files("${namespace}" "${id}" ${ARGN})
endfunction()
-function(rcl_cmake_library_add_patch_file id)
- library_add_patch_file(global "${id}" ${ARGN})
+function(rcl_cmake_library_add_patch_file namespace id)
+ library_add_patch_file("${namespace}" "${id}" ${ARGN})
endfunction()
-function(rcl_cmake_library_add_patch_url id url filename)
- library_add_patch_url(global "${id}" "${url}" "${filename}" ${ARGN})
+function(rcl_cmake_library_add_patch_url namespace id url filename)
+ library_add_patch_url("${namespace}" "${id}" "${url}" "${filename}" ${ARGN})
endfunction()
-function(rcl_cmake_library_set_deps id)
- library_depends(global "${id}" ${ARGN})
+function(rcl_cmake_library_set_deps namespace id)
+ library_depends("${namespace}" "${id}" ${ARGN})
endfunction()
-
-function(rcl_generate_registered_cmake_libraries)
- set(export_dir "")
- library_get_global(global DATA_EXPORT_DIR export_dir)
- library_add_item_operation_targets(global "pfx" "${export_dir}")
+function(rcl_namespace_depends namespace)
+ library_namespace_depends("${namespace}" ${ARGN})
endfunction()
+function(rcl_generate_registered_cmake_libraries namespace)
+ rcl_get_data_export_dir("${namespace}" export_dir)
+ library_add_item_operation_targets("${namespace}" "pfx" "${export_dir}")
+endfunction()
-macro(rcl_load_dependency_environment)
- set(include_init_cmake_list "")
- library_init_environment(global include_init_cmake_list ${ARGN})
- foreach (init_cmake ${include_init_cmake_list})
- message("macro(rcl_load_dependency_environment) 加载 init.cmake: ${init_cmake}")
- file(READ "${init_cmake}" init_cmake_content)
- message("========== ${init_cmake} ==========\n${init_cmake_content}\n========== end ==========")
- include(${init_cmake})
- endforeach ()
- set(include_init_cmake_list "")
+macro(rcl_load_dependency_environment namespace)
+ library_init_environment("${namespace}" ${ARGN})
+endmacro()
+macro(rcl_unload_dependency_environment namespace)
+ library_clear_environment("${namespace}" ${ARGN})
endmacro()
-
-function(rcl_unload_dependency_environment)
- set(include_init_cmake_list "")
- library_clear_environment(global include_init_cmake_list ${ARGN})
- foreach (init_cmake ${include_init_cmake_list})
- message("macro(rcl_load_dependency_environment) 加载 init.cmake: ${init_cmake}")
- file(READ "${init_cmake}" init_cmake_content)
- message("========== ${init_cmake} ==========\n${init_cmake_content}\n========== end ==========")
- include(${init_cmake})
- endforeach ()
- set(include_init_cmake_list "")
-endfunction()
-
function(rcl_add_dependency_action_targets target_name)
set(_deps)
- foreach (lib IN LISTS ARGN)
- set(name "pfx_${lib}_with_rely_auto")
- list(APPEND _deps "${name}")
- endforeach ()
- # 创建一个聚合 target
- if (NOT TARGET "${target_name}")
+ foreach(lib IN LISTS ARGN)
+ action_target_name("${lib}" _lib_target)
+ list(APPEND _deps "pfx_${_lib_target}_with_rely_auto")
+ endforeach()
+ if(NOT TARGET "${target_name}")
add_custom_target("${target_name}")
- endif ()
-
+ endif()
message("${target_name} ===> ${_deps}")
- # 构建 target_name 时,先构建这些依赖 target
- if (_deps)
+ if(_deps)
add_dependencies("${target_name}" ${_deps})
- endif ()
+ endif()
endfunction()
-
-
-
-
diff --git a/0_cmake_library/调试选项.md b/0_cmake_library/调试选项.md
deleted file mode 100644
index 2e858dc..0000000
--- a/0_cmake_library/调试选项.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# CMake 调试 / try_compile / 查找库 相关选项整理
-
-## 1️⃣ try_compile / 编译测试相关
-
-| 选项 / 变量 | 类型 | 示例 | 作用 |
-|---|---|---|---|
-| `--debug-trycompile` | 命令行 | `cmake --debug-trycompile -S . -B build` | 不删除 `try_compile()` / `try_run()` 生成的测试工程 |
-| `CMAKE_TRY_COMPILE_CONFIGURATION` | 变量 | `-DCMAKE_TRY_COMPILE_CONFIGURATION=Debug` | 指定 try_compile 使用的构建类型 |
-| `CMAKE_TRY_COMPILE_TARGET_TYPE` | 变量 | `-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY` | 指定 try_compile 生成的目标类型 |
-| `CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` | 变量 | `-DCMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES=ON` | try_compile 不继承平台变量 |
-
----
-
-## 2️⃣ CMake 脚本执行追踪
-
-| 选项 | 示例 | 作用 |
-|---|---|---|
-| `--trace` | `cmake --trace` | 打印每个执行的 CMake 指令 |
-| `--trace-expand` | `cmake --trace-expand` | trace 并展开变量 |
-| `--trace-source=` | `cmake --trace-source=CMakeLists.txt` | 只 trace 指定文件 |
-| `--trace-redirect=` | `cmake --trace-redirect=trace.log` | 把 trace 输出写入文件 |
-
----
-
-## 3️⃣ find_package / 查找库调试
-
-| 选项 / 变量 | 示例 | 作用 |
-|---|---|---|
-| `--debug-find` | `cmake --debug-find` | 打印 `find_package` 搜索路径 |
-| `CMAKE_FIND_DEBUG_MODE` | `-DCMAKE_FIND_DEBUG_MODE=ON` | 调试 find 系列命令 |
-
----
-
-## 4️⃣ 日志级别控制
-
-| 选项 | 示例 | 作用 |
-|---|---|---|
-| `--log-level=` | `cmake --log-level=DEBUG` | 控制日志输出级别 |
-| `--log-context` | `cmake --log-context` | 显示日志来源 |
-| `--log-level=TRACE` | `cmake --log-level=TRACE` | 最详细日志 |
-
-可用日志级别:
-
-| 级别 |
-|---|
-| `ERROR` |
-| `WARNING` |
-| `NOTICE` |
-| `STATUS` |
-| `VERBOSE` |
-| `DEBUG` |
-| `TRACE` |
-
----
-
-## 5️⃣ 生成系统调试
-
-| 选项 | 示例 | 作用 |
-|---|---|---|
-| `--graphviz=` | `cmake --graphviz=deps.dot` | 生成依赖图 |
-| `--profiling-output=` | `cmake --profiling-output=profile.json` | 输出配置性能分析 |
-
----
-
-## 6️⃣ 常用调试组合
-
-### 调试 try_compile
-
-```bash
-cmake --debug-trycompile -S . -B build
-```
-
----
-
-### 调试 find_package
-
-```bash
-cmake --debug-find
-```
-
----
-
-### 查看所有脚本执行
-
-```bash
-cmake --trace-expand
-```
-
----
-
-### 超级调试模式
-
-```bash
-cmake \
- --debug-trycompile \
- --trace-expand \
- --debug-find \
- --log-level=DEBUG
-```
-
----
-
-## 7️⃣ 交叉编译最常用三项
-
-| 选项 | 作用 |
-|---|---|
-| `--debug-trycompile` | 查看 CMake 编译器测试 |
-| `--debug-find` | 查看库搜索路径 |
-| `--trace-expand` | 查看 CMake 变量和执行流程 |
-
----
-
-## 8️⃣ try_compile 临时目录
-
-CMake 的编译测试通常生成在:
-
-```
-build/CMakeFiles/CMakeTmp
-```
-
-开启 `--debug-trycompile` 后该目录不会被删除,方便调试编译问题。
\ No newline at end of file
diff --git a/3rdParty/库编译规范.txt b/3rdParty/库编译规范.txt
deleted file mode 100644
index ce75548..0000000
--- a/3rdParty/库编译规范.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-当使用msvc编译器 编译的库要使用 MD
-
-
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 94db99e..e5e40ec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,49 +1,14 @@
-cmake_minimum_required(VERSION 3.16)
-cmake_policy(SET CMP0141 NEW)
-set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>")
-project(plantSunCat)
-set(PLANT_SUN_CAT_VERSION 1.0.0)
-set(CMAKE_CXX_STANDARD 20)
-#set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-set(ENABLE_BUILD_TIMER ON CACHE BOOL "" FORCE)
+if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR})
+ cmake_minimum_required(VERSION 3.16)
+ cmake_policy(SET CMP0141 NEW)
+ set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>")
+ project(test_maplibre)
+ set(test_maplibre_VERSION 1.0.0)
+ set(CMAKE_CXX_STANDARD 20)
+ include(start.cmake)
+ include(end.cmake)
+else ()
+endif ()
-
-include(0_cmake_library/main.cmake)
-
-_add_binary_to_clion()
-_load_cmake_library()
-
-
-rcl_init()
-
-
-option(A_enable_register_library "Enable register library" OFF)
-
-set(register_dir "${CMAKE_SOURCE_DIR}/register")
-include(${register_dir}/export.cmake)
-
-
-#include(${CMAKE_SOURCE_DIR}/register_project.cmake) #加载基础核心库
-
-
-
-#codex_load_skill_dir_ex(${CMAKE_SOURCE_DIR}/skill psc_skill)
-
-
-# https://github.com/cpm-cmake/CPM.cmake
-# https://github.com/aminya/project_options
-# https://github.com/andrew-hardin/cmake-git-version-tracking
-
-
-
-
-# 统一生成前面注册过的所有配置对象和 action target
-rcl_generate_registered_cmake_libraries()
-
-
-attach_current_source_dir()
-message("全部加载完成!")
-
-
diff --git a/end.cmake b/end.cmake
index ff06fed..1d00c20 100644
--- a/end.cmake
+++ b/end.cmake
@@ -1,6 +1,6 @@
option(A_enable_register_library "Enable register library" OFF)
-set(register_dir "${CMAKE_CURRENT_LIST_DIR}/register")
+set(register_dir "${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/register")
include(${register_dir}/export.cmake)
@@ -13,7 +13,8 @@ include(${register_dir}/export.cmake)
# 统一生成前面注册过的所有配置对象和 action target
-rcl_generate_registered_cmake_libraries()
+rcl_generate_registered_cmake_libraries(global)
+rcl_generate_registered_cmake_libraries(osg_earth)
attach_current_source_dir()
diff --git a/register/export.cmake b/register/export.cmake
deleted file mode 100644
index ca76cf5..0000000
--- a/register/export.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
-include_guard(GLOBAL)
-include(${CMAKE_CURRENT_LIST_DIR}/base.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/register_library.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/computer_graphics.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/libarchive.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/with_qt.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/osgearth.cmake)
-
diff --git a/register/osgearth.cmake b/register/osgearth.cmake
deleted file mode 100644
index 0568b58..0000000
--- a/register/osgearth.cmake
+++ /dev/null
@@ -1,375 +0,0 @@
-block()
- set(osg_opts)
- list(APPEND osg_opts
- -DCMAKE_POLICY_VERSION_MINIMUM=3.5
- -DBUILD_SHARED_LIBS=ON
- -DDYNAMIC_OPENSCENEGRAPH=ON
- -DDYNAMIC_OPENTHREADS=ON
- -DBUILD_OSG_APPLICATIONS=OFF
- -DBUILD_OSG_EXAMPLES=OFF
- -DBUILD_DOCUMENTATION=OFF
- -DBUILD_OSG_DEPRECATED_SERIALIZERS=OFF
- -DOSG_USE_UTF8_FILENAME=ON
- )
- _register_git_cmake_library(
- openscenegraph
- OpenSceneGraph
- "https://github.com/openscenegraph/OpenSceneGraph.git"
- "OpenSceneGraph-3.6.5"
- )
- rcl_cmake_library_add_patch_url(openscenegraph
- "https://github.com/openscenegraph/OpenSceneGraph/pull/973.patch"
- "001-pr-973-msvc-ninja-pdb.patch"
- ""
- )
- rcl_cmake_library_set_cmake_options(openscenegraph ${osg_opts})
- rcl_get_effective_install_dir(openscenegraph OSG_ROOT)
- set(OSG_DEBUG_SUFFIX)
- if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(OSG_DEBUG_SUFFIX "d")
- endif ()
- if (MSVC)
- set(OSG_LIB_DIR "${OSG_ROOT}/lib")
- set(OSG_LIBRARY "${OSG_LIB_DIR}/osg${OSG_DEBUG_SUFFIX}.lib")
- set(OSGDB_LIBRARY "${OSG_LIB_DIR}/osgDB${OSG_DEBUG_SUFFIX}.lib")
- set(OSGTEXT_LIBRARY "${OSG_LIB_DIR}/osgText${OSG_DEBUG_SUFFIX}.lib")
- set(OSGUTIL_LIBRARY "${OSG_LIB_DIR}/osgUtil${OSG_DEBUG_SUFFIX}.lib")
- set(OSGGA_LIBRARY "${OSG_LIB_DIR}/osgGA${OSG_DEBUG_SUFFIX}.lib")
- set(OSGVIEWER_LIBRARY "${OSG_LIB_DIR}/osgViewer${OSG_DEBUG_SUFFIX}.lib")
- set(OSGSIM_LIBRARY "${OSG_LIB_DIR}/osgSim${OSG_DEBUG_SUFFIX}.lib")
- set(OSGSHADOW_LIBRARY "${OSG_LIB_DIR}/osgShadow${OSG_DEBUG_SUFFIX}.lib")
- set(OSGMANIPULATOR_LIBRARY "${OSG_LIB_DIR}/osgManipulator${OSG_DEBUG_SUFFIX}.lib")
- set(OPENTHREADS_LIBRARY "${OSG_LIB_DIR}/OpenThreads${OSG_DEBUG_SUFFIX}.lib")
- else ()
- set(OSG_LIB_DIR "${OSG_ROOT}/lib")
- set(OSG_LIBRARY "${OSG_LIB_DIR}/libosg.so")
- set(OSGDB_LIBRARY "${OSG_LIB_DIR}/libosgDB.so")
- set(OSGTEXT_LIBRARY "${OSG_LIB_DIR}/libosgText.so")
- set(OSGUTIL_LIBRARY "${OSG_LIB_DIR}/libosgUtil.so")
- set(OSGGA_LIBRARY "${OSG_LIB_DIR}/libosgGA.so")
- set(OSGVIEWER_LIBRARY "${OSG_LIB_DIR}/libosgViewer.so")
- set(OSGSIM_LIBRARY "${OSG_LIB_DIR}/libosgSim.so")
- set(OSGSHADOW_LIBRARY "${OSG_LIB_DIR}/libosgShadow.so")
- set(OSGMANIPULATOR_LIBRARY "${OSG_LIB_DIR}/libosgManipulator.so")
- set(OPENTHREADS_LIBRARY "${OSG_LIB_DIR}/libOpenThreads.so")
- endif ()
- rcl_cmake_library_set_other_use_opt(openscenegraph
- "-DOpenSceneGraph_ROOT=\"${OSG_ROOT}\""
- "-DOSG_ROOT=\"${OSG_ROOT}\""
- "-DOPENSCENEGRAPH_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSG_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGDB_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGTEXT_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGUTIL_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGGA_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGVIEWER_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGSIM_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGSHADOW_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSGMANIPULATOR_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOPENTHREADS_INCLUDE_DIR=\"${OSG_ROOT}/include\""
- "-DOSG_LIBRARY=\"${OSG_LIBRARY}\""
- "-DOSGDB_LIBRARY=\"${OSGDB_LIBRARY}\""
- "-DOSGTEXT_LIBRARY=\"${OSGTEXT_LIBRARY}\""
- "-DOSGUTIL_LIBRARY=\"${OSGUTIL_LIBRARY}\""
- "-DOSGGA_LIBRARY=\"${OSGGA_LIBRARY}\""
- "-DOSGVIEWER_LIBRARY=\"${OSGVIEWER_LIBRARY}\""
- "-DOSGSIM_LIBRARY=\"${OSGSIM_LIBRARY}\""
- "-DOSGSHADOW_LIBRARY=\"${OSGSHADOW_LIBRARY}\""
- "-DOSGMANIPULATOR_LIBRARY=\"${OSGMANIPULATOR_LIBRARY}\""
- "-DOPENTHREADS_LIBRARY=\"${OPENTHREADS_LIBRARY}\""
- )
- rcl_cmake_library_set_init_script(openscenegraph
- "set(OpenSceneGraph_ROOT \"${OSG_ROOT}\")"
- "set(OSG_ROOT \"${OSG_ROOT}\")"
- "set(OPENSCENEGRAPH_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSG_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGDB_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGTEXT_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGUTIL_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGGA_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGVIEWER_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGSIM_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGSHADOW_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSGMANIPULATOR_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OPENTHREADS_INCLUDE_DIR \"${OSG_ROOT}/include\")"
- "set(OSG_LIBRARY \"${OSG_LIBRARY}\")"
- "set(OSGDB_LIBRARY \"${OSGDB_LIBRARY}\")"
- "set(OSGTEXT_LIBRARY \"${OSGTEXT_LIBRARY}\")"
- "set(OSGUTIL_LIBRARY \"${OSGUTIL_LIBRARY}\")"
- "set(OSGGA_LIBRARY \"${OSGGA_LIBRARY}\")"
- "set(OSGVIEWER_LIBRARY \"${OSGVIEWER_LIBRARY}\")"
- "set(OSGSIM_LIBRARY \"${OSGSIM_LIBRARY}\")"
- "set(OSGSHADOW_LIBRARY \"${OSGSHADOW_LIBRARY}\")"
- "set(OSGMANIPULATOR_LIBRARY \"${OSGMANIPULATOR_LIBRARY}\")"
- "set(OPENTHREADS_LIBRARY \"${OPENTHREADS_LIBRARY}\")"
- )
- rcl_cmake_library_set_clear_script(openscenegraph
- "unset(OpenSceneGraph_ROOT)"
- "unset(OSG_ROOT)"
- "unset(OPENSCENEGRAPH_INCLUDE_DIR)"
- "unset(OSG_INCLUDE_DIR)"
- "unset(OSGDB_INCLUDE_DIR)"
- "unset(OSGTEXT_INCLUDE_DIR)"
- "unset(OSGUTIL_INCLUDE_DIR)"
- "unset(OSGGA_INCLUDE_DIR)"
- "unset(OSGVIEWER_INCLUDE_DIR)"
- "unset(OSGSIM_INCLUDE_DIR)"
- "unset(OSGSHADOW_INCLUDE_DIR)"
- "unset(OSGMANIPULATOR_INCLUDE_DIR)"
- "unset(OPENTHREADS_INCLUDE_DIR)"
- "unset(OSG_LIBRARY)"
- "unset(OSGDB_LIBRARY)"
- "unset(OSGTEXT_LIBRARY)"
- "unset(OSGUTIL_LIBRARY)"
- "unset(OSGGA_LIBRARY)"
- "unset(OSGVIEWER_LIBRARY)"
- "unset(OSGSIM_LIBRARY)"
- "unset(OSGSHADOW_LIBRARY)"
- "unset(OSGMANIPULATOR_LIBRARY)"
- "unset(OPENTHREADS_LIBRARY)"
- )
- set(sqlite3_opts)
- list(APPEND sqlite3_opts
- -DCMAKE_DEBUG_POSTFIX=
- -DBUILD_SHELL=ON
- -DSQLITE_ENABLE_RTREE=ON
- -DSQLITE_ENABLE_FTS5=ON
- -DSQLITE_ENABLE_JSON1=ON
- -DSQLITE_OMIT_JSON=OFF
- )
- _register_git_cmake_library(
- sqlite3
- SQLite3
- "https://github.com/azadkuh/sqlite-amalgamation.git"
- "master"
- )
- rcl_cmake_library_set_cmake_options(sqlite3 ${sqlite3_opts})
- rcl_get_effective_install_dir(sqlite3 SQLITE3_ROOT)
- set(SQLITE3_DEBUG_SUFFIX)
- if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(SQLITE3_DEBUG_SUFFIX "d")
- endif ()
- set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT}/include")
- if (MSVC)
- set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/sqlite3${SQLITE3_DEBUG_SUFFIX}.lib")
- set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3.exe")
- else ()
- set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/libsqlite3.a")
- set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3")
- endif ()
- rcl_cmake_library_set_other_use_opt(sqlite3
- "-DCMAKE_PREFIX_PATH=\"${SQLITE3_ROOT}\""
- "-DSQLite3_ROOT=\"${SQLITE3_ROOT}\""
- "-DSQLite3_INCLUDE_DIR=\"${SQLITE3_INCLUDE_DIR}\""
- "-DSQLite3_INCLUDE_DIRS=\"${SQLITE3_INCLUDE_DIR}\""
- "-DSQLite3_LIBRARY=\"${SQLITE3_LIBRARY}\""
- "-DSQLite3_LIBRARIES=\"${SQLITE3_LIBRARY}\""
- "-DSQLite3_EXECUTABLE=\"${SQLITE3_EXECUTABLE}\""
- "-DEXE_SQLITE3=\"${SQLITE3_EXECUTABLE}\""
- )
- rcl_cmake_library_set_init_script(sqlite3
- "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
- "set(SQLite3_ROOT \"${SQLITE3_ROOT}\")"
- "set(SQLite3_INCLUDE_DIR \"${SQLITE3_INCLUDE_DIR}\")"
- "set(SQLite3_INCLUDE_DIRS \"${SQLITE3_INCLUDE_DIR}\")"
- "set(SQLite3_LIBRARY \"${SQLITE3_LIBRARY}\")"
- "set(SQLite3_LIBRARIES \"${SQLITE3_LIBRARY}\")"
- "set(SQLite3_EXECUTABLE \"${SQLITE3_EXECUTABLE}\")"
- "set(EXE_SQLITE3 \"${SQLITE3_EXECUTABLE}\")"
- )
- rcl_cmake_library_set_clear_script(sqlite3
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
- "unset(SQLite3_ROOT)"
- "unset(SQLite3_INCLUDE_DIR)"
- "unset(SQLite3_INCLUDE_DIRS)"
- "unset(SQLite3_LIBRARY)"
- "unset(SQLite3_LIBRARIES)"
- "unset(SQLite3_EXECUTABLE)"
- "unset(EXE_SQLITE3)"
- )
- set(curl_opts)
- list(APPEND curl_opts
- -DBUILD_SHARED_LIBS=ON
- -DBUILD_STATIC_LIBS=OFF
- -DBUILD_CURL_EXE=OFF
- -DBUILD_EXAMPLES=OFF
- -DBUILD_TESTING=OFF
- -DBUILD_LIBCURL_DOCS=OFF
- -DBUILD_MISC_DOCS=OFF
- -DENABLE_CURL_MANUAL=OFF
- -DCURL_USE_LIBPSL=OFF
- -DCURL_USE_LIBSSH2=OFF
- -DCURL_BROTLI=OFF
- -DCURL_ZSTD=OFF
- -DCURL_ZLIB=OFF
- )
- if (WIN32)
- list(APPEND curl_opts
- -DCURL_USE_SCHANNEL=ON
- -DCURL_USE_OPENSSL=OFF
- -DCURL_WINDOWS_SSPI=ON
- -DUSE_WIN32_IDN=ON
- )
- endif ()
- _register_git_cmake_library(
- curl
- curl
- "https://github.com/curl/curl.git"
- "curl-8_21_0"
- )
- rcl_cmake_library_set_cmake_options(curl ${curl_opts})
- rcl_get_effective_install_dir(curl CURL_ROOT)
- rcl_cmake_library_set_other_use_opt(curl
- "-DCMAKE_PREFIX_PATH=\"${CURL_ROOT}\""
- "-DCURL_ROOT=\"${CURL_ROOT}\""
- )
- rcl_cmake_library_set_init_script(curl
- "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
- "set(CURL_ROOT \"${CURL_ROOT}\")"
- )
- rcl_cmake_library_set_clear_script(curl
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
- "unset(CURL_ROOT)"
- )
- set(PROJ_PREFIX_PATH "${SQLITE3_ROOT}")
- list(JOIN PROJ_PREFIX_PATH "\\;" PROJ_PREFIX_PATH_ARG)
- set(proj_opts)
- list(APPEND proj_opts
- -DBUILD_SHARED_LIBS=ON
- -DBUILD_APPS=OFF
- -DBUILD_TESTING=OFF
- -DENABLE_CURL=OFF
- -DENABLE_TIFF=OFF
- "-DCMAKE_PREFIX_PATH=${PROJ_PREFIX_PATH_ARG}"
- "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
- "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
- "-DSQLite3_EXECUTABLE=${SQLITE3_EXECUTABLE}"
- "-DEXE_SQLITE3=${SQLITE3_EXECUTABLE}"
- )
- _register_git_cmake_library(
- proj
- PROJ
- "https://github.com/OSGeo/PROJ.git"
- "9.4.1"
- )
- rcl_cmake_library_set_cmake_options(proj ${proj_opts})
- rcl_cmake_library_set_deps(proj sqlite3)
- rcl_get_effective_install_dir(proj PROJ_ROOT)
- rcl_cmake_library_set_other_use_opt(proj
- "-DCMAKE_PREFIX_PATH=\"${PROJ_ROOT}\""
- "-DPROJ_ROOT=\"${PROJ_ROOT}\""
- )
- rcl_cmake_library_set_init_script(proj
- "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
- "set(PROJ_ROOT \"${PROJ_ROOT}\")"
- )
- rcl_cmake_library_set_clear_script(proj
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
- "unset(PROJ_ROOT)"
- )
- set(GDAL_PREFIX_PATH "${CURL_ROOT}" "${SQLITE3_ROOT}" "${PROJ_ROOT}")
- list(JOIN GDAL_PREFIX_PATH "\\;" GDAL_PREFIX_PATH_ARG)
- set(gdal_opts)
- list(APPEND gdal_opts
- -DCMAKE_DEBUG_POSTFIX=
- -DBUILD_SHARED_LIBS=ON
- -DBUILD_APPS=OFF
- -DBUILD_TESTING=OFF
- -DBUILD_PYTHON_BINDINGS=OFF
- -DGDAL_BUILD_OPTIONAL_DRIVERS=OFF
- -DOGR_BUILD_OPTIONAL_DRIVERS=OFF
- -DGDAL_USE_EXTERNAL_LIBS=OFF
- -DGDAL_USE_INTERNAL_LIBS=ON
- -DGDAL_USE_CURL=ON
- -DGDAL_USE_SQLITE3=ON
- -DGDAL_USE_PROJ=ON
- -DGDAL_USE_GEOS=OFF
- -DGDAL_USE_EXPAT=OFF
- "-DCMAKE_PREFIX_PATH=${GDAL_PREFIX_PATH_ARG}"
- "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
- "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
- )
- _register_git_cmake_library(
- gdal
- gdal
- "https://github.com/OSGeo/gdal.git"
- "v3.9.3"
- )
- rcl_cmake_library_set_cmake_options(gdal ${gdal_opts})
- rcl_cmake_library_set_deps(gdal curl sqlite3 proj)
- rcl_get_effective_install_dir(gdal GDAL_ROOT)
- rcl_cmake_library_set_other_use_opt(gdal
- "-DCMAKE_PREFIX_PATH=\"${GDAL_ROOT}\""
- "-DGDAL_ROOT=\"${GDAL_ROOT}\""
- )
- rcl_cmake_library_set_init_script(gdal
- "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
- "set(GDAL_ROOT \"${GDAL_ROOT}\")"
- )
- rcl_cmake_library_set_clear_script(gdal
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
- "unset(GDAL_ROOT)"
- )
- set(OSGEARTH_PREFIX_PATH "${OSG_ROOT}" "${SQLITE3_ROOT}" "${CURL_ROOT}" "${PROJ_ROOT}" "${GDAL_ROOT}")
- list(JOIN OSGEARTH_PREFIX_PATH "\\;" OSGEARTH_PREFIX_PATH_ARG)
- set(osgearth_opts)
- list(APPEND osgearth_opts
- "-DCMAKE_PREFIX_PATH=${OSGEARTH_PREFIX_PATH_ARG}"
- "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}"
- "-DSQLite3_INCLUDE_DIRS=${SQLITE3_INCLUDE_DIR}"
- "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}"
- "-DSQLite3_LIBRARIES=${SQLITE3_LIBRARY}"
- -DOSGEARTH_BUILD_SHARED_LIBS=ON
- -DOSGEARTH_BUILD_TOOLS=ON
- -DOSGEARTH_BUILD_EXAMPLES=OFF
- -DOSGEARTH_BUILD_IMGUI_NODEKIT=ON
- -DOSGEARTH_BUILD_CESIUM_NODEKIT=OFF
- -DOSGEARTH_BUILD_TRITON_NODEKIT=OFF
- -DOSGEARTH_BUILD_SILVERLINING_NODEKIT=OFF
- -DOSGEARTH_BUILD_TESTS=OFF
- -DOSGEARTH_BUILD_BENCHMARKS=OFF
- -DOSGEARTH_BUILD_DOCS=OFF
- -DOSGEARTH_BUILD_PROCEDURAL_NODEKIT=OFF
- -DOSGEARTH_BUILD_LEGACY_SPLAT_NODEKIT=OFF
- -DOSGEARTH_BUILD_LEGACY_CONTROLS_API=OFF
- -DOSGEARTH_BUILD_ZIP_PLUGIN=OFF
- -DOSGEARTH_ENABLE_GEOCODER=OFF
- -DOSGEARTH_ENABLE_PROFILING=OFF
- -DOSGEARTH_ENABLE_S3=OFF
- -DOSGEARTH_INSTALL_SHADERS=OFF
- )
- _register_git_cmake_library(
- osgearth
- osgearth
- "https://github.com/pelicanmapping/osgearth.git"
- "osgearth-3.8.1"
- )
- rcl_cmake_library_set_cmake_options(osgearth ${osgearth_opts})
- rcl_cmake_library_set_deps(osgearth openscenegraph sqlite3 curl proj gdal)
- rcl_get_effective_install_dir(osgearth OSGEARTH_ROOT)
- set(OSGEARTH_USE_PREFIX_PATH "${OSGEARTH_ROOT}" "${OSG_ROOT}" "${SQLITE3_ROOT}" "${CURL_ROOT}" "${PROJ_ROOT}" "${GDAL_ROOT}")
- list(JOIN OSGEARTH_USE_PREFIX_PATH "\\;" OSGEARTH_USE_PREFIX_PATH_ARG)
- rcl_cmake_library_set_other_use_opt(osgearth
- "-DCMAKE_PREFIX_PATH=\"${OSGEARTH_USE_PREFIX_PATH_ARG}\""
- "-DOSGEARTH_ROOT=\"${OSGEARTH_ROOT}\""
- )
- rcl_cmake_library_set_init_script(osgearth
- "list(APPEND CMAKE_PREFIX_PATH \"${OSGEARTH_ROOT}\")"
- "list(APPEND CMAKE_PREFIX_PATH \"${OSG_ROOT}\")"
- "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
- "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
- "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
- "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
- "set(OSGEARTH_ROOT \"${OSGEARTH_ROOT}\")"
- "find_package(osgEarth CONFIG REQUIRED)"
- )
- rcl_cmake_library_set_clear_script(osgearth
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSGEARTH_ROOT}\")"
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSG_ROOT}\")"
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")"
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")"
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")"
- "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")"
- "unset(OSGEARTH_ROOT)"
- )
-endblock()
\ No newline at end of file
diff --git a/register/图表库.md b/register/图表库.md
deleted file mode 100644
index 7233df8..0000000
--- a/register/图表库.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Qt / C++ 绘图库调研
-
-### 1. Qt 原生 / QWidget 路线
-
-| 库 | 定位 | 备注 |
-|---|---|---|
-| [JKQtPlotter](https://github.com/jkriege2/JKQtPlotter) | 类似 QCustomPlot 的 Qt 绘图库 | QWidget / Qt 风格,适合传统 2D 图表 |
-| [官方 Qwt](https://github.com/opencor/qwt) | 老牌 Qt 技术绘图库 | 主要 2D,QPainter / QWidget 体系 |
-
-### 2. Dear ImGui / ImPlot 路线
-
-| 库 | 定位 | 备注 |
-|---|---|---|
-| [Dear ImGui](https://github.com/ocornut/imgui) | 即时模式 GUI 框架 | ImGui 生态基础库 |
-| [ImPlot](https://github.com/epezent/implot) | Dear ImGui 的 2D 绘图库 | 适合实时曲线、频谱、工程可视化 |
-| [ImPlot3D](https://github.com/brenocq/implot3d) | Dear ImGui 的 3D 绘图库 | 适合 3D 曲面、3D 散点等 |
-| [QIm](https://github.com/czyt1988/QIm) | Qt + Dear ImGui + ImPlot + ImPlot3D 封装 | 把 ImGui 绘图生态接入 Qt |
-| [QWT issue #2](https://github.com/czyt1988/QWT/issues/2) | Dear ImGui / ImPlot / ImPlot3D 相关讨论 | 用于参考技术路线 |
-
-### 3. GPU / Vulkan 可视化路线
-
-| 库 | 定位 | 备注 |
-|---|---|---|
-| [datoviz](https://github.com/datoviz/datoviz) | GPU 科学可视化库 | 可继续观察,等待 0.4 版本 |
\ No newline at end of file
diff --git a/register_project.cmake b/register_project.cmake
index 751fba8..e73d352 100644
--- a/register_project.cmake
+++ b/register_project.cmake
@@ -51,9 +51,9 @@ if (CMAKE_HOST_WIN32)
endif ()
- set(ecap_rely drogon libarchive SQLiteCpp)
+ set(ecap_rely global::drogon global::libarchive global::SQLiteCpp)
- library_is_installed_with_rely(global ok ${ecap_rely})
+ library_is_installed_with_rely(ok ${ecap_rely})
if (${ok})
if (NOT MINGW)
diff --git a/start.cmake b/start.cmake
index 6b0b9ec..a7c28c9 100644
--- a/start.cmake
+++ b/start.cmake
@@ -9,12 +9,13 @@ _add_binary_to_clion()
_load_cmake_library()
-rcl_init()
+rcl_init(global)
+rcl_set_root_dir(global "${EXTERNAL_DIR}/${G_Architecture_Name}_global")
option(A_enable_register_library "Enable register library" OFF)
-set(register_dir "${CMAKE_CURRENT_LIST_DIR}/register")
+set(register_dir "${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/register")
message("register_dir ${register_dir}")
include(${register_dir}/export.cmake)
diff --git a/toolchain/交叉编译工具链.md b/toolchain/交叉编译工具链.md
deleted file mode 100644
index 11600de..0000000
--- a/toolchain/交叉编译工具链.md
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
-
-
-https://www.cnblogs.com/Clark-Zhang/p/16303434.html
-
-
-https://www.cnblogs.com/jdsy/p/15638421.html
-
-https://blog.csdn.net/weixin_45827115/article/details/143185262
-
-
-
-
-// cross-ng
-https://zhuanlan.zhihu.com/p/624646659
-
-官方文档
-https://crosstool-ng.github.io/
-https://github.com/crosstool-ng/crosstool-ng
-
-
-
-// 预编译好的 cross-ng
-https://packages.msys2.org/base/crosstool-ng
-
-
-// ubuntu 使用cross-ng 制作交叉编译工具链
-https://blog.csdn.net/qq_42112618/article/details/120848016
-
-
-
-git clone https://github.com/crosstool-ng/crosstool-ng
-
-
-https://crosstool-ng.github.io/docs/install/
-sudo apt install git autoconf build-essential flex texinfo help2man gawk libtool libtool-bin python3-dev bison libncurses5-dev libncursesw5-dev -y
-
-./bootstrap
-
-./configure --prefix=/aenv/ng
-make
-make install
-export PATH="${PATH}:/aenv/ng/bin"
-
diff --git a/toolchain/注意事项.txt b/toolchain/注意事项.txt
deleted file mode 100644
index fb257b6..0000000
--- a/toolchain/注意事项.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
-
-
-Windows (mingw-w64-x86_64) hosted cross toolchains
-
-
-
-AArch32 bare-metal target (arm-none-eabi)
-AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
-AArch64 bare-metal target (aarch64-none-elf)
-AArch64 GNU/Linux target (aarch64-none-linux-gnu)
-
-
-
-C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64
-.bat 工具链必须和cl.exe 放在一个目录, 不然有些项目编译不过
diff --git a/toolchain/示例CMakePresets.json b/toolchain/示例CMakePresets.json
deleted file mode 100644
index 9b79708..0000000
--- a/toolchain/示例CMakePresets.json
+++ /dev/null
@@ -1,401 +0,0 @@
-{
- "version": 10,
- "cmakeMinimumRequired": {
- "major": 3,
- "minor": 21,
- "patch": 0
- },
- "configurePresets": [
- {
- "name": "macos",
- "hidden": true,
- "condition": {
- "type": "equals",
- "lhs": "${hostSystemName}",
- "rhs": "Darwin"
- },
- "generator": "Xcode",
- "warnings": {"dev": true, "deprecated": true},
- "cacheVariables": {
- "BUILD_TESTING": "OFF"
- }
- },
- {
- "name": "darwin-debug",
- "inherits": "macos",
- "displayName": "Darwin 10.14+ (Debug)",
- "description": "NetEase MSS C wrapper for macOS - Debug Configuration",
- "binaryDir": "${sourceDir}/build",
- "cacheVariables": {
- "BUILD_TESTING": "ON",
- "CMAKE_BUILD_TYPE": "Debug",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-debug"
- }
- },
- {
- "name": "darwin-release-arm64",
- "inherits": "macos",
- "displayName": "Darwin arm64 10.14+ (Release)",
- "description": "NetEase MSS C wrapper for macOS arm64 - Release Configuration",
- "binaryDir": "${sourceDir}/build-darwin-arm64-realese",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_OSX_ARCHITECTURES": "arm64",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/darwin-arm64",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-release-arm64"
- }
- },
- {
- "name": "darwin-release-x86_64",
- "inherits": "macos",
- "displayName": "Darwin x86_64 10.14+ (Release)",
- "description": "NetEase MSS C wrapper for macOS x86_64 - Release Configuration",
- "binaryDir": "${sourceDir}/build-darwin-x86_64-realese",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/darwin-x86_64",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-release-x86_64"
- }
- },
- {
- "name": "ios-release-arm64",
- "inherits": "macos",
- "displayName": "iOS arm64 9.0+ (Release)",
- "description": "NetEase MSS C wrapper for iOS arm64 - Release Configuration",
- "binaryDir": "${sourceDir}/build-ios-arm64-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "iOS",
- "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0",
- "CMAKE_OSX_ARCHITECTURES": "arm64",
- "CMAKE_OSX_SYSROOT": "iphoneos",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-arm64-iphoneos",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-arm64"
- }
- },
- {
- "name": "ios-release-armv7",
- "inherits": "macos",
- "displayName": "iOS armv7 9.0+ (Release)",
- "description": "NetEase MSS C wrapper for iOS armv7 - Release Configuration",
- "binaryDir": "${sourceDir}/build-ios-armv7-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "iOS",
- "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0",
- "CMAKE_OSX_ARCHITECTURES": "armv7",
- "CMAKE_OSX_SYSROOT": "iphoneos",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-armv7-iphoneos",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-armv7"
- }
- },
- {
- "name": "ios-release-x86_64",
- "inherits": "macos",
- "displayName": "iOS x86_64 9.0+ (Release)",
- "description": "NetEase MSS C wrapper for iOS x86_64 - Release Configuration",
- "binaryDir": "${sourceDir}/build-ios-x86_64-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "iOS",
- "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0",
- "CMAKE_OSX_ARCHITECTURES": "x86_64",
- "CMAKE_OSX_SYSROOT": "iphonesimulator",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-x86_64-iphonesimulator",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-x86_64"
- }
- },
- {
- "name": "macos-android",
- "hidden": true,
- "condition": {
- "type": "equals",
- "lhs": "${hostSystemName}",
- "rhs": "Darwin"
- },
- "warnings": {"dev": true, "deprecated": true},
- "cacheVariables": {
- "BUILD_TESTING": "OFF"
- }
- },
- {
- "name": "android-release-x86_64",
- "inherits": "macos-android",
- "displayName": "Android x86_64 abi21 (Release)",
- "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration",
- "binaryDir": "${sourceDir}/build-android-x86_64-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "Android",
- "CMAKE_SYSTEM_VERSION": "21",
- "CMAKE_ANDROID_STL_TYPE": "c++_static",
- "CMAKE_ANDROID_ARCH_ABI": "x86_64",
- "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-x86_64-abi21",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-x86_64"
- }
- },
- {
- "name": "android-release-x86",
- "inherits": "macos-android",
- "displayName": "Android x86 abi21 (Release)",
- "description": "NetEase MSS C wrapper for Android x86 - Release Configuration",
- "binaryDir": "${sourceDir}/build-android-x86-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "Android",
- "CMAKE_SYSTEM_VERSION": "21",
- "CMAKE_ANDROID_STL_TYPE": "c++_static",
- "CMAKE_ANDROID_ARCH_ABI": "x86",
- "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-x86-abi21",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-x86"
- }
- },
- {
- "name": "android-release-armeabi-v7a",
- "inherits": "macos-android",
- "displayName": "Android armeabi-v7a abi21 (Release)",
- "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration",
- "binaryDir": "${sourceDir}/build-android-armeabi-v7a-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "Android",
- "CMAKE_SYSTEM_VERSION": "21",
- "CMAKE_ANDROID_STL_TYPE": "c++_static",
- "CMAKE_ANDROID_ARCH_ABI": "armeabi-v7a",
- "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-armeabi-v7a-abi21",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-armeabi-v7a"
- }
- },
- {
- "name": "android-release-arm64-v8a",
- "inherits": "macos-android",
- "displayName": "Android arm64-v8a abi21 (Release)",
- "description": "NetEase MSS C wrapper for Android arm64-v8a - Release Configuration",
- "binaryDir": "${sourceDir}/build-android-arm64-v8a-release",
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_SYSTEM_NAME": "Android",
- "CMAKE_SYSTEM_VERSION": "21",
- "CMAKE_ANDROID_STL_TYPE": "c++_static",
- "CMAKE_ANDROID_ARCH_ABI": "arm64-v8a",
- "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529",
- "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64",
- "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-arm64-v8a-abi21",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-arm64-v8a"
- }
- },
- {
- "name": "windows",
- "hidden": true,
- "condition": {
- "type": "equals",
- "lhs": "${hostSystemName}",
- "rhs": "Windows"
- },
- "generator": "Visual Studio 15 2017",
- "warnings": {"dev": true, "deprecated": true},
- "cacheVariables": {
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/exports",
- "BUILD_TESTING": "OFF"
- }
- },
- {
- "name": "windows-debug",
- "inherits": "windows",
- "displayName": "Windows x64 (Debug)",
- "description": "NetEase MSS C wrapper for Windows - Debug Configuration",
- "binaryDir": "${sourceDir}/build",
- "architecture": {
- "value": "x64",
- "strategy": "set"
- },
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Debug",
- "CMAKE_DEBUG_POSTFIX": "d"
- }
- },
- {
- "name": "win32-release-x64",
- "inherits": "windows",
- "displayName": "Windows x64 (Release)",
- "description": "NetEase MSS C wrapper for Windows - Release Configuration",
- "binaryDir": "${sourceDir}/build-win32-x64",
- "architecture": {
- "value": "x64",
- "strategy": "set"
- },
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/win32-release-x64"
- }
- },
- {
- "name": "win32-release-ia32",
- "inherits": "windows",
- "displayName": "Windows ia32 (Release)",
- "description": "NetEase MSS C wrapper for Windows - Release Configuration",
- "binaryDir": "${sourceDir}/build-win32-ia32",
- "architecture": {
- "value": "Win32",
- "strategy": "set"
- },
- "cacheVariables": {
- "CMAKE_BUILD_TYPE": "Release",
- "CMAKE_INSTALL_PREFIX": "${sourceDir}/win32-release-ia32"
- }
- }
- ],
- "buildPresets": [
- {
- "name": "darwin-debug",
- "configurePreset": "darwin-debug",
- "displayName": "Darwin Local Compilation (Debug)",
- "description": "NetEase MSS C wrapper for macOS - Debug Configuration",
- "configuration": "Debug"
- },
- {
- "name": "darwin-release-x86_64",
- "configurePreset": "darwin-release-x86_64",
- "displayName": "Darwin x86_64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for macOS x86_64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "darwin-release-arm64",
- "configurePreset": "darwin-release-arm64",
- "displayName": "Darwin x86_64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for macOS arm64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "ios-release-arm64",
- "configurePreset": "ios-release-arm64",
- "displayName": "iOS arm64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for iOS arm64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "ios-release-armv7",
- "configurePreset": "ios-release-armv7",
- "displayName": "iOS armv7 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for iOS armv7 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "ios-release-x86_64",
- "configurePreset": "ios-release-x86_64",
- "displayName": "iOS x86_64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for iOS x86_64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "android-release-x86_64",
- "configurePreset": "android-release-x86_64",
- "displayName": "Android x86_64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "android-release-x86_64-strip",
- "configurePreset": "android-release-x86_64",
- "displayName": "Android x86_64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install/strip"]
- },
- {
- "name": "android-release-x86",
- "configurePreset": "android-release-x86",
- "displayName": "Android x86 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android x86 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "android-release-x86-strip",
- "configurePreset": "android-release-x86",
- "displayName": "Android x86 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android x86 - Release Configuration",
- "configuration": "Release",
- "targets": ["install/strip"]
- },
- {
- "name": "android-release-armeabi-v7a",
- "configurePreset": "android-release-armeabi-v7a",
- "displayName": "Android armeabi-v7a Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "android-release-armeabi-v7a-strip",
- "configurePreset": "android-release-armeabi-v7a",
- "displayName": "Android armeabi-v7a Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration",
- "configuration": "Release",
- "targets": ["install/strip"]
- },
- {
- "name": "android-release-arm64-v8a",
- "configurePreset": "android-release-arm64-v8a",
- "displayName": "Android arm64-v8a Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Android arm64-v8a - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "windows-debug",
- "configurePreset": "windows-debug",
- "displayName": "Windows Local Compilation (Debug)",
- "description": "NetEase MSS C wrapper for Windows - Debug Configuration",
- "configuration": "Debug"
- },
- {
- "name": "win32-release-x64",
- "configurePreset": "win32-release-x64",
- "displayName": "Windows x64 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Windows x64 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- },
- {
- "name": "win32-release-ia32",
- "configurePreset": "win32-release-ia32",
- "displayName": "Windows ia32 Local Compilation (Release)",
- "description": "NetEase MSS C wrapper for Windows ia32 - Release Configuration",
- "configuration": "Release",
- "targets": ["install"]
- }
- ],
- "testPresets": [
- {
- "name": "darwin-debug",
- "configurePreset": "darwin-debug",
- "output": {"outputOnFailure": true},
- "execution": {"noTestsAction": "error", "stopOnFailure": true}
- },
- {
- "name": "darwin-release-arm64",
- "configurePreset": "darwin-release-arm64",
- "output": {"outputOnFailure": true},
- "execution": {"noTestsAction": "error", "stopOnFailure": true}
- }
- ]
-}
\ No newline at end of file