summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2016-03-29 14:25:01 (GMT)
committerBrad King <brad.king@kitware.com>2016-03-31 12:37:12 (GMT)
commit1ba9b535478a2a73100a6b0e9bf01983b4774cb8 (patch)
tree56a5eb3a95e10b2d7e82b054caf7de63daadbaa4 /Modules
parent90f24f016e93d18f6a244b39fd21c68355bdbe48 (diff)
downloadCMake-1ba9b535478a2a73100a6b0e9bf01983b4774cb8.zip
CMake-1ba9b535478a2a73100a6b0e9bf01983b4774cb8.tar.gz
CMake-1ba9b535478a2a73100a6b0e9bf01983b4774cb8.tar.bz2
ExternalProject: add support for just downloading a file
Some projects only ship self-extracting installers rather than compressed archives. Add a flag so that these files may be used in ExternalProject.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/ExternalProject.cmake32
1 files changed, 26 insertions, 6 deletions
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index 249658d..0c4d9d8 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -77,6 +77,9 @@ Create custom targets to build projects in external trees
Path to a certificate authority file
``TIMEOUT <seconds>``
Time allowed for file download operations
+ ``DOWNLOAD_NO_EXTRACT 1``
+ Just download the file and do not extract it; the full path to the
+ downloaded file is available as ``<DOWNLOADED_FILE>``.
Update/Patch step options are:
@@ -1107,7 +1110,7 @@ macro(_ep_replace_location_tags target_name)
set(vars ${ARGN})
foreach(var ${vars})
if(${var})
- foreach(dir SOURCE_DIR BINARY_DIR INSTALL_DIR TMP_DIR)
+ foreach(dir SOURCE_DIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOADED_FILE)
get_property(val TARGET ${target_name} PROPERTY _EP_${dir})
string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}")
endforeach()
@@ -1875,6 +1878,7 @@ function(_ep_add_download_command name)
set(cmd ${CMAKE_COMMAND} -E remove_directory ${source_dir}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir})
else()
+ get_property(no_extract TARGET "${name}" PROPERTY _EP_DOWNLOAD_NO_EXTRACT SET)
if("${url}" MATCHES "^[a-z]+://")
# TODO: Should download and extraction be different steps?
if("x${fname}" STREQUAL "x")
@@ -1884,7 +1888,9 @@ function(_ep_add_download_command name)
string(REGEX MATCH "([^/\\?]+(\\.|=)(7z|tar|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip))/.*$" match_result "${url}")
set(fname "${CMAKE_MATCH_1}")
endif()
- if(NOT "${fname}" MATCHES "(\\.|=)(7z|tar|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip)$")
+ if (no_extract)
+ get_filename_component(fname "${url}" NAME)
+ elseif(NOT "${fname}" MATCHES "(\\.|=)(7z|tar|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip)$")
message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}")
endif()
string(REPLACE ";" "-" fname "${fname}")
@@ -1898,16 +1904,30 @@ function(_ep_add_download_command name)
set(cmd ${CMAKE_COMMAND} -P "${download_script}"
COMMAND)
set(retries 3)
- set(comment "Performing download step (download, verify and extract) for '${name}'")
+ if (no_extract)
+ set(steps "download and verify")
+ else ()
+ set(steps "download, verify and extract")
+ endif ()
+ set(comment "Performing download step (${steps}) for '${name}'")
else()
set(file "${url}")
- set(comment "Performing download step (verify and extract) for '${name}'")
+ if (no_extract)
+ set(steps "verify")
+ else ()
+ set(steps "verify and extract")
+ endif ()
+ set(comment "Performing download step (${steps}) for '${name}'")
endif()
_ep_write_verifyfile_script("${stamp_dir}/verify-${name}.cmake" "${file}" "${hash}" "${retries}" "${download_script}")
list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/verify-${name}.cmake
COMMAND)
- _ep_write_extractfile_script("${stamp_dir}/extract-${name}.cmake" "${name}" "${file}" "${source_dir}")
- list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/extract-${name}.cmake)
+ if (NOT no_extract)
+ _ep_write_extractfile_script("${stamp_dir}/extract-${name}.cmake" "${name}" "${file}" "${source_dir}")
+ list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/extract-${name}.cmake)
+ else ()
+ set_property(TARGET ${name} PROPERTY _EP_DOWNLOADED_FILE ${file})
+ endif ()
endif()
else()
_ep_is_dir_empty("${source_dir}" empty)