| #!/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()))) |