cmake: Limit vcpkg upgrades to one port per run.
In order to not overrun the appveyor time limit of one hour, limit vcpkg port upgrades to only the first port. This way the cache will be rebuilt gradually instead of all at once, and the job won't fail due to overrunning the time limit. Also do a bit of refactoring and code improvements for Set-Toolchain-vcpkg.cmake. Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This commit is contained in:
parent
6a8a9e6244
commit
47880ff9c6
|
@ -1,10 +1,34 @@
|
|||
macro(check_git_status)
|
||||
if(NOT git_status EQUAL 0)
|
||||
macro(vcpkg_check_git_status)
|
||||
if(NOT vcpkg_git_status EQUAL 0)
|
||||
message(FATAL_ERROR "Error updating vcpkg from git, please make sure git for windows is installed correctly, it can be installed from Visual Studio components")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
if(VCPKG_TARGET_TRIPLET)
|
||||
function(vcpkg_get_first_upgrade)
|
||||
# First get the list of upgraded ports.
|
||||
execute_process(
|
||||
COMMAND ${vcpkg_exe} upgrade
|
||||
OUTPUT_VARIABLE upgradable
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
|
||||
string(REGEX REPLACE "\r?\n" ";" upgrade_lines "${upgradable}")
|
||||
|
||||
foreach(line ${upgrade_lines})
|
||||
if(${line} MATCHES "^ [* ] ")
|
||||
string(REGEX REPLACE "^ [* ] " "" vcpkg_first_upgrade ${line})
|
||||
set(vcpkg_first_upgrade ${vcpkg_first_upgrade} PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
if(NOT DEFINED VCPKG_TARGET_TRIPLET)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED ENV{VCPKG_ROOT})
|
||||
if(WIN32)
|
||||
if(DEFINED ENV{CI} OR EXISTS /vcpkg)
|
||||
|
@ -28,11 +52,11 @@ if(VCPKG_TARGET_TRIPLET)
|
|||
|
||||
execute_process(
|
||||
COMMAND git clone https://github.com/microsoft/vcpkg.git
|
||||
RESULT_VARIABLE git_status
|
||||
RESULT_VARIABLE vcpkg_git_status
|
||||
WORKING_DIRECTORY ${vcpkg_root_parent}
|
||||
)
|
||||
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
else()
|
||||
# this is the case when we cache vcpkg/installed with the appveyor build cache
|
||||
if(NOT EXISTS ${VCPKG_ROOT}/.git)
|
||||
|
@ -48,50 +72,50 @@ if(VCPKG_TARGET_TRIPLET)
|
|||
|
||||
execute_process(
|
||||
COMMAND ${git_command}
|
||||
RESULT_VARIABLE git_status
|
||||
RESULT_VARIABLE vcpkg_git_status
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
endforeach()
|
||||
else()
|
||||
execute_process(
|
||||
COMMAND git fetch origin
|
||||
RESULT_VARIABLE git_status
|
||||
RESULT_VARIABLE vcpkg_git_status
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
|
||||
execute_process(
|
||||
COMMAND git status
|
||||
RESULT_VARIABLE git_status
|
||||
RESULT_VARIABLE vcpkg_git_status
|
||||
OUTPUT_VARIABLE git_status_text
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
|
||||
set(git_up_to_date FALSE)
|
||||
set(vcpkg_git_up_to_date FALSE)
|
||||
|
||||
if(git_status_text MATCHES "Your branch is up to date with")
|
||||
set(git_up_to_date TRUE)
|
||||
set(vcpkg_git_up_to_date TRUE)
|
||||
endif()
|
||||
|
||||
if(NOT git_up_to_date)
|
||||
if(NOT vcpkg_git_up_to_date)
|
||||
execute_process(
|
||||
COMMAND git pull --rebase
|
||||
RESULT_VARIABLE git_status
|
||||
RESULT_VARIABLE vcpkg_git_status
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
check_git_status()
|
||||
vcpkg_check_git_status()
|
||||
endif()
|
||||
|
||||
# build latest vcpkg, if needed
|
||||
if(NOT git_up_to_date)
|
||||
if(NOT vcpkg_git_up_to_date)
|
||||
if(WIN32)
|
||||
execute_process(
|
||||
COMMAND bootstrap-vcpkg.bat
|
||||
|
@ -127,11 +151,15 @@ if(VCPKG_TARGET_TRIPLET)
|
|||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
|
||||
# make sure we have the latest versions
|
||||
# If ports have been updated, rebuild cache one at a time to not overrun the CI time limit.
|
||||
vcpkg_get_first_upgrade()
|
||||
|
||||
if(DEFINED vcpkg_first_upgrade)
|
||||
execute_process(
|
||||
COMMAND ${vcpkg_exe} upgrade --no-dry-run
|
||||
COMMAND ${vcpkg_exe} upgrade --no-dry-run ${vcpkg_first_upgrade}
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(WIN32 AND VCPKG_TARGET_TRIPLET MATCHES x64 AND CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
set(CMAKE_GENERATOR_PLATFORM x64 CACHE STRING "visual studio build architecture" FORCE)
|
||||
|
@ -144,5 +172,5 @@ if(VCPKG_TARGET_TRIPLET)
|
|||
endif()
|
||||
|
||||
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake CACHE FILEPATH "vcpkg toolchain" FORCE)
|
||||
|
||||
include(${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue