[execute_process] Don't strip embedded semicolons (#12926)

This commit is contained in:
jgehw 2020-09-09 19:36:58 +02:00 committed by GitHub
parent bff4dd9c94
commit 8b7e946c55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 87 additions and 12 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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

View 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()

View File

@ -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}

View File

@ -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}
) )

View File

@ -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

View File

@ -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