mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-06-07 19:42:46 +08:00
[execute_process] Don't strip embedded semicolons (#12926)
This commit is contained in:
parent
bff4dd9c94
commit
8b7e946c55
@ -3,7 +3,7 @@
|
|||||||
Intercepts all calls to execute_process() inside portfiles and fails when Download Mode
|
Intercepts all calls to execute_process() inside portfiles and fails when Download Mode
|
||||||
is enabled.
|
is enabled.
|
||||||
|
|
||||||
In order to execute a process in Download Mode call `_execute_process()` instead.
|
In order to execute a process in Download Mode call `vcpkg_execute_in_download_mode()` instead.
|
||||||
|
|
||||||
|
|
||||||
## Source
|
## Source
|
||||||
|
@ -13,8 +13,8 @@ if (NOT DEFINED OVERRIDEN_EXECUTE_PROCESS)
|
|||||||
message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
|
message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
|
||||||
endmacro()
|
endmacro()
|
||||||
else()
|
else()
|
||||||
macro(execute_process)
|
macro(_execute_process)
|
||||||
_execute_process(${ARGV})
|
execute_process(${ARGV})
|
||||||
endmacro()
|
endmacro()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
@ -29,6 +29,9 @@
|
|||||||
##
|
##
|
||||||
## * [libbson](https://github.com/Microsoft/vcpkg/blob/master/ports/libbson/portfile.cmake)
|
## * [libbson](https://github.com/Microsoft/vcpkg/blob/master/ports/libbson/portfile.cmake)
|
||||||
## * [gdal](https://github.com/Microsoft/vcpkg/blob/master/ports/gdal/portfile.cmake)
|
## * [gdal](https://github.com/Microsoft/vcpkg/blob/master/ports/gdal/portfile.cmake)
|
||||||
|
|
||||||
|
include(vcpkg_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_apply_patches)
|
function(vcpkg_apply_patches)
|
||||||
cmake_parse_arguments(_ap "QUIET" "SOURCE_PATH" "PATCHES" ${ARGN})
|
cmake_parse_arguments(_ap "QUIET" "SOURCE_PATH" "PATCHES" ${ARGN})
|
||||||
|
|
||||||
@ -38,7 +41,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(
|
vcpkg_execute_in_download_mode(
|
||||||
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_VARIABLE error
|
ERROR_VARIABLE error
|
||||||
|
@ -49,6 +49,9 @@
|
|||||||
## * [apr](https://github.com/Microsoft/vcpkg/blob/master/ports/apr/portfile.cmake)
|
## * [apr](https://github.com/Microsoft/vcpkg/blob/master/ports/apr/portfile.cmake)
|
||||||
## * [fontconfig](https://github.com/Microsoft/vcpkg/blob/master/ports/fontconfig/portfile.cmake)
|
## * [fontconfig](https://github.com/Microsoft/vcpkg/blob/master/ports/fontconfig/portfile.cmake)
|
||||||
## * [freetype](https://github.com/Microsoft/vcpkg/blob/master/ports/freetype/portfile.cmake)
|
## * [freetype](https://github.com/Microsoft/vcpkg/blob/master/ports/freetype/portfile.cmake)
|
||||||
|
|
||||||
|
include(vcpkg_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_download_distfile VAR)
|
function(vcpkg_download_distfile VAR)
|
||||||
set(options SKIP_SHA512 SILENT_EXIT QUIET)
|
set(options SKIP_SHA512 SILENT_EXIT QUIET)
|
||||||
set(oneValueArgs FILENAME SHA512)
|
set(oneValueArgs FILENAME SHA512)
|
||||||
@ -125,7 +128,7 @@ function(vcpkg_download_distfile VAR)
|
|||||||
list(APPEND request_headers "--header=${header}")
|
list(APPEND request_headers "--header=${header}")
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
_execute_process(
|
vcpkg_execute_in_download_mode(
|
||||||
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
|
||||||
|
59
scripts/cmake/vcpkg_execute_in_download_mode.cmake
Normal file
59
scripts/cmake/vcpkg_execute_in_download_mode.cmake
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
## # vcpkg_execute_in_download_mode
|
||||||
|
##
|
||||||
|
## Execute a process even in download mode.
|
||||||
|
##
|
||||||
|
## ## Usage
|
||||||
|
## ```cmake
|
||||||
|
## vcpkg_execute_in_download_mode(
|
||||||
|
## COMMAND <cmd> [<arguments>...]
|
||||||
|
## OUTPUT_QUIET ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE
|
||||||
|
## WORKING_DIRECTORY <dir>
|
||||||
|
## TIMEOUT <seconds>
|
||||||
|
## RESULT_VARIABLE <seconds>
|
||||||
|
## OUTPUT_VARIABLE <var_out>
|
||||||
|
## ERROR_VARIABLE <var_err>
|
||||||
|
## INPUT_FILE <f_in>
|
||||||
|
## OUTPUT_FILE <f_out>
|
||||||
|
## ERROR_FILE <f_err>
|
||||||
|
## ENCODING <enc>
|
||||||
|
## )
|
||||||
|
## ```
|
||||||
|
##
|
||||||
|
## The signature of this function is identical with `execute_process()` except that
|
||||||
|
## it only accepts one COMMAND argument, i.e., does not support chaining multiple
|
||||||
|
## commands with pipes.
|
||||||
|
##
|
||||||
|
## See `execute_process()` for a detailed description of the parameters.
|
||||||
|
function(vcpkg_execute_in_download_mode)
|
||||||
|
# parse parameters such that semicolons in options arguments to COMMAND don't get erased
|
||||||
|
cmake_parse_arguments(PARSE_ARGV 0 vcpkg_execute_in_download_mode
|
||||||
|
"OUTPUT_QUIET;ERROR_QUIET;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE"
|
||||||
|
"WORKING_DIRECTORY;TIMEOUT;RESULT_VARIABLE;RESULTS_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE;INPUT_FILE;OUTPUT_FILE;ERROR_FILE;ENCODING"
|
||||||
|
"COMMAND")
|
||||||
|
|
||||||
|
# collect all other present parameters
|
||||||
|
set(other_args "")
|
||||||
|
foreach(arg OUTPUT_QUIET ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(vcpkg_execute_in_download_mode_${arg})
|
||||||
|
list(APPEND other_args ${arg})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
foreach(arg WORKING_DIRECTORY TIMEOUT RESULT_VARIABLE RESULTS_VARIABLE OUTPUT_VARIABLE ERROR_VARIABLE INPUT_FILE OUTPUT_FILE ERROR_FILE ENCODING)
|
||||||
|
if(vcpkg_execute_in_download_mode_${arg})
|
||||||
|
list(APPEND other_args ${arg} ${vcpkg_execute_in_download_mode_${arg}})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if (DEFINED VCPKG_DOWNLOAD_MODE)
|
||||||
|
_execute_process(COMMAND ${vcpkg_execute_in_download_mode_COMMAND} ${other_args})
|
||||||
|
else()
|
||||||
|
execute_process(COMMAND ${vcpkg_execute_in_download_mode_COMMAND} ${other_args})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# pass output parameters back to caller's scope
|
||||||
|
foreach(arg RESULT_VARIABLE RESULTS_VARIABLE OUTPUT_VARIABLE ERROR_VARIABLE)
|
||||||
|
if(vcpkg_execute_in_download_mode_${arg})
|
||||||
|
set(${vcpkg_execute_in_download_mode_${arg}} ${${vcpkg_execute_in_download_mode_${arg}}} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
@ -36,7 +36,10 @@
|
|||||||
## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
|
## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
|
||||||
## * [boost](https://github.com/Microsoft/vcpkg/blob/master/ports/boost/portfile.cmake)
|
## * [boost](https://github.com/Microsoft/vcpkg/blob/master/ports/boost/portfile.cmake)
|
||||||
## * [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)
|
||||||
|
include(vcpkg_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_execute_required_process)
|
function(vcpkg_execute_required_process)
|
||||||
cmake_parse_arguments(vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME;TIMEOUT" "COMMAND" ${ARGN})
|
cmake_parse_arguments(vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME;TIMEOUT" "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")
|
||||||
@ -48,7 +51,6 @@ function(vcpkg_execute_required_process)
|
|||||||
set(TIMEOUT_PARAM "")
|
set(TIMEOUT_PARAM "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(execute_process_function execute_process)
|
|
||||||
if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_ALLOW_IN_DOWNLOAD_MODE)
|
if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_ALLOW_IN_DOWNLOAD_MODE)
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
[[
|
[[
|
||||||
@ -57,7 +59,7 @@ Halting portfile execution.
|
|||||||
]])
|
]])
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
_execute_process(
|
vcpkg_execute_in_download_mode(
|
||||||
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}
|
||||||
|
@ -44,6 +44,9 @@
|
|||||||
## * [ffmpeg](https://github.com/Microsoft/vcpkg/blob/master/ports/ffmpeg/portfile.cmake)
|
## * [ffmpeg](https://github.com/Microsoft/vcpkg/blob/master/ports/ffmpeg/portfile.cmake)
|
||||||
## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
|
## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
|
||||||
## * [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_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_find_acquire_program VAR)
|
function(vcpkg_find_acquire_program VAR)
|
||||||
set(EXPANDED_VAR ${${VAR}})
|
set(EXPANDED_VAR ${${VAR}})
|
||||||
if(EXPANDED_VAR)
|
if(EXPANDED_VAR)
|
||||||
@ -563,18 +566,18 @@ 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(
|
vcpkg_execute_in_download_mode(
|
||||||
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}
|
||||||
)
|
)
|
||||||
elseif("${ARCHIVE_PATH}" MATCHES ".7z.exe$")
|
elseif("${ARCHIVE_PATH}" MATCHES ".7z.exe$")
|
||||||
vcpkg_find_acquire_program(7Z)
|
vcpkg_find_acquire_program(7Z)
|
||||||
_execute_process(
|
vcpkg_execute_in_download_mode(
|
||||||
COMMAND ${7Z} x "${ARCHIVE_PATH}" "-o${PROG_PATH_SUBDIR}" -y -bso0 -bsp0
|
COMMAND ${7Z} x "${ARCHIVE_PATH}" "-o${PROG_PATH_SUBDIR}" -y -bso0 -bsp0
|
||||||
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
_execute_process(
|
vcpkg_execute_in_download_mode(
|
||||||
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}
|
||||||
)
|
)
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
##
|
##
|
||||||
## * [fdlibm](https://github.com/Microsoft/vcpkg/blob/master/ports/fdlibm/portfile.cmake)
|
## * [fdlibm](https://github.com/Microsoft/vcpkg/blob/master/ports/fdlibm/portfile.cmake)
|
||||||
|
|
||||||
|
include(vcpkg_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_from_git)
|
function(vcpkg_from_git)
|
||||||
set(oneValueArgs OUT_SOURCE_PATH URL REF)
|
set(oneValueArgs OUT_SOURCE_PATH URL REF)
|
||||||
set(multipleValuesArgs PATCHES)
|
set(multipleValuesArgs PATCHES)
|
||||||
@ -78,7 +80,7 @@ function(vcpkg_from_git)
|
|||||||
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
|
||||||
LOGNAME git-fetch-${TARGET_TRIPLET}
|
LOGNAME git-fetch-${TARGET_TRIPLET}
|
||||||
)
|
)
|
||||||
_execute_process(
|
vcpkg_execute_in_download_mode(
|
||||||
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
|
||||||
|
@ -61,6 +61,9 @@
|
|||||||
## * [folly](https://github.com/Microsoft/vcpkg/blob/master/ports/folly/portfile.cmake#L15)
|
## * [folly](https://github.com/Microsoft/vcpkg/blob/master/ports/folly/portfile.cmake#L15)
|
||||||
## * [z3](https://github.com/Microsoft/vcpkg/blob/master/ports/z3/portfile.cmake#L13)
|
## * [z3](https://github.com/Microsoft/vcpkg/blob/master/ports/z3/portfile.cmake#L13)
|
||||||
##
|
##
|
||||||
|
|
||||||
|
include(vcpkg_execute_in_download_mode)
|
||||||
|
|
||||||
function(vcpkg_from_gitlab)
|
function(vcpkg_from_gitlab)
|
||||||
set(oneValueArgs OUT_SOURCE_PATH GITLAB_URL USER REPO REF SHA512 HEAD_REF)
|
set(oneValueArgs OUT_SOURCE_PATH GITLAB_URL USER REPO REF SHA512 HEAD_REF)
|
||||||
set(multipleValuesArgs PATCHES)
|
set(multipleValuesArgs PATCHES)
|
||||||
@ -163,7 +166,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
|
vcpkg_execute_in_download_mode(COMMAND ${GIT} ls-remote
|
||||||
"${GITLAB_LINK}.git" "${_vdud_HEAD_REF}"
|
"${GITLAB_LINK}.git" "${_vdud_HEAD_REF}"
|
||||||
RESULT_VARIABLE _git_result
|
RESULT_VARIABLE _git_result
|
||||||
OUTPUT_VARIABLE _git_output
|
OUTPUT_VARIABLE _git_output
|
||||||
|
Loading…
Reference in New Issue
Block a user