ENH: Simpler AddExternalProject update step

This simplifies the implementation with add_external_project_step.
This commit is contained in:
Brad King 2009-03-30 11:37:29 -04:00
parent feef81b34f
commit aa7e41c16e

View File

@ -390,96 +390,43 @@ function(add_external_project_update_command name)
get_external_project_directories(base_dir build_dir downloads_dir install_dir get_external_project_directories(base_dir build_dir downloads_dir install_dir
sentinels_dir source_dir tmp_dir) sentinels_dir source_dir tmp_dir)
get_property(cmd TARGET ${name} PROPERTY AEP_UPDATE_COMMAND)
get_property(cvs_repository TARGET ${name} PROPERTY AEP_CVS_REPOSITORY)
get_property(svn_repository TARGET ${name} PROPERTY AEP_SVN_REPOSITORY)
get_target_property(cmd ${name} AEP_UPDATE_COMMAND) set(work_dir)
if(cmd STREQUAL "") set(comment)
# Explicit empty string means no update step for this project set(symbolic)
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-update
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-update
WORKING_DIRECTORY ${sentinels_dir}
COMMENT "No update step for '${name}'"
DEPENDS ${sentinels_dir}/${name}-download
)
return()
else()
if(cmd) if(cmd)
add_custom_command( set(work_dir ${source_dir}/${name})
OUTPUT ${sentinels_dir}/${name}-update elseif(cvs_repository)
COMMAND ${cmd}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-update
WORKING_DIRECTORY ${source_dir}/${name}
COMMENT "Performing update step for '${name}'"
DEPENDS ${sentinels_dir}/${name}-download
VERBATIM
)
return()
else()
# No explicit UPDATE_COMMAND property. Look for other properties
# indicating which update method to use in the logic below...
endif()
endif()
get_target_property(cvs_repository ${name} AEP_CVS_REPOSITORY)
if(cvs_repository)
if(NOT CVS_EXECUTABLE) if(NOT CVS_EXECUTABLE)
message(FATAL_ERROR "error: could not find cvs for update of ${name}") message(FATAL_ERROR "error: could not find cvs for update of ${name}")
endif() endif()
get_property(cvs_tag TARGET ${name} PROPERTY AEP_CVS_TAG)
set(args -d ${cvs_repository} -q up -dP ${cvs_tag})
mkdir("${source_dir}/${name}") mkdir("${source_dir}/${name}")
add_custom_command( set(work_dir ${source_dir}/${name})
OUTPUT ${sentinels_dir}/${name}-update set(comment "Performing update step (CVS update) for '${name}'")
COMMAND ${CVS_EXECUTABLE} ${args} get_property(cvs_tag TARGET ${name} PROPERTY AEP_CVS_TAG)
WORKING_DIRECTORY ${source_dir}/${name} set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q up -dP ${cvs_tag})
COMMENT "Performing update step (CVS update) for '${name}'" set(symbolic 1)
DEPENDS ${sentinels_dir}/${name}-download elseif(svn_repository)
VERBATIM
)
# Since the update sentinel is not actually written:
set_property(SOURCE ${sentinels_dir}/${name}-update
PROPERTY SYMBOLIC 1)
return()
endif()
get_target_property(svn_repository ${name} AEP_SVN_REPOSITORY)
if(svn_repository)
if(NOT Subversion_SVN_EXECUTABLE) if(NOT Subversion_SVN_EXECUTABLE)
message(FATAL_ERROR "error: could not find svn for update of ${name}") message(FATAL_ERROR "error: could not find svn for update of ${name}")
endif() endif()
get_property(svn_tag TARGET ${name} PROPERTY AEP_SVN_TAG)
set(args up ${svn_tag})
mkdir("${source_dir}/${name}") mkdir("${source_dir}/${name}")
add_custom_command( set(work_dir ${source_dir}/${name})
OUTPUT ${sentinels_dir}/${name}-update set(comment "Performing update step (SVN update) for '${name}'")
COMMAND ${Subversion_SVN_EXECUTABLE} ${args} get_property(svn_tag TARGET ${name} PROPERTY AEP_SVN_TAG)
WORKING_DIRECTORY ${source_dir}/${name} set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_tag})
COMMENT "Performing update step (SVN update) for '${name}'" set(symbolic 1)
DEPENDS ${sentinels_dir}/${name}-download
VERBATIM
)
# Since the update sentinel is not actually written:
set_property(SOURCE ${sentinels_dir}/${name}-update
PROPERTY SYMBOLIC 1)
return()
endif() endif()
add_external_project_step(${name} update
add_custom_command( COMMENT ${comment}
OUTPUT ${sentinels_dir}/${name}-update COMMAND ${cmd}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-update SYMBOLIC ${symbolic}
WORKING_DIRECTORY ${sentinels_dir} WORKING_DIRECTORY ${work_dir}
COMMENT "No update step for '${name}'" DEPENDEES download
DEPENDS ${sentinels_dir}/${name}-download
VERBATIM
) )
endfunction(add_external_project_update_command) endfunction(add_external_project_update_command)