Files
Flora/third_party/deps.cmake
T

152 lines
7.1 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Подключение сторонних библиотек как подпроектов (FetchContent).
# Все библиотеки собираются статически.
include(FetchContent)
set(FETCHCONTENT_QUIET OFF)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Static build for third-party libs" FORCE)
# --- cmark-gfm (Markdown: CommonMark + GFM-таблицы, зачёркивание, задачи, автоссылки) ---
FetchContent_Declare(cmark
GIT_REPOSITORY https://github.com/github/cmark-gfm.git
GIT_TAG 0.29.0.gfm.13
GIT_SHALLOW TRUE
)
set(CMARK_STATIC ON CACHE BOOL "build static cmark-gfm" FORCE)
set(CMARK_SHARED OFF CACHE BOOL "no shared cmark-gfm" FORCE)
set(CMAKE_C_STANDARD 99) # cmark-gfm требует C99 (CMake 4 по умолчанию подставляет c90)
FetchContent_MakeAvailable(cmark)
set(_cmark_target libcmark-gfm_static)
foreach(_cand IN ITEMS libcmark-gfm_static cmark-gfm_static cmark_gfm_static)
if(TARGET ${_cand})
set(_cmark_target ${_cand})
break()
endif()
endforeach()
# cmark-gfm: INTERFACE-обёртка (алиасы нельзя модифицировать; include-пути наружу не экспортируются).
add_library(cmark_wrapper INTERFACE)
target_link_libraries(cmark_wrapper INTERFACE ${_cmark_target})
target_include_directories(cmark_wrapper INTERFACE
"${cmark_SOURCE_DIR}/src"
"${cmark_SOURCE_DIR}/extensions"
"${cmark_BINARY_DIR}/src"
"${cmark_BINARY_DIR}/extensions")
if(NOT TARGET cmark::cmark)
add_library(cmark::cmark ALIAS cmark_wrapper)
endif()
if(TARGET libcmark-gfm-extensions_static)
add_library(cmark_extensions_wrapper INTERFACE)
target_link_libraries(cmark_extensions_wrapper INTERFACE libcmark-gfm-extensions_static)
target_include_directories(cmark_extensions_wrapper INTERFACE
"${cmark_SOURCE_DIR}/extensions"
"${cmark_BINARY_DIR}/extensions")
if(NOT TARGET cmark::cmark_extensions)
add_library(cmark::cmark_extensions ALIAS cmark_extensions_wrapper)
endif()
endif()
# --- libssh2 (SSH-транспорт для libgit2) ---
FetchContent_Declare(libssh2
GIT_REPOSITORY https://github.com/libssh2/libssh2.git
GIT_TAG libssh2-1.11.1
GIT_SHALLOW TRUE
)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF) # локально для подпроекта libssh2 (не трогаем глобальное значение)
FetchContent_MakeAvailable(libssh2)
unset(BUILD_TESTING) # возвращаем глобальное (из CMakeLists.txt)
# macOS (новые SDK): strtoll требует _DARWIN_C_SOURCE, memset_s — __STDC_WANT_LIB_EXT1__.
foreach(_libssh2_tgt IN ITEMS libssh2_static libssh2_shared)
if(TARGET ${_libssh2_tgt})
target_compile_definitions(${_libssh2_tgt} PRIVATE
__STDC_WANT_LIB_EXT1__=1
_DARWIN_C_SOURCE=1)
endif()
endforeach()
# libgit2 ищет libssh2 через переменные LIBSSH2_LIBRARY / LIBSSH2_INCLUDE_DIR.
if(TARGET libssh2_static)
get_target_property(_libssh2_out libssh2_static OUTPUT_NAME)
set(LIBSSH2_LIBRARY
"${libssh2_BINARY_DIR}/src/${_libssh2_out}.a"
CACHE FILEPATH "libssh2 static library" FORCE)
set(LIBSSH2_INCLUDE_DIR
"${libssh2_SOURCE_DIR}/include"
CACHE PATH "libssh2 headers" FORCE)
endif()
# --- libgit2 (Git: история, откаты, push/pull) с SSH через libssh2 ---
FetchContent_Declare(libgit2
GIT_REPOSITORY https://github.com/libgit2/libgit2.git
GIT_TAG v1.9.7
GIT_SHALLOW TRUE
)
set(USE_SSH ON CACHE BOOL "Enable SSH transport (libssh2)" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_CLI OFF CACHE BOOL "" FORCE)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(libgit2)
# libgit2 не создаёт таргет «git2» при сборке как подпроекта:
# наружу экспортируются только include-пути основного таргета libgit2package.
if(TARGET git2 AND NOT TARGET libgit2package)
# (не бывает; оставлено на будущее)
endif()
if(TARGET libgit2package AND NOT TARGET Flora_libgit2_static)
add_library(Flora_libgit2_static INTERFACE)
target_link_libraries(Flora_libgit2_static INTERFACE libgit2package)
target_include_directories(Flora_libgit2_static INTERFACE
"${libgit2_SOURCE_DIR}/include")
endif()
# --- KSyntaxHighlighting (подсветка кода) + Extra CMake Modules ---
FetchContent_Declare(extra-cmake-modules
GIT_REPOSITORY https://github.com/KDE/extra-cmake-modules.git
GIT_TAG v6.19.0
GIT_SHALLOW TRUE
)
set(ENABLE_BSYMBOLICFUNCTIONS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF) # локально для подпроекта ECM (не трогаем глобальное)
FetchContent_MakeAvailable(extra-cmake-modules)
unset(BUILD_TESTING)
list(APPEND CMAKE_MODULE_PATH "${extra-cmake-modules_SOURCE_DIR}/modules")
set(ECM_ENABLE_SANITIZERS OFF CACHE BOOL "" FORCE)
# ECMConfig из build-дерева ссылается на установку — собираем префикс вручную.
set(ECM_PREFIX "${CMAKE_BINARY_DIR}/_ecm_prefix" CACHE PATH "ECM temp prefix" FORCE)
file(COPY "${extra-cmake-modules_SOURCE_DIR}/modules" DESTINATION "${ECM_PREFIX}/share/ECM")
file(COPY "${extra-cmake-modules_SOURCE_DIR}/find-modules" DESTINATION "${ECM_PREFIX}/share/ECM")
if(EXISTS "${extra-cmake-modules_SOURCE_DIR}/kde-modules")
file(COPY "${extra-cmake-modules_SOURCE_DIR}/kde-modules" DESTINATION "${ECM_PREFIX}/share/ECM")
endif()
file(MAKE_DIRECTORY "${ECM_PREFIX}/share/ECM/cmake")
file(COPY "${extra-cmake-modules_BINARY_DIR}/ECMConfig.cmake"
"${extra-cmake-modules_BINARY_DIR}/ECMConfigVersion.cmake"
DESTINATION "${ECM_PREFIX}/share/ECM/cmake")
set(ECM_DIR "${ECM_PREFIX}/share/ECM/cmake" CACHE PATH "ECM config dir" FORCE)
list(APPEND CMAKE_PREFIX_PATH "${ECM_PREFIX}")
set(BUILD_TESTING OFF) # локально для подпроекта syntax-highlighting
FetchContent_Declare(syntax-highlighting
GIT_REPOSITORY https://github.com/KDE/syntax-highlighting.git
GIT_TAG v6.19.0
GIT_SHALLOW TRUE
)
set(KSYNTAXHIGHLIGHTING_BUILD_TESTING OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(syntax-highlighting)
unset(BUILD_TESTING)
# Индексатор использует std::strong_ordering → требует C++20 (lib остаётся на 17,
# чтобы не спотыкаться о qfloat16 в Qt 6.11).
if(TARGET katehighlightingindexer)
set_target_properties(katehighlightingindexer PROPERTIES
CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON)
endif()
# КФ6 не добавляет BUILD_INTERFACE include при сборке как подпроектом.
if(TARGET KF6SyntaxHighlighting)
target_include_directories(KF6SyntaxHighlighting INTERFACE
"$<BUILD_INTERFACE:${syntax-highlighting_SOURCE_DIR}/src/lib>"
"$<BUILD_INTERFACE:${syntax-highlighting_BINARY_DIR}/src/lib>"
"$<BUILD_INTERFACE:${syntax-highlighting_BINARY_DIR}/src/lib/KSyntaxHighlighting>")
endif()