mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
build: rely on builtin cmake downloading rather than custom script
DownloadAndExtractFile.cmake was initially introduced as a workaround to avoid the massive amounts of logs generated by the download progress. This is not a problem anymore as ExternalProject_Add has had the DOWNLOAD_NO_PROGRESS option since cmake version 3.1.
This commit is contained in:
parent
913651d1f1
commit
59d5f692f8
@ -2,6 +2,10 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
project(NVIM_DEPS C)
|
||||
|
||||
if(POLICY CMP0135)
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
|
||||
# Point CMake at any custom modules we may ship
|
||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/../cmake")
|
||||
|
||||
@ -62,8 +66,6 @@ else()
|
||||
option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." OFF)
|
||||
endif()
|
||||
|
||||
option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF)
|
||||
|
||||
find_package(Git)
|
||||
if(NOT Git_FOUND)
|
||||
message(FATAL_ERROR "Git is required to apply patches.")
|
||||
|
@ -2,15 +2,9 @@ if(MSVC)
|
||||
ExternalProject_Add(gettext
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${GETTEXT_URL}
|
||||
URL_HASH SHA256=${GETTEXT_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gettext
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/gettext
|
||||
-DURL=${GETTEXT_URL}
|
||||
-DEXPECTED_SHA256=${GETTEXT_SHA256}
|
||||
-DTARGET=gettext
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/GettextCMakeLists.txt
|
||||
${DEPS_BUILD_DIR}/src/gettext/CMakeLists.txt
|
||||
|
@ -2,15 +2,9 @@ if(MSVC)
|
||||
ExternalProject_Add(libiconv
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LIBICONV_URL}
|
||||
URL_HASH SHA256=${LIBICONV_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libiconv
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libiconv
|
||||
-DURL=${LIBICONV_URL}
|
||||
-DEXPECTED_SHA256=${LIBICONV_SHA256}
|
||||
-DTARGET=libiconv
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibiconvCMakeLists.txt
|
||||
${DEPS_BUILD_DIR}/src/libiconv/CMakeLists.txt
|
||||
|
@ -25,15 +25,9 @@ endif()
|
||||
ExternalProject_Add(libtermkey
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LIBTERMKEY_URL}
|
||||
URL_HASH SHA256=${LIBTERMKEY_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libtermkey
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libtermkey
|
||||
-DURL=${LIBTERMKEY_URL}
|
||||
-DEXPECTED_SHA256=${LIBTERMKEY_SHA256}
|
||||
-DTARGET=libtermkey
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${LIBTERMKEY_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND "${LIBTERMKEY_BUILD_COMMAND}"
|
||||
INSTALL_COMMAND "${LIBTERMKEY_INSTALL_COMMAND}")
|
||||
|
@ -1,6 +1,8 @@
|
||||
ExternalProject_Add(libuv
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LIBUV_URL}
|
||||
URL_HASH SHA256=${LIBUV_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DCMAKE_INSTALL_LIBDIR=lib
|
||||
@ -9,14 +11,6 @@ ExternalProject_Add(libuv
|
||||
-DLIBUV_BUILD_SHARED=OFF
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv
|
||||
-DURL=${LIBUV_URL}
|
||||
-DEXPECTED_SHA256=${LIBUV_SHA256}
|
||||
-DTARGET=libuv
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake)
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv)
|
||||
|
||||
list(APPEND THIRD_PARTY_DEPS libuv)
|
||||
|
@ -27,15 +27,9 @@ endif()
|
||||
ExternalProject_Add(libvterm
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LIBVTERM_URL}
|
||||
URL_HASH SHA256=${LIBVTERM_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libvterm
|
||||
-DURL=${LIBVTERM_URL}
|
||||
-DEXPECTED_SHA256=${LIBVTERM_SHA256}
|
||||
-DTARGET=libvterm
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
BUILD_IN_SOURCE 1
|
||||
CONFIGURE_COMMAND "${LIBVTERM_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND "${LIBVTERM_BUILD_COMMAND}"
|
||||
|
@ -45,15 +45,9 @@ message(STATUS "Lua target is ${LUA_TARGET}")
|
||||
ExternalProject_Add(lua
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LUA_URL}
|
||||
URL_HASH SHA256=${LUA_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua
|
||||
-DURL=${LUA_URL}
|
||||
-DEXPECTED_SHA256=${LUA_SHA256}
|
||||
-DTARGET=lua
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${LUA_CONFIGURE_COMMAND}"
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} ${LUA_TARGET}
|
||||
|
@ -18,15 +18,9 @@ function(BuildLuajit)
|
||||
ExternalProject_Add(${_luajit_TARGET}
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LUAJIT_URL}
|
||||
URL_HASH SHA256=${LUAJIT_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luajit
|
||||
-DURL=${LUAJIT_URL}
|
||||
-DEXPECTED_SHA256=${LUAJIT_SHA256}
|
||||
-DTARGET=${_luajit_TARGET}
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}"
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND "${_luajit_BUILD_COMMAND}"
|
||||
|
@ -84,15 +84,9 @@ endif()
|
||||
ExternalProject_Add(luarocks
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LUAROCKS_URL}
|
||||
URL_HASH SHA256=${LUAROCKS_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luarocks
|
||||
-DURL=${LUAROCKS_URL}
|
||||
-DEXPECTED_SHA256=${LUAROCKS_SHA256}
|
||||
-DTARGET=luarocks
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
BUILD_IN_SOURCE 1
|
||||
CONFIGURE_COMMAND "${LUAROCKS_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND ""
|
||||
|
@ -58,15 +58,9 @@ endif()
|
||||
ExternalProject_Add(lua-compat-5.3
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${LUA_COMPAT53_URL}
|
||||
URL_HASH SHA256=${LUA_COMPAT53_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua-compat-5.3
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua-compat-5.3
|
||||
-DURL=${LUA_COMPAT53_URL}
|
||||
-DEXPECTED_SHA256=${LUA_COMPAT53_SHA256}
|
||||
-DTARGET=lua-compat-5.3
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND "")
|
||||
@ -75,17 +69,10 @@ ExternalProject_Add(luv-static
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
DEPENDS lua-compat-5.3
|
||||
URL ${LUV_URL}
|
||||
URL_HASH SHA256=${LUV_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luv
|
||||
-DURL=${LUV_URL}
|
||||
-DEXPECTED_SHA256=${LUV_SHA256}
|
||||
-DTARGET=luv-static
|
||||
# The source is shared with BuildLuarocks (with USE_BUNDLED_LUV).
|
||||
-DSRC_DIR=${DEPS_BUILD_DIR}/src/luv
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
SOURCE_DIR ${DEPS_BUILD_DIR}/src/luv
|
||||
CONFIGURE_COMMAND "${LUV_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config $<CONFIG>
|
||||
|
@ -24,15 +24,9 @@ endif()
|
||||
ExternalProject_Add(msgpack
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${MSGPACK_URL}
|
||||
URL_HASH SHA256=${MSGPACK_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
-DURL=${MSGPACK_URL}
|
||||
-DEXPECTED_SHA256=${MSGPACK_SHA256}
|
||||
-DTARGET=msgpack
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${MSGPACK_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config $<CONFIG>
|
||||
|
@ -20,16 +20,10 @@ endif()
|
||||
ExternalProject_Add(tree-sitter
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${TREESITTER_URL}
|
||||
URL_HASH SHA256=${TREESITTER_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/tree-sitter
|
||||
INSTALL_DIR ${DEPS_INSTALL_DIR}
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/tree-sitter
|
||||
-DURL=${TREESITTER_URL}
|
||||
-DEXPECTED_SHA256=${TREESITTER_SHA256}
|
||||
-DTARGET=tree-sitter
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
BUILD_IN_SOURCE 1
|
||||
CONFIGURE_COMMAND "${TREESITTER_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND "${TREESITTER_BUILD_COMMAND}"
|
||||
|
@ -1,25 +1,19 @@
|
||||
function(BuildTSParser LANG TS_URL TS_SHA256 TS_CMAKE_FILE)
|
||||
set(NAME treesitter-${LANG})
|
||||
ExternalProject_Add(${NAME}
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${TREESITTER_C_URL}
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${NAME}
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/${NAME}
|
||||
-DURL=${TS_URL}
|
||||
-DEXPECTED_SHA256=${TS_SHA256}
|
||||
-DTARGET=${NAME}
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${TS_URL}
|
||||
URL_HASH SHA256=${TS_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${NAME}
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
||||
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${TS_CMAKE_FILE}
|
||||
${DEPS_BUILD_DIR}/src/${NAME}/CMakeLists.txt
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DPARSERLANG=${LANG})
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DPARSERLANG=${LANG})
|
||||
endfunction()
|
||||
|
||||
BuildTSParser(c ${TREESITTER_C_URL} ${TREESITTER_C_SHA256} TreesitterParserCMakeLists.txt)
|
||||
|
@ -19,15 +19,9 @@ endif()
|
||||
ExternalProject_Add(unibilium
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${UNIBILIUM_URL}
|
||||
URL_HASH SHA256=${UNIBILIUM_SHA256}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/unibilium
|
||||
-DURL=${UNIBILIUM_URL}
|
||||
-DEXPECTED_SHA256=${UNIBILIUM_SHA256}
|
||||
-DTARGET=unibilium
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${UNIBILIUM_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND "${UNIBILIUM_BUILD_COMMAND}"
|
||||
INSTALL_COMMAND "${UNIBILIUM_INSTALL_COMMAND}")
|
||||
|
@ -1,195 +0,0 @@
|
||||
if(NOT DEFINED PREFIX)
|
||||
message(FATAL_ERROR "PREFIX must be defined.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED URL)
|
||||
message(FATAL_ERROR "URL must be defined.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED DOWNLOAD_DIR)
|
||||
message(FATAL_ERROR "DOWNLOAD_DIR must be defined.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED EXPECTED_SHA256)
|
||||
message(FATAL_ERROR "EXPECTED_SHA256 must be defined.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED TARGET)
|
||||
message(FATAL_ERROR "TARGET must be defined.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED SRC_DIR)
|
||||
set(SRC_DIR ${PREFIX}/src/${TARGET})
|
||||
endif()
|
||||
set(BINARY_DIR ${PREFIX}/src/${TARGET}-build)
|
||||
|
||||
# Check whether the source has been downloaded. If true, skip it.
|
||||
# Useful for external downloads like homebrew.
|
||||
if(USE_EXISTING_SRC_DIR)
|
||||
if(EXISTS "${SRC_DIR}" AND IS_DIRECTORY "${SRC_DIR}")
|
||||
file(GLOB EXISTED_FILES "${SRC_DIR}/*")
|
||||
if(EXISTED_FILES)
|
||||
message(STATUS "${SRC_DIR} is found and not empty, skipping download and extraction. ")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
message(FATAL_ERROR "USE_EXISTING_SRC_DIR set to ON, but '${SRC_DIR}' does not exist or is empty.")
|
||||
endif()
|
||||
|
||||
# Taken from ExternalProject_Add. Let's hope we can drop this one day when
|
||||
# ExternalProject_Add allows you to disable SHOW_PROGRESS on the file download.
|
||||
if(TIMEOUT)
|
||||
set(timeout_args TIMEOUT ${timeout})
|
||||
set(timeout_msg "${timeout} seconds")
|
||||
else()
|
||||
set(timeout_args "")
|
||||
set(timeout_msg "none")
|
||||
endif()
|
||||
|
||||
string(REGEX MATCH "[^/\\?]*$" fname "${URL}")
|
||||
if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$")
|
||||
string(REGEX MATCH "([^/\\?]+(\\.|=)(bz2|tar|tgz|tar\\.gz|zip))/.*$" match_result "${URL}")
|
||||
set(fname "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$")
|
||||
message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}")
|
||||
endif()
|
||||
string(REPLACE ";" "-" fname "${fname}")
|
||||
|
||||
set(file ${DOWNLOAD_DIR}/${fname})
|
||||
message(STATUS "file: ${file}")
|
||||
|
||||
set(EXISTING_SHA256 "")
|
||||
if(EXISTS ${file})
|
||||
file(SHA256 ${file} EXISTING_SHA256)
|
||||
endif()
|
||||
|
||||
if(NOT EXISTING_SHA256 STREQUAL ${EXPECTED_SHA256})
|
||||
message(STATUS "downloading...
|
||||
src='${URL}'
|
||||
dst='${file}'
|
||||
timeout='${timeout_msg}'")
|
||||
|
||||
file(DOWNLOAD ${URL} ${file}
|
||||
${timeout_args}
|
||||
${hash_args}
|
||||
STATUS status
|
||||
LOG log)
|
||||
|
||||
list(GET status 0 status_code)
|
||||
list(GET status 1 status_string)
|
||||
|
||||
if(NOT status_code EQUAL 0)
|
||||
# Retry on certain errors, e.g. CURLE_COULDNT_RESOLVE_HOST, which is often
|
||||
# seen with libtermkey (www.leonerd.org.uk).
|
||||
if((status_code EQUAL 6) # "Couldn't resolve host name"
|
||||
OR (status_code EQUAL 7)) # "Couldn't connect to server"
|
||||
message(STATUS "warning: retrying '${URL}' (${status_string}, status ${status_code})")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 10)
|
||||
file(DOWNLOAD ${URL} ${file}
|
||||
${timeout_args}
|
||||
${hash_args}
|
||||
STATUS status
|
||||
LOG log)
|
||||
list(GET status 0 status_code)
|
||||
list(GET status 1 status_string)
|
||||
endif()
|
||||
if(NOT status_code EQUAL 0)
|
||||
message(FATAL_ERROR "error: downloading '${URL}' failed
|
||||
status_code: ${status_code}
|
||||
status_string: ${status_string}
|
||||
log: ${log}
|
||||
")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(NULL_SHA256 "0000000000000000000000000000000000000000000000000000000000000000")
|
||||
|
||||
# Allow users to use "SKIP" or "skip" as the sha256 to skip checking the hash.
|
||||
# You can still use the all zeros hash too.
|
||||
if((EXPECTED_SHA256 STREQUAL "SKIP") OR (EXPECTED_SHA256 STREQUAL "skip"))
|
||||
set(EXPECTED_SHA256 ${NULL_SHA256})
|
||||
endif()
|
||||
|
||||
# We could avoid computing the SHA256 entirely if a NULL_SHA256 was given,
|
||||
# but we want to warn users of an empty file.
|
||||
file(SHA256 ${file} ACTUAL_SHA256)
|
||||
if(ACTUAL_SHA256 STREQUAL "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||
# File was empty. It's likely due to lack of SSL support.
|
||||
message(FATAL_ERROR
|
||||
"Failed to download ${URL}. The file is empty and likely means CMake "
|
||||
"was built without SSL support. Please use a version of CMake with "
|
||||
"proper SSL support. See "
|
||||
"https://github.com/neovim/neovim/wiki/Building-Neovim#build-prerequisites "
|
||||
"for more information.")
|
||||
elseif((NOT EXPECTED_SHA256 STREQUAL NULL_SHA256) AND
|
||||
(NOT EXPECTED_SHA256 STREQUAL ACTUAL_SHA256))
|
||||
# Wasn't a NULL SHA256 and we didn't match, so we fail.
|
||||
message(FATAL_ERROR
|
||||
"Failed to download ${URL}. Expected a SHA256 of "
|
||||
"${EXPECTED_SHA256} but got ${ACTUAL_SHA256} instead.")
|
||||
endif()
|
||||
|
||||
message(STATUS "downloading... done")
|
||||
|
||||
# Slurped from a generated extract-TARGET.cmake file.
|
||||
message(STATUS "extracting...
|
||||
src='${file}'
|
||||
dst='${SRC_DIR}'")
|
||||
|
||||
if(NOT EXISTS "${file}")
|
||||
message(FATAL_ERROR "error: file to extract does not exist: '${file}'")
|
||||
endif()
|
||||
|
||||
# Prepare a space for extracting:
|
||||
#
|
||||
set(i 1234)
|
||||
while(EXISTS "${SRC_DIR}/../ex-${TARGET}${i}")
|
||||
math(EXPR i "${i} + 1")
|
||||
endwhile()
|
||||
set(ut_dir "${SRC_DIR}/../ex-${TARGET}${i}")
|
||||
file(MAKE_DIRECTORY "${ut_dir}")
|
||||
|
||||
# Extract it:
|
||||
#
|
||||
message(STATUS "extracting... [tar xfz]")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${file}
|
||||
WORKING_DIRECTORY ${ut_dir}
|
||||
RESULT_VARIABLE rv)
|
||||
|
||||
if(NOT rv EQUAL 0)
|
||||
message(STATUS "extracting... [error clean up]")
|
||||
file(REMOVE_RECURSE "${ut_dir}")
|
||||
message(FATAL_ERROR "error: extract of '${file}' failed")
|
||||
endif()
|
||||
|
||||
# Analyze what came out of the tar file:
|
||||
#
|
||||
message(STATUS "extracting... [analysis]")
|
||||
file(GLOB contents "${ut_dir}/*")
|
||||
list(LENGTH contents n)
|
||||
if(NOT n EQUAL 1 OR NOT IS_DIRECTORY "${contents}")
|
||||
set(contents "${ut_dir}")
|
||||
endif()
|
||||
|
||||
# Move "the one" directory to the final directory:
|
||||
#
|
||||
message(STATUS "extracting... [rename]")
|
||||
file(REMOVE_RECURSE ${SRC_DIR})
|
||||
get_filename_component(contents ${contents} ABSOLUTE)
|
||||
file(RENAME ${contents} ${SRC_DIR})
|
||||
|
||||
# Remove any existing BINARY_DIR, to force a new build.
|
||||
# Without this a necessary output (e.g. libluv.a) might not be updated/installed.
|
||||
#
|
||||
message(STATUS "extracting... [clean binary dir]")
|
||||
file(REMOVE_RECURSE ${BINARY_DIR})
|
||||
file(MAKE_DIRECTORY ${BINARY_DIR})
|
||||
|
||||
# Clean up:
|
||||
#
|
||||
message(STATUS "extracting... [clean up]")
|
||||
file(REMOVE_RECURSE "${ut_dir}")
|
||||
|
||||
message(STATUS "extracting... done")
|
@ -25,15 +25,9 @@ function(GetBinaryDep)
|
||||
ExternalProject_Add(${_gettool_TARGET}
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${URL}
|
||||
URL_HASH SHA256=${HASH}
|
||||
DOWNLOAD_NO_PROGRESS TRUE
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}
|
||||
-DURL=${URL}
|
||||
-DEXPECTED_SHA256=${HASH}
|
||||
-DTARGET=${_gettool_TARGET}
|
||||
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND ""
|
||||
|
Loading…
Reference in New Issue
Block a user