36 lines
1.3 KiB
CMake
36 lines
1.3 KiB
CMake
# Validate md5 hash given md5file url and the file directory.
|
|
|
|
# This module does the following on hash failure:
|
|
# Set HASH_CHECK_FAIL to 1.
|
|
# Remove the downloaded files.
|
|
|
|
macro (check_hash MD5_URL DIR HASH_CHECK_FAIL)
|
|
set(HASH_CHECK_FAIL 0)
|
|
file(DOWNLOAD ${MD5_URL}
|
|
"${DIR}/hash.md5"
|
|
STATUS MD5_DOWNLOAD_STATUS_LIST)
|
|
list(GET MD5_DOWNLOAD_STATUS_LIST 0 MD5_DOWNLOAD_STATUS)
|
|
if (MD5_DOWNLOAD_STATUS EQUAL 0)
|
|
file(STRINGS "${DIR}/hash.md5" HASH_DATA NEWLINE_CONSUME)
|
|
string(REGEX REPLACE "\n" ";" HASH_LIST "${HASH_DATA}")
|
|
foreach(item ${HASH_LIST})
|
|
string(SUBSTRING ${item} 0 32 EXPECTED_HASH)
|
|
string(SUBSTRING ${item} 34 -1 FILE_NAME)
|
|
file(MD5 "${DIR}/${FILE_NAME}" LOCAL_HASH)
|
|
if (NOT LOCAL_HASH STREQUAL EXPECTED_HASH)
|
|
set(HASH_CHECK_FAIL 1)
|
|
file(REMOVE_RECURSE ${DIR})
|
|
message(WARNING
|
|
"md5sum verification error for ${item}! Got ${LOCAL_HASH}, expected ${EXPECTED_HASH}.")
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
else ()
|
|
set(HASH_CHECK_FAIL 1)
|
|
file(REMOVE_RECURSE ${DIR})
|
|
list(GET MD5_DOWNLOAD_STATUS_LIST 1 MD5_DOWNLOAD_ERROR)
|
|
message(WARNING
|
|
"Could not download the md5 for hash verification! Error code ${MD5_DOWNLOAD_STATUS}: ${MD5_DOWNLOAD_ERROR}!")
|
|
endif ()
|
|
endmacro (check_hash)
|