File: generate_version_header.py

package info (click to toggle)
pico-sdk 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,960 kB
  • sloc: ansic: 150,165; asm: 13,474; python: 2,885; cpp: 2,192; yacc: 381; lex: 270; makefile: 33; sh: 15; javascript: 13
file content (58 lines) | stat: -rw-r--r-- 1,499 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env python3
"""Generate a version header for the Bazel build.

Splits a semantic version string into major, minor, and patch and uses the
provided template to produce a working version header.
"""

import argparse
import re
import sys


def _parse_args():
    parser = argparse.ArgumentParser(
        description=__doc__,
    )
    parser.add_argument(
        "--version-string",
        required=True,
        help="SDK version string",
    )
    parser.add_argument(
        "--template",
        type=argparse.FileType("r"),
        required=True,
        help="Path to version.h.in",
    )
    parser.add_argument(
        "-o",
        "--output",
        type=argparse.FileType("wb"),
        default=sys.stdout.buffer,
        help="Output file path. Defaults to stdout.",
    )
    return parser.parse_args()


_EXPANSION_REGEX = re.compile(r"(?:\$\{)([a-zA-Z]\w*)(?:\})")


def generate_version_header(version_string, template, output):
    version_parts = version_string.split('.')
    defines = {
        "PICO_SDK_VERSION_MAJOR": version_parts[0],
        "PICO_SDK_VERSION_MINOR": version_parts[1],
        "PICO_SDK_VERSION_REVISION": version_parts[2].split('-')[0],
        "PICO_SDK_VERSION_STRING": version_string,
    }
    output.write(
        _EXPANSION_REGEX.sub(
            lambda val: str(defines.get(val.group(1))),
            template.read(),
        ).encode()
    )


if __name__ == "__main__":
    sys.exit(generate_version_header(**vars(_parse_args())))