1#!/usr/bin/env python3 2"""Generate a version header for the Bazel build. 3 4Splits a semantic version string into major, minor, and patch and uses the 5provided template to produce a working version header. 6""" 7 8import argparse 9import re 10import sys 11 12 13def _parse_args(): 14 parser = argparse.ArgumentParser( 15 description=__doc__, 16 ) 17 parser.add_argument( 18 "--version-string", 19 required=True, 20 help="SDK version string", 21 ) 22 parser.add_argument( 23 "--template", 24 type=argparse.FileType("r"), 25 required=True, 26 help="Path to version.h.in", 27 ) 28 parser.add_argument( 29 "-o", 30 "--output", 31 type=argparse.FileType("wb"), 32 default=sys.stdout.buffer, 33 help="Output file path. Defaults to stdout.", 34 ) 35 return parser.parse_args() 36 37 38_EXPANSION_REGEX = re.compile(r"(?:\$\{)([a-zA-Z]\w*)(?:\})") 39 40 41def generate_version_header(version_string, template, output): 42 version_parts = version_string.split('.') 43 defines = { 44 "PICO_SDK_VERSION_MAJOR": version_parts[0], 45 "PICO_SDK_VERSION_MINOR": version_parts[1], 46 "PICO_SDK_VERSION_REVISION": version_parts[2].split('-')[0], 47 "PICO_SDK_VERSION_STRING": version_string, 48 } 49 output.write( 50 _EXPANSION_REGEX.sub( 51 lambda val: str(defines.get(val.group(1))), 52 template.read(), 53 ).encode() 54 ) 55 56 57if __name__ == "__main__": 58 sys.exit(generate_version_header(**vars(_parse_args()))) 59