myx-cmake-example-features/cmake/myx/lib/FetchContentAdd.cmake

57 lines
2.2 KiB
CMake
Raw Normal View History

2022-10-06 12:22:57 +00:00
#[=======================================================================[.rst:
FetchContent_Add
----------------
Вспомогательная функция для `FetchContent_Declare()`::
FetchContent_Add(NAME
[ GIT_REPOSITORY repo ] |
[ GIT_REMOTE remote ] |
[ GIT_PATH path ])
Обязательные параметры: `NAME` - идентификатор загружаемого ресурса.
Параметр `GIT_REPOSITORY` определяет имя репозитория по умолчанию.
Если указана пара параметров `GIT_REMOTE` и `GIT_PATH` и у git-репозитория
основного проекта указан удалённый репозиторий с именем, определяемым
переменной `GIT_REMOTE`, то адрес репозитория для получения проекта
изменяется. В этом случае загрузка будет производиться с сервера,
определяемого из адреса с меткой `GIT_REMOTE`, и по пути `GIT_PATH`.
#]=======================================================================]
include_guard(GLOBAL)
# Обязательно в глобальной области
find_package(Git)
2022-10-20 09:53:06 +00:00
function(FetchContent_Add TARGET_NAME)
2022-10-06 12:22:57 +00:00
set(options "")
set(oneValueArgs GIT_REPOSITORY GIT_REMOTE GIT_PATH)
set(multiValueArgs "")
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(GIT_FOUND AND ARG_GIT_REMOTE AND ARG_GIT_PATH)
execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.${ARG_GIT_REMOTE}.url OUTPUT_VARIABLE REMOTE_URL ERROR_QUIET)
if(REMOTE_URL)
string(REGEX REPLACE ":.*" "" SERVER ${REMOTE_URL})
string(FIND ${SERVER} "http" POS)
if(NOT POS EQUAL 0)
if(NOT SERVER STREQUAL REMOTE_URL)
set(ARG_GIT_REPOSITORY "${SERVER}:${ARG_GIT_PATH}")
endif()
endif()
endif()
endif()
FetchContent_Declare(
2022-10-20 09:53:06 +00:00
${TARGET_NAME}
2022-10-06 12:22:57 +00:00
${ARG_UNPARSED_ARGUMENTS}
GIT_REPOSITORY ${ARG_GIT_REPOSITORY}
GIT_SHALLOW 1
)
2022-10-20 09:53:06 +00:00
set(FETCHCONTENT_QUIET off)
FetchContent_MakeAvailable(${TARGET_NAME})
2022-10-06 12:22:57 +00:00
endfunction()