1#
2# Copyright (c) 2024 Nordic Semiconductor ASA
3#
4# SPDX-License-Identifier: Apache-2.0
5#
6
7from subprocess import run
8from os import linesep, makedirs
9from re import sub, S
10from pathlib import Path
11from sys import argv
12from shutil import rmtree, copy2
13from tempfile import mkdtemp
14
15p_root = Path(__file__).absolute().parents[1]
16p_build = p_root / 'build'
17p_pet_sample = p_root / 'samples' / 'pet'
18p_pet_cmake = p_pet_sample / 'pet.cmake'
19p_pet_include = p_pet_sample / 'include'
20p_pet_src = p_pet_sample / 'src'
21
22
23def regenerate():
24    tmpdir = Path(mkdtemp())
25    run(['cmake', p_pet_sample, "-DREGENERATE_ZCBOR=Y", "-DCMAKE_MESSAGE_LOG_LEVEL=WARNING"],
26        cwd=tmpdir)
27    rmtree(tmpdir)
28
29
30def check():
31    files = (list(p_pet_include.iterdir()) + list(p_pet_src.iterdir()) + [p_pet_cmake])
32    contents = "".join(p.read_text(encoding="utf-8") for p in files)
33    tmpdir = Path(mkdtemp())
34    list(makedirs(tmpdir / f.relative_to(p_pet_sample).parent, exist_ok=True) for f in files)
35    list(copy2(f, tmpdir / f.relative_to(p_pet_sample)) for f in files)
36    regenerate()
37    new_contents = "".join(p.read_text(encoding="utf-8") for p in files)
38    list(copy2(tmpdir / f.relative_to(p_pet_sample), f) for f in files)
39    rmtree(tmpdir)
40    return contents == new_contents
41
42
43if __name__ == "__main__":
44    if len(argv) > 1 and argv[1] == "--check":
45        if not check():
46            print("Check failed")
47            exit(9)
48    else:
49        regenerate()
50