aboutsummaryrefslogtreecommitdiff
path: root/tools/cpm/cmake/package/hash.cmake
blob: 6be23c9882d186ab06cd6c4b249c9fe0fc3098d2 (plain) (blame)
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
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env -S cmake -P

# SPDX-FileCopyrightText: Copyright 2026 crueter
# SPDX-License-Identifier: LGPL-3.0-or-later

cmake_minimum_required(VERSION 3.31)

include(${CMAKE_CURRENT_LIST_DIR}/../ScriptUtils.cmake)

function(usage)
    echo([=[
Usage: cpmutil.sh package hash [-a|--all] [PACKAGE]...

Check the hash of a specific package or packages.
If a hash mismatch occurs, this script will update the package's hash.

Options:
    -a, --all       Operate on all packages in this project.

Note that this procedure will usually take a long time
depending on the number and size of dependencies.
]=])
endfunction()

set(NO_CI TRUE)
parse_script_args(args)

get_cpmfile_content(cpmfile)
foreach(key ${args})
    if (ci)
        continue()
    endif()

    parse_key("${key}")
    echo("-- ${key}")

    get_package_url_object(pkg_url)
    get_package_hash("${pkg_url}" pkg_hash)

    if (pkg_hash STREQUAL hash)
        echo("Hashes match")
    else()
        echo_error("Hash mismatch")
        echo_error("Expected: ${hash}")
        echo_error("Got:      ${pkg_hash}")

        modify_package("${object}" "${version}" "${pkg_hash}" new_object)

        # update cached cpmfile content
        string(JSON cpmfile SET "${cpmfile}" "${key}" "${new_object}")

        echo("Corrected hash for ${key}")
    endif()
endforeach()

# write cached cpmfile
get_cpmfile_path(file)
file(WRITE ${file} "${cpmfile}")
format_cpmfile()