From add26b7b5f3bc76b709aaf66eb5d35a6c74aa0e4 Mon Sep 17 00:00:00 2001 From: Ninetainedo Date: Sat, 24 Sep 2016 15:23:18 +0200 Subject: [PATCH] Updated vcpkg_download_distfile.cmake to handle MIRRORS. Also updated the HASH errors to match the CMake formatting (easier to read) --- ports/sery/portfile.cmake | 3 +- scripts/cmake/vcpkg_download_distfile.cmake | 61 +++++++++++++++++---- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/ports/sery/portfile.cmake b/ports/sery/portfile.cmake index 34ddb024810..7cc98fe1605 100644 --- a/ports/sery/portfile.cmake +++ b/ports/sery/portfile.cmake @@ -1,6 +1,7 @@ include(vcpkg_common_functions) vcpkg_download_distfile(ARCHIVE - URL "https://github.com/Ninetainedo/Sery/archive/v1.0.zip" + URL "https://githsdsdub.com/Ninetainedo/Sery/archive/v1.0.zip" + MIRRORS "2http://githdfdub.com/Ninetainedo/Sery/archive/v1.0.zip" "https://github.com/Ninetainedo/Sery/archive/v1.0.zip" FILENAME "sery-1.0.0.zip" SHA512 15ef97bf094e8931049d8dd667a778e23847555f0f8d5b949b250e26edcc2541744fac5c34d935880d070546777fa787b1baf018d8ca2240fcd18a820aded04f ) diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake index 3145c8851b1..a394642a2fe 100644 --- a/scripts/cmake/vcpkg_download_distfile.cmake +++ b/scripts/cmake/vcpkg_download_distfile.cmake @@ -1,20 +1,57 @@ -# Usage: vcpkg_download_distfile( URL FILENAME SHA512 <5981de...>) +# Usage: vcpkg_download_distfile( URL FILENAME SHA512 <5981de...> MIRRORS ) 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()