ExternalProject: Restore logic to not download already-existing file

The change in commit v3.1.0-rc1~85^2 (ExternalProject: Fix download
retry logic, 2014-09-13) dropped the file(DOWNLOAD) EXPECTED_HASH
argument.  This prevents file(DOWNLOAD) from skipping the download if
the output file already exists with the proper hash.  Restore this check
with explicit code in the download script.

Reported-by: Ruslan Baratov <ruslan_baratov@yahoo.com>
This commit is contained in:
Brad King 2014-11-10 11:09:12 -05:00
parent 0c3ddf8b65
commit ee7405a6db
1 changed files with 14 additions and 1 deletions

View File

@ -628,6 +628,19 @@ function(_ep_write_downloadfile_script script_filename remote local timeout no_p
set(show_progress "SHOW_PROGRESS") set(show_progress "SHOW_PROGRESS")
endif() endif()
if("${hash}" MATCHES "${_ep_hash_regex}")
string(CONCAT hash_check
"if(EXISTS \"${local}\")\n"
" file(\"${CMAKE_MATCH_1}\" \"${local}\" hash_value)\n"
" if(\"x\${hash_value}\" STREQUAL \"x${CMAKE_MATCH_2}\")\n"
" return()\n"
" endif()\n"
"endif()\n"
)
else()
set(hash_check "")
endif()
# check for curl globals in the project # check for curl globals in the project
if(DEFINED CMAKE_TLS_VERIFY) if(DEFINED CMAKE_TLS_VERIFY)
set(tls_verify "set(CMAKE_TLS_VERIFY ${CMAKE_TLS_VERIFY})") set(tls_verify "set(CMAKE_TLS_VERIFY ${CMAKE_TLS_VERIFY})")
@ -651,7 +664,7 @@ function(_ep_write_downloadfile_script script_filename remote local timeout no_p
endif() endif()
file(WRITE ${script_filename} file(WRITE ${script_filename}
"message(STATUS \"downloading... "${hash_check}message(STATUS \"downloading...
src='${remote}' src='${remote}'
dst='${local}' dst='${local}'
timeout='${timeout_msg}'\") timeout='${timeout_msg}'\")