Quellcode durchsuchen

Merge branch 'more-formats-in-ExternalProject'

Brad King vor 15 Jahren
Ursprung
Commit
79f01660c9

+ 9 - 9
Modules/ExternalProject.cmake

@@ -249,20 +249,16 @@ endfunction(_ep_write_downloadfile_script)
 function(_ep_write_extractfile_script script_filename filename directory)
   set(args "")
 
-  if(filename MATCHES ".tar$")
-    set(args xf)
-  endif()
-
-  if(filename MATCHES ".tgz$")
+  if(filename MATCHES "(\\.bz2|\\.tar\\.gz|\\.tgz|\\.zip)$")
     set(args xfz)
   endif()
 
-  if(filename MATCHES ".tar.gz$")
-    set(args xfz)
+  if(filename MATCHES "\\.tar$")
+    set(args xf)
   endif()
 
   if(args STREQUAL "")
-    message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .tar, .tgz and .tar.gz")
+    message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .bz2, .tar, .tar.gz, .tgz and .zip")
     return()
   endif()
 
@@ -276,6 +272,10 @@ message(STATUS \"extracting...
      src='\${filename}'
      dst='\${directory}'\")
 
+if(NOT EXISTS \"\${filename}\")
+  message(FATAL_ERROR \"error: file to extract does not exist: '\${filename}'\")
+endif()
+
 # Prepare a space for extracting:
 #
 set(i 1234)
@@ -703,7 +703,7 @@ function(_ep_add_download_command name)
       if("${url}" MATCHES "^[a-z]+://")
         # TODO: Should download and extraction be different steps?
         string(REGEX MATCH "[^/]*$" fname "${url}")
-        if(NOT "${fname}" MATCHES "\\.(tar|tgz|tar\\.gz)$")
+        if(NOT "${fname}" MATCHES "\\.(bz2|tar|tgz|tar\\.gz|zip)$")
           message(FATAL_ERROR "Could not extract tarball filename from url:\n  ${url}")
         endif()
         set(file ${download_dir}/${fname})

+ 53 - 1
Tests/ExternalProject/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 2.8)
 project(ExternalProjectTest NONE)
 
 include(ExternalProject)
@@ -139,6 +139,56 @@ ExternalProject_Add(${proj}
 )
 
 
+# Local BZ2:
+#
+# (The bz2 tests are here just to verify that the bz2 decompression is executed
+#  during a test suite run... The configure and build commands are set to
+#  nothing to make the test quicker. To make this more complete, I should add
+#  a diff between this and the TGZ source tree since that one does build...)
+#
+set(proj TutorialStep1-LocalBZ2)
+ExternalProject_Add(${proj}
+  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar.bz2"
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+)
+
+set(proj TutorialStep1-LocalNoDirBZ2)
+ExternalProject_Add(${proj}
+  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2"
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+)
+
+
+# Local ZIP:
+#
+# (The zip tests are here just to verify that the zip decompression is executed
+#  during a test suite run... The configure and build commands are set to
+#  nothing to make the test quicker. To make this more complete, I should add
+#  a diff between this and the TGZ source tree since that one does build...)
+#
+set(proj TutorialStep1-LocalZIP)
+ExternalProject_Add(${proj}
+  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.zip"
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+)
+
+set(proj TutorialStep1-LocalNoDirZIP)
+ExternalProject_Add(${proj}
+  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip"
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+)
+
+
+# CVS-based tests:
+#
 set(do_cvs_tests 0)
 
 if(CVS_EXECUTABLE)
@@ -215,6 +265,8 @@ if(do_cvs_tests)
 endif()
 
 
+# SVN-based tests:
+#
 set(do_svn_tests 0)
 
 if(Subversion_SVN_EXECUTABLE)

+ 11 - 0
Tests/ExternalProject/Example/CMakeLists.txt

@@ -0,0 +1,11 @@
+# This is the canonical simplest ExternalProject example CMakeLists.txt file:
+cmake_minimum_required(VERSION 2.8)
+project(ExternalProjectExample NONE)
+include(ExternalProject)
+
+ExternalProject_Add(
+  cmake281
+  URL http://www.cmake.org/files/v2.8/cmake-2.8.1.tar.gz
+  CMAKE_ARGS -D CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+  BUILD_COMMAND ""
+)

BIN
Tests/ExternalProject/Step1.tar.bz2


BIN
Tests/ExternalProject/Step1.zip


BIN
Tests/ExternalProject/Step1NoDir.tar.bz2


BIN
Tests/ExternalProject/Step1NoDir.zip