|
| 1 | +#!/usr/bin/env python3 |
| 2 | +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| 3 | +# SPDX-License-Identifier: Apache-2.0 OR MIT |
| 4 | + |
| 5 | +import argparse |
| 6 | +import re |
| 7 | +import sys |
| 8 | +import subprocess |
| 9 | + |
| 10 | + |
| 11 | +EXIT_CODE_SUCCESS = 0 |
| 12 | +EXIT_CODE_MISMATCH = 1 |
| 13 | +EXIT_CODE_FAIL = 2 |
| 14 | + |
| 15 | + |
| 16 | +def cbmc_viewer_version(): |
| 17 | + cmd = ["cbmc-viewer", "--version"] |
| 18 | + try: |
| 19 | + version = subprocess.run(cmd, |
| 20 | + capture_output=True, text=True, check=True) |
| 21 | + except (OSError, subprocess.SubprocessError) as error: |
| 22 | + print(error) |
| 23 | + print(f"Can't run command '{' '.join(cmd)}'") |
| 24 | + sys.exit(EXIT_CODE_FAIL) |
| 25 | + |
| 26 | + match = re.match("CBMC viewer ([0-9]+).([0-9]+)", version.stdout) |
| 27 | + if not match: |
| 28 | + print(f"Can't parse CBMC-viewer version string: '{version.stdout.strip()}'") |
| 29 | + sys.exit(EXIT_CODE_FAIL) |
| 30 | + |
| 31 | + return match.groups() |
| 32 | + |
| 33 | +def complete_version(*version): |
| 34 | + numbers = [int(num) if num else 0 for num in version] |
| 35 | + return (numbers + [0, 0])[:2] |
| 36 | + |
| 37 | +def main(): |
| 38 | + parser = argparse.ArgumentParser( |
| 39 | + description='Check CBMC-viewer version matches major/minor') |
| 40 | + parser.add_argument('--major', required=True) |
| 41 | + parser.add_argument('--minor', required=True) |
| 42 | + args = parser.parse_args() |
| 43 | + |
| 44 | + current_version = complete_version(*cbmc_viewer_version()) |
| 45 | + desired_version = complete_version(args.major, args.minor) |
| 46 | + |
| 47 | + if desired_version > current_version: |
| 48 | + version_string = '.'.join([str(num) for num in current_version]) |
| 49 | + desired_version_string = '.'.join([str(num) for num in desired_version]) |
| 50 | + print(f'ERROR: CBMC-viewer version is {version_string}, expected at least {desired_version_string}') |
| 51 | + sys.exit(EXIT_CODE_MISMATCH) |
| 52 | + |
| 53 | +if __name__ == "__main__": |
| 54 | + main() |
0 commit comments