|
1 | 1 | cmake_minimum_required(VERSION 3.15...3.26) |
2 | 2 | project(${SKBUILD_PROJECT_NAME} LANGUAGES NONE) |
3 | 3 |
|
4 | | -function(_check_archive dest_file expected_sha256 output_var) |
5 | | - get_filename_component(filename ${dest_file} NAME) |
6 | | - message(STATUS "Checking ${filename}") |
7 | | - |
8 | | - if(NOT EXISTS ${dest_file}) |
9 | | - message(STATUS "Checking ${filename} - nonexistent") |
10 | | - set(${output_var} "nonexistent" PARENT_SCOPE) |
11 | | - return() |
12 | | - endif() |
13 | | - |
14 | | - file(SHA256 ${dest_file} current_hash) |
15 | | - if(NOT ${current_hash} STREQUAL ${expected_sha256}) |
16 | | - message(STATUS "Checking ${filename} - expired") |
17 | | - set(${output_var} "expired" PARENT_SCOPE) |
18 | | - return() |
19 | | - endif() |
20 | | - |
21 | | - message(STATUS "Checking ${filename} - up-to-date") |
22 | | - set(${output_var} "ok" PARENT_SCOPE) |
23 | | -endfunction() |
24 | | - |
25 | 4 | # Set in the current scope the following variables: |
26 | 5 | # - s5cmd_archive_url |
27 | 6 | # - s5cmd_archive_sha256 |
28 | 7 | include(${CMAKE_CURRENT_SOURCE_DIR}/s5cmdUrls.cmake) |
29 | 8 |
|
30 | 9 | # |
31 | | -# Download archive |
| 10 | +# Download & extract archive |
32 | 11 | # |
33 | | -cmake_path(GET s5cmd_archive_url FILENAME archive_filename) |
34 | | -set(destination_file "${CMAKE_CURRENT_BINARY_DIR}/${archive_filename}") |
35 | | - |
36 | | -_check_archive(${destination_file} ${s5cmd_archive_sha256} result) |
37 | | - |
38 | | -if(result MATCHES "^(nonexistent|expired)$") |
39 | | - message(STATUS "Downloading ${s5cmd_archive_url}") |
40 | | - file( |
41 | | - DOWNLOAD |
42 | | - ${s5cmd_archive_url} |
43 | | - ${destination_file} |
44 | | - EXPECTED_HASH SHA256=${s5cmd_archive_sha256} |
45 | | - ) |
46 | | -elseif(result STREQUAL "ok") |
47 | | - # ok |
48 | | -else() |
49 | | - message(FATAL_ERROR "Unknown result value: ${result}") |
50 | | -endif() |
| 12 | +set(download_dir "${PROJECT_BINARY_DIR}") |
| 13 | +set(extract_dir "${PROJECT_BINARY_DIR}/s5cmd-binary-distribution") |
| 14 | +include(FetchContent) |
| 15 | +FetchContent_Populate(s5cmd |
| 16 | + URL ${s5cmd_archive_url} |
| 17 | + URL_HASH SHA256=${s5cmd_archive_sha256} |
| 18 | + DOWNLOAD_DIR ${download_dir} |
| 19 | + SOURCE_DIR "${extract_dir}" |
| 20 | + ) |
51 | 21 |
|
52 | 22 | # |
53 | | -# Extract archive |
| 23 | +# Install executable |
54 | 24 | # |
55 | | -set(executable_name "s5cmd${CMAKE_EXECUTABLE_SUFFIX}") |
56 | | - |
57 | | -string(MAKE_C_IDENTIFIER ${archive_filename} extract_subdir) |
58 | | -set(extract_dir "${CMAKE_CURRENT_BINARY_DIR}/${extract_subdir}") |
59 | | -message(STATUS "Extracting ${archive_filename} into ${extract_dir}") |
60 | | -file(ARCHIVE_EXTRACT |
61 | | - INPUT ${destination_file} |
62 | | - DESTINATION ${extract_dir} |
63 | | - PATTERNS "${executable_name}" |
64 | | - VERBOSE |
65 | | - ) |
66 | | - |
67 | 25 | set(_permissions PERMISSIONS |
68 | 26 | OWNER_READ OWNER_WRITE OWNER_EXECUTE |
69 | 27 | GROUP_READ GROUP_EXECUTE |
70 | 28 | WORLD_READ WORLD_EXECUTE |
71 | 29 | ) |
72 | | - |
73 | | -install(PROGRAMS ${extract_dir}/${executable_name} DESTINATION "s5cmd" ${_permissions}) |
| 30 | +set(executable_name "s5cmd${CMAKE_EXECUTABLE_SUFFIX}") |
| 31 | +install(PROGRAMS ${extract_dir}/${executable_name} DESTINATION "s5cmd/bin" ${_permissions}) |
0 commit comments