#!/usr/bin/env python3 # Copyright (c) Meta Platforms, Inc. and affiliates. # # This software may be used and distributed according to the terms of the # GNU General Public License version 2. import argparse import errno import hashlib import os import struct MAIN_VERSION = "4.4.2" def main() -> None: ap = argparse.ArgumentParser() ap.add_argument("--version", required=True) ap.add_argument("--release", required=True) ap.add_argument("--revision", required=True) ap.add_argument("output_path") args = ap.parse_args() if args.version and args.release: sub_version = "%s_%s_%s" % (args.version, args.release, args.revision[:8]) elif args.revision: sub_version = args.revision[:8] else: # Buck does not pass in any build data info in dev builds sub_version = "dev" version = "%s_%s" % (MAIN_VERSION, sub_version) versionb = version.encode("ascii") versionhash = struct.unpack(">Q", hashlib.sha1(versionb).digest()[:8])[0] if args.output_path.endswith("py"): contents = ( "# auto-generated by the build\n" 'version = "%s"\n' "versionhash = %s\n" ) % (version, versionhash) elif args.output_path.endswith("rs"): contents = ( ( r"""// auto-generated by the build pub static VERSION: &'static str = "%s"; pub static VERSION_HASH: u64 = %s; """ ) % (version, versionhash) ) try: output_dir = os.path.dirname(args.output_path) os.makedirs(output_dir) except OSError as ex: if ex.errno != errno.EEXIST: raise with open(args.output_path, "w") as f: # pyre-fixme[61]: `contents` is undefined, or not always defined. f.write(contents) main()