aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>2020-07-03 09:36:40 -0700
committerGitHub <noreply@github.com>2020-07-03 09:36:40 -0700
commit21b56d99293aa364964b99946847986c5276c3b8 (patch)
treefc010edec8fbaf0674bc0ceb454a36c753c8b4d8 /scripts
parent3d2a7ca33e9997051ea221c30ccd4835989879ad (diff)
downloadvcpkg-21b56d99293aa364964b99946847986c5276c3b8.tar.gz
vcpkg-21b56d99293aa364964b99946847986c5276c3b8.zip
[vcpkg_from_sourceforge] Add retry mirror function (2/2) (#12018)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake37
-rw-r--r--scripts/cmake/vcpkg_from_sourceforge.cmake71
2 files changed, 90 insertions, 18 deletions
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index 8a8efd205..6ad073803 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -47,7 +47,7 @@
## * [fontconfig](https://github.com/Microsoft/vcpkg/blob/master/ports/fontconfig/portfile.cmake)
## * [freetype](https://github.com/Microsoft/vcpkg/blob/master/ports/freetype/portfile.cmake)
function(vcpkg_download_distfile VAR)
- set(options SKIP_SHA512)
+ set(options SKIP_SHA512 SILENT_EXIT)
set(oneValueArgs FILENAME SHA512)
set(multipleValuesArgs URLS HEADERS)
cmake_parse_arguments(vcpkg_download_distfile "${options}" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
@@ -171,18 +171,31 @@ function(vcpkg_download_distfile VAR)
endforeach(url)
endif()
- if (NOT download_success)
- message(FATAL_ERROR
- " \n"
- " Failed to download file.\n"
- " If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment\n"
- " variables to \"https://user:password@your-proxy-ip-address:port/\".\n"
- " Otherwise, please submit an issue at https://github.com/Microsoft/vcpkg/issues\n")
+ if (NOT vcpkg_download_distfile_SILENT_EXIT)
+ if (NOT download_success)
+ message(FATAL_ERROR
+ " \n"
+ " Failed to download file.\n"
+ " If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment\n"
+ " variables to \"https://user:password@your-proxy-ip-address:port/\".\n"
+ " Otherwise, please submit an issue at https://github.com/Microsoft/vcpkg/issues\n")
+ else()
+ test_hash("${download_file_path_part}" "downloaded file" "The file may have been corrupted in transit. This can be caused by proxies. If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment variables to \"https://user:password@your-proxy-ip-address:port/\".\n")
+ get_filename_component(downloaded_file_dir "${downloaded_file_path}" DIRECTORY)
+ file(MAKE_DIRECTORY "${downloaded_file_dir}")
+ file(RENAME ${download_file_path_part} ${downloaded_file_path})
+ endif()
else()
- test_hash("${download_file_path_part}" "downloaded file" "The file may have been corrupted in transit. This can be caused by proxies. If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment variables to \"https://user:password@your-proxy-ip-address:port/\".\n")
- get_filename_component(downloaded_file_dir "${downloaded_file_path}" DIRECTORY)
- file(MAKE_DIRECTORY "${downloaded_file_dir}")
- file(RENAME ${download_file_path_part} ${downloaded_file_path})
+ if (NOT download_success)
+ message(WARNING
+ " \n"
+ " Failed to download file.\n")
+ else()
+ test_hash("${download_file_path_part}" "downloaded file" "The file may have been corrupted in transit. This can be caused by proxies. If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment variables to \"https://user:password@your-proxy-ip-address:port/\".\n")
+ get_filename_component(downloaded_file_dir "${downloaded_file_path}" DIRECTORY)
+ file(MAKE_DIRECTORY "${downloaded_file_dir}")
+ file(RENAME ${download_file_path_part} ${downloaded_file_path})
+ endif()
endif()
endif()
set(${VAR} ${downloaded_file_path} PARENT_SCOPE)
diff --git a/scripts/cmake/vcpkg_from_sourceforge.cmake b/scripts/cmake/vcpkg_from_sourceforge.cmake
index 4df36a81d..258499242 100644
--- a/scripts/cmake/vcpkg_from_sourceforge.cmake
+++ b/scripts/cmake/vcpkg_from_sourceforge.cmake
@@ -82,7 +82,8 @@ function(vcpkg_from_sourceforge)
else()
set(URL_PROTOCOL https:)
endif()
- set(SOURCEFORGE_HOST ${URL_PROTOCOL}//downloads.sourceforge.net/project)
+
+ set(SOURCEFORGE_HOST ${URL_PROTOCOL}//sourceforge.net/projects)
string(FIND ${_vdus_REPO} "/" FOUND_ORG)
if (NOT FOUND_ORG EQUAL -1)
@@ -94,14 +95,14 @@ function(vcpkg_from_sourceforge)
endif()
set(ORG_NAME ${ORG_NAME}/)
else()
- set(REPO_NAME ${_vdus_REPO})
- set(ORG_NAME )
+ set(ORG_NAME ${_vdus_REPO}/)
+ set(REPO_NAME )
endif()
if (DEFINED _vdus_REF)
- set(URL "${SOURCEFORGE_HOST}/${ORG_NAME}${REPO_NAME}/${_vdus_REF}/${_vdus_FILENAME}")
+ set(URL "${SOURCEFORGE_HOST}/${ORG_NAME}files/${REPO_NAME}/${_vdus_REF}/${_vdus_FILENAME}")
else()
- set(URL "${SOURCEFORGE_HOST}/${ORG_NAME}${REPO_NAME}/${_vdus_FILENAME}")
+ set(URL "${SOURCEFORGE_HOST}/${ORG_NAME}${REPO_NAME}/files/${_vdus_FILENAME}")
endif()
set(NO_REMOVE_ONE_LEVEL )
@@ -111,12 +112,70 @@ function(vcpkg_from_sourceforge)
string(SUBSTRING "${_vdus_SHA512}" 0 10 SANITIZED_REF)
+ list(APPEND SOURCEFORGE_MIRRORS
+ cfhcable # United States
+ pilotfiber # New York, NY
+ gigenet # Chicago, IL
+ versaweb # Las Vegas, NV
+ ayera # Modesto, CA
+ netactuate # Durham, NC
+ phoenixnap # Tempe, AZ
+ astuteinternet # Vancouver, BC
+ freefr # Paris, France
+ netcologne # Cologne, Germany
+ deac-riga # Latvia
+ excellmedia # Hyderabad, India
+ iweb # Montreal, QC
+ jaist # Nomi, Japan
+ jztkft # Mezotur, Hungary
+ managedway # Detroit, MI
+ nchc # Taipei, Taiwan
+ netix # Bulgaria
+ ufpr # Curitiba, Brazil
+ tenet # Wynberg, South Africa
+ )
+
+ # Try to use auto-select first
+ set(DOWNLOAD_URL ${URL}/download)
+ message(STATUS "Trying auto-select mirror...")
vcpkg_download_distfile(ARCHIVE
- URLS "${URL}"
+ URLS "${DOWNLOAD_URL}"
SHA512 "${_vdus_SHA512}"
FILENAME "${_vdus_FILENAME}"
+ SILENT_EXIT
)
+
+ if (EXISTS ${ARCHIVE})
+ set(download_success 1)
+ endif()
+
+ if (NOT download_success EQUAL 1)
+ foreach(SOURCEFORGE_MIRROR ${SOURCEFORGE_MIRRORS})
+ set(DOWNLOAD_URL ${URL}/download?use_mirror=${SOURCEFORGE_MIRROR})
+ message(STATUS "Trying mirror ${SOURCEFORGE_MIRROR}...")
+ vcpkg_download_distfile(ARCHIVE
+ URLS "${DOWNLOAD_URL}"
+ SHA512 "${_vdus_SHA512}"
+ FILENAME "${_vdus_FILENAME}"
+ SILENT_EXIT
+ )
+
+ if (EXISTS ${ARCHIVE})
+ set(download_success 1)
+ break()
+ endif()
+ endforeach()
+ endif()
+ if (NOT download_success)
+ message(FATAL_ERROR [[
+ Couldn't download source from any of the sourceforge mirrors, please check your network.
+ If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment
+ variables to "http[s]://user:password@your-proxy-ip-address:port/".
+ Otherwise, please submit an issue at https://github.com/Microsoft/vcpkg/issues
+ ]])
+ endif()
+
vcpkg_extract_source_archive_ex(
OUT_SOURCE_PATH SOURCE_PATH
ARCHIVE "${ARCHIVE}"