# Helper to download files as needed function(file_md5_if_exists FILE VAR) if(EXISTS "${FILE}") file(MD5 "${FILE}" "${VAR}") set(${VAR} "${${VAR}}" PARENT_SCOPE) else() set(${VAR} "" PARENT_SCOPE) endif() endfunction() function(search_downloads FILE_MD5 VAR) set(${VAR} "" PARENT_SCOPE) file(GLOB FILES ${dfhack_SOURCE_DIR}/CMake/downloads/*) foreach(FILE ${FILES}) file(MD5 "${FILE}" CUR_MD5) if("${CUR_MD5}" STREQUAL "${FILE_MD5}") set(${VAR} ${FILE} PARENT_SCOPE) return() endif() endforeach() endfunction() function(download_file URL DEST EXPECTED_MD5) get_filename_component(FILENAME "${URL}" NAME) file_md5_if_exists("${DEST}" CUR_MD5) if(NOT "${EXPECTED_MD5}" STREQUAL "${CUR_MD5}") search_downloads(${EXPECTED_MD5} DLPATH) if(NOT("${DLPATH}" STREQUAL "")) message("* Copying ${FILENAME} from ${DLPATH}") execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${DLPATH}" "${DEST}") return() endif() message("* Downloading ${FILENAME}") file(DOWNLOAD "${URL}" "${DEST}" EXPECTED_MD5 "${EXPECTED_MD5}" SHOW_PROGRESS) endif() endfunction() # Download a file and uncompress it function(download_file_unzip URL ZIP_TYPE ZIP_DEST ZIP_MD5 UNZIP_DEST UNZIP_MD5) get_filename_component(FILENAME "${URL}" NAME) file_md5_if_exists("${UNZIP_DEST}" CUR_UNZIP_MD5) # Redownload if the MD5 of the uncompressed file doesn't match if(NOT "${UNZIP_MD5}" STREQUAL "${CUR_UNZIP_MD5}") download_file("${URL}" "${ZIP_DEST}" "${ZIP_MD5}") if(EXISTS "${ZIP_DEST}") message("* Decompressing ${FILENAME}") if("${ZIP_TYPE}" STREQUAL "gz") execute_process(COMMAND "${PERL_EXECUTABLE}" "${dfhack_SOURCE_DIR}/depends/gunzip.pl" "${ZIP_DEST}" --force) else() message(SEND_ERROR "Unknown ZIP_TYPE: ${ZIP_TYPE}") endif() if(NOT EXISTS "${UNZIP_DEST}") message(SEND_ERROR "File failed to unzip to ${UNZIP_DEST}") else() file(MD5 "${UNZIP_DEST}" CUR_UNZIP_MD5) if(NOT "${UNZIP_MD5}" STREQUAL "${CUR_UNZIP_MD5}") message(SEND_ERROR "MD5 mismatch: ${UNZIP_DEST}: expected ${UNZIP_MD5}, got ${CUR_UNZIP_MD5}") endif() endif() endif() endif() endfunction()