mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-28 04:19:00 +08:00
Download Mode (#7950)
* [portfile functions] Override execute_process() to accept ALLOW_IN_DOWNLOAD_MODE option * [vcpkg install] Set VCPKG_DOWNLOAD_MODE when using --only-downloads option * [vcpkg_find_acquire_program] Allow in Download Mode * Don't stop when build fails for a package * Download sources for all packages in dependency graph * Improve output messages * Enable acquiring MSYS packages in download mode * Documentation * Update documentation * execute_process() always fails on Download Mode * Regenerate docs and fix formatting * Run clang-format * Use _execute_process on vcpkg_from_<source> helpers * Fix calls to _execute_process() when not in Download Mode
This commit is contained in:
parent
2d60eea045
commit
f5c732b40d
10
docs/maintainers/execute_process.md
Normal file
10
docs/maintainers/execute_process.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# execute_process
|
||||||
|
|
||||||
|
Intercepts all calls to execute_process() inside portfiles and fails when Download Mode
|
||||||
|
is enabled.
|
||||||
|
|
||||||
|
In order to execute a process in Download Mode call `_execute_process()` instead.
|
||||||
|
|
||||||
|
|
||||||
|
## Source
|
||||||
|
[scripts/cmake/execute_process.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/execute_process.cmake)
|
@ -1,6 +1,7 @@
|
|||||||
<!-- Run regenerate.ps1 to extract documentation from scripts\cmake\*.cmake -->
|
<!-- Run regenerate.ps1 to extract documentation from scripts\cmake\*.cmake -->
|
||||||
|
|
||||||
# Portfile helper functions
|
# Portfile helper functions
|
||||||
|
- [execute\_process](execute_process.md)
|
||||||
- [vcpkg\_acquire\_msys](vcpkg_acquire_msys.md)
|
- [vcpkg\_acquire\_msys](vcpkg_acquire_msys.md)
|
||||||
- [vcpkg\_add\_to\_path](vcpkg_add_to_path.md)
|
- [vcpkg\_add\_to\_path](vcpkg_add_to_path.md)
|
||||||
- [vcpkg\_apply\_patches](vcpkg_apply_patches.md)
|
- [vcpkg\_apply\_patches](vcpkg_apply_patches.md)
|
||||||
@ -9,6 +10,7 @@
|
|||||||
- [vcpkg\_check\_features](vcpkg_check_features.md)
|
- [vcpkg\_check\_features](vcpkg_check_features.md)
|
||||||
- [vcpkg\_check\_linkage](vcpkg_check_linkage.md)
|
- [vcpkg\_check\_linkage](vcpkg_check_linkage.md)
|
||||||
- [vcpkg\_clean\_msbuild](vcpkg_clean_msbuild.md)
|
- [vcpkg\_clean\_msbuild](vcpkg_clean_msbuild.md)
|
||||||
|
- [vcpkg\_common\_definitions](vcpkg_common_definitions.md)
|
||||||
- [vcpkg\_configure\_cmake](vcpkg_configure_cmake.md)
|
- [vcpkg\_configure\_cmake](vcpkg_configure_cmake.md)
|
||||||
- [vcpkg\_copy\_pdbs](vcpkg_copy_pdbs.md)
|
- [vcpkg\_copy\_pdbs](vcpkg_copy_pdbs.md)
|
||||||
- [vcpkg\_copy\_tool\_dependencies](vcpkg_copy_tool_dependencies.md)
|
- [vcpkg\_copy\_tool\_dependencies](vcpkg_copy_tool_dependencies.md)
|
||||||
@ -17,6 +19,7 @@
|
|||||||
- [vcpkg\_execute\_required\_process](vcpkg_execute_required_process.md)
|
- [vcpkg\_execute\_required\_process](vcpkg_execute_required_process.md)
|
||||||
- [vcpkg\_extract\_source\_archive](vcpkg_extract_source_archive.md)
|
- [vcpkg\_extract\_source\_archive](vcpkg_extract_source_archive.md)
|
||||||
- [vcpkg\_extract\_source\_archive\_ex](vcpkg_extract_source_archive_ex.md)
|
- [vcpkg\_extract\_source\_archive\_ex](vcpkg_extract_source_archive_ex.md)
|
||||||
|
- [vcpkg\_fail\_port\_install](vcpkg_fail_port_install.md)
|
||||||
- [vcpkg\_find\_acquire\_program](vcpkg_find_acquire_program.md)
|
- [vcpkg\_find\_acquire\_program](vcpkg_find_acquire_program.md)
|
||||||
- [vcpkg\_from\_bitbucket](vcpkg_from_bitbucket.md)
|
- [vcpkg\_from\_bitbucket](vcpkg_from_bitbucket.md)
|
||||||
- [vcpkg\_from\_git](vcpkg_from_git.md)
|
- [vcpkg\_from\_git](vcpkg_from_git.md)
|
||||||
|
19
docs/maintainers/vcpkg_common_definitions.md
Normal file
19
docs/maintainers/vcpkg_common_definitions.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# vcpkg_common_definitions
|
||||||
|
|
||||||
|
File contains helpful variabls for portfiles which are commonly needed or used.
|
||||||
|
|
||||||
|
## The following variables are available:
|
||||||
|
```cmake
|
||||||
|
VCPKG_TARGET_IS_<target> with <target> being one of the following: WINDOWS, UWP, LINUX, OSX, ANDROID, FREEBSD. only defined if <target>
|
||||||
|
VCPKG_TARGET_STATIC_LIBRARY_PREFIX static library prefix for target (same as CMAKE_STATIC_LIBRARY_PREFIX)
|
||||||
|
VCPKG_TARGET_STATIC_LIBRARY_SUFFIX static library suffix for target (same as CMAKE_STATIC_LIBRARY_SUFFIX)
|
||||||
|
VCPKG_TARGET_SHARED_LIBRARY_PREFIX shared library prefix for target (same as CMAKE_SHARED_LIBRARY_PREFIX)
|
||||||
|
VCPKG_TARGET_SHARED_LIBRARY_SUFFIX shared library suffix for target (same as CMAKE_SHARED_LIBRARY_SUFFIX)
|
||||||
|
```
|
||||||
|
|
||||||
|
CMAKE_STATIC_LIBRARY_PREFIX, CMAKE_STATIC_LIBRARY_SUFFIX, CMAKE_SHARED_LIBRARY_PREFIX, CMAKE_SHARED_LIBRARY_SUFFIX are defined for the target so that
|
||||||
|
portfiles are able to use find_library calls to discover dependent libraries within the current triplet for ports.
|
||||||
|
|
||||||
|
|
||||||
|
## Source
|
||||||
|
[scripts/cmake/vcpkg_common_definitions.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_common_definitions.cmake)
|
@ -11,6 +11,10 @@ vcpkg_execute_required_process(
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
## Parameters
|
## Parameters
|
||||||
|
### ALLOW_IN_DOWNLOAD_MODE
|
||||||
|
Allows the command to execute in Download Mode.
|
||||||
|
[See execute_process() override](../../scripts/cmake/execute_process.cmake).
|
||||||
|
|
||||||
### COMMAND
|
### COMMAND
|
||||||
The command to be executed, along with its arguments.
|
The command to be executed, along with its arguments.
|
||||||
|
|
||||||
|
34
docs/maintainers/vcpkg_fail_port_install.md
Normal file
34
docs/maintainers/vcpkg_fail_port_install.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# vcpkg_fail_port_install
|
||||||
|
|
||||||
|
Fails the current portfile with a (default) error message
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```cmake
|
||||||
|
vcpkg_fail_port_install([MESSAGE <message>] [ON_TARGET <target1> [<target2> ...]]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
### MESSAGE
|
||||||
|
Additional failure message. If non is given a default message will be displayed depending on the failure condition
|
||||||
|
|
||||||
|
### ALWAYS
|
||||||
|
will always fail early
|
||||||
|
|
||||||
|
### ON_TARGET
|
||||||
|
targets for which the build should fail early. Valid targets are <target> from VCPKG_IS_TARGET_<target> (see vcpkg_common_definitions.cmake)
|
||||||
|
|
||||||
|
### ON_ARCH
|
||||||
|
architecture for which the build should fail early.
|
||||||
|
|
||||||
|
### ON_CRT_LINKAGE
|
||||||
|
CRT linkage for which the build should fail early.
|
||||||
|
|
||||||
|
### ON_LIBRARY_LINKAGE
|
||||||
|
library linkage for which the build should fail early.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
* [aws-lambda-cpp](https://github.com/Microsoft/vcpkg/blob/master/ports/aws-lambda-cpp/portfile.cmake)
|
||||||
|
|
||||||
|
## Source
|
||||||
|
[scripts/cmake/vcpkg_fail_port_install.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_fail_port_install.cmake)
|
20
scripts/cmake/execute_process.cmake
Normal file
20
scripts/cmake/execute_process.cmake
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
## # execute_process
|
||||||
|
##
|
||||||
|
## Intercepts all calls to execute_process() inside portfiles and fails when Download Mode
|
||||||
|
## is enabled.
|
||||||
|
##
|
||||||
|
## In order to execute a process in Download Mode call `_execute_process()` instead.
|
||||||
|
##
|
||||||
|
if (NOT DEFINED OVERRIDEN_EXECUTE_PROCESS)
|
||||||
|
set(OVERRIDEN_EXECUTE_PROCESS ON)
|
||||||
|
|
||||||
|
if (DEFINED VCPKG_DOWNLOAD_MODE)
|
||||||
|
function(execute_process)
|
||||||
|
message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
|
||||||
|
endfunction()
|
||||||
|
else()
|
||||||
|
function(execute_process)
|
||||||
|
_execute_process(${ARGV})
|
||||||
|
endfunction()
|
||||||
|
endif()
|
||||||
|
endif()
|
@ -81,15 +81,15 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
|
|||||||
|
|
||||||
file(REMOVE_RECURSE ${TOOLPATH}/${TOOLSUBPATH})
|
file(REMOVE_RECURSE ${TOOLPATH}/${TOOLSUBPATH})
|
||||||
file(MAKE_DIRECTORY ${TOOLPATH})
|
file(MAKE_DIRECTORY ${TOOLPATH})
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
|
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
|
||||||
WORKING_DIRECTORY ${TOOLPATH}
|
WORKING_DIRECTORY ${TOOLPATH}
|
||||||
)
|
)
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman-key --init;pacman-key --populate"
|
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman-key --init;pacman-key --populate"
|
||||||
WORKING_DIRECTORY ${TOOLPATH}
|
WORKING_DIRECTORY ${TOOLPATH}
|
||||||
)
|
)
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman -Syu --noconfirm"
|
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman -Syu --noconfirm"
|
||||||
WORKING_DIRECTORY ${TOOLPATH}
|
WORKING_DIRECTORY ${TOOLPATH}
|
||||||
)
|
)
|
||||||
@ -104,6 +104,7 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
|
|||||||
set(_ENV_ORIGINAL $ENV{PATH})
|
set(_ENV_ORIGINAL $ENV{PATH})
|
||||||
set(ENV{PATH} ${PATH_TO_ROOT}/usr/bin)
|
set(ENV{PATH} ${PATH_TO_ROOT}/usr/bin)
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "pacman -Sy --noconfirm --needed ${_am_PACKAGES}"
|
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "pacman -Sy --noconfirm --needed ${_am_PACKAGES}"
|
||||||
WORKING_DIRECTORY ${TOOLPATH}
|
WORKING_DIRECTORY ${TOOLPATH}
|
||||||
LOGNAME msys-pacman-${TARGET_TRIPLET}
|
LOGNAME msys-pacman-${TARGET_TRIPLET}
|
||||||
@ -116,6 +117,7 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
|
|||||||
# Deal with a stale process created by MSYS
|
# Deal with a stale process created by MSYS
|
||||||
if (NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
if (NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND TASKKILL /F /IM gpg-agent.exe /fi "memusage gt 2"
|
COMMAND TASKKILL /F /IM gpg-agent.exe /fi "memusage gt 2"
|
||||||
WORKING_DIRECTORY ${SOURCE_PATH}
|
WORKING_DIRECTORY ${SOURCE_PATH}
|
||||||
)
|
)
|
||||||
|
@ -40,7 +40,7 @@ function(vcpkg_apply_patches)
|
|||||||
get_filename_component(ABSOLUTE_PATCH "${PATCH}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
|
get_filename_component(ABSOLUTE_PATCH "${PATCH}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
|
||||||
message(STATUS "Applying patch ${PATCH}")
|
message(STATUS "Applying patch ${PATCH}")
|
||||||
set(LOGNAME patch-${TARGET_TRIPLET}-${PATCHNUM})
|
set(LOGNAME patch-${TARGET_TRIPLET}-${PATCHNUM})
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${GIT} --work-tree=. --git-dir=.git apply "${ABSOLUTE_PATCH}" --ignore-whitespace --whitespace=nowarn --verbose
|
COMMAND ${GIT} --work-tree=. --git-dir=.git apply "${ABSOLUTE_PATCH}" --ignore-whitespace --whitespace=nowarn --verbose
|
||||||
OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-out.log
|
OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-out.log
|
||||||
ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-err.log
|
ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-err.log
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
include(execute_process)
|
||||||
include(vcpkg_acquire_msys)
|
include(vcpkg_acquire_msys)
|
||||||
include(vcpkg_add_to_path)
|
include(vcpkg_add_to_path)
|
||||||
include(vcpkg_check_features)
|
include(vcpkg_check_features)
|
||||||
|
@ -120,7 +120,7 @@ function(vcpkg_download_distfile VAR)
|
|||||||
list(APPEND request_headers "--header=${header}")
|
list(APPEND request_headers "--header=${header}")
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${ARIA2} ${vcpkg_download_distfile_URLS}
|
COMMAND ${ARIA2} ${vcpkg_download_distfile_URLS}
|
||||||
-o temp/${vcpkg_download_distfile_FILENAME}
|
-o temp/${vcpkg_download_distfile_FILENAME}
|
||||||
-l download-${vcpkg_download_distfile_FILENAME}-detailed.log
|
-l download-${vcpkg_download_distfile_FILENAME}-detailed.log
|
||||||
|
@ -11,6 +11,10 @@
|
|||||||
## )
|
## )
|
||||||
## ```
|
## ```
|
||||||
## ## Parameters
|
## ## Parameters
|
||||||
|
## ### ALLOW_IN_DOWNLOAD_MODE
|
||||||
|
## Allows the command to execute in Download Mode.
|
||||||
|
## [See execute_process() override](../../scripts/cmake/execute_process.cmake).
|
||||||
|
##
|
||||||
## ### COMMAND
|
## ### COMMAND
|
||||||
## The command to be executed, along with its arguments.
|
## The command to be executed, along with its arguments.
|
||||||
##
|
##
|
||||||
@ -30,10 +34,20 @@
|
|||||||
## * [qt5](https://github.com/Microsoft/vcpkg/blob/master/ports/qt5/portfile.cmake)
|
## * [qt5](https://github.com/Microsoft/vcpkg/blob/master/ports/qt5/portfile.cmake)
|
||||||
include(vcpkg_prettify_command)
|
include(vcpkg_prettify_command)
|
||||||
function(vcpkg_execute_required_process)
|
function(vcpkg_execute_required_process)
|
||||||
cmake_parse_arguments(vcpkg_execute_required_process "" "WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
|
cmake_parse_arguments(vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
|
||||||
set(LOG_OUT "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-out.log")
|
set(LOG_OUT "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-out.log")
|
||||||
set(LOG_ERR "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-err.log")
|
set(LOG_ERR "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-err.log")
|
||||||
execute_process(
|
|
||||||
|
set(execute_process_function execute_process)
|
||||||
|
if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_ALLOW_IN_DOWNLOAD_MODE)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
[[
|
||||||
|
This command cannot be executed in Download Mode.
|
||||||
|
Halting portfile execution.
|
||||||
|
]])
|
||||||
|
endif()
|
||||||
|
|
||||||
|
_execute_process(
|
||||||
COMMAND ${vcpkg_execute_required_process_COMMAND}
|
COMMAND ${vcpkg_execute_required_process_COMMAND}
|
||||||
OUTPUT_FILE ${LOG_OUT}
|
OUTPUT_FILE ${LOG_OUT}
|
||||||
ERROR_FILE ${LOG_ERR}
|
ERROR_FILE ${LOG_ERR}
|
||||||
|
@ -41,6 +41,7 @@ function(vcpkg_extract_source_archive ARCHIVE)
|
|||||||
message(STATUS "Extracting source ${ARCHIVE}")
|
message(STATUS "Extracting source ${ARCHIVE}")
|
||||||
file(MAKE_DIRECTORY ${WORKING_DIRECTORY})
|
file(MAKE_DIRECTORY ${WORKING_DIRECTORY})
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar xjf ${ARCHIVE}
|
COMMAND ${CMAKE_COMMAND} -E tar xjf ${ARCHIVE}
|
||||||
WORKING_DIRECTORY ${WORKING_DIRECTORY}
|
WORKING_DIRECTORY ${WORKING_DIRECTORY}
|
||||||
LOGNAME extract
|
LOGNAME extract
|
||||||
|
@ -302,12 +302,12 @@ function(vcpkg_find_acquire_program VAR)
|
|||||||
if(ARCHIVE_EXTENSION STREQUAL ".msi")
|
if(ARCHIVE_EXTENSION STREQUAL ".msi")
|
||||||
file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH)
|
file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH)
|
||||||
file(TO_NATIVE_PATH "${PROG_PATH_SUBDIR}" DESTINATION_NATIVE_PATH)
|
file(TO_NATIVE_PATH "${PROG_PATH_SUBDIR}" DESTINATION_NATIVE_PATH)
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
|
COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
|
||||||
WORKING_DIRECTORY ${DOWNLOADS}
|
WORKING_DIRECTORY ${DOWNLOADS}
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
|
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
|
||||||
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
||||||
)
|
)
|
||||||
@ -316,6 +316,7 @@ function(vcpkg_find_acquire_program VAR)
|
|||||||
|
|
||||||
if(DEFINED POST_INSTALL_COMMAND)
|
if(DEFINED POST_INSTALL_COMMAND)
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${POST_INSTALL_COMMAND}
|
COMMAND ${POST_INSTALL_COMMAND}
|
||||||
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
||||||
LOGNAME ${VAR}-tool-post-install
|
LOGNAME ${VAR}-tool-post-install
|
||||||
|
@ -74,16 +74,18 @@ function(vcpkg_from_git)
|
|||||||
find_program(GIT NAMES git git.cmd)
|
find_program(GIT NAMES git git.cmd)
|
||||||
# Note: git init is safe to run multiple times
|
# Note: git init is safe to run multiple times
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${GIT} init git-tmp
|
COMMAND ${GIT} init git-tmp
|
||||||
WORKING_DIRECTORY ${DOWNLOADS}
|
WORKING_DIRECTORY ${DOWNLOADS}
|
||||||
LOGNAME git-init-${TARGET_TRIPLET}
|
LOGNAME git-init-${TARGET_TRIPLET}
|
||||||
)
|
)
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${GIT} fetch ${_vdud_URL} ${_vdud_REF} --depth 1 -n
|
COMMAND ${GIT} fetch ${_vdud_URL} ${_vdud_REF} --depth 1 -n
|
||||||
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
||||||
LOGNAME git-fetch-${TARGET_TRIPLET}
|
LOGNAME git-fetch-${TARGET_TRIPLET}
|
||||||
)
|
)
|
||||||
execute_process(
|
_execute_process(
|
||||||
COMMAND ${GIT} rev-parse FETCH_HEAD
|
COMMAND ${GIT} rev-parse FETCH_HEAD
|
||||||
OUTPUT_VARIABLE REV_PARSE_HEAD
|
OUTPUT_VARIABLE REV_PARSE_HEAD
|
||||||
ERROR_VARIABLE REV_PARSE_HEAD
|
ERROR_VARIABLE REV_PARSE_HEAD
|
||||||
@ -100,6 +102,7 @@ function(vcpkg_from_git)
|
|||||||
|
|
||||||
file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
|
file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
|
||||||
vcpkg_execute_required_process(
|
vcpkg_execute_required_process(
|
||||||
|
ALLOW_IN_DOWNLOAD_MODE
|
||||||
COMMAND ${GIT} archive FETCH_HEAD -o "${TEMP_ARCHIVE}"
|
COMMAND ${GIT} archive FETCH_HEAD -o "${TEMP_ARCHIVE}"
|
||||||
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
||||||
LOGNAME git-archive
|
LOGNAME git-archive
|
||||||
|
@ -150,7 +150,7 @@ function(vcpkg_from_gitlab)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# There are issues with the Gitlab API project paths being URL-escaped, so we use git here to get the head revision
|
# There are issues with the Gitlab API project paths being URL-escaped, so we use git here to get the head revision
|
||||||
execute_process(COMMAND ${GIT} ls-remote
|
_execute_process(COMMAND ${GIT} ls-remote
|
||||||
"${_vdud_GITLAB_URL}/${ORG_NAME}/${REPO_NAME}.git" "${_vdud_HEAD_REF}"
|
"${_vdud_GITLAB_URL}/${ORG_NAME}/${REPO_NAME}.git" "${_vdud_HEAD_REF}"
|
||||||
RESULT_VARIABLE _git_result
|
RESULT_VARIABLE _git_result
|
||||||
OUTPUT_VARIABLE _git_output
|
OUTPUT_VARIABLE _git_output
|
||||||
|
@ -21,59 +21,4 @@ function(vcpkg_test_cmake)
|
|||||||
# 2. Select a generator in the same method as vcpkg_configure_cmake() as though the PREFER_NINJA flag was always passed.
|
# 2. Select a generator in the same method as vcpkg_configure_cmake() as though the PREFER_NINJA flag was always passed.
|
||||||
# 3. Fully emulate the toolchain file for the just-built package (just adding it to CMAKE_PREFIX_PATH is not enough).
|
# 3. Fully emulate the toolchain file for the just-built package (just adding it to CMAKE_PREFIX_PATH is not enough).
|
||||||
return()
|
return()
|
||||||
|
|
||||||
cmake_parse_arguments(_tc "MODULE" "PACKAGE_NAME" "" ${ARGN})
|
|
||||||
|
|
||||||
if(NOT DEFINED _tc_PACKAGE_NAME)
|
|
||||||
message(FATAL_ERROR "PACKAGE_NAME must be specified")
|
|
||||||
endif()
|
|
||||||
if(_tc_MODULE)
|
|
||||||
set(PACKAGE_TYPE MODULE)
|
|
||||||
else()
|
|
||||||
set(PACKAGE_TYPE CONFIG)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
|
|
||||||
message(STATUS "Skipping CMake integration test due to v142 / CMake interaction issues")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Performing CMake integration test")
|
|
||||||
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
|
|
||||||
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
|
|
||||||
|
|
||||||
#Generate Dummy source
|
|
||||||
# set(VCPKG_TEST_SOURCE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test/CMakeIntegration.cpp)
|
|
||||||
# file(WRITE ${VCPKG_TEST_SOURCE} "int main() \{\n")
|
|
||||||
# file(APPEND ${VCPKG_TEST_SOURCE} "return 0;}")
|
|
||||||
# Generate test source CMakeLists.txt
|
|
||||||
set(VCPKG_TEST_CMAKELIST ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test/CMakeLists.txt)
|
|
||||||
file(WRITE ${VCPKG_TEST_CMAKELIST} "cmake_minimum_required(VERSION 3.10)\n")
|
|
||||||
file(APPEND ${VCPKG_TEST_CMAKELIST} "set(CMAKE_PREFIX_PATH \"${CURRENT_PACKAGES_DIR};${CURRENT_INSTALLED_DIR}\")\n")
|
|
||||||
file(APPEND ${VCPKG_TEST_CMAKELIST} "\n")
|
|
||||||
file(APPEND ${VCPKG_TEST_CMAKELIST} "find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)\n")
|
|
||||||
#To properly test if the package is actually working haveway correctly we have to link all targets of a package to
|
|
||||||
#a test executable and than actually build it. This will not discover if every symbol exported by the library is available/linked
|
|
||||||
#but it will doscover if all files which are linked by a target actual exist. Problem is: How to discover all targets?
|
|
||||||
# file(APPEND ${VCPKG_TEST_CMAKELIST} "add_executable(${_tc_PACKAGE_NAME}_exe ${VCPKG_TEST_SOURCE})\n")
|
|
||||||
# file(APPEND ${VCPKG_TEST_CMAKELIST} "target_link_libraries(${_tc_PACKAGE_NAME}_exe PRIVATE ${_tc_PACKAGE_NAME})\n")
|
|
||||||
|
|
||||||
if(DEFINED _VCPKG_CMAKE_GENERATOR)
|
|
||||||
set(VCPKG_CMAKE_TEST_GENERATOR "${_VCPKG_CMAKE_GENERATOR}")
|
|
||||||
else()
|
|
||||||
set(VCPKG_CMAKE_TEST_GENERATOR Ninja)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Run cmake config with a generated CMakeLists.txt
|
|
||||||
set(LOGPREFIX "${CURRENT_BUILDTREES_DIR}/test-cmake-${TARGET_TRIPLET}")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -G ${VCPKG_CMAKE_TEST_GENERATOR} .
|
|
||||||
OUTPUT_FILE "${LOGPREFIX}-out.log"
|
|
||||||
ERROR_FILE "${LOGPREFIX}-err.log"
|
|
||||||
RESULT_VARIABLE error_code
|
|
||||||
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test
|
|
||||||
)
|
|
||||||
if(error_code)
|
|
||||||
message(FATAL_ERROR "CMake integration test failed; unable to find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
@ -1 +1 @@
|
|||||||
"2019.08.23"
|
"2019.08.27"
|
||||||
|
@ -39,6 +39,12 @@ namespace vcpkg::Build
|
|||||||
YES
|
YES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class OnlyDownloads
|
||||||
|
{
|
||||||
|
NO = 0,
|
||||||
|
YES
|
||||||
|
};
|
||||||
|
|
||||||
enum class CleanBuildtrees
|
enum class CleanBuildtrees
|
||||||
{
|
{
|
||||||
NO = 0,
|
NO = 0,
|
||||||
@ -86,6 +92,7 @@ namespace vcpkg::Build
|
|||||||
{
|
{
|
||||||
UseHeadVersion use_head_version;
|
UseHeadVersion use_head_version;
|
||||||
AllowDownloads allow_downloads;
|
AllowDownloads allow_downloads;
|
||||||
|
OnlyDownloads only_downloads;
|
||||||
CleanBuildtrees clean_buildtrees;
|
CleanBuildtrees clean_buildtrees;
|
||||||
CleanPackages clean_packages;
|
CleanPackages clean_packages;
|
||||||
CleanDownloads clean_downloads;
|
CleanDownloads clean_downloads;
|
||||||
@ -103,6 +110,7 @@ namespace vcpkg::Build
|
|||||||
FILE_CONFLICTS,
|
FILE_CONFLICTS,
|
||||||
CASCADED_DUE_TO_MISSING_DEPENDENCIES,
|
CASCADED_DUE_TO_MISSING_DEPENDENCIES,
|
||||||
EXCLUDED,
|
EXCLUDED,
|
||||||
|
DOWNLOADED
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::array<BuildResult, 6> BUILD_RESULT_VALUES = {
|
static constexpr std::array<BuildResult, 6> BUILD_RESULT_VALUES = {
|
||||||
|
@ -53,6 +53,7 @@ namespace vcpkg::Build::Command
|
|||||||
const Build::BuildPackageOptions build_package_options{
|
const Build::BuildPackageOptions build_package_options{
|
||||||
Build::UseHeadVersion::NO,
|
Build::UseHeadVersion::NO,
|
||||||
Build::AllowDownloads::YES,
|
Build::AllowDownloads::YES,
|
||||||
|
Build::OnlyDownloads::NO,
|
||||||
Build::CleanBuildtrees::NO,
|
Build::CleanBuildtrees::NO,
|
||||||
Build::CleanPackages::NO,
|
Build::CleanPackages::NO,
|
||||||
Build::CleanDownloads::NO,
|
Build::CleanDownloads::NO,
|
||||||
@ -407,6 +408,11 @@ namespace vcpkg::Build
|
|||||||
{"VCPKG_CONCURRENCY", std::to_string(get_concurrency())},
|
{"VCPKG_CONCURRENCY", std::to_string(get_concurrency())},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (Util::Enum::to_bool(config.build_package_options.only_downloads))
|
||||||
|
{
|
||||||
|
variables.push_back({"VCPKG_DOWNLOAD_MODE", "true"});
|
||||||
|
}
|
||||||
|
|
||||||
if (!System::get_environment_variable("VCPKG_FORCE_SYSTEM_BINARIES").has_value())
|
if (!System::get_environment_variable("VCPKG_FORCE_SYSTEM_BINARIES").has_value())
|
||||||
{
|
{
|
||||||
variables.push_back({"GIT", git_exe_path});
|
variables.push_back({"GIT", git_exe_path});
|
||||||
@ -528,6 +534,7 @@ namespace vcpkg::Build
|
|||||||
const BuildPackageConfig& config)
|
const BuildPackageConfig& config)
|
||||||
{
|
{
|
||||||
auto& fs = paths.get_filesystem();
|
auto& fs = paths.get_filesystem();
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
const fs::path& powershell_exe_path = paths.get_tool_exe("powershell-core");
|
const fs::path& powershell_exe_path = paths.get_tool_exe("powershell-core");
|
||||||
if (!fs.exists(powershell_exe_path.parent_path() / "powershell.exe"))
|
if (!fs.exists(powershell_exe_path.parent_path() / "powershell.exe"))
|
||||||
@ -559,6 +566,14 @@ namespace vcpkg::Build
|
|||||||
#else
|
#else
|
||||||
const int return_code = System::cmd_execute_clean(command, env);
|
const int return_code = System::cmd_execute_clean(command, env);
|
||||||
#endif
|
#endif
|
||||||
|
// With the exception of empty packages, builds in "Download Mode" always result in failure.
|
||||||
|
if (config.build_package_options.only_downloads == Build::OnlyDownloads::YES)
|
||||||
|
{
|
||||||
|
// TODO: Capture executed command output and evaluate whether the failure was intended.
|
||||||
|
// If an unintended error occurs then return a BuildResult::DOWNLOAD_FAILURE status.
|
||||||
|
return BuildResult::DOWNLOADED;
|
||||||
|
}
|
||||||
|
|
||||||
const auto buildtimeus = timer.microseconds();
|
const auto buildtimeus = timer.microseconds();
|
||||||
const auto spec_string = spec.to_string();
|
const auto spec_string = spec.to_string();
|
||||||
|
|
||||||
@ -793,20 +808,23 @@ namespace vcpkg::Build
|
|||||||
const std::string& name = config.scf.core_paragraph->name;
|
const std::string& name = config.scf.core_paragraph->name;
|
||||||
|
|
||||||
std::vector<FeatureSpec> required_fspecs = compute_required_feature_specs(config, status_db);
|
std::vector<FeatureSpec> required_fspecs = compute_required_feature_specs(config, status_db);
|
||||||
std::vector<FeatureSpec> required_fspecs_copy = required_fspecs;
|
|
||||||
|
|
||||||
// extract out the actual package ids
|
// extract out the actual package ids
|
||||||
auto dep_pspecs = Util::fmap(required_fspecs, [](FeatureSpec const& fspec) { return fspec.spec(); });
|
auto dep_pspecs = Util::fmap(required_fspecs, [](FeatureSpec const& fspec) { return fspec.spec(); });
|
||||||
Util::sort_unique_erase(dep_pspecs);
|
Util::sort_unique_erase(dep_pspecs);
|
||||||
|
|
||||||
// Find all features that aren't installed. This mutates required_fspecs.
|
// Find all features that aren't installed. This mutates required_fspecs.
|
||||||
Util::erase_remove_if(required_fspecs, [&](FeatureSpec const& fspec) {
|
// Skip this validation when running in Download Mode.
|
||||||
return status_db.is_installed(fspec) || fspec.name() == name;
|
if (config.build_package_options.only_downloads != Build::OnlyDownloads::YES)
|
||||||
});
|
|
||||||
|
|
||||||
if (!required_fspecs.empty())
|
|
||||||
{
|
{
|
||||||
return {BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES, std::move(required_fspecs)};
|
Util::erase_remove_if(required_fspecs, [&](FeatureSpec const& fspec) {
|
||||||
|
return status_db.is_installed(fspec) || fspec.name() == name;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!required_fspecs.empty())
|
||||||
|
{
|
||||||
|
return {BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES, std::move(required_fspecs)};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const PackageSpec spec =
|
const PackageSpec spec =
|
||||||
@ -817,7 +835,10 @@ namespace vcpkg::Build
|
|||||||
// dep_pspecs was not destroyed
|
// dep_pspecs was not destroyed
|
||||||
for (auto&& pspec : dep_pspecs)
|
for (auto&& pspec : dep_pspecs)
|
||||||
{
|
{
|
||||||
if (pspec == spec) continue;
|
if (pspec == spec || Util::Enum::to_bool(config.build_package_options.only_downloads))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const auto status_it = status_db.find_installed(pspec);
|
const auto status_it = status_db.find_installed(pspec);
|
||||||
Checks::check_exit(VCPKG_LINE_INFO, status_it != status_db.end());
|
Checks::check_exit(VCPKG_LINE_INFO, status_it != status_db.end());
|
||||||
dependency_abis.emplace_back(
|
dependency_abis.emplace_back(
|
||||||
@ -949,6 +970,7 @@ namespace vcpkg::Build
|
|||||||
static const std::string POST_BUILD_CHECKS_FAILED_STRING = "POST_BUILD_CHECKS_FAILED";
|
static const std::string POST_BUILD_CHECKS_FAILED_STRING = "POST_BUILD_CHECKS_FAILED";
|
||||||
static const std::string CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING = "CASCADED_DUE_TO_MISSING_DEPENDENCIES";
|
static const std::string CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING = "CASCADED_DUE_TO_MISSING_DEPENDENCIES";
|
||||||
static const std::string EXCLUDED_STRING = "EXCLUDED";
|
static const std::string EXCLUDED_STRING = "EXCLUDED";
|
||||||
|
static const std::string DOWNLOADED_STRING = "DOWNLOADED";
|
||||||
|
|
||||||
switch (build_result)
|
switch (build_result)
|
||||||
{
|
{
|
||||||
@ -959,6 +981,7 @@ namespace vcpkg::Build
|
|||||||
case BuildResult::FILE_CONFLICTS: return FILE_CONFLICTS_STRING;
|
case BuildResult::FILE_CONFLICTS: return FILE_CONFLICTS_STRING;
|
||||||
case BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES: return CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING;
|
case BuildResult::CASCADED_DUE_TO_MISSING_DEPENDENCIES: return CASCADED_DUE_TO_MISSING_DEPENDENCIES_STRING;
|
||||||
case BuildResult::EXCLUDED: return EXCLUDED_STRING;
|
case BuildResult::EXCLUDED: return EXCLUDED_STRING;
|
||||||
|
case BuildResult::DOWNLOADED: return DOWNLOADED_STRING;
|
||||||
default: Checks::unreachable(VCPKG_LINE_INFO);
|
default: Checks::unreachable(VCPKG_LINE_INFO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,6 +212,7 @@ namespace vcpkg::Commands::CI
|
|||||||
const Build::BuildPackageOptions build_options = {
|
const Build::BuildPackageOptions build_options = {
|
||||||
Build::UseHeadVersion::NO,
|
Build::UseHeadVersion::NO,
|
||||||
Build::AllowDownloads::YES,
|
Build::AllowDownloads::YES,
|
||||||
|
Build::OnlyDownloads::NO,
|
||||||
Build::CleanBuildtrees::YES,
|
Build::CleanBuildtrees::YES,
|
||||||
Build::CleanPackages::YES,
|
Build::CleanPackages::YES,
|
||||||
Build::CleanDownloads::NO,
|
Build::CleanDownloads::NO,
|
||||||
@ -356,6 +357,7 @@ namespace vcpkg::Commands::CI
|
|||||||
const Build::BuildPackageOptions install_plan_options = {
|
const Build::BuildPackageOptions install_plan_options = {
|
||||||
Build::UseHeadVersion::NO,
|
Build::UseHeadVersion::NO,
|
||||||
Build::AllowDownloads::YES,
|
Build::AllowDownloads::YES,
|
||||||
|
Build::OnlyDownloads::NO,
|
||||||
Build::CleanBuildtrees::YES,
|
Build::CleanBuildtrees::YES,
|
||||||
Build::CleanPackages::YES,
|
Build::CleanPackages::YES,
|
||||||
Build::CleanDownloads::NO,
|
Build::CleanDownloads::NO,
|
||||||
|
@ -154,6 +154,7 @@ namespace vcpkg::Commands::Upgrade
|
|||||||
const Build::BuildPackageOptions install_plan_options = {
|
const Build::BuildPackageOptions install_plan_options = {
|
||||||
Build::UseHeadVersion::NO,
|
Build::UseHeadVersion::NO,
|
||||||
Build::AllowDownloads::YES,
|
Build::AllowDownloads::YES,
|
||||||
|
Build::OnlyDownloads::NO,
|
||||||
Build::CleanBuildtrees::NO,
|
Build::CleanBuildtrees::NO,
|
||||||
Build::CleanPackages::NO,
|
Build::CleanPackages::NO,
|
||||||
Build::CleanDownloads::NO,
|
Build::CleanDownloads::NO,
|
||||||
|
@ -73,6 +73,7 @@ namespace vcpkg::Export
|
|||||||
static constexpr Build::BuildPackageOptions BUILD_OPTIONS = {
|
static constexpr Build::BuildPackageOptions BUILD_OPTIONS = {
|
||||||
Build::UseHeadVersion::NO,
|
Build::UseHeadVersion::NO,
|
||||||
Build::AllowDownloads::YES,
|
Build::AllowDownloads::YES,
|
||||||
|
Build::OnlyDownloads::NO,
|
||||||
Build::CleanBuildtrees::NO,
|
Build::CleanBuildtrees::NO,
|
||||||
Build::CleanPackages::NO,
|
Build::CleanPackages::NO,
|
||||||
Build::CleanDownloads::NO,
|
Build::CleanDownloads::NO,
|
||||||
|
@ -342,6 +342,13 @@ namespace vcpkg::Install
|
|||||||
return Build::build_package(paths, build_config, status_db);
|
return Build::build_package(paths, build_config, status_db);
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
if (BuildResult::DOWNLOADED == result.code)
|
||||||
|
{
|
||||||
|
System::print2(
|
||||||
|
System::Color::success, "Downloaded sources for package ", display_name_with_features, "\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (result.code != Build::BuildResult::SUCCEEDED)
|
if (result.code != Build::BuildResult::SUCCEEDED)
|
||||||
{
|
{
|
||||||
System::print2(System::Color::error, Build::create_error_message(result.code, action.spec), "\n");
|
System::print2(System::Color::error, Build::create_error_message(result.code, action.spec), "\n");
|
||||||
@ -467,16 +474,18 @@ namespace vcpkg::Install
|
|||||||
static constexpr StringLiteral OPTION_DRY_RUN = "--dry-run";
|
static constexpr StringLiteral OPTION_DRY_RUN = "--dry-run";
|
||||||
static constexpr StringLiteral OPTION_USE_HEAD_VERSION = "--head";
|
static constexpr StringLiteral OPTION_USE_HEAD_VERSION = "--head";
|
||||||
static constexpr StringLiteral OPTION_NO_DOWNLOADS = "--no-downloads";
|
static constexpr StringLiteral OPTION_NO_DOWNLOADS = "--no-downloads";
|
||||||
|
static constexpr StringLiteral OPTION_ONLY_DOWNLOADS = "--only-downloads";
|
||||||
static constexpr StringLiteral OPTION_RECURSE = "--recurse";
|
static constexpr StringLiteral OPTION_RECURSE = "--recurse";
|
||||||
static constexpr StringLiteral OPTION_KEEP_GOING = "--keep-going";
|
static constexpr StringLiteral OPTION_KEEP_GOING = "--keep-going";
|
||||||
static constexpr StringLiteral OPTION_XUNIT = "--x-xunit";
|
static constexpr StringLiteral OPTION_XUNIT = "--x-xunit";
|
||||||
static constexpr StringLiteral OPTION_USE_ARIA2 = "--x-use-aria2";
|
static constexpr StringLiteral OPTION_USE_ARIA2 = "--x-use-aria2";
|
||||||
static constexpr StringLiteral OPTION_CLEAN_AFTER_BUILD = "--clean-after-build";
|
static constexpr StringLiteral OPTION_CLEAN_AFTER_BUILD = "--clean-after-build";
|
||||||
|
|
||||||
static constexpr std::array<CommandSwitch, 7> INSTALL_SWITCHES = {{
|
static constexpr std::array<CommandSwitch, 8> INSTALL_SWITCHES = {{
|
||||||
{OPTION_DRY_RUN, "Do not actually build or install"},
|
{OPTION_DRY_RUN, "Do not actually build or install"},
|
||||||
{OPTION_USE_HEAD_VERSION, "Install the libraries on the command line using the latest upstream sources"},
|
{OPTION_USE_HEAD_VERSION, "Install the libraries on the command line using the latest upstream sources"},
|
||||||
{OPTION_NO_DOWNLOADS, "Do not download new sources"},
|
{OPTION_NO_DOWNLOADS, "Do not download new sources"},
|
||||||
|
{OPTION_ONLY_DOWNLOADS, "Download sources but don't build packages"},
|
||||||
{OPTION_RECURSE, "Allow removal of packages as part of installation"},
|
{OPTION_RECURSE, "Allow removal of packages as part of installation"},
|
||||||
{OPTION_KEEP_GOING, "Continue installing packages on failure"},
|
{OPTION_KEEP_GOING, "Continue installing packages on failure"},
|
||||||
{OPTION_USE_ARIA2, "Use aria2 to perform download tasks"},
|
{OPTION_USE_ARIA2, "Use aria2 to perform download tasks"},
|
||||||
@ -631,10 +640,12 @@ namespace vcpkg::Install
|
|||||||
const bool dry_run = Util::Sets::contains(options.switches, OPTION_DRY_RUN);
|
const bool dry_run = Util::Sets::contains(options.switches, OPTION_DRY_RUN);
|
||||||
const bool use_head_version = Util::Sets::contains(options.switches, (OPTION_USE_HEAD_VERSION));
|
const bool use_head_version = Util::Sets::contains(options.switches, (OPTION_USE_HEAD_VERSION));
|
||||||
const bool no_downloads = Util::Sets::contains(options.switches, (OPTION_NO_DOWNLOADS));
|
const bool no_downloads = Util::Sets::contains(options.switches, (OPTION_NO_DOWNLOADS));
|
||||||
|
const bool only_downloads = Util::Sets::contains(options.switches, (OPTION_ONLY_DOWNLOADS));
|
||||||
const bool is_recursive = Util::Sets::contains(options.switches, (OPTION_RECURSE));
|
const bool is_recursive = Util::Sets::contains(options.switches, (OPTION_RECURSE));
|
||||||
const bool use_aria2 = Util::Sets::contains(options.switches, (OPTION_USE_ARIA2));
|
const bool use_aria2 = Util::Sets::contains(options.switches, (OPTION_USE_ARIA2));
|
||||||
const bool clean_after_build = Util::Sets::contains(options.switches, (OPTION_CLEAN_AFTER_BUILD));
|
const bool clean_after_build = Util::Sets::contains(options.switches, (OPTION_CLEAN_AFTER_BUILD));
|
||||||
const KeepGoing keep_going = to_keep_going(Util::Sets::contains(options.switches, OPTION_KEEP_GOING));
|
const KeepGoing keep_going =
|
||||||
|
to_keep_going(Util::Sets::contains(options.switches, OPTION_KEEP_GOING) || only_downloads);
|
||||||
|
|
||||||
auto& fs = paths.get_filesystem();
|
auto& fs = paths.get_filesystem();
|
||||||
|
|
||||||
@ -647,11 +658,12 @@ namespace vcpkg::Install
|
|||||||
const Build::BuildPackageOptions install_plan_options = {
|
const Build::BuildPackageOptions install_plan_options = {
|
||||||
Util::Enum::to_enum<Build::UseHeadVersion>(use_head_version),
|
Util::Enum::to_enum<Build::UseHeadVersion>(use_head_version),
|
||||||
Util::Enum::to_enum<Build::AllowDownloads>(!no_downloads),
|
Util::Enum::to_enum<Build::AllowDownloads>(!no_downloads),
|
||||||
|
Util::Enum::to_enum<Build::OnlyDownloads>(only_downloads),
|
||||||
clean_after_build ? Build::CleanBuildtrees::YES : Build::CleanBuildtrees::NO,
|
clean_after_build ? Build::CleanBuildtrees::YES : Build::CleanBuildtrees::NO,
|
||||||
clean_after_build ? Build::CleanPackages::YES : Build::CleanPackages::NO,
|
clean_after_build ? Build::CleanPackages::YES : Build::CleanPackages::NO,
|
||||||
clean_after_build ? Build::CleanDownloads::YES : Build::CleanDownloads::NO,
|
clean_after_build ? Build::CleanDownloads::YES : Build::CleanDownloads::NO,
|
||||||
download_tool,
|
download_tool,
|
||||||
GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO,
|
(GlobalState::g_binary_caching && !only_downloads) ? Build::BinaryCaching::YES : Build::BinaryCaching::NO,
|
||||||
Build::FailOnTombstone::NO,
|
Build::FailOnTombstone::NO,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user