diff --git a/cmake/Set-Toolchain-vcpkg.cmake b/cmake/Set-Toolchain-vcpkg.cmake index dfca1dfe..f4dd5a82 100644 --- a/cmake/Set-Toolchain-vcpkg.cmake +++ b/cmake/Set-Toolchain-vcpkg.cmake @@ -225,48 +225,59 @@ function(vcpkg_is_installed vcpkg_exe pkg_name pkg_ver pkg_triplet powershell ou endforeach() endfunction() +function(get_triplet_package_list triplet) + if(EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html") + return() + endif() + + file( + DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" + STATUS pkg_list_status + ) + list(GET pkg_list_status 1 pkg_list_error) + list(GET pkg_list_status 0 pkg_list_status) + + if(NOT pkg_list_status EQUAL 0) + message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}") + return() + endif() +endfunction() + +function(download_package pkg pkgs_dir) + string(REGEX REPLACE "^[^_]+_[^_]+_([^.]+)[.]zip\$" "\\1" pkg_triplet ${pkg}) + + message(STATUS "Downloading https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg} ...") + + file( + DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg}" "${pkgs_dir}/${pkg}" + STATUS pkg_download_status + ) + list(GET pkg_download_status 1 pkg_download_error) + list(GET pkg_download_status 0 pkg_download_status) + + if(NOT pkg_download_status EQUAL 0) + message(STATUS "Failed to download vcpkg binary package '${pkg}': ${pkg_download_status} - ${pkg_download_error}") + return() + endif() + + message(STATUS "done.") +endfunction() + function(get_binary_packages vcpkg_exe) set(binary_packages_installed FALSE PARENT_SCOPE) - unset(triplets) - unset(host_triplet) - # Determine host triplet for vcpkg build dependencies - if(WIN32) - if($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Rr][Mm]64") - set(host_triplet "arm64-windows") - elseif($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Mm][Dd]64|[Xx]64") - set(host_triplet "x64-windows") - else() - set(host_triplet "x86-windows") - endif() + get_triplet_package_list(${VCPKG_TARGET_TRIPLET}) + + if(NOT EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${VCPKG_TARGET_TRIPLET}.html") + message(STATUS "Failed to download binary package list found for triplet '${VCPKG_TARGET_TRIPLET}', aborting.") + return() endif() - if(DEFINED host_triplet) - list(APPEND triplets ${host_triplet}) - endif() - list(APPEND triplets ${VCPKG_TARGET_TRIPLET}) - foreach(triplet ${triplets}) - file( - DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" - STATUS pkg_list_status - ) - list(GET pkg_list_status 1 pkg_list_error) - list(GET pkg_list_status 0 pkg_list_status) - - if(NOT pkg_list_status EQUAL 0) - message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}") - return() - endif() - endforeach() - - unset(binary_packages) - foreach(triplet ${triplets}) - file(READ "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" raw_html) - string(REGEX MATCHALL "