Improve and extract internals of vcpkg_find_acquire_program. (#34881)

* Extract vcpkg_extract_archive from vcpkg_find_acquire_program.

* Extract vcpkg_download_sourceforge from vcpkg_from_sourceforge.

This allows vcpkg_find_acquire_program to download from SourceForge without needing to temporarily change _VCPKG_EDITABLE.

* Use whether a URI is known for an entity to decide whether to downloads it rather than checking a separate supported_on_unix boolean.

* Add unparsed arguments check to vcpkg_extract_archive
This commit is contained in:
Billy O'Neal 2023-11-14 14:01:08 -08:00 committed by GitHub
parent 426dcc68e0
commit 83712a6060
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 286 additions and 223 deletions

View File

@ -0,0 +1,85 @@
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(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("${out_var}" "${archive}" PARENT_SCOPE)
endfunction()

View File

@ -0,0 +1,51 @@
function(vcpkg_extract_archive)
cmake_parse_arguments(PARSE_ARGV 0 "arg"
""
"ARCHIVE;DESTINATION"
""
)
foreach(arg_name IN ITEMS ARCHIVE DESTINATION)
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()
if(EXISTS "${arg_DESTINATION}")
message(FATAL_ERROR "${arg_DESTINATION} was an extraction target, but it already exists.")
endif()
file(MAKE_DIRECTORY "${arg_DESTINATION}")
cmake_path(GET arg_ARCHIVE EXTENSION archive_extension)
string(TOLOWER "${archive_extension}" archive_extension)
if("${archive_extension}" MATCHES [[\.msi$]])
cmake_path(NATIVE_PATH arg_ARCHIVE archive_native_path)
cmake_path(NATIVE_PATH arg_DESTINATION destination_native_path)
cmake_path(GET arg_ARCHIVE PARENT_PATH archive_directory)
vcpkg_execute_in_download_mode(
COMMAND msiexec
/a "${archive_native_path}"
/qn "TARGETDIR=${destination_native_path}"
WORKING_DIRECTORY "${archive_directory}"
)
elseif("${archive_extension}" MATCHES [[\.7z\.exe$]])
vcpkg_find_acquire_program(7Z)
vcpkg_execute_in_download_mode(
COMMAND ${7Z} x
"${arg_ARCHIVE}"
"-o${arg_DESTINATION}"
-y -bso0 -bsp0
WORKING_DIRECTORY "${arg_DESTINATION}"
)
else()
vcpkg_execute_in_download_mode(
COMMAND "${CMAKE_COMMAND}" -E tar xzf "${arg_ARCHIVE}"
WORKING_DIRECTORY "${arg_DESTINATION}"
)
endif()
endfunction()

View File

@ -2,13 +2,7 @@ function(z_vcpkg_extract_source_archive_deprecated_mode archive working_director
cmake_path(GET archive FILENAME archive_filename)
if(NOT EXISTS "${working_directory}/${archive_filename}.extracted")
message(STATUS "Extracting source ${archive}")
file(MAKE_DIRECTORY "${working_directory}")
vcpkg_execute_required_process(
ALLOW_IN_DOWNLOAD_MODE
COMMAND "${CMAKE_COMMAND}" -E tar xjf "${archive}"
WORKING_DIRECTORY "${working_directory}"
LOGNAME extract
)
vcpkg_extract_archive(ARCHIVE "${archive}" DESTINATION "${working_directory}")
file(TOUCH "${working_directory}/${archive_filename}.extracted")
endif()
endfunction()

View File

@ -1,7 +1,9 @@
set(program_name 7z)
set(tool_subdirectory "23.01")
set(paths_to_search "${DOWNLOADS}/tools/7zip_msi-${tool_subdirectory}-windows/Files/7-Zip") # vcpkg fetch 7zip_msi path
list(APPEND paths_to_search "${DOWNLOADS}/tools/7z/${tool_subdirectory}/Files/7-Zip")
set(download_urls "https://7-zip.org/a/7z2301.msi")
set(download_filename "7z2301.msi")
set(download_sha512 002c8ab30be802fa5fa90896d2bdf710bfbd89e39487af25af9d63821986e6d11c42b1c4f4acc79d325719b10193cd31c38f648403ef16f0580609afa8da9596)
if(CMAKE_HOST_WIN32)
set(tool_subdirectory "23.01")
set(paths_to_search "${DOWNLOADS}/tools/7zip_msi-${tool_subdirectory}-windows/Files/7-Zip") # vcpkg fetch 7zip_msi path
list(APPEND paths_to_search "${DOWNLOADS}/tools/7z/${tool_subdirectory}/Files/7-Zip")
set(download_urls "https://7-zip.org/a/7z2301.msi")
set(download_filename "7z2301.msi")
set(download_sha512 002c8ab30be802fa5fa90896d2bdf710bfbd89e39487af25af9d63821986e6d11c42b1c4f4acc79d325719b10193cd31c38f648403ef16f0580609afa8da9596)
endif()

View File

@ -1,6 +1,8 @@
set(program_name aria2c)
set(program_version 1.35.0)
set(paths_to_search "${DOWNLOADS}/tools/aria2c/aria2-${program_version}-win-32bit-build1")
set(download_urls "https://github.com/aria2/aria2/releases/download/release-${program_version}/aria2-${program_version}-win-32bit-build1.zip")
set(download_filename "aria2-${program_version}-win-32bit-build1.zip")
set(download_sha512 933537cad820b1cecf43a9eeca7e1b241dd7b1c902ee942441a166f2c38845f16046321efbdfa2f83c7e9fc50c7ecc5da6fd00e0c6e2124c07d3b783aa5092a4)
if(CMAKE_HOST_WIN32)
set(paths_to_search "${DOWNLOADS}/tools/aria2c/aria2-${program_version}-win-32bit-build1")
set(download_urls "https://github.com/aria2/aria2/releases/download/release-${program_version}/aria2-${program_version}-win-32bit-build1.zip")
set(download_filename "aria2-${program_version}-win-32bit-build1.zip")
set(download_sha512 933537cad820b1cecf43a9eeca7e1b241dd7b1c902ee942441a166f2c38845f16046321efbdfa2f83c7e9fc50c7ecc5da6fd00e0c6e2124c07d3b783aa5092a4)
endif()

View File

@ -2,14 +2,12 @@ set(program_name bazel)
set(program_version 4.2.2)
set(rename_binary_to "bazel")
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
set(supported_on_unix ON)
set(tool_subdirectory "${program_version}-linux")
set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64")
set(download_filename "bazel-${tool_subdirectory}-x86_64")
set(raw_executable ON)
set(download_sha512 f38619e054df78cab38278a5901b2798f2e25b5cec53358d98278002e713d225fd3df96a209b7f22a2357835a279cee8ef1768e10561b3e9fe6361f324563bb9)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
set(supported_on_unix ON)
set(tool_subdirectory "${program_version}-darwin")
set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64")
set(download_filename "bazel-${tool_subdirectory}-x86_64")

View File

@ -1,6 +1,8 @@
set(program_name dark)
set(tool_subdirectory "wix311-binaries")
set(paths_to_search "${DOWNLOADS}/tools/dark/${tool_subdirectory}")
set(download_urls "https://github.com/wixtoolset/wix3/releases/download/wix311rtm/wix311-binaries.zip")
set(download_filename "wix311-binaries.zip")
set(download_sha512 74f0fa29b5991ca655e34a9d1000d47d4272e071113fada86727ee943d913177ae96dc3d435eaf494d2158f37560cd4c2c5274176946ebdb17bf2354ced1c516)
if(CMAKE_HOST_WIN32)
set(tool_subdirectory "wix311-binaries")
set(paths_to_search "${DOWNLOADS}/tools/dark/${tool_subdirectory}")
set(download_urls "https://github.com/wixtoolset/wix3/releases/download/wix311rtm/wix311-binaries.zip")
set(download_filename "wix311-binaries.zip")
set(download_sha512 74f0fa29b5991ca655e34a9d1000d47d4272e071113fada86727ee943d913177ae96dc3d435eaf494d2158f37560cd4c2c5274176946ebdb17bf2354ced1c516)
endif()

View File

@ -1,11 +1,11 @@
set(program_name doxygen)
set(program_version 1.9.1)
vcpkg_list(SET sourceforge_args
REPO doxygen
REF "rel-${program_version}"
FILENAME "doxygen-${program_version}.windows.bin.zip"
SHA512 c3eeb6b9fa4eab70fb6b0864fbbf94fb8050f3fee38d117cf470921a80e3569cc1c8b0272604d6731e05f01790cfaa70e159bec5d0882fc4f2d8ae4a5d52a21b
NO_REMOVE_ONE_LEVEL
WORKING_DIRECTORY "${DOWNLOADS}/tools/doxygen"
)
set(tool_subdirectory c3eeb6b9fa-76d69c6db5)
if(CMAKE_HOST_WIN32)
set(download_filename "doxygen-${program_version}.windows.bin.zip")
set(download_sha512 "c3eeb6b9fa4eab70fb6b0864fbbf94fb8050f3fee38d117cf470921a80e3569cc1c8b0272604d6731e05f01790cfaa70e159bec5d0882fc4f2d8ae4a5d52a21b")
vcpkg_list(SET sourceforge_args
REPO doxygen
REF "rel-${program_version}"
)
set(tool_subdirectory c3eeb6b9fa-76d69c6db5)
endif()

View File

@ -7,7 +7,6 @@ else() # Old behavior
message("Consider adding vcpkg-tool-gn as a host dependency of this port or create an issue at https://github.com/microsoft/vcpkg/issues")
set(cipd_download_gn "https://chrome-infra-packages.appspot.com/dl/gn/gn")
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
set(supported_on_unix ON)
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
if(HOST_ARCH STREQUAL "aarch64")
set(program_version "GkfFAfAUyE-qfeWkdUMaeM1Ov64Fk3SjSj9pwKqZX7gC")
@ -19,7 +18,6 @@ else() # Old behavior
set(download_sha512 "A7A5CD5633C5547EC1B1A95958486DDAAC91F1A65881EDC0AD8F74DF44E82F08BA74358E9A72DFCDDE6F534A6B9C9A430D3E16ACE2E4346C4D2E9113F7654B3F")
endif()
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
set(supported_on_unix ON)
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
if(HOST_ARCH STREQUAL "arm64")
set(program_version "qMPtGq7xZlpb-lHjP-SK27ftT4X71WIvguuyx6X14DEC")
@ -31,7 +29,7 @@ else() # Old behavior
set(download_sha512 "2696ECE7B2C8008CABDDF10024017E2ECF875F8679424E77052252BDDC83A2096DF3C61D89CD25120EF27E0458C8914BEEED9D418593BDBC4F6ED33A8D4C3DC5")
endif()
else()
if($ENV{PROCESSOR_ARCHITECTURE} STREQUAL "ARM64")
if("$ENV{PROCESSOR_ARCHITECTURE}" STREQUAL "ARM64")
set(program_version "q5ExVHmXyD34Q_Tzb-aRxsPipO-e37-csVRhVM7IJh0C")
set(gn_platform "windows-amd64")
set(download_sha512 "FA764AA44EB6F48ED50E855B4DC1DD1ABE35E45FD4AAC7F059A35293A14894C1B591215E34FB0CE9362E646EA9463BA3B489EFB7EBBAA2693D14238B50E4E686")

View File

@ -1,8 +1,10 @@
set(program_name go)
set(tool_subdirectory 1.21.1.windows-386)
set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin")
set(brew_package_name "go")
set(apt_package_name "golang-go")
set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.zip")
set(download_filename "go${tool_subdirectory}.zip")
set(download_sha512 417a4bd95a10f21c2166badd2303e1956d91d0e783e334c99ea0176a323e815729c8c3af3f7ec68f057b757d06bcc75be82584031c4069c89a2db62bbfa902e8)
if(CMAKE_HOST_WIN32)
set(tool_subdirectory 1.21.1.windows-386)
set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin")
set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.zip")
set(download_filename "go${tool_subdirectory}.zip")
set(download_sha512 417a4bd95a10f21c2166badd2303e1956d91d0e783e334c99ea0176a323e815729c8c3af3f7ec68f057b757d06bcc75be82584031c4069c89a2db62bbfa902e8)
endif()

View File

@ -1,6 +1,8 @@
set(program_name gperf)
set(program_version 3.0.1)
set(paths_to_search "${DOWNLOADS}/tools/gperf/bin")
set(download_urls "https://sourceforge.net/projects/gnuwin32/files/gperf/${program_version}/gperf-${program_version}-bin.zip/download")
set(download_filename "gperf-${program_version}-bin.zip")
set(download_sha512 3f2d3418304390ecd729b85f65240a9e4d204b218345f82ea466ca3d7467789f43d0d2129fcffc18eaad3513f49963e79775b10cc223979540fa2e502fe7d4d9)
if(CMAKE_HOST_WIN32)
set(download_filename "gperf-${program_version}-bin.zip")
set(download_sha512 3f2d3418304390ecd729b85f65240a9e4d204b218345f82ea466ca3d7467789f43d0d2129fcffc18eaad3513f49963e79775b10cc223979540fa2e502fe7d4d9)
set(download_urls "https://sourceforge.net/projects/gnuwin32/files/gperf/${program_version}/gperf-${program_version}-bin.zip/download")
set(paths_to_search "${DOWNLOADS}/tools/gperf/bin")
endif()

View File

@ -1,11 +1,13 @@
set(program_name jom)
set(program_version_string 1_1_4)
set(tool_subdirectory "jom-${program_version_string}")
set(paths_to_search "${DOWNLOADS}/tools/jom/${tool_subdirectory}")
set(download_urls
"https://download.qt.io/official_releases/jom/jom_${program_version_string}.zip"
"https://mirrors.ocf.berkeley.edu/qt/official_releases/jom/jom_${program_version_string}.zip"
"https://mirrors.ukfast.co.uk/sites/qt.io/official_releases/jom/jom_${program_version_string}.zip"
)
set(download_filename "jom_${program_version_string}.zip")
set(download_sha512 a683bd829c84942223a791dae8abac5cfc2e3fa7de84c6fdc490ad3aa996a26c9fa0be0636890f02c9d56948bbe3225b43497cb590d1cb01e70c6fac447fa17b)
if(CMAKE_HOST_WIN32)
set(download_urls
"https://download.qt.io/official_releases/jom/jom_${program_version_string}.zip"
"https://mirrors.ocf.berkeley.edu/qt/official_releases/jom/jom_${program_version_string}.zip"
"https://mirrors.ukfast.co.uk/sites/qt.io/official_releases/jom/jom_${program_version_string}.zip"
)
set(download_filename "jom_${program_version_string}.zip")
set(download_sha512 a683bd829c84942223a791dae8abac5cfc2e3fa7de84c6fdc490ad3aa996a26c9fa0be0636890f02c9d56948bbe3225b43497cb590d1cb01e70c6fac447fa17b)
set(tool_subdirectory "jom-${program_version_string}")
set(paths_to_search "${DOWNLOADS}/tools/jom/${tool_subdirectory}")
endif()

View File

@ -15,5 +15,4 @@ else() # Old behavior
set(download_urls "https://github.com/mesonbuild/meson/archive/${ref}.tar.gz")
set(download_filename "meson-${ref}.tar.gz")
set(download_sha512 18a012a45274dbb4582e99fd69d920f38831e788d9860f9553c64847bedb1c2010ae0b5c0ef4a4350c03f5e0f95aaa0395378e1208109b59640c1a70b1e202d2)
set(supported_on_unix ON)
endif()

View File

@ -1,8 +1,13 @@
set(program_name nasm)
set(program_version 2.16.01)
set(paths_to_search "${DOWNLOADS}/tools/nasm/nasm-${program_version}")
set(brew_package_name "nasm")
set(apt_package_name "nasm")
set(download_urls "https://www.nasm.us/pub/nasm/releasebuilds/${program_version}/win64/nasm-${program_version}-win64.zip" "https://gstreamer.freedesktop.org/src/mirror/nasm-${program_version}-win64.zip")
set(download_filename "nasm-${program_version}-win64.zip")
set(download_sha512 ce4d02f530dc3376b4513f219bbcec128ee5bebd8a5c332599b48d8071f803d1538d7258fec7c2e9b4d725b8d7314cea2696289d0493017eb13bfe70e5cb5062)
if(CMAKE_HOST_WIN32)
set(download_urls
"https://www.nasm.us/pub/nasm/releasebuilds/${program_version}/win64/nasm-${program_version}-win64.zip"
"https://gstreamer.freedesktop.org/src/mirror/nasm-${program_version}-win64.zip"
)
set(download_filename "nasm-${program_version}-win64.zip")
set(download_sha512 ce4d02f530dc3376b4513f219bbcec128ee5bebd8a5c332599b48d8071f803d1538d7258fec7c2e9b4d725b8d7314cea2696289d0493017eb13bfe70e5cb5062)
set(paths_to_search "${DOWNLOADS}/tools/nasm/nasm-${program_version}")
endif()

View File

@ -1,6 +1,5 @@
set(program_name ninja)
set(program_version 1.10.2)
set(supported_on_unix ON)
set(version_command --version)
if(CMAKE_HOST_WIN32)
set(download_filename "ninja-win-${program_version}.zip")
@ -15,7 +14,6 @@ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
set(download_sha512 bcd12f6a3337591306d1b99a7a25a6933779ba68db79f17c1d3087d7b6308d245daac08df99087ff6be8dc7dd0dcdbb3a50839a144745fa719502b3a7a07260b)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
set(paths_to_search "${DOWNLOADS}/tools/${tool_subdirectory}-freebsd")
set(supported_on_unix OFF)
else()
execute_process(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
if(HOST_ARCH MATCHES "x86_64|amd64|AMD64")

View File

@ -1,9 +1,11 @@
set(program_name nuget)
set(tool_subdirectory "5.11.0")
set(paths_to_search "${DOWNLOADS}/tools/nuget-${tool_subdirectory}-windows")
set(brew_package_name "nuget")
set(download_urls "https://dist.nuget.org/win-x86-commandline/v5.11.0/nuget.exe")
set(rename_binary_to "nuget.exe")
set(download_filename "nuget.5.11.0.exe")
set(raw_executable ON)
set(download_sha512 06a337c9404dec392709834ef2cdbdce611e104b510ef40201849595d46d242151749aef65bc2d7ce5ade9ebfda83b64c03ce14c8f35ca9957a17a8c02b8c4b7)
if(CMAKE_HOST_WIN32)
set(download_urls "https://dist.nuget.org/win-x86-commandline/v5.11.0/nuget.exe")
set(download_filename "nuget.5.11.0.exe")
set(download_sha512 06a337c9404dec392709834ef2cdbdce611e104b510ef40201849595d46d242151749aef65bc2d7ce5ade9ebfda83b64c03ce14c8f35ca9957a17a8c02b8c4b7)
set(tool_subdirectory "5.11.0")
set(paths_to_search "${DOWNLOADS}/tools/nuget-${tool_subdirectory}-windows")
set(raw_executable ON)
set(rename_binary_to "nuget.exe")
endif()

View File

@ -1,6 +1,5 @@
set(program_name patchelf)
set(program_version 0.14.5)
set(supported_on_unix ON)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
execute_process(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
if(HOST_ARCH STREQUAL "aarch64")

View File

@ -1,11 +1,13 @@
set(program_name perl)
set(program_version 5.38.0.1)
set(tool_subdirectory ${program_version})
set(paths_to_search ${DOWNLOADS}/tools/perl/${tool_subdirectory}/perl/bin)
set(brew_package_name "perl")
set(apt_package_name "perl")
set(download_urls
"https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip"
)
set(download_filename "strawberry-perl-5.38.0.1-64bit-portable.zip")
set(download_sha512 9b604f19e245a809bd18857bd91ebaec81ca031394ec69a3369df64d3590d2c9d557326d8aa10f91e78b1f1d56689aa57a8ec3a8cad4d2e542c96eb714a3831d)
if(CMAKE_HOST_WIN32)
set(download_urls
"https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip"
)
set(download_filename "strawberry-perl-5.38.0.1-64bit-portable.zip")
set(download_sha512 9b604f19e245a809bd18857bd91ebaec81ca031394ec69a3369df64d3590d2c9d557326d8aa10f91e78b1f1d56689aa57a8ec3a8cad4d2e542c96eb714a3831d)
set(tool_subdirectory ${program_version})
set(paths_to_search ${DOWNLOADS}/tools/perl/${tool_subdirectory}/perl/bin)
endif()

View File

@ -1,12 +1,11 @@
set(program_name pkg-config)
if(DEFINED ENV{PKG_CONFIG})
if(DEFINED "ENV{PKG_CONFIG}")
debug_message(STATUS "PKG_CONFIG found in ENV! Using $ENV{PKG_CONFIG}")
set(PKGCONFIG "$ENV{PKG_CONFIG}" CACHE INTERNAL "")
set(PKGCONFIG "${PKGCONFIG}" PARENT_SCOPE)
return()
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
# As of 6.8, the OpenBSD specific pkg-config doesn't support {pcfiledir}
set(supported_on_unix ON)
set(rename_binary_to "pkg-config")
set(program_version 0.29.2.1)
set(raw_executable ON)

View File

@ -1,6 +1,8 @@
set(program_name "ruby")
set(program_version 2.7.4-1)
set(paths_to_search "${DOWNLOADS}/tools/ruby/rubyinstaller-${program_version}-x86/bin")
set(download_urls "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-${program_version}/rubyinstaller-${program_version}-x86.7z")
set(download_filename "rubyinstaller-${program_version}-x86.7z")
set(download_sha512 4bf459c987b407bdda328c52d95060bf6ad48fc3e5ed5f64d4b205c5b4153c7a00cb6f9da6c0bcd5f2e001e9dc3dda0b72269ec4afdeffd658b93c085cd1d859)
if(CMAKE_HOST_WIN32)
set(download_urls "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-${program_version}/rubyinstaller-${program_version}-x86.7z")
set(download_filename "rubyinstaller-${program_version}-x86.7z")
set(download_sha512 4bf459c987b407bdda328c52d95060bf6ad48fc3e5ed5f64d4b205c5b4153c7a00cb6f9da6c0bcd5f2e001e9dc3dda0b72269ec4afdeffd658b93c085cd1d859)
set(paths_to_search "${DOWNLOADS}/tools/ruby/rubyinstaller-${program_version}-x86/bin")
endif()

View File

@ -1,8 +1,10 @@
set(program_name scons)
set(program_version 4.1.0)
set(tool_subdirectory "${program_version}")
set(interpreter PYTHON2)
set(search_names "scons.py")
set(download_urls "https://sourceforge.net/projects/scons/files/scons-local-${program_version}.zip/download")
set(download_filename "scons-local-${program_version}.zip")
set(download_sha512 b173176ce8aca25039c64fcc68ec1b9ad31e03a926fd545e7631b3f9b374d914adffc593f505e3e7e2867b0ffe85e8deb0b39afe314edf05d02974ce5db1badb)
if(CMAKE_HOST_WIN32)
set(download_urls "https://sourceforge.net/projects/scons/files/scons-local-${program_version}.zip/download")
set(download_filename "scons-local-${program_version}.zip")
set(download_sha512 b173176ce8aca25039c64fcc68ec1b9ad31e03a926fd545e7631b3f9b374d914adffc593f505e3e7e2867b0ffe85e8deb0b39afe314edf05d02974ce5db1badb)
set(tool_subdirectory "${program_version}")
endif()

View File

@ -1,15 +1,15 @@
set(program_version 4.0.2)
set(program_name swig)
if(CMAKE_HOST_WIN32)
set(download_filename "swigwin-${program_version}.zip")
set(download_sha512 "b8f105f9b9db6acc1f6e3741990915b533cd1bc206eb9645fd6836457fd30789b7229d2e3219d8e35f2390605ade0fbca493ae162ec3b4bc4e428b57155db03d")
vcpkg_list(SET sourceforge_args
REPO swig/swigwin
REF "swigwin-${program_version}"
FILENAME "swigwin-${program_version}.zip"
SHA512 b8f105f9b9db6acc1f6e3741990915b533cd1bc206eb9645fd6836457fd30789b7229d2e3219d8e35f2390605ade0fbca493ae162ec3b4bc4e428b57155db03d
NO_REMOVE_ONE_LEVEL
WORKING_DIRECTORY "${DOWNLOADS}/tools/swig"
)
set(tool_subdirectory "b8f105f9b9-f0518bc3b7/swigwin-${program_version}")
set(tool_subdirectory "b8f105f9b9-f0518bc3b7")
set(paths_to_search "${DOWNLOADS}/tools/swig/b8f105f9b9-f0518bc3b7/swigwin-${program_version}")
else()
set(apt_package_name "swig")
set(brew_package_name "swig")

View File

@ -1,10 +1,12 @@
set(program_name yasm)
set(program_version 1.3.0.6.g1962)
set(tool_subdirectory 1.3.0.6)
set(brew_package_name "yasm")
set(apt_package_name "yasm")
set(download_urls "https://www.tortall.net/projects/yasm/snapshots/v${program_version}/yasm-${program_version}.exe")
set(download_filename "yasm-${program_version}.exe")
set(rename_binary_to "yasm.exe")
set(raw_executable ON)
set(download_sha512 c1945669d983b632a10c5ff31e86d6ecbff143c3d8b2c433c0d3d18f84356d2b351f71ac05fd44e5403651b00c31db0d14615d7f9a6ecce5750438d37105c55b)
if(CMAKE_HOST_WIN32)
set(download_urls "https://www.tortall.net/projects/yasm/snapshots/v${program_version}/yasm-${program_version}.exe")
set(download_filename "yasm-${program_version}.exe")
set(download_sha512 c1945669d983b632a10c5ff31e86d6ecbff143c3d8b2c433c0d3d18f84356d2b351f71ac05fd44e5403651b00c31db0d14615d7f9a6ecce5750438d37105c55b)
set(tool_subdirectory 1.3.0.6)
set(raw_executable ON)
set(rename_binary_to "yasm.exe")
endif()

View File

@ -105,7 +105,6 @@ function(vcpkg_find_acquire_program program)
set(rename_binary_to "")
set(tool_subdirectory "")
set(interpreter "")
set(supported_on_unix "")
set(post_install_command "")
set(paths_to_search "")
set(version_command "")
@ -153,7 +152,7 @@ function(vcpkg_find_acquire_program program)
)
endif()
if(NOT ${program})
if(NOT VCPKG_HOST_IS_WINDOWS AND NOT supported_on_unix)
if("${download_urls}" STREQUAL "" AND "${sourceforge_args}" STREQUAL "")
set(example ".")
if(NOT "${brew_package_name}" STREQUAL "" AND VCPKG_HOST_IS_OSX)
set(example ":\n brew install ${brew_package_name}")
@ -163,66 +162,41 @@ function(vcpkg_find_acquire_program program)
message(FATAL_ERROR "Could not find ${program_name}. Please install it via your package manager${example}")
endif()
if(NOT "${sourceforge_args}" STREQUAL "")
# Locally change editable to suppress re-extraction each time
set(_VCPKG_EDITABLE 1)
vcpkg_from_sourceforge(OUT_SOURCE_PATH SFPATH ${sourceforge_args})
unset(_VCPKG_EDITABLE)
else()
if("${sourceforge_args}" STREQUAL "")
vcpkg_download_distfile(archive_path
URLS ${download_urls}
SHA512 "${download_sha512}"
FILENAME "${download_filename}"
)
else()
vcpkg_download_sourceforge(archive_path
${sourceforge_args}
SHA512 "${download_sha512}"
FILENAME "${download_filename}"
)
endif()
if(raw_executable)
file(MAKE_DIRECTORY "${full_subdirectory}")
if(raw_executable)
if(NOT "${rename_binary_to}" STREQUAL "")
file(INSTALL "${archive_path}"
DESTINATION "${full_subdirectory}"
RENAME "${rename_binary_to}"
FILE_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
else()
file(COPY "${archive_path}"
DESTINATION "${full_subdirectory}"
FILE_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
endif()
if("${rename_binary_to}" STREQUAL "")
file(COPY "${archive_path}"
DESTINATION "${full_subdirectory}"
FILE_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
else()
cmake_path(GET download_filename EXTENSION archive_extension)
string(TOLOWER "${archive_extension}" archive_extension)
if("${archive_extension}" MATCHES [[\.msi$]])
cmake_path(NATIVE_PATH archive_path archive_native_path)
cmake_path(NATIVE_PATH full_subdirectory destination_native_path)
vcpkg_execute_in_download_mode(
COMMAND msiexec
/a "${archive_native_path}"
/qn "TARGETDIR=${destination_native_path}"
WORKING_DIRECTORY "${DOWNLOADS}"
)
elseif("${archive_extension}" MATCHES [[\.7z\.exe$]])
vcpkg_find_acquire_program(7Z)
vcpkg_execute_in_download_mode(
COMMAND ${7Z} x
"${archive_path}"
"-o${full_subdirectory}"
-y -bso0 -bsp0
WORKING_DIRECTORY "${full_subdirectory}"
)
else()
vcpkg_execute_in_download_mode(
COMMAND "${CMAKE_COMMAND}" -E tar xzf "${archive_path}"
WORKING_DIRECTORY "${full_subdirectory}"
)
endif()
file(INSTALL "${archive_path}"
DESTINATION "${full_subdirectory}"
RENAME "${rename_binary_to}"
FILE_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
endif()
else()
vcpkg_extract_archive(ARCHIVE "${archive_path}" DESTINATION "${full_subdirectory}")
endif()
if(NOT "${post_install_command}" STREQUAL "")

View File

@ -4,93 +4,32 @@ function(vcpkg_from_sourceforge)
"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()
foreach(arg_name IN ITEMS OUT_SOURCE_PATH SHA512 REPO FILENAME)
if(NOT DEFINED "arg_${arg_name}")
message(FATAL_ERROR "${arg_name} is required.")
endif()
endforeach()
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)
if(DEFINED arg_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
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}
vcpkg_download_sourceforge(ARCHIVE
REPO "${arg_REPO}"
REF "${arg_REF}"
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()
set(working_directory_param "")
if(DEFINED arg_WORKING_DIRECTORY)
set(working_directory_param "WORKING_DIRECTORY" "${arg_WORKING_DIRECTORY}")
endif()

View File

@ -48,9 +48,11 @@ include("${SCRIPTS}/cmake/vcpkg_copy_pdbs.cmake")
include("${SCRIPTS}/cmake/vcpkg_copy_tool_dependencies.cmake")
include("${SCRIPTS}/cmake/vcpkg_copy_tools.cmake")
include("${SCRIPTS}/cmake/vcpkg_download_distfile.cmake")
include("${SCRIPTS}/cmake/vcpkg_download_sourceforge.cmake")
include("${SCRIPTS}/cmake/vcpkg_execute_build_process.cmake")
include("${SCRIPTS}/cmake/vcpkg_execute_required_process.cmake")
include("${SCRIPTS}/cmake/vcpkg_execute_required_process_repeat.cmake")
include("${SCRIPTS}/cmake/vcpkg_extract_archive.cmake")
include("${SCRIPTS}/cmake/vcpkg_extract_source_archive.cmake")
include("${SCRIPTS}/cmake/vcpkg_extract_source_archive_ex.cmake")
include("${SCRIPTS}/cmake/vcpkg_fail_port_install.cmake")