diff options
Diffstat (limited to 'scripts/cmake/vcpkg_from_sourceforge.cmake')
| -rw-r--r-- | scripts/cmake/vcpkg_from_sourceforge.cmake | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/scripts/cmake/vcpkg_from_sourceforge.cmake b/scripts/cmake/vcpkg_from_sourceforge.cmake index 34b2a12b0..10dc8b623 100644 --- a/scripts/cmake/vcpkg_from_sourceforge.cmake +++ b/scripts/cmake/vcpkg_from_sourceforge.cmake @@ -65,6 +65,34 @@ ## * [tinyfiledialogs](https://github.com/Microsoft/vcpkg/blob/master/ports/tinyfiledialogs/portfile.cmake) function(vcpkg_from_sourceforge) + macro(check_file_content) + if (EXISTS ${ARCHIVE}) + file(SIZE ${ARCHIVE} DOWNLOAD_FILE_SIZE) + if (DOWNLOAD_FILE_SIZE LESS_EQUAL 1024) + file(READ ${ARCHIVE} _FILE_CONTENT_) + string(FIND "${_FILE_CONTENT_}" "the Sourceforge site is currently in Disaster Recovery mode." OUT_CONTENT) + message("OUT_CONTENT: ${OUT_CONTENT}") + if (OUT_CONTENT EQUAL -1) + set(download_success 1) + else() + file(REMOVE ${ARCHIVE}) + endif() + endif() + endif() + endmacro() + + macro(check_file_sha512) + file(SHA512 ${ARCHIVE} FILE_HASH) + if(NOT FILE_HASH STREQUAL _vdus_SHA512) + message(FATAL_ERROR + "\nFile does not have expected hash:\n" + " File path: [ ${ARCHIVE} ]\n" + " Expected hash: [ ${_vdus_SHA512} ]\n" + " Actual hash: [ ${FILE_HASH} ]\n" + "${CUSTOM_ERROR_ADVICE}\n") + endif() + endmacro() + set(booleanValueArgs DISABLE_SSL NO_REMOVE_ONE_LEVEL) set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 FILENAME WORKING_DIRECTORY) set(multipleValuesArgs PATCHES) @@ -151,13 +179,15 @@ function(vcpkg_from_sourceforge) message(STATUS "Trying auto-select mirror...") vcpkg_download_distfile(ARCHIVE URLS "${DOWNLOAD_URL}" - SHA512 "${_vdus_SHA512}" + SKIP_SHA512 FILENAME "${_vdus_FILENAME}" SILENT_EXIT ) - - if (EXISTS ${ARCHIVE}) - set(download_success 1) + check_file_content() + if (download_success) + check_file_sha512() + else() + message(STATUS "The default mirror is in Disaster Recovery mode, trying other mirrors...") endif() if (NOT download_success EQUAL 1) @@ -166,13 +196,19 @@ function(vcpkg_from_sourceforge) message(STATUS "Trying mirror ${SOURCEFORGE_MIRROR}...") vcpkg_download_distfile(ARCHIVE URLS "${DOWNLOAD_URL}" - SHA512 "${_vdus_SHA512}" + SKIP_SHA512 FILENAME "${_vdus_FILENAME}" SILENT_EXIT ) if (EXISTS ${ARCHIVE}) set(download_success 1) + check_file_content() + if (download_success) + check_file_sha512() + else() + message(STATUS "Mirror ${SOURCEFORGE_MIRROR} is in Disaster Recovery mode, trying other mirrors...") + endif() break() endif() endforeach() |
