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())))
|