blob: bbef5b7519565666134403f865c93b5a43517d7b (
plain)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
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()
|