[Cmake-commits] [cmake-commits] david.cole committed AddExternalProject.cmake 1.2 1.3
cmake-commits at cmake.org
cmake-commits at cmake.org
Mon Dec 8 14:59:01 EST 2008
Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv16726
Modified Files:
AddExternalProject.cmake
Log Message:
BUG: Make sure all directories used as working directories exist at CMake configure time as well as having custom commands that create them. Necessary for the Borland Makefiles generator to generate short path names in the makefile build rules. Also, make sure all custom commands chain together properly through the use of the sentinel files.
Index: AddExternalProject.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/AddExternalProject.cmake,v
retrieving revision 1.2
retrieving revision 1.3
diff -C 2 -d -r1.2 -r1.3
*** AddExternalProject.cmake 5 Dec 2008 20:18:32 -0000 1.2
--- AddExternalProject.cmake 8 Dec 2008 19:58:59 -0000 1.3
***************
*** 67,70 ****
--- 67,79 ----
+ function(mkdir d)
+ file(MAKE_DIRECTORY "${d}")
+ #message(STATUS "mkdir d='${d}'")
+ if(NOT EXISTS "${d}")
+ message(FATAL_ERROR "error: dir '${d}' does not exist after file(MAKE_DIRECTORY call...")
+ endif()
+ endfunction(mkdir)
+
+
function(add_external_project_download_command name)
set(added 0)
***************
*** 82,85 ****
--- 91,95 ----
WORKING_DIRECTORY ${sentinels_dir}
COMMENT "No download step for '${name}'"
+ DEPENDS ${sentinels_dir}/CMakeExternals-directories
)
set(added 1)
***************
*** 99,102 ****
--- 109,113 ----
WORKING_DIRECTORY ${downloads_dir}
COMMENT "Performing download step for '${name}'"
+ DEPENDS ${sentinels_dir}/CMakeExternals-directories
)
set(added 1)
***************
*** 128,132 ****
set(args -d ${cvs_repository} co ${cvs_tag} -d ${name} ${cvs_module})
- set(wd "${source_dir}")
set(repository ${cvs_repository})
--- 139,142 ----
***************
*** 140,150 ****
)
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
COMMAND ${CVS_EXECUTABLE} ${args}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
! WORKING_DIRECTORY ${wd}
COMMENT "Performing download step (CVS checkout) for '${name}'"
! DEPENDS "${sentinels_dir}/${name}-cvsinfo.txt"
)
set(added 1)
--- 150,161 ----
)
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
COMMAND ${CVS_EXECUTABLE} ${args}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
! WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (CVS checkout) for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-cvsinfo.txt
)
set(added 1)
***************
*** 167,171 ****
set(args co ${svn_repository} ${svn_tag} ${name})
- set(wd "${source_dir}")
set(repository ${svn_repository})
--- 178,181 ----
***************
*** 179,189 ****
)
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
COMMAND ${Subversion_SVN_EXECUTABLE} ${args}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
! WORKING_DIRECTORY ${wd}
COMMENT "Performing download step (SVN checkout) for '${name}'"
! DEPENDS "${sentinels_dir}/${name}-svninfo.txt"
)
set(added 1)
--- 189,200 ----
)
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
COMMAND ${Subversion_SVN_EXECUTABLE} ${args}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
! WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (SVN checkout) for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-svninfo.txt
)
set(added 1)
***************
*** 195,205 ****
get_target_property(dir ${name} AEP_DIR)
if(dir)
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
! COMMAND ${CMAKE_COMMAND} -E copy_directory ${dir} ${source_dir}/${name}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (DIR copy) for '${name}'"
! DEPENDS ${dir}
)
set(added 1)
--- 206,230 ----
get_target_property(dir ${name} AEP_DIR)
if(dir)
+ get_filename_component(abs_dir "${dir}" ABSOLUTE)
+
+ set(repository "add_external_project DIR")
+ set(module "${abs_dir}")
+ set(tag "")
+
+ configure_file(
+ "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+ "${sentinels_dir}/${name}-dirinfo.txt"
+ @ONLY
+ )
+
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
! COMMAND ${CMAKE_COMMAND} -E remove_directory ${source_dir}/${name}
! COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir}/${name}
COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-download
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (DIR copy) for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-dirinfo.txt
)
set(added 1)
***************
*** 211,214 ****
--- 236,240 ----
get_target_property(tar ${name} AEP_TAR)
if(tar)
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
***************
*** 227,230 ****
--- 253,257 ----
get_target_property(tgz ${name} AEP_TGZ)
if(tgz)
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
***************
*** 243,246 ****
--- 270,284 ----
get_target_property(tgz_url ${name} AEP_TGZ_URL)
if(tgz_url)
+ set(repository "add_external_project TGZ_URL")
+ set(module "${tgz_url}")
+ set(tag "")
+
+ configure_file(
+ "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+ "${sentinels_dir}/${name}-urlinfo.txt"
+ @ONLY
+ )
+
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
***************
*** 250,254 ****
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (TGZ_URL download and untar) for '${name}'"
! DEPENDS ${downloads_dir}/${name}.tgz
)
set(added 1)
--- 288,292 ----
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (TGZ_URL download and untar) for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-urlinfo.txt
)
set(added 1)
***************
*** 256,262 ****
--- 294,312 ----
endif(NOT added)
+
if(NOT added)
get_target_property(tar_url ${name} AEP_TAR_URL)
if(tar_url)
+ set(repository "add_external_project TAR_URL")
+ set(module "${tar_url}")
+ set(tag "")
+
+ configure_file(
+ "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+ "${sentinels_dir}/${name}-urlinfo.txt"
+ @ONLY
+ )
+
+ mkdir("${source_dir}/${name}")
add_custom_command(
OUTPUT ${sentinels_dir}/${name}-download
***************
*** 266,270 ****
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (TAR_URL download and untar) for '${name}'"
! DEPENDS ${downloads_dir}/${name}.tar
)
set(added 1)
--- 316,320 ----
WORKING_DIRECTORY ${source_dir}
COMMENT "Performing download step (TAR_URL download and untar) for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-urlinfo.txt
)
set(added 1)
***************
*** 286,292 ****
# Create the working_dir for configure, build and install steps:
#
add_custom_command(
! OUTPUT ${working_dir}
COMMAND ${CMAKE_COMMAND} -E make_directory ${working_dir}
DEPENDS ${sentinels_dir}/${name}-download
)
--- 336,344 ----
# Create the working_dir for configure, build and install steps:
#
+ mkdir("${working_dir}")
add_custom_command(
! OUTPUT ${sentinels_dir}/${name}-working_dir
COMMAND ${CMAKE_COMMAND} -E make_directory ${working_dir}
+ COMMAND ${CMAKE_COMMAND} -E touch ${sentinels_dir}/${name}-working_dir
DEPENDS ${sentinels_dir}/${name}-download
)
***************
*** 300,304 ****
WORKING_DIRECTORY ${working_dir}
COMMENT "No configure step for '${name}'"
! DEPENDS ${working_dir} ${sentinels_dir}/${name}-download
)
else()
--- 352,356 ----
WORKING_DIRECTORY ${working_dir}
COMMENT "No configure step for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-working_dir
)
else()
***************
*** 320,324 ****
WORKING_DIRECTORY ${working_dir}
COMMENT "Performing configure step for '${name}'"
! DEPENDS ${working_dir} ${sentinels_dir}/${name}-download
)
endif()
--- 372,376 ----
WORKING_DIRECTORY ${working_dir}
COMMENT "Performing configure step for '${name}'"
! DEPENDS ${sentinels_dir}/${name}-working_dir
)
endif()
***************
*** 424,427 ****
--- 476,495 ----
sentinels_dir source_dir tmp_dir)
+ # Make the directories at CMake configure time *and* add a custom command
+ # to make them at build time. They need to exist at makefile generation
+ # time for Borland make and wmake so that CMake may generate makefiles
+ # with "cd C:\short\paths\with\no\spaces" commands in them.
+ #
+ # Additionally, the add_custom_command is still used in case somebody
+ # removes one of the necessary directories and tries to rebuild without
+ # re-running cmake.
+ #
+ mkdir("${build_dir}")
+ mkdir("${downloads_dir}")
+ mkdir("${install_dir}")
+ mkdir("${sentinels_dir}")
+ mkdir("${source_dir}")
+ mkdir("${tmp_dir}")
+
add_custom_command(
OUTPUT ${sentinels_dir}/CMakeExternals-directories
More information about the Cmake-commits
mailing list