aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>2020-08-27 22:00:24 -0700
committerGitHub <noreply@github.com>2020-08-27 22:00:24 -0700
commit68003004c045c527d1c74c238abd29ae619e60bc (patch)
tree9c4ca5404e8b4744f4e0697114a32bf8c52a1bdf /scripts
parentbf1d20cc8fd643b1a3fd773aa97446871580fb7e (diff)
downloadvcpkg-68003004c045c527d1c74c238abd29ae619e60bc.tar.gz
vcpkg-68003004c045c527d1c74c238abd29ae619e60bc.zip
[vcpkg_from_sourceforge] Skip mirrors that are in 'disaster recovery' mode (#13176)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_sourceforge.cmake46
2 files changed, 41 insertions, 8 deletions
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index 6ad073803..1cc06147a 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -59,9 +59,6 @@ function(vcpkg_download_distfile VAR)
message(FATAL_ERROR "vcpkg_download_distfile requires a FILENAME argument.")
endif()
if(NOT _VCPKG_INTERNAL_NO_HASH_CHECK)
- if(vcpkg_download_distfile_SKIP_SHA512 AND NOT VCPKG_USE_HEAD_VERSION)
- message(FATAL_ERROR "vcpkg_download_distfile only allows SKIP_SHA512 when building with --head")
- endif()
if(NOT vcpkg_download_distfile_SKIP_SHA512 AND NOT DEFINED vcpkg_download_distfile_SHA512)
message(FATAL_ERROR "vcpkg_download_distfile requires a SHA512 argument. If you do not know the SHA512, add it as 'SHA512 0' and re-run this command.")
endif()
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()