[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