myx/MyxCMake/lib/DownloadContent.cmake

78 lines
2.8 KiB
CMake
Raw Normal View History

#[=======================================================================[.rst:
myx_download_content
-----------------------
Функция для загрузки дополнительных репозиториев::
myx_download_content(NAME
[ DOWNLOAD_DIR dir ] |
[ GIT_REPOSITORY url ] |
[ GIT_TAG tag ] )
Обязательный параметр: `NAME` - имя целевого каталога.
Параметр `DOWNLOAD_DIR` содержит имя каталога, в который будет загружаться
содержимое (по умолчанию `downloads`).
Параметр `GIT_REPOSITORY` содержит адрес внешнего проекта, который нужно
загрузить с помощью git.
Параметр `GIT_TAG` содержит используемые метку, идентификатор коммита или
ветку в загружаемом репозитории.
#]=======================================================================]
find_package(Git QUIET)
2023-07-31 09:18:19 +00:00
option(ENABLE_DOWNLOAD_CONTENT "Enable download content" ON)
function(myx_download_content NAME)
set(options)
set(oneValueArgs)
set(multiValueArgs DOWNLOAD_DIR GIT_REPOSITORY GIT_TAG)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT CMAKE_SCRIPT_MODE_FILE)
if(TARGET myx-download-${NAME})
return()
else()
add_custom_target(myx-download-${NAME})
endif()
if(NOT TARGET myx-download-content)
add_custom_target(myx-download-content)
endif()
endif()
if(NOT ARG_DOWNLOAD_DIR)
2023-07-31 09:18:19 +00:00
set(ARG_DOWNLOAD_DIR "_downloads")
endif()
if(CMAKE_SCRIPT_MODE_FILE)
set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})
endif()
set(ARG_DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/${ARG_DOWNLOAD_DIR})
if(NOT IS_DIRECTORY ${ARG_DOWNLOAD_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${ARG_DOWNLOAD_DIR})
endif()
if(ENABLE_DOWNLOAD_CONTENT AND GIT_EXECUTABLE AND ARG_GIT_REPOSITORY)
if(NOT IS_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
execute_process(COMMAND ${GIT_EXECUTABLE} clone ${ARG_GIT_REPOSITORY} ${NAME}
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR})
else()
execute_process(COMMAND ${GIT_EXECUTABLE} fetch
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
endif()
if(ARG_GIT_TAG)
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${ARG_GIT_TAG}
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
else()
execute_process(COMMAND ${GIT_EXECUTABLE} pull
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
endif()
endif()
if(NOT CMAKE_SCRIPT_MODE_FILE)
add_subdirectory(${ARG_DOWNLOAD_DIR}/${NAME} EXCLUDE_FROM_ALL)
endif()
endfunction()