mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-28 11:21:12 +08:00
5a5242aee4
Fixes `OUTPUT_VARIABLE`, `ERROR_VARIABLE`. vcpkg always wants logfiles. CMake (`execute_process`) doesn't send stdout/stderr to files and variables at the same time, and even "the precedence is not specified". So simultaneous output has to be handled in `vcpkg_execute_required_process`. At this occasion, port the arguments for stripping trailing whitespace. `tensorflow-common` implicitly relied on the broken behavior. I chose the minimal fix: drop the pointless calls, just set the empty value.
190 lines
5.8 KiB
CMake
190 lines
5.8 KiB
CMake
# vcpkg_execute_required_process
|
|
#[[
|
|
"ALLOW_IN_DOWNLOAD_MODE;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE"
|
|
"WORKING_DIRECTORY;LOGNAME;TIMEOUT;OUTPUT_VARIABLE;ERROR_VARIABLE"
|
|
"COMMAND;SAVE_LOG_FILES"
|
|
]]
|
|
|
|
block(SCOPE_FOR VARIABLES)
|
|
|
|
set(logname "test-vcpkg_execute_required_process")
|
|
|
|
function(count_log_files out_var)
|
|
set(count 0)
|
|
if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-out.log")
|
|
math(EXPR count "${count} + 1")
|
|
endif()
|
|
if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-err.log")
|
|
math(EXPR count "${count} + 1")
|
|
endif()
|
|
if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log")
|
|
math(EXPR count "${count} + 1")
|
|
endif()
|
|
set("${out_var}" "${count}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(reset_log_files)
|
|
file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-out.log")
|
|
file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-err.log")
|
|
file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log")
|
|
endfunction()
|
|
|
|
|
|
# ALLOW_IN_DOWNLOAD_MODE
|
|
|
|
set(VCPKG_DOWNLOAD_MODE 1)
|
|
unit_test_ensure_success([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Success
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
ALLOW_IN_DOWNLOAD_MODE
|
|
)]]
|
|
)
|
|
unit_test_ensure_fatal_error([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Success
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
)]]
|
|
)
|
|
|
|
set(VCPKG_DOWNLOAD_MODE "")
|
|
unit_test_ensure_success([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Success
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
ALLOW_IN_DOWNLOAD_MODE
|
|
)]]
|
|
)
|
|
unit_test_ensure_success([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Success
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
)]]
|
|
)
|
|
|
|
|
|
# COMMAND, LOGNAME
|
|
|
|
reset_log_files()
|
|
unit_test_check_variable_equal([[count_log_files(count)]] count 0)
|
|
|
|
unit_test_ensure_success([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Hello world
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
)]]
|
|
)
|
|
unit_test_check_variable_equal([[ count_log_files(count) ]] count 2)
|
|
unit_test_check_variable_equal([[ file(STRINGS "${CURRENT_BUILDTREES_DIR}/${logname}-out.log" stdout) ]] stdout "Hello world")
|
|
|
|
|
|
# WORKING_DIRECTORY, SAVE_LOG_FILES
|
|
|
|
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/subdir")
|
|
file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/subdir")
|
|
file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/source" "extra log")
|
|
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/subdir")
|
|
|
|
reset_log_files()
|
|
unit_test_check_variable_equal([[count_log_files(count)]] count 0)
|
|
|
|
unit_test_ensure_success([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E rename source subdir/extra.log
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir"
|
|
LOGNAME "${logname}"
|
|
SAVE_LOG_FILES "subdir/extra.log"
|
|
)]]
|
|
)
|
|
unit_test_check_variable_equal([[ count_log_files(count) ]] count 3)
|
|
unit_test_check_variable_equal([[ file(STRINGS "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log" extra) ]] extra "extra log")
|
|
|
|
|
|
# OUTPUT_VARIABLE, OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
reset_log_files()
|
|
unit_test_check_variable_equal([[count_log_files(count)]] count 0)
|
|
|
|
unit_test_check_variable_equal([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Hello world
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
OUTPUT_VARIABLE outvar
|
|
)]]
|
|
outvar "Hello world\n"
|
|
)
|
|
unit_test_check_variable_equal([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E echo Hello world
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
OUTPUT_VARIABLE outvar
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)]]
|
|
outvar "Hello world"
|
|
)
|
|
unit_test_check_variable_equal([[ count_log_files(count) ]] count 2)
|
|
|
|
|
|
# ERROR_VARIABLE
|
|
|
|
reset_log_files()
|
|
unit_test_check_variable_equal([[count_log_files(count)]] count 0)
|
|
|
|
file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/stderr.cmake" "message(WARNING on-stderr)\n")
|
|
unit_test_check_variable_not_equal([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -P "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/stderr.cmake"
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
ERROR_VARIABLE outvar
|
|
)
|
|
string(FIND "${outvar}" "on-stderr" pos)
|
|
]] pos -1
|
|
)
|
|
unit_test_check_variable_equal([[ count_log_files(count) ]] count 2)
|
|
|
|
|
|
# OUTPUT_VARIABLE == ERROR_VARIABLE
|
|
|
|
reset_log_files()
|
|
unit_test_check_variable_equal([[count_log_files(count)]] count 0)
|
|
|
|
file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/combined.cmake" [[
|
|
message(WARNING on-stderr)
|
|
message(STATUS on-stdout)
|
|
]])
|
|
unit_test_check_variable_not_equal([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -P "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/combined.cmake"
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
OUTPUT_VARIABLE outvar
|
|
ERROR_VARIABLE outvar
|
|
)
|
|
string(REGEX MATCH "on-stderr.*on-stdout" match "${outvar}")
|
|
]] CMAKE_MATCH_0 ""
|
|
)
|
|
unit_test_check_variable_equal([[ count_log_files(count) ]] count 2)
|
|
|
|
|
|
# TIMEOUT (if not flaky)
|
|
|
|
unit_test_ensure_fatal_error([[
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E sleep 10
|
|
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
|
|
LOGNAME "${logname}"
|
|
TIMEOUT 1
|
|
)]]
|
|
)
|
|
|
|
|
|
endblock()
|