[Cmake-commits] [cmake-commits] david.cole committed ExternalProject.cmake 1.12 1.13

cmake-commits at cmake.org cmake-commits at cmake.org
Wed Sep 30 16:22:38 EDT 2009


Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv10150

Modified Files:
	ExternalProject.cmake 
Log Message:
Eliminate ExternalProject's use of CMAKE_CFG_INTDIR subdir for Makefile generators. It was causing problems with parallel make -j invocations. Keep it for multi-configuration build systems so that Debug and Release stamp files remain separate.


Index: ExternalProject.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/ExternalProject.cmake,v
retrieving revision 1.12
retrieving revision 1.13
diff -C 2 -d -r1.12 -r1.13
*** ExternalProject.cmake	28 Sep 2009 15:46:50 -0000	1.12
--- ExternalProject.cmake	30 Sep 2009 20:22:36 -0000	1.13
***************
*** 486,496 ****
  
  
  function(ExternalProject_Add_Step name step)
    set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
    ExternalProject_Get_Property(${name} stamp_dir)
  
    add_custom_command(APPEND
!     OUTPUT ${cmf_dir}/${CMAKE_CFG_INTDIR}/${name}-complete
!     DEPENDS ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${step}
      )
    _ep_parse_arguments(ExternalProject_Add_Step
--- 486,515 ----
  
  
+ # This module used to use "/${CMAKE_CFG_INTDIR}" directly and produced
+ # makefiles with "/./" in paths for custom command dependencies. Which
+ # resulted in problems with parallel make -j invocations.
+ #
+ # This function was added so that the suffix (search below for ${cfgdir}) is
+ # only set to "/${CMAKE_CFG_INTDIR}" when ${CMAKE_CFG_INTDIR} is not going to
+ # be "." (multi-configuration build systems like Visual Studio and Xcode...)
+ #
+ function(_ep_get_configuration_subdir_suffix suffix_var)
+   set(suffix "")
+   if(CMAKE_CONFIGURATION_TYPES)
+     set(suffix "/${CMAKE_CFG_INTDIR}")
+   endif()
+   set(${suffix_var} "${suffix}" PARENT_SCOPE)
+ endfunction(_ep_get_configuration_subdir_suffix)
+ 
+ 
  function(ExternalProject_Add_Step name step)
    set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
    ExternalProject_Get_Property(${name} stamp_dir)
  
+   _ep_get_configuration_subdir_suffix(cfgdir)
+ 
    add_custom_command(APPEND
!     OUTPUT ${cmf_dir}${cfgdir}/${name}-complete
!     DEPENDS ${stamp_dir}${cfgdir}/${name}-${step}
      )
    _ep_parse_arguments(ExternalProject_Add_Step
***************
*** 501,506 ****
    foreach(depender IN LISTS dependers)
      add_custom_command(APPEND
!       OUTPUT ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${depender}
!       DEPENDS ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${step}
        )
    endforeach()
--- 520,525 ----
    foreach(depender IN LISTS dependers)
      add_custom_command(APPEND
!       OUTPUT ${stamp_dir}${cfgdir}/${name}-${depender}
!       DEPENDS ${stamp_dir}${cfgdir}/${name}-${step}
        )
    endforeach()
***************
*** 512,516 ****
    get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES)
    foreach(dependee IN LISTS dependees)
!     list(APPEND depends ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${dependee})
    endforeach()
  
--- 531,535 ----
    get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES)
    foreach(dependee IN LISTS dependees)
!     list(APPEND depends ${stamp_dir}${cfgdir}/${name}-${dependee})
    endforeach()
  
***************
*** 549,560 ****
    get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS)
    if(always)
!     set_property(SOURCE ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${step} PROPERTY SYMBOLIC 1)
      set(touch)
    else()
!     set(touch ${CMAKE_COMMAND} -E touch ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${step})
    endif()
  
    add_custom_command(
!     OUTPUT ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-${step}
      COMMENT ${comment}
      COMMAND ${command}
--- 568,579 ----
    get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS)
    if(always)
