mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-29 03:34:26 +08:00
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()
|