#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 import logging import pathlib import shutil import subprocess _TOOLS = [ "cadical", "cbmc", "cbmc-viewer", "cbmc-starter-kit-update", "kissat", "litani", ] def _format_versions(table): lines = [ "", '', ] for tool, version in table.items(): if version: v_str = f'
{version}
' else: v_str = 'not found' lines.append( f'' f'') lines.append("
Tool Versions
{tool}:{v_str}
") return "\n".join(lines) def _get_tool_versions(): ret = {} for tool in _TOOLS: err = f"Could not determine version of {tool}: " ret[tool] = None if not shutil.which(tool): logging.error("%s'%s' not found on $PATH", err, tool) continue cmd = [tool, "--version"] proc = subprocess.Popen(cmd, text=True, stdout=subprocess.PIPE) try: out, _ = proc.communicate(timeout=10) except subprocess.TimeoutExpired: logging.error("%s'%s --version' timed out", err, tool) continue if proc.returncode: logging.error( "%s'%s --version' returned %s", err, tool, str(proc.returncode)) continue ret[tool] = out.strip() return ret def main(): exe_name = pathlib.Path(__file__).name logging.basicConfig(format=f"{exe_name}: %(message)s") table = _get_tool_versions() out = _format_versions(table) print(out) if __name__ == "__main__": main()