#[=======================================================================[.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) 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) 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()