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.
This commit is contained in:
parent
90f24f016e
commit
1ba9b53547
|
@ -0,0 +1,6 @@
|
|||
external-project-no-extract
|
||||
---------------------------
|
||||
|
||||
* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
|
||||
argument to skip extracting the file that is downloaded (e.g., for
|
||||
self-extracting shell installers or ``.msi`` files).
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue