From 98936ae3e0bd92faf282f78a53c9a177f96294ab Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Oct 2014 12:40:22 -0400 Subject: [PATCH 1/2] ExternalProject: Convert docs to a bracket comment Use a bracket comment to hold the documentation instead of a block of line comments. This will make further updates easier. Also fix the logic that parses options out of the documentation to be aware of the new layout. --- Modules/ExternalProject.cmake | 375 +++++++++++++++++----------------- 1 file changed, 188 insertions(+), 187 deletions(-) diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index d6a6b7275..54432e3f6 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -1,187 +1,188 @@ -#.rst: -# ExternalProject -# --------------- -# -# Create custom targets to build projects in external trees -# -# The ``ExternalProject_Add`` function creates a custom target to drive -# download, update/patch, configure, build, install and test steps of an -# external project: -# -# .. code-block:: cmake -# -# ExternalProject_Add( # Name for custom target -# [DEPENDS projects...] # Targets on which the project depends -# [PREFIX dir] # Root dir for entire project -# [LIST_SEPARATOR sep] # Sep to be replaced by ; in cmd lines -# [TMP_DIR dir] # Directory to store temporary files -# [STAMP_DIR dir] # Directory to store step timestamps -# [EXCLUDE_FROM_ALL 1] # The "all" target does not depend on this -# #--Download step-------------- -# [DOWNLOAD_NAME fname] # File name to store (if not end of URL) -# [DOWNLOAD_DIR dir] # Directory to store downloaded files -# [DOWNLOAD_COMMAND cmd...] # Command to download source tree -# [DOWNLOAD_NO_PROGRESS 1] # Disable download progress reports -# [CVS_REPOSITORY cvsroot] # CVSROOT of CVS repository -# [CVS_MODULE mod] # Module to checkout from CVS repo -# [CVS_TAG tag] # Tag to checkout from CVS repo -# [SVN_REPOSITORY url] # URL of Subversion repo -# [SVN_REVISION -r] # Revision to checkout from Subversion repo -# [SVN_USERNAME john ] # Username for Subversion checkout and update -# [SVN_PASSWORD doe ] # Password for Subversion checkout and update -# [SVN_TRUST_CERT 1 ] # Trust the Subversion server site certificate -# [GIT_REPOSITORY url] # URL of git repo -# [GIT_TAG tag] # Git branch name, commit id or tag -# [GIT_SUBMODULES modules...] # Git submodules that shall be updated, all if empty -# [HG_REPOSITORY url] # URL of mercurial repo -# [HG_TAG tag] # Mercurial branch name, commit id or tag -# [URL /.../src.tgz] # Full path or URL of source -# [URL_HASH ALGO=value] # Hash of file at URL -# [URL_MD5 md5] # Equivalent to URL_HASH MD5=md5 -# [TLS_VERIFY bool] # Should certificate for https be checked -# [TLS_CAINFO file] # Path to a certificate authority file -# [TIMEOUT seconds] # Time allowed for file download operations -# #--Update/Patch step---------- -# [UPDATE_COMMAND cmd...] # Source work-tree update command -# [PATCH_COMMAND cmd...] # Command to patch downloaded source -# #--Configure step------------- -# [SOURCE_DIR dir] # Source dir to be used for build -# [CONFIGURE_COMMAND cmd...] # Build tree configuration command -# [CMAKE_COMMAND /.../cmake] # Specify alternative cmake executable -# [CMAKE_GENERATOR gen] # Specify generator for native build -# [CMAKE_GENERATOR_PLATFORM p] # Generator-specific platform name -# [CMAKE_GENERATOR_TOOLSET t] # Generator-specific toolset name -# [CMAKE_ARGS args...] # Arguments to CMake command line -# [CMAKE_CACHE_ARGS args...] # Initial cache arguments, of the form -Dvar:string=on -# #--Build step----------------- -# [BINARY_DIR dir] # Specify build dir location -# [BUILD_COMMAND cmd...] # Command to drive the native build -# [BUILD_IN_SOURCE 1] # Use source dir for build dir -# [BUILD_ALWAYS 1] # No stamp file, build step always runs -# #--Install step--------------- -# [INSTALL_DIR dir] # Installation prefix -# [INSTALL_COMMAND cmd...] # Command to drive install after build -# #--Test step------------------ -# [TEST_BEFORE_INSTALL 1] # Add test step executed before install step -# [TEST_AFTER_INSTALL 1] # Add test step executed after install step -# [TEST_COMMAND cmd...] # Command to drive test -# #--Output logging------------- -# [LOG_DOWNLOAD 1] # Wrap download in script to log output -# [LOG_UPDATE 1] # Wrap update in script to log output -# [LOG_CONFIGURE 1] # Wrap configure in script to log output -# [LOG_BUILD 1] # Wrap build in script to log output -# [LOG_TEST 1] # Wrap test in script to log output -# [LOG_INSTALL 1] # Wrap install in script to log output -# #--Custom targets------------- -# [STEP_TARGETS st1 st2 ...] # Generate custom targets for these steps -# ) -# -# The ``*_DIR`` options specify directories for the project, with default -# directories computed as follows. If the ``PREFIX`` option is given to -# ``ExternalProject_Add()`` or the ``EP_PREFIX`` directory property is set, -# then an external project is built and installed under the specified prefix:: -# -# TMP_DIR = /tmp -# STAMP_DIR = /src/-stamp -# DOWNLOAD_DIR = /src -# SOURCE_DIR = /src/ -# BINARY_DIR = /src/-build -# INSTALL_DIR = -# -# Otherwise, if the ``EP_BASE`` directory property is set then components -# of an external project are stored under the specified base:: -# -# TMP_DIR = /tmp/ -# STAMP_DIR = /Stamp/ -# DOWNLOAD_DIR = /Download/ -# SOURCE_DIR = /Source/ -# BINARY_DIR = /Build/ -# INSTALL_DIR = /Install/ -# -# If no ``PREFIX``, ``EP_PREFIX``, or ``EP_BASE`` is specified then the -# default is to set ``PREFIX`` to ``-prefix``. Relative paths are -# interpreted with respect to the build directory corresponding to the -# source directory in which ``ExternalProject_Add`` is invoked. -# -# If ``SOURCE_DIR`` is explicitly set to an existing directory the project -# will be built from it. Otherwise a download step must be specified -# using one of the ``DOWNLOAD_COMMAND``, ``CVS_*``, ``SVN_*``, or ``URL`` -# options. The ``URL`` option may refer locally to a directory or source -# tarball, or refer to a remote tarball (e.g. ``http://.../src.tgz``). -# -# The ``ExternalProject_Add_Step`` function adds a custom step to an -# external project: -# -# .. code-block:: cmake -# -# ExternalProject_Add_Step( # Names of project and custom step -# [COMMAND cmd...] # Command line invoked by this step -# [COMMENT "text..."] # Text printed when step executes -# [DEPENDEES steps...] # Steps on which this step depends -# [DEPENDERS steps...] # Steps that depend on this step -# [DEPENDS files...] # Files on which this step depends -# [ALWAYS 1] # No stamp file, step always runs -# [EXCLUDE_FROM_MAIN 1] # Main target does not depend on this step -# [WORKING_DIRECTORY dir] # Working directory for command -# [LOG 1] # Wrap step in script to log output -# ) -# -# The command line, comment, and working directory of every standard and -# custom step is processed to replace tokens ````, -# ````, ````, and ```` with -# corresponding property values. -# -# Any builtin step that specifies a ``_COMMAND cmd...`` or custom -# step that specifies a ``COMMAND cmd...`` may specify additional command -# lines using the form ``COMMAND cmd...``. At build time the commands -# will be executed in order and aborted if any one fails. For example:: -# -# ... BUILD_COMMAND make COMMAND echo done ... -# -# specifies to run ``make`` and then ``echo done`` during the build step. -# Whether the current working directory is preserved between commands is -# not defined. Behavior of shell operators like ``&&`` is not defined. -# -# The ``ExternalProject_Get_Property`` function retrieves external project -# target properties:: -# -# ExternalProject_Get_Property( [prop1 [prop2 [...]]]) -# -# It stores property values in variables of the same name. Property -# names correspond to the keyword argument names of -# ``ExternalProject_Add``. -# -# The ``ExternalProject_Add_StepTargets`` function generates custom -# targets for the steps listed:: -# -# ExternalProject_Add_StepTargets( [step1 [step2 [...]]]) -# -# If ``STEP_TARGETS`` is set then ``ExternalProject_Add_StepTargets`` is -# automatically called at the end of matching calls to -# ``ExternalProject_Add_Step``. Pass ``STEP_TARGETS`` explicitly to -# individual ``ExternalProject_Add`` calls, or implicitly to all -# ``ExternalProject_Add`` calls by setting the directory property -# ``EP_STEP_TARGETS``. -# -# If ``STEP_TARGETS`` is not set, clients may still manually call -# ``ExternalProject_Add_StepTargets`` after calling -# ``ExternalProject_Add`` or ``ExternalProject_Add_Step``. -# -# This functionality is provided to make it easy to drive the steps -# independently of each other by specifying targets on build command -# lines. For example, you may be submitting to a sub-project based -# dashboard, where you want to drive the configure portion of the build, -# then submit to the dashboard, followed by the build portion, followed -# by tests. If you invoke a custom target that depends on a step -# halfway through the step dependency chain, then all the previous steps -# will also run to ensure everything is up to date. -# -# For example, to drive configure, build and test steps independently -# for each ``ExternalProject_Add`` call in your project, write the following -# line prior to any ``ExternalProject_Add`` calls in your ``CMakeLists.txt`` -# file:: -# -# set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test) +#[=======================================================================[.rst: +ExternalProject +--------------- + +Create custom targets to build projects in external trees + +The ``ExternalProject_Add`` function creates a custom target to drive +download, update/patch, configure, build, install and test steps of an +external project: + +.. code-block:: cmake + + ExternalProject_Add( # Name for custom target + [DEPENDS projects...] # Targets on which the project depends + [PREFIX dir] # Root dir for entire project + [LIST_SEPARATOR sep] # Sep to be replaced by ; in cmd lines + [TMP_DIR dir] # Directory to store temporary files + [STAMP_DIR dir] # Directory to store step timestamps + [EXCLUDE_FROM_ALL 1] # The "all" target does not depend on this + #--Download step-------------- + [DOWNLOAD_NAME fname] # File name to store (if not end of URL) + [DOWNLOAD_DIR dir] # Directory to store downloaded files + [DOWNLOAD_COMMAND cmd...] # Command to download source tree + [DOWNLOAD_NO_PROGRESS 1] # Disable download progress reports + [CVS_REPOSITORY cvsroot] # CVSROOT of CVS repository + [CVS_MODULE mod] # Module to checkout from CVS repo + [CVS_TAG tag] # Tag to checkout from CVS repo + [SVN_REPOSITORY url] # URL of Subversion repo + [SVN_REVISION -r] # Revision to checkout from Subversion repo + [SVN_USERNAME john ] # Username for Subversion checkout and update + [SVN_PASSWORD doe ] # Password for Subversion checkout and update + [SVN_TRUST_CERT 1 ] # Trust the Subversion server site certificate + [GIT_REPOSITORY url] # URL of git repo + [GIT_TAG tag] # Git branch name, commit id or tag + [GIT_SUBMODULES modules...] # Git submodules that shall be updated, all if empty + [HG_REPOSITORY url] # URL of mercurial repo + [HG_TAG tag] # Mercurial branch name, commit id or tag + [URL /.../src.tgz] # Full path or URL of source + [URL_HASH ALGO=value] # Hash of file at URL + [URL_MD5 md5] # Equivalent to URL_HASH MD5=md5 + [TLS_VERIFY bool] # Should certificate for https be checked + [TLS_CAINFO file] # Path to a certificate authority file + [TIMEOUT seconds] # Time allowed for file download operations + #--Update/Patch step---------- + [UPDATE_COMMAND cmd...] # Source work-tree update command + [PATCH_COMMAND cmd...] # Command to patch downloaded source + #--Configure step------------- + [SOURCE_DIR dir] # Source dir to be used for build + [CONFIGURE_COMMAND cmd...] # Build tree configuration command + [CMAKE_COMMAND /.../cmake] # Specify alternative cmake executable + [CMAKE_GENERATOR gen] # Specify generator for native build + [CMAKE_GENERATOR_PLATFORM p] # Generator-specific platform name + [CMAKE_GENERATOR_TOOLSET t] # Generator-specific toolset name + [CMAKE_ARGS args...] # Arguments to CMake command line + [CMAKE_CACHE_ARGS args...] # Initial cache arguments, of the form -Dvar:string=on + #--Build step----------------- + [BINARY_DIR dir] # Specify build dir location + [BUILD_COMMAND cmd...] # Command to drive the native build + [BUILD_IN_SOURCE 1] # Use source dir for build dir + [BUILD_ALWAYS 1] # No stamp file, build step always runs + #--Install step--------------- + [INSTALL_DIR dir] # Installation prefix + [INSTALL_COMMAND cmd...] # Command to drive install after build + #--Test step------------------ + [TEST_BEFORE_INSTALL 1] # Add test step executed before install step + [TEST_AFTER_INSTALL 1] # Add test step executed after install step + [TEST_COMMAND cmd...] # Command to drive test + #--Output logging------------- + [LOG_DOWNLOAD 1] # Wrap download in script to log output + [LOG_UPDATE 1] # Wrap update in script to log output + [LOG_CONFIGURE 1] # Wrap configure in script to log output + [LOG_BUILD 1] # Wrap build in script to log output + [LOG_TEST 1] # Wrap test in script to log output + [LOG_INSTALL 1] # Wrap install in script to log output + #--Custom targets------------- + [STEP_TARGETS st1 st2 ...] # Generate custom targets for these steps + ) + +The ``*_DIR`` options specify directories for the project, with default +directories computed as follows. If the ``PREFIX`` option is given to +``ExternalProject_Add()`` or the ``EP_PREFIX`` directory property is set, +then an external project is built and installed under the specified prefix:: + + TMP_DIR = /tmp + STAMP_DIR = /src/-stamp + DOWNLOAD_DIR = /src + SOURCE_DIR = /src/ + BINARY_DIR = /src/-build + INSTALL_DIR = + +Otherwise, if the ``EP_BASE`` directory property is set then components +of an external project are stored under the specified base:: + + TMP_DIR = /tmp/ + STAMP_DIR = /Stamp/ + DOWNLOAD_DIR = /Download/ + SOURCE_DIR = /Source/ + BINARY_DIR = /Build/ + INSTALL_DIR = /Install/ + +If no ``PREFIX``, ``EP_PREFIX``, or ``EP_BASE`` is specified then the +default is to set ``PREFIX`` to ``-prefix``. Relative paths are +interpreted with respect to the build directory corresponding to the +source directory in which ``ExternalProject_Add`` is invoked. + +If ``SOURCE_DIR`` is explicitly set to an existing directory the project +will be built from it. Otherwise a download step must be specified +using one of the ``DOWNLOAD_COMMAND``, ``CVS_*``, ``SVN_*``, or ``URL`` +options. The ``URL`` option may refer locally to a directory or source +tarball, or refer to a remote tarball (e.g. ``http://.../src.tgz``). + +The ``ExternalProject_Add_Step`` function adds a custom step to an +external project: + +.. code-block:: cmake + + ExternalProject_Add_Step( # Names of project and custom step + [COMMAND cmd...] # Command line invoked by this step + [COMMENT "text..."] # Text printed when step executes + [DEPENDEES steps...] # Steps on which this step depends + [DEPENDERS steps...] # Steps that depend on this step + [DEPENDS files...] # Files on which this step depends + [ALWAYS 1] # No stamp file, step always runs + [EXCLUDE_FROM_MAIN 1] # Main target does not depend on this step + [WORKING_DIRECTORY dir] # Working directory for command + [LOG 1] # Wrap step in script to log output + ) + +The command line, comment, and working directory of every standard and +custom step is processed to replace tokens ````, +````, ````, and ```` with +corresponding property values. + +Any builtin step that specifies a ``_COMMAND cmd...`` or custom +step that specifies a ``COMMAND cmd...`` may specify additional command +lines using the form ``COMMAND cmd...``. At build time the commands +will be executed in order and aborted if any one fails. For example:: + + ... BUILD_COMMAND make COMMAND echo done ... + +specifies to run ``make`` and then ``echo done`` during the build step. +Whether the current working directory is preserved between commands is +not defined. Behavior of shell operators like ``&&`` is not defined. + +The ``ExternalProject_Get_Property`` function retrieves external project +target properties:: + + ExternalProject_Get_Property( [prop1 [prop2 [...]]]) + +It stores property values in variables of the same name. Property +names correspond to the keyword argument names of +``ExternalProject_Add``. + +The ``ExternalProject_Add_StepTargets`` function generates custom +targets for the steps listed:: + + ExternalProject_Add_StepTargets( [step1 [step2 [...]]]) + +If ``STEP_TARGETS`` is set then ``ExternalProject_Add_StepTargets`` is +automatically called at the end of matching calls to +``ExternalProject_Add_Step``. Pass ``STEP_TARGETS`` explicitly to +individual ``ExternalProject_Add`` calls, or implicitly to all +``ExternalProject_Add`` calls by setting the directory property +``EP_STEP_TARGETS``. + +If ``STEP_TARGETS`` is not set, clients may still manually call +``ExternalProject_Add_StepTargets`` after calling +``ExternalProject_Add`` or ``ExternalProject_Add_Step``. + +This functionality is provided to make it easy to drive the steps +independently of each other by specifying targets on build command +lines. For example, you may be submitting to a sub-project based +dashboard, where you want to drive the configure portion of the build, +then submit to the dashboard, followed by the build portion, followed +by tests. If you invoke a custom target that depends on a step +halfway through the step dependency chain, then all the previous steps +will also run to ensure everything is up to date. + +For example, to drive configure, build and test steps independently +for each ``ExternalProject_Add`` call in your project, write the following +line prior to any ``ExternalProject_Add`` calls in your ``CMakeLists.txt`` +file:: + + set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test) +#]=======================================================================] #============================================================================= # Copyright 2008-2013 Kitware, Inc. @@ -200,9 +201,9 @@ math(EXPR _ep_documentation_line_count "${CMAKE_CURRENT_LIST_LINE} - 16") file(STRINGS "${CMAKE_CURRENT_LIST_FILE}" lines LIMIT_COUNT ${_ep_documentation_line_count} - REGEX "^# ( \\[[A-Z0-9_]+ [^]]*\\] +#.*$|[A-Za-z0-9_]+\\()") + REGEX "^ ( \\[[A-Z0-9_]+ [^]]*\\] +#.*$|[A-Za-z0-9_]+\\()") foreach(line IN LISTS lines) - if("${line}" MATCHES "^# ([A-Za-z0-9_]+)\\(") + if("${line}" MATCHES "^ ([A-Za-z0-9_]+)\\(") if(_ep_func) set(_ep_keywords_${_ep_func} "${_ep_keywords_${_ep_func}})$") endif() @@ -211,7 +212,7 @@ foreach(line IN LISTS lines) set(_ep_keywords_${_ep_func} "^(") set(_ep_keyword_sep) else() - string(REGEX REPLACE "^# \\[([A-Z0-9_]+) .*" "\\1" _ep_key "${line}") + string(REGEX REPLACE "^ \\[([A-Z0-9_]+) .*" "\\1" _ep_key "${line}") #message(" keyword [${_ep_key}]") set(_ep_keywords_${_ep_func} "${_ep_keywords_${_ep_func}}${_ep_keyword_sep}${_ep_key}") From d9c2c17b29467367ddefbc86cf7e1759c7df27cc Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Oct 2014 12:44:00 -0400 Subject: [PATCH 2/2] ExternalProject: Use explicit markup and definition lists in docs Convert ExternalProject module documentation to use explicit markup blocks for each command. Enumerate command options with definition lists instead of a literal block. This will allow more detail to be added later. Also fix the logic that parses options out of the documentation to be aware of the new layout. --- Modules/ExternalProject.cmake | 342 +++++++++++++++++++++------------- 1 file changed, 215 insertions(+), 127 deletions(-) diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 54432e3f6..a92f20c55 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -4,132 +4,216 @@ ExternalProject Create custom targets to build projects in external trees -The ``ExternalProject_Add`` function creates a custom target to drive -download, update/patch, configure, build, install and test steps of an -external project: +.. command:: ExternalProject_Add -.. code-block:: cmake + The ``ExternalProject_Add`` function creates a custom target to drive + download, update/patch, configure, build, install and test steps of an + external project:: - ExternalProject_Add( # Name for custom target - [DEPENDS projects...] # Targets on which the project depends - [PREFIX dir] # Root dir for entire project - [LIST_SEPARATOR sep] # Sep to be replaced by ; in cmd lines - [TMP_DIR dir] # Directory to store temporary files - [STAMP_DIR dir] # Directory to store step timestamps - [EXCLUDE_FROM_ALL 1] # The "all" target does not depend on this - #--Download step-------------- - [DOWNLOAD_NAME fname] # File name to store (if not end of URL) - [DOWNLOAD_DIR dir] # Directory to store downloaded files - [DOWNLOAD_COMMAND cmd...] # Command to download source tree - [DOWNLOAD_NO_PROGRESS 1] # Disable download progress reports - [CVS_REPOSITORY cvsroot] # CVSROOT of CVS repository - [CVS_MODULE mod] # Module to checkout from CVS repo - [CVS_TAG tag] # Tag to checkout from CVS repo - [SVN_REPOSITORY url] # URL of Subversion repo - [SVN_REVISION -r] # Revision to checkout from Subversion repo - [SVN_USERNAME john ] # Username for Subversion checkout and update - [SVN_PASSWORD doe ] # Password for Subversion checkout and update - [SVN_TRUST_CERT 1 ] # Trust the Subversion server site certificate - [GIT_REPOSITORY url] # URL of git repo - [GIT_TAG tag] # Git branch name, commit id or tag - [GIT_SUBMODULES modules...] # Git submodules that shall be updated, all if empty - [HG_REPOSITORY url] # URL of mercurial repo - [HG_TAG tag] # Mercurial branch name, commit id or tag - [URL /.../src.tgz] # Full path or URL of source - [URL_HASH ALGO=value] # Hash of file at URL - [URL_MD5 md5] # Equivalent to URL_HASH MD5=md5 - [TLS_VERIFY bool] # Should certificate for https be checked - [TLS_CAINFO file] # Path to a certificate authority file - [TIMEOUT seconds] # Time allowed for file download operations - #--Update/Patch step---------- - [UPDATE_COMMAND cmd...] # Source work-tree update command - [PATCH_COMMAND cmd...] # Command to patch downloaded source - #--Configure step------------- - [SOURCE_DIR dir] # Source dir to be used for build - [CONFIGURE_COMMAND cmd...] # Build tree configuration command - [CMAKE_COMMAND /.../cmake] # Specify alternative cmake executable - [CMAKE_GENERATOR gen] # Specify generator for native build - [CMAKE_GENERATOR_PLATFORM p] # Generator-specific platform name - [CMAKE_GENERATOR_TOOLSET t] # Generator-specific toolset name - [CMAKE_ARGS args...] # Arguments to CMake command line - [CMAKE_CACHE_ARGS args...] # Initial cache arguments, of the form -Dvar:string=on - #--Build step----------------- - [BINARY_DIR dir] # Specify build dir location - [BUILD_COMMAND cmd...] # Command to drive the native build - [BUILD_IN_SOURCE 1] # Use source dir for build dir - [BUILD_ALWAYS 1] # No stamp file, build step always runs - #--Install step--------------- - [INSTALL_DIR dir] # Installation prefix - [INSTALL_COMMAND cmd...] # Command to drive install after build - #--Test step------------------ - [TEST_BEFORE_INSTALL 1] # Add test step executed before install step - [TEST_AFTER_INSTALL 1] # Add test step executed after install step - [TEST_COMMAND cmd...] # Command to drive test - #--Output logging------------- - [LOG_DOWNLOAD 1] # Wrap download in script to log output - [LOG_UPDATE 1] # Wrap update in script to log output - [LOG_CONFIGURE 1] # Wrap configure in script to log output - [LOG_BUILD 1] # Wrap build in script to log output - [LOG_TEST 1] # Wrap test in script to log output - [LOG_INSTALL 1] # Wrap install in script to log output - #--Custom targets------------- - [STEP_TARGETS st1 st2 ...] # Generate custom targets for these steps - ) + ExternalProject_Add( [