# TODO: Document this and how it interacts with AddDatafile. set(ADD_DOWNLOADABLE_RESOURCE_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/download_resource.cmake.in) function(add_downloadable_resource) set(RESOURCE_TARGET ${ARGV0}) cmake_parse_arguments( PARSE_ARGV 1 RESOURCE "" "ARCHIVE;DIRECTORY;BASE_URL;SHA1" "" ) if(NOT DEFINED RESOURCE_ARCHIVE) set(RESOURCE_ARCHIVE ${RESOURCE_TARGET}.tar.xz) endif() if(NOT DEFINED RESOURCE_BASE_URL) set(RESOURCE_BASE_URL https://ftp.ignore.pl/starshatter/resources/latest) endif() if(NOT DEFINED RESOURCE_DIRECTORY) set(RESOURCE_DIRECTORY ${RESOURCE_TARGET}.d) endif() cmake_path(ABSOLUTE_PATH RESOURCE_ARCHIVE NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) cmake_path(ABSOLUTE_PATH RESOURCE_DIRECTORY NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) cmake_path(GET RESOURCE_ARCHIVE FILENAME RESOURCE_ARCHIVE_BASENAME) string(REGEX REPLACE "/$" "" RESOURCE_BASE_URL "${RESOURCE_BASE_URL}") set(DOWNLOAD_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/download_${RESOURCE_TARGET}.cmake) configure_file(${ADD_DOWNLOADABLE_RESOURCE_SCRIPT} ${DOWNLOAD_SCRIPT} @ONLY) add_custom_target( download_${RESOURCE_TARGET} COMMENT "Downloading ${RESOURCE_TARGET}" COMMAND ${CMAKE_COMMAND} -P ${DOWNLOAD_SCRIPT} ) add_custom_target( clean_downloaded_${RESOURCE_TARGET} COMMENT "Removing downloaded ${RESOURCE_TARGET}" COMMAND ${CMAKE_COMMAND} -E rm -f ${RESOURCE_ARCHIVE} COMMAND ${CMAKE_COMMAND} -E remove_directory ${RESOURCE_DIRECTORY} ) add_custom_command( OUTPUT ${RESOURCE_DIRECTORY} DEPENDS download_${RESOURCE_TARGET} COMMENT "Unpacking ${RESOURCE_TARGET}" COMMAND ${CMAKE_COMMAND} -E make_directory ${RESOURCE_DIRECTORY} COMMAND ${CMAKE_COMMAND} -E chdir ${RESOURCE_DIRECTORY} ${CMAKE_COMMAND} -E tar xf ${RESOURCE_ARCHIVE} ) add_custom_target(${RESOURCE_TARGET} DEPENDS ${RESOURCE_DIRECTORY}) endfunction()