diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2016-03-29 14:25:01 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-03-31 12:37:12 (GMT) |
commit | 1ba9b535478a2a73100a6b0e9bf01983b4774cb8 (patch) | |
tree | 56a5eb3a95e10b2d7e82b054caf7de63daadbaa4 /Modules | |
parent | 90f24f016e93d18f6a244b39fd21c68355bdbe48 (diff) | |
download | CMake-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.cmake | 32 |
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) |