mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
Workaround the broken progress feedback in some versions of CMake.
Underneath the hood, CMake uses libcurl and libcurl has had a number of issues regarding progress feedback. In one sample run against Travis CI, we ended up with nearly 3,000 lines of progress output for a single download. Unfortunately, CMake doesn't have the download and extract steps separate, so we have some extra work that we have to do. Much of the content was taken from the ExternalProject.cmake and it's template for generating the content of the download and extract CMake files.
This commit is contained in:
parent
1eed86883b
commit
66394367f7
42
third-party/CMakeLists.txt
vendored
42
third-party/CMakeLists.txt
vendored
@ -42,12 +42,28 @@ endif()
|
|||||||
|
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
|
set(LIBUV_URL https://github.com/joyent/libuv/archive/v0.11.21.tar.gz)
|
||||||
|
set(LIBUV_MD5 bc334c8da8618754ce9e2a4c5be73487)
|
||||||
|
|
||||||
|
set(LUAJIT_URL http://luajit.org/download/LuaJIT-2.0.2.tar.gz)
|
||||||
|
set(LUAJIT_MD5 112dfb82548b03377fbefbba2e0e3a5b)
|
||||||
|
|
||||||
|
set(LUAROCKS_URL http://github.com/keplerproject/luarocks/archive/v2.1.2.tar.gz)
|
||||||
|
set(LUAROCKS_MD5 df591c00a85d51fb754ec08c77896aad)
|
||||||
|
|
||||||
if(USE_BUNDLED_LIBUV)
|
if(USE_BUNDLED_LIBUV)
|
||||||
ExternalProject_Add(libuv
|
ExternalProject_Add(libuv
|
||||||
PREFIX ${DEPS_BUILD_DIR}
|
PREFIX ${DEPS_BUILD_DIR}
|
||||||
URL https://github.com/joyent/libuv/archive/v0.11.21.tar.gz
|
URL ${LIBUV_URL}
|
||||||
URL_MD5 bc334c8da8618754ce9e2a4c5be73487
|
URL_MD5 ${LIBUV_MD5}
|
||||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
|
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
|
||||||
|
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DPREFIX=${DEPS_BUILD_DIR}
|
||||||
|
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv
|
||||||
|
-DURL=${LIBUV_URL}
|
||||||
|
-DEXPECTED_MD5=${LIBUV_MD5}
|
||||||
|
-DTARGET=libuv
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||||
CONFIGURE_COMMAND sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh &&
|
CONFIGURE_COMMAND sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh &&
|
||||||
${DEPS_BUILD_DIR}/src/libuv/configure --with-pic --disable-shared
|
${DEPS_BUILD_DIR}/src/libuv/configure --with-pic --disable-shared
|
||||||
--prefix=${DEPS_INSTALL_DIR} CC=${CMAKE_C_COMPILER}
|
--prefix=${DEPS_INSTALL_DIR} CC=${CMAKE_C_COMPILER}
|
||||||
@ -58,9 +74,16 @@ endif()
|
|||||||
if(USE_BUNDLED_LUAJIT)
|
if(USE_BUNDLED_LUAJIT)
|
||||||
ExternalProject_Add(luajit
|
ExternalProject_Add(luajit
|
||||||
PREFIX ${DEPS_BUILD_DIR}
|
PREFIX ${DEPS_BUILD_DIR}
|
||||||
URL http://luajit.org/download/LuaJIT-2.0.2.tar.gz
|
URL ${LUAJIT_URL}
|
||||||
URL_MD5 112dfb82548b03377fbefbba2e0e3a5b
|
URL_MD5 ${LUAJIT_MD5}
|
||||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit
|
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit
|
||||||
|
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DPREFIX=${DEPS_BUILD_DIR}
|
||||||
|
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luajit
|
||||||
|
-DURL=${LUAJIT_URL}
|
||||||
|
-DEXPECTED_MD5=${LUAJIT_MD5}
|
||||||
|
-DTARGET=luajit
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||||
CONFIGURE_COMMAND ""
|
CONFIGURE_COMMAND ""
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
@ -79,9 +102,16 @@ if(USE_BUNDLED_LUAROCKS)
|
|||||||
endif()
|
endif()
|
||||||
ExternalProject_Add(luarocks
|
ExternalProject_Add(luarocks
|
||||||
PREFIX ${DEPS_BUILD_DIR}
|
PREFIX ${DEPS_BUILD_DIR}
|
||||||
URL http://github.com/keplerproject/luarocks/archive/v2.1.2.tar.gz
|
URL ${LUAROCKS_URL}
|
||||||
URL_MD5 df591c00a85d51fb754ec08c77896aad
|
URL_MD5 ${LUAROCKS_MD5}
|
||||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks
|
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks
|
||||||
|
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DPREFIX=${DEPS_BUILD_DIR}
|
||||||
|
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luarocks
|
||||||
|
-DURL=${LUAROCKS_URL}
|
||||||
|
-DEXPECTED_MD5=${LUAROCKS_MD5}
|
||||||
|
-DTARGET=luarocks
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure
|
CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure
|
||||||
--prefix=${DEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS}
|
--prefix=${DEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS}
|
||||||
|
123
third-party/cmake/DownloadAndExtractFile.cmake
vendored
Normal file
123
third-party/cmake/DownloadAndExtractFile.cmake
vendored
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
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_MD5)
|
||||||
|
message(FATAL_ERROR "EXPECTED_MD5 must be defined.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED TARGET)
|
||||||
|
message(FATAL_ERROR "TARGET must be defined.")
|
||||||
|
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 "# no TIMEOUT")
|
||||||
|
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}")
|
||||||
|
|
||||||
|
message(STATUS "downloading...
|
||||||
|
src='${URL}'
|
||||||
|
dst='${file}'
|
||||||
|
timeout='${timeout_msg}'")
|
||||||
|
|
||||||
|
file(DOWNLOAD ${URL} ${file}
|
||||||
|
${timeout_args}
|
||||||
|
EXPECTED_MD5 ${EXPECTED_MD5}
|
||||||
|
STATUS status
|
||||||
|
LOG log)
|
||||||
|
|
||||||
|
list(GET status 0 status_code)
|
||||||
|
list(GET status 1 status_string)
|
||||||
|
|
||||||
|
if(NOT status_code EQUAL 0)
|
||||||
|
message(FATAL_ERROR "error: downloading '${URL}' failed
|
||||||
|
status_code: ${status_code}
|
||||||
|
status_string: ${status_string}
|
||||||
|
log: ${log}
|
||||||
|
")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "downloading... done")
|
||||||
|
|
||||||
|
set(SRC_DIR ${PREFIX}/src/${TARGET})
|
||||||
|
|
||||||
|
# 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})
|
||||||
|
|
||||||
|
# Clean up:
|
||||||
|
#
|
||||||
|
message(STATUS "extracting... [clean up]")
|
||||||
|
file(REMOVE_RECURSE "${ut_dir}")
|
||||||
|
|
||||||
|
message(STATUS "extracting... done")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user