Add STEP_TARGETS to ExternalProject module.
This commit introduces the ability to add custom targets that correspond to individual ExternalProject steps. The main motivation behind this new feature is to drive sub-project based dashboard steps as external projects with separate targets for update, configure, build and test output. This makes it easy to construct a ctest -S script to drive such a dashboard. With no STEP_TARGETS defined, there are no additional custom targets introduced, to minimize the chatter in the target name space. Clients may define STEP_TARGETS on a per-ExternalProject_Add basis, or at the directory level by setting the EP_STEP_TARGETS directory property.
This commit is contained in:
parent
9b82ecae42
commit
ef9dd49d3d
|
@ -39,7 +39,7 @@
|
||||||
# #--Install step---------------
|
# #--Install step---------------
|
||||||
# [INSTALL_DIR dir] # Installation prefix
|
# [INSTALL_DIR dir] # Installation prefix
|
||||||
# [INSTALL_COMMAND cmd...] # Command to drive install after build
|
# [INSTALL_COMMAND cmd...] # Command to drive install after build
|
||||||
# #--Test step---------------
|
# #--Test step------------------
|
||||||
# [TEST_BEFORE_INSTALL 1] # Add test step executed before install step
|
# [TEST_BEFORE_INSTALL 1] # Add test step executed before install step
|
||||||
# [TEST_AFTER_INSTALL 1] # Add test step executed after install step
|
# [TEST_AFTER_INSTALL 1] # Add test step executed after install step
|
||||||
# [TEST_COMMAND cmd...] # Command to drive test
|
# [TEST_COMMAND cmd...] # Command to drive test
|
||||||
|
@ -50,6 +50,8 @@
|
||||||
# [LOG_BUILD 1] # Wrap build 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_TEST 1] # Wrap test in script to log output
|
||||||
# [LOG_INSTALL 1] # Wrap install 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
|
# The *_DIR options specify directories for the project, with default
|
||||||
# directories computed as follows.
|
# directories computed as follows.
|
||||||
|
@ -109,6 +111,35 @@
|
||||||
# It stores property values in variables of the same name.
|
# It stores property values in variables of the same name.
|
||||||
# Property names correspond to the keyword argument names of
|
# Property names correspond to the keyword argument names of
|
||||||
# 'ExternalProject_Add'.
|
# 'ExternalProject_Add'.
|
||||||
|
#
|
||||||
|
# The 'ExternalProject_Add_StepTargets' function generates custom targets for
|
||||||
|
# the steps listed:
|
||||||
|
# ExternalProject_Add_StepTargets(<name> [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 file:
|
||||||
|
#
|
||||||
|
# set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2008-2009 Kitware, Inc.
|
# Copyright 2008-2009 Kitware, Inc.
|
||||||
|
@ -124,7 +155,9 @@
|
||||||
# License text for the above reference.)
|
# License text for the above reference.)
|
||||||
|
|
||||||
# Pre-compute a regex to match documented keywords for each command.
|
# Pre-compute a regex to match documented keywords for each command.
|
||||||
file(STRINGS "${CMAKE_CURRENT_LIST_FILE}" lines LIMIT_COUNT 103
|
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)
|
foreach(line IN LISTS lines)
|
||||||
if("${line}" MATCHES "^# [A-Za-z0-9_]+\\(")
|
if("${line}" MATCHES "^# [A-Za-z0-9_]+\\(")
|
||||||
|
@ -208,6 +241,14 @@ define_property(DIRECTORY PROPERTY "EP_PREFIX" INHERITED
|
||||||
"ExternalProject module."
|
"ExternalProject module."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
define_property(DIRECTORY PROPERTY "EP_STEP_TARGETS" INHERITED
|
||||||
|
BRIEF_DOCS
|
||||||
|
"List of ExternalProject steps that automatically get corresponding targets"
|
||||||
|
FULL_DOCS
|
||||||
|
"See documentation of the ExternalProject_Add_StepTargets() function in the "
|
||||||
|
"ExternalProject module."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag src_name work_dir)
|
function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag src_name work_dir)
|
||||||
file(WRITE ${script_filename}
|
file(WRITE ${script_filename}
|
||||||
|
@ -721,6 +762,19 @@ function(_ep_get_configuration_subdir_suffix suffix_var)
|
||||||
endfunction(_ep_get_configuration_subdir_suffix)
|
endfunction(_ep_get_configuration_subdir_suffix)
|
||||||
|
|
||||||
|
|
||||||
|
function(ExternalProject_Add_StepTargets name)
|
||||||
|
set(steps ${ARGN})
|
||||||
|
|
||||||
|
_ep_get_configuration_subdir_suffix(cfgdir)
|
||||||
|
ExternalProject_Get_Property(${name} stamp_dir)
|
||||||
|
|
||||||
|
foreach(step ${steps})
|
||||||
|
add_custom_target(${name}-${step}
|
||||||
|
DEPENDS ${stamp_dir}${cfgdir}/${name}-${step})
|
||||||
|
endforeach()
|
||||||
|
endfunction(ExternalProject_Add_StepTargets)
|
||||||
|
|
||||||
|
|
||||||
function(ExternalProject_Add_Step name step)
|
function(ExternalProject_Add_Step name step)
|
||||||
set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
|
set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
|
||||||
ExternalProject_Get_Property(${name} stamp_dir)
|
ExternalProject_Get_Property(${name} stamp_dir)
|
||||||
|
@ -807,6 +861,18 @@ function(ExternalProject_Add_Step name step)
|
||||||
WORKING_DIRECTORY ${work_dir}
|
WORKING_DIRECTORY ${work_dir}
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Add custom "step target"?
|
||||||
|
get_property(step_targets TARGET ${name} PROPERTY _EP_STEP_TARGETS)
|
||||||
|
if(NOT step_targets)
|
||||||
|
get_property(step_targets DIRECTORY PROPERTY EP_STEP_TARGETS)
|
||||||
|
endif()
|
||||||
|
foreach(st ${step_targets})
|
||||||
|
if("${st}" STREQUAL "${step}")
|
||||||
|
ExternalProject_Add_StepTargets(${name} ${step})
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
endfunction(ExternalProject_Add_Step)
|
endfunction(ExternalProject_Add_Step)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ find_package(Git)
|
||||||
set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
|
set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
|
||||||
set(binary_base "${base}/Build")
|
set(binary_base "${base}/Build")
|
||||||
set_property(DIRECTORY PROPERTY EP_BASE ${base})
|
set_property(DIRECTORY PROPERTY EP_BASE ${base})
|
||||||
|
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
|
||||||
|
|
||||||
if(NOT DEFINED can_build_tutorial_step5)
|
if(NOT DEFINED can_build_tutorial_step5)
|
||||||
set(can_build_tutorial_step5 1)
|
set(can_build_tutorial_step5 1)
|
||||||
|
@ -61,6 +62,7 @@ ExternalProject_Add(${proj}
|
||||||
DOWNLOAD_COMMAND ""
|
DOWNLOAD_COMMAND ""
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
PATCH_COMMAND ""
|
PATCH_COMMAND ""
|
||||||
|
STEP_TARGETS install update
|
||||||
SVN_REPOSITORY ""
|
SVN_REPOSITORY ""
|
||||||
SVN_REVISION ""
|
SVN_REVISION ""
|
||||||
TEST_COMMAND ""
|
TEST_COMMAND ""
|
||||||
|
|
Loading…
Reference in New Issue