Add test step to ExternalProject builds. Rename SVN_TAG to SVN_REVISION since it is a more accurate name.

This commit is contained in:
David Cole 2009-09-03 12:11:14 -04:00
parent 20713ab89d
commit 5624be360e
2 changed files with 74 additions and 11 deletions

View File

@ -15,7 +15,7 @@
# [CVS_MODULE mod] # Module to checkout from CVS repo # [CVS_MODULE mod] # Module to checkout from CVS repo
# [CVS_TAG tag] # Tag to checkout from CVS repo # [CVS_TAG tag] # Tag to checkout from CVS repo
# [SVN_REPOSITORY url] # URL of Subversion repo # [SVN_REPOSITORY url] # URL of Subversion repo
# [SVN_TAG tag] # Tag to checkout from Subversion repo # [SVN_REVISION rev] # Revision to checkout from Subversion repo
# [URL /.../src.tgz] # Full path or URL of source # [URL /.../src.tgz] # Full path or URL of source
# #--Update/Patch step---------- # #--Update/Patch step----------
# [UPDATE_COMMAND cmd...] # Source work-tree update command # [UPDATE_COMMAND cmd...] # Source work-tree update command
@ -33,6 +33,10 @@
# #--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_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
# ) # )
# 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.
@ -420,6 +424,9 @@ function(_ep_get_build_command name step cmd_var)
if(step STREQUAL "INSTALL") if(step STREQUAL "INSTALL")
set(args install) set(args install)
endif() endif()
if(step STREQUAL "TEST")
set(args test)
endif()
else() else()
# Drive the project with "cmake --build". # Drive the project with "cmake --build".
get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND) get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND)
@ -432,13 +439,21 @@ function(_ep_get_build_command name step cmd_var)
if(step STREQUAL "INSTALL") if(step STREQUAL "INSTALL")
list(APPEND args --target install) list(APPEND args --target install)
endif() endif()
# But for "TEST" drive the project with corresponding "ctest".
if(step STREQUAL "TEST")
string(REGEX REPLACE "^(.*/)cmake([^/]*)$" "\\1ctest\\2" cmd "${cmd}")
set(args "")
endif()
endif() endif()
else() # if(cfg_cmd_id STREQUAL "configure") else() # if(cfg_cmd_id STREQUAL "configure")
# Non-CMake project. Guess "make" and "make install". # Non-CMake project. Guess "make" and "make install" and "make test".
set(cmd "make") set(cmd "make")
if(step STREQUAL "INSTALL") if(step STREQUAL "INSTALL")
set(args install) set(args install)
endif() endif()
if(step STREQUAL "TEST")
set(args test)
endif()
endif() endif()
# Use user-specified arguments instead of default arguments, if any. # Use user-specified arguments instead of default arguments, if any.
@ -601,11 +616,11 @@ function(_ep_add_download_command name)
message(FATAL_ERROR "error: could not find svn for checkout of ${name}") message(FATAL_ERROR "error: could not find svn for checkout of ${name}")
endif() endif()
get_property(svn_tag TARGET ${name} PROPERTY _EP_SVN_TAG) get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
set(repository ${svn_repository}) set(repository ${svn_repository})
set(module) set(module)
set(tag ${svn_tag}) set(tag ${svn_revision})
configure_file( configure_file(
"${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in" "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
"${stamp_dir}/${name}-svninfo.txt" "${stamp_dir}/${name}-svninfo.txt"
@ -615,7 +630,7 @@ function(_ep_add_download_command name)
get_filename_component(src_name "${source_dir}" NAME) get_filename_component(src_name "${source_dir}" NAME)
get_filename_component(work_dir "${source_dir}" PATH) get_filename_component(work_dir "${source_dir}" PATH)
set(comment "Performing download step (SVN checkout) for '${name}'") set(comment "Performing download step (SVN checkout) for '${name}'")
set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_tag} ${src_name}) set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision} ${src_name})
list(APPEND depends ${stamp_dir}/${name}-svninfo.txt) list(APPEND depends ${stamp_dir}/${name}-svninfo.txt)
elseif(url) elseif(url)
get_filename_component(work_dir "${source_dir}" PATH) get_filename_component(work_dir "${source_dir}" PATH)
@ -696,8 +711,8 @@ function(_ep_add_update_command name)
endif() endif()
set(work_dir ${source_dir}) set(work_dir ${source_dir})
set(comment "Performing update step (SVN update) for '${name}'") set(comment "Performing update step (SVN update) for '${name}'")
get_property(svn_tag TARGET ${name} PROPERTY _EP_SVN_TAG) get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_tag}) set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision})
set(always 1) set(always 1)
endif() endif()
@ -781,6 +796,7 @@ function(_ep_add_build_command name)
else() else()
_ep_get_build_command(${name} BUILD cmd) _ep_get_build_command(${name} BUILD cmd)
endif() endif()
ep_add_step(${name} build ep_add_step(${name} build
COMMAND ${cmd} COMMAND ${cmd}
WORKING_DIRECTORY ${binary_dir} WORKING_DIRECTORY ${binary_dir}
@ -798,6 +814,7 @@ function(_ep_add_install_command name)
else() else()
_ep_get_build_command(${name} INSTALL cmd) _ep_get_build_command(${name} INSTALL cmd)
endif() endif()
ep_add_step(${name} install ep_add_step(${name} install
COMMAND ${cmd} COMMAND ${cmd}
WORKING_DIRECTORY ${binary_dir} WORKING_DIRECTORY ${binary_dir}
@ -806,6 +823,38 @@ function(_ep_add_install_command name)
endfunction(_ep_add_install_command) endfunction(_ep_add_install_command)
function(_ep_add_test_command name)
ep_get(${name} binary_dir)
get_property(before TARGET ${name} PROPERTY _EP_TEST_BEFORE_INSTALL)
get_property(after TARGET ${name} PROPERTY _EP_TEST_AFTER_INSTALL)
get_property(cmd_set TARGET ${name} PROPERTY _EP_TEST_COMMAND SET)
# Only actually add the test step if one of the test related properties is
# explicitly set. (i.e. the test step is omitted unless requested...)
#
if(cmd_set OR before OR after)
if(cmd_set)
get_property(cmd TARGET ${name} PROPERTY _EP_TEST_COMMAND)
else()
_ep_get_build_command(${name} TEST cmd)
endif()
if(before)
set(dep_args DEPENDEES build DEPENDERS install)
else()
set(dep_args DEPENDEES install)
endif()
ep_add_step(${name} test
COMMAND ${cmd}
WORKING_DIRECTORY ${binary_dir}
${dep_args}
)
endif()
endfunction(_ep_add_test_command)
function(ep_add name) function(ep_add name)
# Add a custom target for the external project. # Add a custom target for the external project.
set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles) set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
@ -850,4 +899,9 @@ function(ep_add name)
_ep_add_configure_command(${name}) _ep_add_configure_command(${name})
_ep_add_build_command(${name}) _ep_add_build_command(${name})
_ep_add_install_command(${name}) _ep_add_install_command(${name})
# Test is special in that it might depend on build, or it might depend
# on install.
#
_ep_add_test_command(${name})
endfunction(ep_add) endfunction(ep_add)

View File

@ -52,7 +52,8 @@ ep_add(${proj}
INSTALL_COMMAND "" INSTALL_COMMAND ""
PATCH_COMMAND "" PATCH_COMMAND ""
SVN_REPOSITORY "" SVN_REPOSITORY ""
SVN_TAG "" SVN_REVISION ""
TEST_COMMAND ""
URL "" URL ""
UPDATE_COMMAND "" UPDATE_COMMAND ""
) )
@ -65,9 +66,17 @@ if(can_build_tutorial_step5)
ep_add(${proj} ep_add(${proj}
URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5" URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR> CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
TEST_BEFORE_INSTALL 1
) )
ep_get(${proj} install_dir) ep_get(${proj} install_dir)
set(TutorialStep5_install_dir ${install_dir}) set(TutorialStep5_install_dir ${install_dir})
set(proj TutorialStep5-Local-TestAfterInstall)
ep_add(${proj}
URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
TEST_AFTER_INSTALL 1
)
endif() endif()
@ -247,7 +256,7 @@ if(do_svn_tests)
set(proj TutorialStep1-SVN-20090626) set(proj TutorialStep1-SVN-20090626)
ep_add(${proj} ep_add(${proj}
SVN_REPOSITORY "${local_svn_repo_url}" SVN_REPOSITORY "${local_svn_repo_url}"
SVN_TAG "-r{2009-06-26 16:50:00 +0000}" SVN_REVISION "-r{2009-06-26 16:50:00 +0000}"
UPDATE_COMMAND "" UPDATE_COMMAND ""
CMAKE_GENERATOR "${CMAKE_GENERATOR}" CMAKE_GENERATOR "${CMAKE_GENERATOR}"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
@ -260,7 +269,7 @@ if(do_svn_tests)
set(proj TutorialStep1-SVN-r2) set(proj TutorialStep1-SVN-r2)
ep_add(${proj} ep_add(${proj}
SVN_REPOSITORY "${local_svn_repo_url}" SVN_REPOSITORY "${local_svn_repo_url}"
SVN_TAG "-r2" SVN_REVISION "-r2"
UPDATE_COMMAND "" UPDATE_COMMAND ""
CMAKE_GENERATOR "${CMAKE_GENERATOR}" CMAKE_GENERATOR "${CMAKE_GENERATOR}"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
@ -268,7 +277,7 @@ if(do_svn_tests)
DEPENDS "SetupLocalSVNRepository" DEPENDS "SetupLocalSVNRepository"
) )
# Live SVN / trunk (no SVN_TAG): # Live SVN / trunk (no SVN_REVISION):
# #
set(proj TutorialStep1-SVN-trunk) set(proj TutorialStep1-SVN-trunk)
ep_add(${proj} ep_add(${proj}