early-access version 2853
This commit is contained in:
107
externals/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake
vendored
Executable file
107
externals/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake
vendored
Executable file
@@ -0,0 +1,107 @@
|
||||
function(vcpkg_from_sourceforge)
|
||||
cmake_parse_arguments(PARSE_ARGV 0 "arg"
|
||||
"DISABLE_SSL;NO_REMOVE_ONE_LEVEL"
|
||||
"OUT_SOURCE_PATH;REPO;REF;SHA512;FILENAME;WORKING_DIRECTORY"
|
||||
"PATCHES")
|
||||
|
||||
if(NOT DEFINED arg_OUT_SOURCE_PATH)
|
||||
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
|
||||
endif()
|
||||
if(NOT DEFINED arg_SHA512)
|
||||
message(FATAL_ERROR "SHA512 must be specified.")
|
||||
endif()
|
||||
if(NOT DEFINED arg_REPO)
|
||||
message(FATAL_ERROR "The sourceforge repository must be specified.")
|
||||
endif()
|
||||
|
||||
|
||||
if(arg_DISABLE_SSL)
|
||||
message(WARNING "DISABLE_SSL has been deprecated and has no effect")
|
||||
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(DEFINED arg_REF)
|
||||
set(url "${sourceforge_host}/${org_name}/files/${repo_name}/${arg_REF}/${arg_FILENAME}")
|
||||
elseif(DEFINED repo_name)
|
||||
set(url "${sourceforge_host}/${org_name}/${repo_name}/files/${arg_FILENAME}")
|
||||
else()
|
||||
set(url "${sourceforge_host}/${org_name}/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(no_remove_one_level_param "")
|
||||
set(working_directory_param "")
|
||||
if(arg_NO_REMOVE_ONE_LEVEL)
|
||||
set(no_remove_one_level_param "NO_REMOVE_ONE_LEVEL")
|
||||
endif()
|
||||
if(DEFINED arg_WORKING_DIRECTORY)
|
||||
set(working_directory_param "WORKING_DIRECTORY" "${arg_WORKING_DIRECTORY}")
|
||||
endif()
|
||||
vcpkg_extract_source_archive_ex(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
ARCHIVE "${ARCHIVE}"
|
||||
REF "${sanitized_ref}"
|
||||
${no_remove_one_level_param}
|
||||
${working_directory_param}
|
||||
PATCHES ${arg_PATCHES}
|
||||
)
|
||||
|
||||
set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
|
||||
endfunction()
|
Reference in New Issue
Block a user