mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
ExternalProject: option LOG_MERGED_STDOUTERR to combine stdout and stderr
In some circumstances the user of ExternalProject may not desire the split log files for stdout and stderr. In particular with a project has many errors it can be difficult to correlate the output error with the command that it resulted from. This commit adds the LOG_MERGED_STDOUTERR option that when enabled outputs into a unified <name>-<step>.log for each step. If disabled it will default to the previous behaviour of <name>-<step>-out.log and <name>-<step>-err.log.
This commit is contained in:
@@ -876,6 +876,7 @@ syn keyword cmakeKWExternalProject contained
|
||||
\ LOG_DIR
|
||||
\ LOG_DOWNLOAD
|
||||
\ LOG_INSTALL
|
||||
\ LOG_MERGED_STDOUTERR
|
||||
\ LOG_TEST
|
||||
\ LOG_UPDATE
|
||||
\ MAKE_EXE
|
||||
|
||||
5
Help/release/dev/ExternalProject-log-options.rst
Normal file
5
Help/release/dev/ExternalProject-log-options.rst
Normal file
@@ -0,0 +1,5 @@
|
||||
ExternalProject-log-options
|
||||
---------------------------
|
||||
|
||||
* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
|
||||
gained ``LOG_DIR`` and ``LOG_MERGED_STDOUTERR`` options to control logging.
|
||||
@@ -544,6 +544,9 @@ External Project Definition
|
||||
``LOG_TEST <bool>``
|
||||
When enabled, the output of the test step is logged to files.
|
||||
|
||||
``LOG_MERGED_STDOUTERR <bool>``
|
||||
When enabled, the output the step is not split by stdout and stderr.
|
||||
|
||||
**Terminal Access Options:**
|
||||
Steps can be given direct access to the terminal in some cases. Giving a
|
||||
step access to the terminal may allow it to receive terminal input if
|
||||
@@ -1946,21 +1949,29 @@ endif()
|
||||
# Wrap the command in a script to log output to files.
|
||||
set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake)
|
||||
set(logbase ${log_dir}/${name}-${step})
|
||||
get_property(log_merged TARGET ${name} PROPERTY _EP_LOG_MERGED_STDOUTERR)
|
||||
if (log_merged)
|
||||
set(stdout_log "${logbase}.log")
|
||||
set(stderr_log "${logbase}.log")
|
||||
else()
|
||||
set(stdout_log "${logbase}-out.log")
|
||||
set(stderr_log "${logbase}-err.log")
|
||||
endif()
|
||||
set(code "
|
||||
${code_cygpath_make}
|
||||
set(command \"${command}\")
|
||||
execute_process(
|
||||
COMMAND \${command}
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_FILE \"${logbase}-out.log\"
|
||||
ERROR_FILE \"${logbase}-err.log\"
|
||||
OUTPUT_FILE \"${stdout_log}\"
|
||||
ERROR_FILE \"${stderr_log}\"
|
||||
)
|
||||
if(result)
|
||||
set(msg \"Command failed: \${result}\\n\")
|
||||
foreach(arg IN LISTS command)
|
||||
set(msg \"\${msg} '\${arg}'\")
|
||||
endforeach()
|
||||
set(msg \"\${msg}\\nSee also\\n ${logbase}-*.log\")
|
||||
set(msg \"\${msg}\\nSee also\\n ${stderr_log}\")
|
||||
message(FATAL_ERROR \"\${msg}\")
|
||||
else()
|
||||
set(msg \"${name} ${step} command succeeded. See also ${logbase}-*.log\")
|
||||
|
||||
@@ -640,6 +640,7 @@ ExternalProject_Add(${proj}
|
||||
CONFIGURE_COMMAND "${configure_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "configure"
|
||||
BUILD_COMMAND "${build_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "build"
|
||||
INSTALL_COMMAND "${install_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "install"
|
||||
LOG_MERGED_STDOUTERR 1
|
||||
LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/different_log
|
||||
LOG_DOWNLOAD 1
|
||||
LOG_PATCH 1
|
||||
|
||||
Reference in New Issue
Block a user