[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