File: CheckHash.cmake

package info (click to toggle)
mlpack 4.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 31,272 kB
  • sloc: cpp: 226,039; python: 1,934; sh: 1,198; lisp: 414; makefile: 85
file content (35 lines) | stat: -rw-r--r-- 1,319 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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)