# SPDX-FileCopyrightText: 2012-2021 Istituto Italiano di Tecnologia (IIT) # SPDX-License-Identifier: BSD-3-Clause set(YCM_CMAKE_DOWNLOAD_URL "https://raw.githubusercontent.com/Kitware/CMake//" CACHE STRING "Url used to download CMake modules") set_property(CACHE YCM_CMAKE_DOWNLOAD_URL PROPERTY STRINGS "https://raw.githubusercontent.com/Kitware/CMake//" "http://cmake.org/gitweb?p=cmake.git\;a=blob_plain\;f=\;hb=") mark_as_advanced(YCM_CMAKE_DOWNLOAD_URL) function(_YCM_CMAKE_NEXT_WRITE_README _ref _dir) file(WRITE "${_dir}/README" "Files in this folder and its subfolder come from CMake git repository (ref ${_ref}): git://cmake.org/cmake.git They were imported exactly as they are on the original repository, in order to supply the new features and bugfix available in newer releases to user with older cmake releases. These files are distributed under the OSI-approved BSD License; see accompanying file Copyright.txt for details. ") endfunction() function(_YCM_CMAKE_NEXT_DOWNLOAD _ref _dir _files) _ycm_download(cmake-${_ref} "CMake git repository" "${YCM_CMAKE_DOWNLOAD_URL}" "${_ref}" "${_dir}" "${_files}") _ycm_cmake_next_write_readme(${_ref} "${_dir}") endfunction() function(_YCM_CMAKE_NEXT_INSTALL _ref) _ycm_install(cmake-${_ref} ${ARGN}) endfunction() # Download and install files from CMake git at configure time, useful to # download the modules used by the YCM build that are not available # on older CMake versions function(_YCM_CMAKE_NEXT_DOWNLOAD_NOW _ref _dir _files) # loop over a list of file and sha1 list(LENGTH _files _size) foreach(_i RANGE 1 ${_size} 2) math(EXPR _j "${_i} - 1") list(GET _files ${_j} _file) list(GET _files ${_i} _sha1) string(REPLACE "" "${_ref}" _src "${YCM_CMAKE_DOWNLOAD_URL}") string(REPLACE "" "${_file}" _src "${_src}") set(_dest "${_dir}/${_file}") set(_orig_dest "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/cmake-${_ref}.dir/downloads/${_file}") set(_offline_dest "${YCM_SOURCE_DIR}/downloads/cmake-${_ref}/${_file}") if(EXISTS "${_offline_dest}") execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_offline_dest}" "${_orig_dest}") endif() if(NOT EXISTS "${_orig_dest}") message(STATUS "Downloading file ${_file} from CMake git repository (ref ${_ref})") file(DOWNLOAD "${_src}" "${_orig_dest}" EXPECTED_HASH SHA1=${_sha1}) endif() if(WIN32) # On Windows we change files end of lines to the windows ones file(READ "${_orig_dest}" _tmp) string(REPLACE "/r/n" "/n" _tmp "${_tmp}") file(WRITE "${_dest}" "${_tmp}") else() execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_orig_dest}" "${_dest}") endif() execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_orig_dest}" "${_offline_dest}") set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${_dest}) endforeach() _ycm_cmake_next_write_readme(${_ref} "${_dir}") endfunction() # Downloaded modules CMake Version Uncommitted # Changes # # CMakeParseArguments --- Yes # # Changes in dependencies # FindPackageHandleStandardArgs # NOTE: keep CMake version values listed at root/YCMConfig.cmake.in up # to date with changes in the previous table. ################################################################################ # Files not yet available or containing bugs in current CMake release (v3.21.2) # Imported from latest revision tested # None # if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21) # # Just a reminder to update files when a new cmake version is released # message(AUTHOR_WARNING "CMake version is ${CMAKE_VERSION}. You should update this.") # endif() # # set(_ref f94e4b8bb3d5a3403d8612106c3d5fdbe616ca9f) # set(_files Copyright.txt 67bc6210af189fa44a8a684dc0d3fe30f77717e5) # # _ycm_cmake_next_download(${_ref} "${CMAKE_CURRENT_BINARY_DIR}/cmake-next" "${_files}") # _ycm_cmake_next_install(${_ref} DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cmake-next" # DESTINATION "${YCM_INSTALL_MODULE_DIR}") ################################################################################ # Files with patches not yet merged in CMake master # Always installed set(YCM_CMAKE_PROPOSED_FILES proposed/ExternalProject.cmake proposed/CMakeParseArguments.cmake) set(YCM_CMAKE_PROPOSED_EXTRA_FILES Copyright.txt # Must be redistributed together with CMake files README) # Overwrite README generated by _ycm_cmake_next_download _ycm_cmake_next_install(proposed FILES ${YCM_CMAKE_PROPOSED_FILES} DESTINATION "${YCM_INSTALL_MODULE_DIR}/cmake-proposed/Modules") _ycm_cmake_next_install(proposed FILES ${YCM_CMAKE_PROPOSED_EXTRA_FILES} DESTINATION "${YCM_INSTALL_MODULE_DIR}/cmake-proposed")