Commit 7ddc9e35 authored by Wouter Klouwen's avatar Wouter Klouwen

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.
parent b6f6cac3
......@@ -876,6 +876,7 @@ syn keyword cmakeKWExternalProject contained
\ LOG_DIR
\ LOG_DOWNLOAD
\ LOG_INSTALL
\ LOG_MERGED_STDOUTERR
\ LOG_TEST
\ LOG_UPDATE
\ MAKE_EXE
......
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment