[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