summaryrefslogtreecommitdiffhomepage
path: root/cmake/modules/AddDownloadableResource.cmake
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-02-09 01:16:33 +0100
committerAki <please@ignore.pl>2022-02-09 01:17:01 +0100
commit39b36e332725498bcfa0a712b2a880b4abe8a174 (patch)
treec45fd00b88951aea934bd7ab80822d723387cf5e /cmake/modules/AddDownloadableResource.cmake
parent879a5610a552c26cd5a8bbbf689444d89b71b0d8 (diff)
downloadstarshatter-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.cmake49
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()