aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake')
-rw-r--r--vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake83
1 files changed, 83 insertions, 0 deletions
diff --git a/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
new file mode 100644
index 0000000..a8c1f1f
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
@@ -0,0 +1,83 @@
+function(vcpkg_download_sourceforge out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg"
+ ""
+ "REPO;REF;SHA512;FILENAME"
+ "")
+
+ foreach(arg_name IN ITEMS REPO SHA512 FILENAME)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(sourceforge_host "https://sourceforge.net/projects")
+
+ if(arg_REPO MATCHES "^([^/]*)$") # just one element
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "")
+ elseif(arg_REPO MATCHES "^([^/]*)/([^/]*)$") # two elements
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "${CMAKE_MATCH_2}")
+ else()
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name. It must be:
+ - an organization name without any slashes, or
+ - an organization name followed by a repository name separated by a single slash")
+ endif()
+
+ if(NOT "${arg_REF}" STREQUAL "")
+ set(url "${sourceforge_host}/${org_name}/files/${repo_name}/${arg_REF}/${arg_FILENAME}")
+ else()
+ set(url "${sourceforge_host}/${arg_REPO}/files/${arg_FILENAME}")
+ endif()
+
+ string(SUBSTRING "${arg_SHA512}" 0 10 sanitized_ref)
+
+ set(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
+ )
+ if(DEFINED SOURCEFORGE_MIRRORS AND NOT DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ message(WARNING "Extension point SOURCEFORGE_MIRRORS has been deprecated.
+ Please use the replacement VCPKG_SOURCEFORGE_EXTRA_MIRRORS variable instead.")
+ list(APPEND sourceforge_mirrors "${SOURCEFORGE_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ elseif(DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ list(APPEND sourceforge_mirrors "${VCPKG_SOURCEFORGE_EXTRA_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ endif()
+
+ set(all_urls "${url}/download")
+ foreach(mirror IN LISTS sourceforge_mirrors)
+ list(APPEND all_urls "${url}/download?use_mirror=${mirror}")
+ endforeach()
+
+ vcpkg_download_distfile(archive
+ URLS ${all_urls}
+ SHA512 "${arg_SHA512}"
+ FILENAME "${arg_FILENAME}"
+ )
+
+ set("${out_var}" "${archive}" PARENT_SCOPE)
+endfunction()