!     set_property(SOURCE ${stamp_dir}${cfgdir}/${name}-${step} PROPERTY SYMBOLIC 1)
      set(touch)
    else()
!     set(touch ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-${step})
    endif()
  
    add_custom_command(
!     OUTPUT ${stamp_dir}${cfgdir}/${name}-${step}
      COMMENT ${comment}
      COMMAND ${command}
***************
*** 570,573 ****
--- 589,595 ----
    ExternalProject_Get_Property(${name}
      source_dir binary_dir install_dir stamp_dir download_dir tmp_dir)
+ 
+   _ep_get_configuration_subdir_suffix(cfgdir)
+ 
    ExternalProject_Add_Step(${name} mkdir
      COMMENT "Creating directories for '${name}'"
***************
*** 576,580 ****
      COMMAND ${CMAKE_COMMAND} -E make_directory ${install_dir}
      COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir}
!     COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}/${CMAKE_CFG_INTDIR}
      COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir}
      )
--- 598,602 ----
      COMMAND ${CMAKE_COMMAND} -E make_directory ${install_dir}
      COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir}
!     COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}${cfgdir}
      COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir}
      )
***************
*** 767,770 ****
--- 789,794 ----
    ExternalProject_Get_Property(${name} source_dir binary_dir)
  
+   _ep_get_configuration_subdir_suffix(cfgdir)
+ 
    # Depend on other external projects (file-level).
    set(file_deps)
***************
*** 772,776 ****
    foreach(dep IN LISTS deps)
      get_property(dep_stamp_dir TARGET ${dep} PROPERTY _EP_STAMP_DIR)
!     list(APPEND file_deps ${dep_stamp_dir}/${CMAKE_CFG_INTDIR}/${dep}-done)
    endforeach()
  
--- 796,800 ----
    foreach(dep IN LISTS deps)
      get_property(dep_stamp_dir TARGET ${dep} PROPERTY _EP_STAMP_DIR)
!     list(APPEND file_deps ${dep_stamp_dir}${cfgdir}/${dep}-done)
    endforeach()
  
***************
*** 875,881 ****
  
  function(ExternalProject_Add name)
    # Add a custom target for the external project.
    set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
!   add_custom_target(${name} ALL DEPENDS ${cmf_dir}/${CMAKE_CFG_INTDIR}/${name}-complete)
    set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1)
    _ep_parse_arguments(ExternalProject_Add ${name} _EP_ "${ARGN}")
--- 899,907 ----
  
  function(ExternalProject_Add name)
+   _ep_get_configuration_subdir_suffix(cfgdir)
+ 
    # Add a custom target for the external project.
    set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
!   add_custom_target(${name} ALL DEPENDS ${cmf_dir}${cfgdir}/${name}-complete)
    set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1)
    _ep_parse_arguments(ExternalProject_Add ${name} _EP_ "${ARGN}")
***************
*** 890,899 ****
    # other external project targets.
    add_custom_command(
!     OUTPUT ${cmf_dir}/${CMAKE_CFG_INTDIR}/${name}-complete
      COMMENT "Completed '${name}'"
!     COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}/${CMAKE_CFG_INTDIR}
!     COMMAND ${CMAKE_COMMAND} -E touch ${cmf_dir}/${CMAKE_CFG_INTDIR}/${name}-complete
!     COMMAND ${CMAKE_COMMAND} -E touch ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-done
!     DEPENDS ${stamp_dir}/${CMAKE_CFG_INTDIR}/${name}-install
      VERBATIM
      )
--- 916,925 ----
    # other external project targets.
    add_custom_command(
!     OUTPUT ${cmf_dir}${cfgdir}/${name}-complete
      COMMENT "Completed '${name}'"
!     COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}${cfgdir}
!     COMMAND ${CMAKE_COMMAND} -E touch ${cmf_dir}${cfgdir}/${name}-complete
!     COMMAND ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-done
!     DEPENDS ${stamp_dir}${cfgdir}/${name}-install
      VERBATIM
      )



More information about the Cmake-commits mailing list