[Cmake-commits] [cmake-commits] king committed AddExternalProject.cmake 1.7 1.8
cmake-commits at cmake.org
cmake-commits at cmake.org
Wed Mar 4 11:45:44 EST 2009
Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv27126/Modules
Modified Files:
AddExternalProject.cmake
Log Message:
ENH: Better recursive make in AddExternalProject
This teaches AddExternalProject to run "$(MAKE)" for build and install
steps of CMake-based external projects when using a Makefile generator.
It allows the external project to participate in a parallel make invoked
on the superproject.
Index: AddExternalProject.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/AddExternalProject.cmake,v
retrieving revision 1.7
retrieving revision 1.8
diff -C 2 -d -r1.7 -r1.8
*** AddExternalProject.cmake 4 Mar 2009 14:21:16 -0000 1.7
--- AddExternalProject.cmake 4 Mar 2009 16:45:40 -0000 1.8
***************
*** 66,69 ****
--- 66,118 ----
endfunction(get_configure_command_id)
+ function(_aep_get_build_command name step cmd_var args_var)
+ # No default arguments if command is user-specified.
+ set(args)
+
+ set(cmd "${${cmd_var}}")
+ if(NOT cmd)
+ get_configure_command_id(${name} cfg_cmd_id)
+ if(cfg_cmd_id STREQUAL "cmake")
+ # CMake project. Select build command based on generator.
+ get_target_property(cmake_generator ${name} AEP_CMAKE_GENERATOR)
+ if("${cmake_generator}" MATCHES "Make" AND
+ "${cmake_generator}" STREQUAL "${CMAKE_GENERATOR}")
+ # The project uses the same Makefile generator. Use recursive make.
+ set(cmd "$(MAKE)")
+ if(step STREQUAL "INSTALL")
+ set(args install)
+ endif()
+ else()
+ # Drive the project with "cmake --build".
+ get_target_property(cfg_cmd ${name} AEP_CONFIGURE_COMMAND)
+ if(cfg_cmd)
+ set(cmd "${cfg_cmd}")
+ else()
+ set(cmd "${CMAKE_COMMAND}")
+ endif()
+ set(args --build ${working_dir} --config ${CMAKE_CFG_INTDIR})
+ if(step STREQUAL "INSTALL")
+ list(APPEND args --target install)
+ endif()
+ endif()
+ else() # if(cfg_cmd_id STREQUAL "configure")
+ # Non-CMake project. Guess "make" and "make install".
+ set(cmd "make")
+ if(step STREQUAL "INSTALL")
+ set(args install)
+ endif()
+ endif()
+ endif()
+
+ # Use user-specified build arguments, if any.
+ get_property(have_args TARGET ${name} PROPERTY AEP_${step}_ARGS SET)
+ if(have_args)
+ get_target_property(args ${name} AEP_${step}_ARGS)
+ endif()
+
+ # Return answers to caller.
+ set(${cmd_var} "${cmd}" PARENT_SCOPE)
+ set(${args_var} "${args}" PARENT_SCOPE)
+ endfunction(_aep_get_build_command)
function(mkdir d)
***************
*** 444,447 ****
--- 493,504 ----
endif()
+ get_target_property(cmake_generator ${name} AEP_CMAKE_GENERATOR)
+ if(cmake_generator)
+ get_configure_command_id(${name} cfg_cmd_id)
+ if(cfg_cmd_id STREQUAL "cmake")
+ list(APPEND args "-G${cmake_generator}" "${source_dir}/${name}")
+ endif()
+ endif()
+
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-configure
***************
*** 472,498 ****
)
else()
! get_configure_command_id(${name} cfg_cmd_id)
!
! if(NOT cmd)
! set(cmd make)
! if(cfg_cmd_id STREQUAL "cmake")
! get_target_property(cfg_cmd ${name} AEP_CONFIGURE_COMMAND)
! if(cfg_cmd)
! set(cmd ${cfg_cmd})
! else()
! set(cmd ${CMAKE_COMMAND})
! endif()
! endif()
! endif()
!
! get_property(have_args TARGET ${name} PROPERTY AEP_BUILD_ARGS SET)
! if(have_args)
! get_target_property(args ${name} AEP_BUILD_ARGS)
! else()
! set(args)
! if(cfg_cmd_id STREQUAL "cmake")
! set(args --build ${working_dir} --config ${CMAKE_CFG_INTDIR})
! endif()
! endif()
add_custom_command(
--- 529,533 ----
)
else()
! _aep_get_build_command(${name} BUILD cmd args)
add_custom_command(
***************
*** 525,554 ****
)
else()
! get_configure_command_id(${name} cfg_cmd_id)
!
! if(NOT cmd)
! set(cmd make)
! if(cfg_cmd_id STREQUAL "cmake")
! get_target_property(cfg_cmd ${name} AEP_CONFIGURE_COMMAND)
! if(cfg_cmd)
! set(cmd ${cfg_cmd})
! else()
! set(cmd ${CMAKE_COMMAND})
! endif()
! endif()
! endif()
!
! get_property(have_args TARGET ${name} PROPERTY AEP_INSTALL_ARGS SET)
! if(have_args)
! get_target_property(args ${name} AEP_INSTALL_ARGS)
! else()
! set(args)
! if(cfg_cmd_id STREQUAL "cmake")
! set(args --build ${working_dir} --config ${CMAKE_CFG_INTDIR} --target install)
! endif()
! if(cfg_cmd_id STREQUAL "configure")
! set(args "install")
! endif()
! endif()
add_custom_command(
--- 560,564 ----
)
else()
! _aep_get_build_command(${name} INSTALL cmd args)
add_custom_command(
***************
*** 608,612 ****
set(${result_var} 0 PARENT_SCOPE)
! if(key MATCHES "^BUILD_ARGS|BUILD_COMMAND|CONFIGURE_ARGS|CONFIGURE_COMMAND|CONFIGURE_DIR|CVS_REPOSITORY|CVS_MODULE|CVS_TAG|DEPENDS|DOWNLOAD_ARGS|DOWNLOAD_COMMAND|DIR|INSTALL_ARGS|INSTALL_COMMAND|SVN_REPOSITORY|SVN_TAG|TAR|TAR_URL|TGZ|TGZ_URL|UPDATE_ARGS|UPDATE_COMMAND$"
)
#message(STATUS "info: recognized via MATCHES - key='${key}'")
--- 618,622 ----
set(${result_var} 0 PARENT_SCOPE)
! if(key MATCHES "^BUILD_ARGS|BUILD_COMMAND|CMAKE_GENERATOR|CONFIGURE_ARGS|CONFIGURE_COMMAND|CONFIGURE_DIR|CVS_REPOSITORY|CVS_MODULE|CVS_TAG|DEPENDS|DOWNLOAD_ARGS|DOWNLOAD_COMMAND|DIR|INSTALL_ARGS|INSTALL_COMMAND|SVN_REPOSITORY|SVN_TAG|TAR|TAR_URL|TGZ|TGZ_URL|UPDATE_ARGS|UPDATE_COMMAND$"
)
#message(STATUS "info: recognized via MATCHES - key='${key}'")
More information about the Cmake-commits
mailing list