diff options
author | Aki <please@ignore.pl> | 2022-02-09 01:16:33 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-02-09 01:17:01 +0100 |
commit | 39b36e332725498bcfa0a712b2a880b4abe8a174 (patch) | |
tree | c45fd00b88951aea934bd7ab80822d723387cf5e /cmake/modules/AddDownloadableResource.cmake | |
parent | 879a5610a552c26cd5a8bbbf689444d89b71b0d8 (diff) | |
download | starshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.zip starshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.tar.gz starshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.tar.bz2 |
Implemented initial downloadable binary resources for building datafiles
Diffstat (limited to 'cmake/modules/AddDownloadableResource.cmake')
-rw-r--r-- | cmake/modules/AddDownloadableResource.cmake | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cmake/modules/AddDownloadableResource.cmake b/cmake/modules/AddDownloadableResource.cmake new file mode 100644 index 0000000..bbef5b7 --- /dev/null +++ b/cmake/modules/AddDownloadableResource.cmake @@ -0,0 +1,49 @@ +# 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() |