aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorNinetainedo <ninetainedo@gmail.com>2016-09-24 15:23:18 +0200
committerNinetainedo <ninetainedo@gmail.com>2016-09-24 15:23:18 +0200
commitadd26b7b5f3bc76b709aaf66eb5d35a6c74aa0e4 (patch)
treea987466a5bfac722bbe78ded4ab9698628a478a1 /scripts
parenta8b0651e50bf217e361789d1d6a59905309a3372 (diff)
downloadvcpkg-add26b7b5f3bc76b709aaf66eb5d35a6c74aa0e4.tar.gz
vcpkg-add26b7b5f3bc76b709aaf66eb5d35a6c74aa0e4.zip
Updated vcpkg_download_distfile.cmake to handle MIRRORS. Also updated the HASH errors to match the CMake formatting (easier to read)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake61
1 files changed, 49 insertions, 12 deletions
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index 3145c8851..a394642a2 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -1,20 +1,57 @@
-# Usage: vcpkg_download_distfile(<VAR> URL <http://...> FILENAME <output.zip> SHA512 <5981de...>)
+# Usage: vcpkg_download_distfile(<VAR> URL <http://...> FILENAME <output.zip> SHA512 <5981de...> MIRRORS <http://mirror1> <http://mirror2>)
function(vcpkg_download_distfile VAR)
set(oneValueArgs URL FILENAME SHA512)
- cmake_parse_arguments(vcpkg_download_distfile "" "${oneValueArgs}" "" ${ARGN})
+ set(multipleValuesArgs MIRRORS)
+ cmake_parse_arguments(vcpkg_download_distfile "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
- if(EXISTS ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME})
- message(STATUS "Using cached ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME}")
- file(SHA512 ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} FILE_HASH)
- if(NOT FILE_HASH STREQUAL "${vcpkg_download_distfile_SHA512}")
+ set(downloaded_file_path ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME})
+ if(EXISTS ${downloaded_file_path})
+ message(STATUS "Using cached ${downloaded_file_path}")
+ file(SHA512 ${downloaded_file_path} FILE_HASH)
+ if(NOT "${FILE_HASH}" STREQUAL "${vcpkg_download_distfile_SHA512}")
message(FATAL_ERROR
- "File does not have expected hash: ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME}\n"
- " '${FILE_HASH}' <> '${vcpkg_download_distfile_SHA512}'\n"
- "Please delete the file and try again if this file should be downloaded again.")
+ "\nFile does not have expected hash:\n"
+ " File path: [${downloaded_file_path}]\n"
+ " Expected hash: [${vcpkg_download_distfile_SHA512}]\n"
+ " Actual hash: [${FILE_HASH}]\n"
+ "Please delete the file and try again if this file should be downloaded again.\n")
endif()
else()
- message(STATUS "Downloading ${vcpkg_download_distfile_URL}")
- file(DOWNLOAD ${vcpkg_download_distfile_URL} ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} EXPECTED_HASH SHA512=${vcpkg_download_distfile_SHA512})
+ # Tries to download the file.
+ list(INSERT vcpkg_download_distfile_MIRRORS 0 ${vcpkg_download_distfile_URL})
+ foreach(url IN LISTS vcpkg_download_distfile_MIRRORS)
+ message(STATUS "Downloading ${url}...")
+ file(DOWNLOAD ${url} ${downloaded_file_path} STATUS download_status)
+ list(GET download_status 0 status_code)
+ if (NOT "${status_code}" STREQUAL "0")
+ message(STATUS "Downloading ${url}... Failed")
+ file(REMOVE ${downloaded_file_path})
+ set(download_success 0)
+ else()
+ message(STATUS "Downloading ${url}... OK")
+ set(download_success 1)
+ break()
+ endif()
+ endforeach(url)
+
+ if (NOT ${download_success})
+ message(FATAL_ERROR
+ "\n"
+ " Failed to download file.\n"
+ " Add mirrors or submit an issue at https://github.com/Microsoft/vcpkg/issues/new\n")
+ else()
+ message(STATUS "Testing integrity of downloaded file...")
+ file(SHA512 ${downloaded_file_path} FILE_HASH)
+ if(NOT "${FILE_HASH}" STREQUAL "${vcpkg_download_distfile_SHA512}")
+ message(FATAL_ERROR
+ "\nFile does not have expected hash:\n"
+ " File path: [${downloaded_file_path}]\n"
+ " Expected hash: [${vcpkg_download_distfile_SHA512}]\n"
+ " Actual hash: [${FILE_HASH}]\n"
+ "The file may be corrupted.\n")
+ endif()
+ message(STATUS "Testing integrity of downloaded file... OK")
+ endif()
endif()
- set(${VAR} ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} PARENT_SCOPE)
+ set(${VAR} ${downloaded_file_path} PARENT_SCOPE)
endfunction()