[Cmake-commits] [cmake-commits] king committed AddExternalProject.cmake 1.13 1.14
cmake-commits at cmake.org
cmake-commits at cmake.org
Mon Mar 30 11:36:34 EDT 2009
Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv29499/Modules
Modified Files:
AddExternalProject.cmake
Log Message:
ENH: Generalize AddExternalProject step creation
This creates function 'add_external_project_step' to centralize creation
of external project steps. Users may call it to add custom steps to
external project builds.
Index: AddExternalProject.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/AddExternalProject.cmake,v
retrieving revision 1.13
retrieving revision 1.14
diff -C 2 -d -r1.13 -r1.14
*** AddExternalProject.cmake 30 Mar 2009 15:35:50 -0000 1.13
--- AddExternalProject.cmake 30 Mar 2009 15:36:31 -0000 1.14
***************
*** 16,19 ****
--- 16,20 ----
foreach(arg IN LISTS args)
if(arg MATCHES "^[A-Z][A-Z_][A-Z_]+$" AND
+ NOT ((arg STREQUAL "${key}") AND (key STREQUAL "COMMAND")) AND
NOT arg MATCHES "^(TRUE|FALSE)$")
# Keyword
***************
*** 159,162 ****
--- 160,244 ----
endfunction(mkdir)
+ # Pre-compute a regex to match known keywords.
+ set(_aep_keyword_regex "^(")
+ set(_aep_keyword_sep)
+ foreach(key IN ITEMS
+ COMMAND
+ COMMENT
+ DEPENDEES
+ DEPENDERS
+ DEPENDS
+ SYMBOLIC
+ WORKING_DIRECTORY
+ )
+ set(_aep_keyword_regex "${_aep_keyword_regex}${_aep_keyword_sep}${key}")
+ set(_aep_keyword_sep "|")
+ endforeach(key)
+ set(_aep_keyword_regex "${_aep_keyword_regex})$")
+ set(_aep_keyword_sep)
+ set(_aep_keywords_add_external_project_step "${_aep_keyword_regex}")
+
+ function(add_external_project_step name step)
+ get_external_project_directories(base_dir build_dir downloads_dir install_dir
+ sentinels_dir source_dir tmp_dir)
+ add_custom_command(APPEND
+ OUTPUT ${sentinels_dir}/${name}-complete
+ DEPENDS ${sentinels_dir}/${name}-${step}
+ )
+ _aep_parse_arguments(add_external_project_step
+ ${name} AEP_${step}_ "${ARGN}")
+
+ # Steps depending on this step.
+ get_property(dependers TARGET ${name} PROPERTY AEP_${step}_DEPENDERS)
+ foreach(depender IN LISTS dependers)
+ add_custom_command(APPEND
+ OUTPUT ${sentinels_dir}/${name}-${depender}
+ DEPENDS ${sentinels_dir}/${name}-${step}
+ )
+ endforeach()
+
+ # Dependencies on files.
+ get_property(depends TARGET ${name} PROPERTY AEP_${step}_DEPENDS)
+
+ # Dependencies on steps.
+ get_property(dependees TARGET ${name} PROPERTY AEP_${step}_DEPENDEES)
+ foreach(dependee IN LISTS dependees)
+ list(APPEND depends ${sentinels_dir}/${name}-${dependee})
+ endforeach()
+
+ # The command to run.
+ get_property(command TARGET ${name} PROPERTY AEP_${step}_COMMAND)
+ if(command)
+ set(comment "Performing ${step} step for '${name}'")
+ else()
+ set(comment "No ${step} step for '${name}'")
+ endif()
+ get_property(work_dir TARGET ${name} PROPERTY AEP_${step}_WORKING_DIRECTORY)
+
+ # Custom comment?
+ get_property(comment_set TARGET ${name} PROPERTY AEP_${step}_COMMENT SET)
+ if(comment_set)
+ get_property(comment TARGET ${name} PROPERTY AEP_${step}_COMMENT)
+ endif()
+
+ # Run every time?
+ get_property(symbolic TARGET ${name} PROPERTY AEP_${step}_SYMBOLIC)
+ if(symbolic)
+ set_property(SOURCE ${sentinels_dir}/${name}-${step} PROPERTY SYMBOLIC 1)
+ set(touch)
+ else()
+ set(touch ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-${step})
+ endif()
+
+ add_custom_command(
+ OUTPUT ${sentinels_dir}/${name}-${step}
+ COMMENT ${comment}
+ COMMAND ${command}
+ COMMAND ${touch}
+ DEPENDS ${depends}
+ WORKING_DIRECTORY ${work_dir}
+ VERBATIM
+ )
+ endfunction(add_external_project_step)
function(add_external_project_download_command name)
More information about the Cmake-commits
mailing list