fm-weck 1.4.5__py3-none-any.whl → 1.4.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fm_weck/__init__.py +1 -1
- fm_weck/__main__.py +1 -0
- fm_weck/cache_mgr.py +47 -0
- fm_weck/cli.py +136 -27
- fm_weck/config.py +31 -17
- fm_weck/engine.py +110 -32
- fm_weck/exceptions.py +1 -0
- fm_weck/image_mgr.py +5 -4
- fm_weck/resources/{BenchExec-3.25-py3-none-any.whl → BenchExec-3.27-py3-none-any.whl} +0 -0
- fm_weck/resources/__init__.py +14 -12
- fm_weck/resources/fm_tools/2ls.yml +32 -7
- fm_weck/resources/fm_tools/aise.yml +6 -1
- fm_weck/resources/fm_tools/aprove.yml +73 -72
- fm_weck/resources/fm_tools/blast.yml +58 -0
- fm_weck/resources/fm_tools/brick.yml +4 -4
- fm_weck/resources/fm_tools/bubaak-split.yml +3 -3
- fm_weck/resources/fm_tools/bubaak.yml +4 -4
- fm_weck/resources/fm_tools/cadp.yml +95 -0
- fm_weck/resources/fm_tools/cbmc.yml +8 -4
- fm_weck/resources/fm_tools/cetfuzz.yml +4 -3
- fm_weck/resources/fm_tools/coastal.yml +13 -8
- fm_weck/resources/fm_tools/concurrentwitness2test.yml +4 -1
- fm_weck/resources/fm_tools/cooperace.yml +7 -6
- fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml +9 -20
- fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml +9 -20
- fm_weck/resources/fm_tools/coveritest.yml +27 -6
- fm_weck/resources/fm_tools/cpa-bam-bnb.yml +13 -9
- fm_weck/resources/fm_tools/cpa-bam-smg.yml +12 -7
- fm_weck/resources/fm_tools/cpa-lockator.yml +13 -9
- fm_weck/resources/fm_tools/cpa-witness2test.yml +13 -3
- fm_weck/resources/fm_tools/cpachecker.yml +3 -3
- fm_weck/resources/fm_tools/cpv.yml +2 -0
- fm_weck/resources/fm_tools/crux.yml +20 -8
- fm_weck/resources/fm_tools/cseq.yml +9 -4
- fm_weck/resources/fm_tools/dartagnan.yml +12 -1
- fm_weck/resources/fm_tools/deagle.yml +5 -0
- fm_weck/resources/fm_tools/divine.yml +20 -11
- fm_weck/resources/fm_tools/ebf.yml +8 -5
- fm_weck/resources/fm_tools/emergentheta.yml +9 -2
- fm_weck/resources/fm_tools/esbmc-incr.yml +13 -10
- fm_weck/resources/fm_tools/esbmc-kind.yml +12 -11
- fm_weck/resources/fm_tools/fdse.yml +1 -1
- fm_weck/resources/fm_tools/fizzer.yml +15 -24
- fm_weck/resources/fm_tools/frama-c-sv.yml +3 -2
- fm_weck/resources/fm_tools/fshell-witness2test.yml +9 -6
- fm_weck/resources/fm_tools/fusebmc-ia.yml +6 -3
- fm_weck/resources/fm_tools/fusebmc.yml +26 -6
- fm_weck/resources/fm_tools/gazer-theta.yml +10 -7
- fm_weck/resources/fm_tools/gdart-llvm.yml +8 -4
- fm_weck/resources/fm_tools/gdart.yml +3 -0
- fm_weck/resources/fm_tools/goblint.yml +7 -2
- fm_weck/resources/fm_tools/graves-par.yml +9 -14
- fm_weck/resources/fm_tools/graves.yml +10 -4
- fm_weck/resources/fm_tools/gwit.yml +10 -4
- fm_weck/resources/fm_tools/hornix.yml +12 -7
- fm_weck/resources/fm_tools/hybridtiger.yml +13 -8
- fm_weck/resources/fm_tools/infer.yml +12 -7
- fm_weck/resources/fm_tools/java-ranger.yml +6 -3
- fm_weck/resources/fm_tools/jayhorn.yml +6 -4
- fm_weck/resources/fm_tools/jbmc.yml +11 -2
- fm_weck/resources/fm_tools/jcwit.yml +9 -5
- fm_weck/resources/fm_tools/jdart.yml +12 -7
- fm_weck/resources/fm_tools/klee.yml +13 -8
- fm_weck/resources/fm_tools/kleef.yml +3 -3
- fm_weck/resources/fm_tools/korn.yml +11 -1
- fm_weck/resources/fm_tools/lazycseq.yml +10 -7
- fm_weck/resources/fm_tools/legion-symcc.yml +6 -12
- fm_weck/resources/fm_tools/legion.yml +9 -14
- fm_weck/resources/fm_tools/lf-checker.yml +10 -6
- fm_weck/resources/fm_tools/liv.yml +19 -4
- fm_weck/resources/fm_tools/locksmith.yml +10 -6
- fm_weck/resources/fm_tools/ltsmin.yml +40 -0
- fm_weck/resources/fm_tools/metaval++.yml +19 -3
- fm_weck/resources/fm_tools/metaval.yml +21 -3
- fm_weck/resources/fm_tools/mlb.yml +5 -5
- fm_weck/resources/fm_tools/mopsa.yml +9 -7
- fm_weck/resources/fm_tools/nacpa.yml +7 -1
- fm_weck/resources/fm_tools/nitwit.yml +5 -3
- fm_weck/resources/fm_tools/owic.yml +4 -3
- fm_weck/resources/fm_tools/pesco.yml +10 -4
- fm_weck/resources/fm_tools/pichecker.yml +10 -6
- fm_weck/resources/fm_tools/pinaka.yml +13 -8
- fm_weck/resources/fm_tools/predatorhp.yml +6 -4
- fm_weck/resources/fm_tools/prism.yml +67 -0
- fm_weck/resources/fm_tools/proton.yml +6 -6
- fm_weck/resources/fm_tools/prtest.yml +22 -6
- fm_weck/resources/fm_tools/racerf.yml +14 -5
- fm_weck/resources/fm_tools/relay-sv.yml +8 -13
- fm_weck/resources/fm_tools/rizzer.yml +8 -12
- fm_weck/resources/fm_tools/schema.yml +56 -3
- fm_weck/resources/fm_tools/sikraken.yml +3 -3
- fm_weck/resources/fm_tools/spf.yml +13 -8
- fm_weck/resources/fm_tools/sv-sanitizers.yml +3 -1
- fm_weck/resources/fm_tools/svf-svc.yml +15 -6
- fm_weck/resources/fm_tools/symbiotic-witch.yml +9 -5
- fm_weck/resources/fm_tools/symbiotic.yml +6 -2
- fm_weck/resources/fm_tools/testcov.yml +8 -8
- fm_weck/resources/fm_tools/theta.yml +8 -4
- fm_weck/resources/fm_tools/thorn.yml +3 -1
- fm_weck/resources/fm_tools/tracerx-wp.yml +11 -2
- fm_weck/resources/fm_tools/tracerx.yml +5 -1
- fm_weck/resources/fm_tools/uautomizer.yml +7 -12
- fm_weck/resources/fm_tools/ugemcutter.yml +8 -2
- fm_weck/resources/fm_tools/ukojak.yml +5 -2
- fm_weck/resources/fm_tools/ureferee.yml +3 -4
- fm_weck/resources/fm_tools/utaipan.yml +8 -2
- fm_weck/resources/fm_tools/utestgen.yml +11 -3
- fm_weck/resources/fm_tools/vercors.yml +94 -0
- fm_weck/resources/fm_tools/veriabs.yml +11 -9
- fm_weck/resources/fm_tools/veriabsl.yml +10 -8
- fm_weck/resources/fm_tools/verifuzz.yml +16 -266
- fm_weck/resources/fm_tools/verioover.yml +10 -6
- fm_weck/resources/fm_tools/wasp-c.yml +6 -4
- fm_weck/resources/fm_tools/wit4java.yml +20 -13
- fm_weck/resources/fm_tools/witch.yml +8 -4
- fm_weck/resources/fm_tools/witnesslint.yml +37 -9
- fm_weck/resources/fm_tools/witnessmap.yml +16 -1
- fm_weck/run_result.py +38 -0
- fm_weck/runexec_mode.py +15 -4
- fm_weck/serve.py +119 -22
- fm_weck/version_listing.py +25 -0
- {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/METADATA +5 -3
- fm_weck-1.4.7.dist-info/RECORD +154 -0
- {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/WHEEL +1 -1
- fm_weck-1.4.5.dist-info/RECORD +0 -146
- /fm_weck/resources/{BenchExec-3.25-py3-none-any.whl.license → BenchExec-3.27-py3-none-any.whl.license} +0 -0
- {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/entry_points.txt +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
id: witnessmap
|
|
2
2
|
name: WitnessMap
|
|
3
|
+
description: |
|
|
4
|
+
WitnessMap is a simple tool with the same input and output as a verifier that
|
|
5
|
+
only copies witnesses contained in validation tasks
|
|
6
|
+
to its output folder.
|
|
7
|
+
It is used by SV-COMP to place existing verification witnesses
|
|
8
|
+
at the location where the competition infrastructure expects them
|
|
9
|
+
(this way, the witness is technically 'produced' by a tool
|
|
10
|
+
with the same interface as a verifier).
|
|
3
11
|
input_languages:
|
|
4
12
|
- C
|
|
5
13
|
project_url: https://gitlab.com/sosy-lab/software/witnessmap
|
|
@@ -13,6 +21,11 @@ fmtools_entry_maintainers:
|
|
|
13
21
|
- PhilippWendler
|
|
14
22
|
|
|
15
23
|
maintainers:
|
|
24
|
+
- orcid: 0000-0003-4832-7662
|
|
25
|
+
name: Dirk Beyer
|
|
26
|
+
institution: LMU Munich
|
|
27
|
+
country: Germany
|
|
28
|
+
url: https://www.sosy-lab.org/people/dbeyer/
|
|
16
29
|
- name: Marian Lingsch-Rosenfeld
|
|
17
30
|
orcid: 0000-0002-8172-3184
|
|
18
31
|
institution: LMU Munich
|
|
@@ -22,13 +35,15 @@ maintainers:
|
|
|
22
35
|
versions:
|
|
23
36
|
- version: "svcomp25"
|
|
24
37
|
doi: 10.5281/zenodo.14205153
|
|
25
|
-
benchexec_toolinfo_options: [
|
|
38
|
+
benchexec_toolinfo_options: []
|
|
26
39
|
required_ubuntu_packages:
|
|
27
40
|
- python3-yaml
|
|
28
41
|
|
|
29
42
|
competition_participations:
|
|
30
43
|
- competition: "SV-COMP 2025"
|
|
31
44
|
track: "Verification"
|
|
45
|
+
label:
|
|
46
|
+
- auxiliary
|
|
32
47
|
tool_version: "svcomp25"
|
|
33
48
|
jury_member:
|
|
34
49
|
orcid: 0000-0002-8172-3184
|
fm_weck/run_result.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This file is part of fm-weck: executing fm-tools in containerized environments.
|
|
2
|
+
# https://gitlab.com/sosy-lab/software/fm-weck
|
|
3
|
+
#
|
|
4
|
+
# SPDX-FileCopyrightText: 2024 Dirk Beyer <https://www.sosy-lab.org>
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from functools import singledispatchmethod
|
|
10
|
+
|
|
11
|
+
from benchexec.tools.template import BaseTool2
|
|
12
|
+
from benchexec.util import ProcessExitCode
|
|
13
|
+
from fm_tools.fmtoolversion import FmToolVersion
|
|
14
|
+
from fm_tools.run import get_tool_info
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass(frozen=True)
|
|
18
|
+
class RunResult:
|
|
19
|
+
command: tuple[str, ...] | list[str]
|
|
20
|
+
exit_code: int
|
|
21
|
+
raw_output: str
|
|
22
|
+
|
|
23
|
+
def as_benchexec_run(self):
|
|
24
|
+
return BaseTool2.Run(
|
|
25
|
+
cmdline=self.command,
|
|
26
|
+
exit_code=ProcessExitCode.from_raw(self.exit_code),
|
|
27
|
+
output=BaseTool2.RunOutput(self.raw_output.splitlines(keepends=True)),
|
|
28
|
+
termination_reason=False, # TODO: We do not know about this
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
@singledispatchmethod
|
|
32
|
+
def determine_result(self, tool: BaseTool2) -> str:
|
|
33
|
+
return tool.determine_result(self.as_benchexec_run())
|
|
34
|
+
|
|
35
|
+
@determine_result.register
|
|
36
|
+
def _(self, tool: FmToolVersion) -> str:
|
|
37
|
+
tool_ = get_tool_info(tool)
|
|
38
|
+
return self.determine_result(tool_)
|
fm_weck/runexec_mode.py
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
#
|
|
6
6
|
# SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
|
|
8
|
+
import importlib.resources as pkg_resources
|
|
8
9
|
import logging
|
|
9
10
|
import shutil
|
|
10
11
|
from pathlib import Path
|
|
11
|
-
from typing import Optional
|
|
12
|
+
from typing import TYPE_CHECKING, Optional
|
|
12
13
|
|
|
13
14
|
from fm_weck.resources import BENCHEXEC_WHL
|
|
14
15
|
from fm_weck.runexec_util import mountable_absolute_paths_of_command
|
|
@@ -18,6 +19,9 @@ from .engine import CACHE_MOUNT_LOCATION, Engine
|
|
|
18
19
|
|
|
19
20
|
logger = logging.getLogger(__name__)
|
|
20
21
|
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from fm_weck.run_result import RunResult
|
|
24
|
+
|
|
21
25
|
|
|
22
26
|
def run_runexec(
|
|
23
27
|
benchexec_package: Optional[Path],
|
|
@@ -25,7 +29,7 @@ def run_runexec(
|
|
|
25
29
|
configuration: Config,
|
|
26
30
|
extra_container_args: list[list[str]],
|
|
27
31
|
command: list[str],
|
|
28
|
-
):
|
|
32
|
+
) -> "RunResult":
|
|
29
33
|
if use_image is not None:
|
|
30
34
|
configuration.set_default_image(use_image)
|
|
31
35
|
|
|
@@ -39,8 +43,13 @@ def run_runexec(
|
|
|
39
43
|
else:
|
|
40
44
|
# Default to the bundled benchexec package
|
|
41
45
|
benchexec_package = configuration.get_shelve_path_for_benchexec()
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
try:
|
|
47
|
+
with pkg_resources.path("fm_weck.resources", BENCHEXEC_WHL) as source_path:
|
|
48
|
+
shutil.copy(source_path, benchexec_package)
|
|
49
|
+
engine.env["PYTHONPATH"] = f"{CACHE_MOUNT_LOCATION}/.lib/benchexec.whl"
|
|
50
|
+
except FileNotFoundError:
|
|
51
|
+
logging.error(f"Resource {BENCHEXEC_WHL} not found in package.")
|
|
52
|
+
return None
|
|
44
53
|
|
|
45
54
|
for path in mountable_absolute_paths_of_command(Path.cwd().absolute(), command):
|
|
46
55
|
engine.mount(path, str(path) + ":ro")
|
|
@@ -50,4 +59,6 @@ def run_runexec(
|
|
|
50
59
|
|
|
51
60
|
configuration.make_runexec_script_available()
|
|
52
61
|
|
|
62
|
+
engine.handle_io = False
|
|
63
|
+
|
|
53
64
|
return engine.run(f"{CACHE_MOUNT_LOCATION}/.scripts/runexec", *command)
|
fm_weck/serve.py
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
|
|
8
8
|
import dbm
|
|
9
|
+
import json
|
|
9
10
|
import logging
|
|
10
11
|
import os
|
|
11
12
|
import shutil
|
|
@@ -13,8 +14,10 @@ import sys
|
|
|
13
14
|
from pathlib import Path
|
|
14
15
|
from typing import Optional, Tuple, Union
|
|
15
16
|
|
|
16
|
-
from fm_tools import FmData
|
|
17
17
|
from fm_tools.benchexec_helper import DataModel
|
|
18
|
+
from fm_tools.fmtoolversion import FmToolVersion
|
|
19
|
+
|
|
20
|
+
from fm_weck.run_result import RunResult
|
|
18
21
|
|
|
19
22
|
from .config import Config, parse_fm_data
|
|
20
23
|
from .engine import CACHE_MOUNT_LOCATION, Engine
|
|
@@ -58,42 +61,78 @@ def update_checksum(shelve_space: Path, checksum: str, config: Config):
|
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
def setup_fm_tool(
|
|
61
|
-
fm_tool: Union[Path,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
fm_tool: Union[Path, FmToolVersion],
|
|
65
|
+
version: Optional[str],
|
|
66
|
+
configuration: Config,
|
|
67
|
+
offline_mode: bool = False,
|
|
68
|
+
) -> Tuple[FmToolVersion, Path]:
|
|
69
|
+
# Don't explicitly disallow non-FmToolVersion here; Pythonic Users might want to exchange the FmToolVersion object
|
|
64
70
|
# by a class with the same interface
|
|
65
71
|
fm_data = parse_fm_data(fm_tool, version) if isinstance(fm_tool, (Path, str)) else fm_tool
|
|
66
72
|
|
|
67
73
|
shelve_space = configuration.get_shelve_space_for(fm_data)
|
|
68
74
|
logger.debug("Using shelve space %s", shelve_space)
|
|
75
|
+
skip_download = offline_mode
|
|
69
76
|
|
|
70
|
-
if (not
|
|
77
|
+
if (not offline_mode) and shelve_space.exists() and shelve_space.is_dir():
|
|
71
78
|
logger.debug("Shelve space already exists, testing checksum")
|
|
72
|
-
checksum = fm_data.
|
|
73
|
-
|
|
79
|
+
checksum = fm_data.get_archive_location().resolve().checksum
|
|
80
|
+
if checksum is None:
|
|
81
|
+
logger.warning("No checksum available for %s, skipping cache check", fm_data.get_tool_name_with_version())
|
|
82
|
+
skip_download = False
|
|
83
|
+
else:
|
|
84
|
+
skip_download = check_cache_entry(shelve_space, checksum, configuration)
|
|
74
85
|
|
|
75
86
|
if not skip_download:
|
|
76
87
|
fm_data.download_and_install_into(shelve_space)
|
|
77
|
-
checksum = fm_data.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
checksum = fm_data.get_archive_location().resolve().checksum
|
|
89
|
+
if checksum is None:
|
|
90
|
+
logger.warning(
|
|
91
|
+
"No checksum available for %s, skipping checksum update", fm_data.get_tool_name_with_version()
|
|
92
|
+
)
|
|
93
|
+
else:
|
|
94
|
+
update_checksum(shelve_space, checksum, configuration)
|
|
95
|
+
map_doi(fm_data, shelve_space)
|
|
96
|
+
tool_info_module = fm_data.get_toolinfo_module()
|
|
97
|
+
|
|
98
|
+
if (not offline_mode) or tool_info_module._trivially_resolved():
|
|
99
|
+
tool_info_module.resolve(target_dir=shelve_space)
|
|
100
|
+
else:
|
|
101
|
+
file_name = tool_info_module.raw.rpartition("/")[-1]
|
|
102
|
+
tool_info_module._target_location = target = shelve_space / file_name
|
|
103
|
+
tool_info_module.resolved = "." + target.stem
|
|
104
|
+
|
|
105
|
+
if tool_info_module._target_location:
|
|
106
|
+
sys.path.insert(0, str(tool_info_module._target_location.parent))
|
|
81
107
|
|
|
82
108
|
return fm_data, shelve_space
|
|
83
109
|
|
|
84
110
|
|
|
111
|
+
def install_fm_tool(
|
|
112
|
+
fm_tool: Union[Path, FmToolVersion], version: Optional[str], configuration: Config, install_path: Path
|
|
113
|
+
) -> None:
|
|
114
|
+
fm_data = parse_fm_data(fm_tool, version) if isinstance(fm_tool, (Path, str)) else fm_tool
|
|
115
|
+
shelve_space = install_path.resolve() if install_path else configuration.get_shelve_space_for(fm_data)
|
|
116
|
+
|
|
117
|
+
logger.debug("Installing tool into %s", shelve_space)
|
|
118
|
+
fm_data.download_and_install_into(shelve_space)
|
|
119
|
+
|
|
120
|
+
|
|
85
121
|
def run_guided(
|
|
86
|
-
fm_tool: Union[Path,
|
|
122
|
+
fm_tool: Union[Path, FmToolVersion],
|
|
87
123
|
version: Optional[str],
|
|
88
124
|
configuration: Config,
|
|
89
125
|
prop: Optional[Path],
|
|
90
126
|
program_files: list[Path],
|
|
91
127
|
additional_args: list[str],
|
|
128
|
+
witness: Optional[Path] = None,
|
|
92
129
|
data_model: Optional[DataModel] = None,
|
|
93
|
-
|
|
130
|
+
offline_mode: bool = False,
|
|
94
131
|
log_output_to: Optional[Path] = None,
|
|
95
132
|
output_files_to: Optional[Path] = None,
|
|
96
|
-
|
|
133
|
+
timeout_sec: Optional[float] = None,
|
|
134
|
+
print_tool_output_to_console: bool = True,
|
|
135
|
+
) -> RunResult:
|
|
97
136
|
property_path = None
|
|
98
137
|
if prop is not None:
|
|
99
138
|
try:
|
|
@@ -104,11 +143,11 @@ def run_guided(
|
|
|
104
143
|
shutil.copyfile(source_property_path, property_path)
|
|
105
144
|
except KeyError:
|
|
106
145
|
logger.error("Unknown property %s", prop)
|
|
107
|
-
return 1
|
|
146
|
+
return RunResult(command=[], exit_code=1, raw_output="Unknown property")
|
|
108
147
|
|
|
109
148
|
configuration.make_script_available()
|
|
110
149
|
|
|
111
|
-
fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration,
|
|
150
|
+
fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, offline_mode)
|
|
112
151
|
engine = Engine.from_config(fm_data, configuration)
|
|
113
152
|
|
|
114
153
|
if log_output_to is not None:
|
|
@@ -116,6 +155,7 @@ def run_guided(
|
|
|
116
155
|
|
|
117
156
|
if output_files_to is not None:
|
|
118
157
|
engine.set_output_files_dir(output_files_to)
|
|
158
|
+
engine.print_output_to_stdout = print_tool_output_to_console
|
|
119
159
|
|
|
120
160
|
current_dir = Path.cwd().resolve()
|
|
121
161
|
os.chdir(shelve_space)
|
|
@@ -130,22 +170,79 @@ def run_guided(
|
|
|
130
170
|
)
|
|
131
171
|
os.chdir(current_dir)
|
|
132
172
|
|
|
173
|
+
# There are two ways to pass the witness
|
|
174
|
+
# 1. Through the task options in BenchExec using {"witness": filename} and adding the witness to the input files
|
|
175
|
+
# 2. Replacing the placeholder in FM-Data "${witness}" with the correct path
|
|
176
|
+
#
|
|
177
|
+
# We are using the second approach here, in order to avoid modifying FM-Data
|
|
178
|
+
if witness is not None:
|
|
179
|
+
assert any(c == "${witness}" for c in command), "The version given does not support witness files"
|
|
180
|
+
command = [str(witness) if c == "${witness}" else c for c in command]
|
|
181
|
+
|
|
133
182
|
logger.debug("Assembled command from fm-tools: %s", command)
|
|
134
183
|
|
|
135
|
-
|
|
184
|
+
execution_result = engine.run(
|
|
185
|
+
f"{CACHE_MOUNT_LOCATION}/.scripts/run_with_overlay.sh", shelve_space.name, *command, timeout_sec=timeout_sec
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
return execution_result
|
|
136
189
|
|
|
137
190
|
|
|
138
191
|
def run_manual(
|
|
139
|
-
fm_tool: Union[Path,
|
|
192
|
+
fm_tool: Union[Path, FmToolVersion],
|
|
140
193
|
version: Optional[str],
|
|
141
194
|
configuration: Config,
|
|
142
195
|
command: list[str],
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
196
|
+
offline_mode: bool = False,
|
|
197
|
+
log_output_to: Optional[Path] = None,
|
|
198
|
+
output_files_to: Optional[Path] = None,
|
|
199
|
+
timeout_sec: Optional[float] = None,
|
|
200
|
+
print_tool_output_to_console: bool = True,
|
|
201
|
+
) -> RunResult:
|
|
202
|
+
fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, offline_mode)
|
|
146
203
|
engine = Engine.from_config(fm_data, configuration)
|
|
147
204
|
|
|
205
|
+
if log_output_to is not None:
|
|
206
|
+
engine.set_output_log(log_output_to)
|
|
207
|
+
|
|
208
|
+
if output_files_to is not None:
|
|
209
|
+
engine.set_output_files_dir(output_files_to)
|
|
210
|
+
|
|
148
211
|
executable = fm_data.get_executable_path(shelve_space)
|
|
149
212
|
logger.debug("Using executable %s", executable)
|
|
150
213
|
logger.debug("Assembled command %s", [executable, *command])
|
|
151
|
-
|
|
214
|
+
|
|
215
|
+
if log_output_to is not None:
|
|
216
|
+
engine.set_output_log(log_output_to)
|
|
217
|
+
|
|
218
|
+
if output_files_to is not None:
|
|
219
|
+
engine.set_output_files_dir(output_files_to)
|
|
220
|
+
|
|
221
|
+
engine.print_output_to_stdout = print_tool_output_to_console
|
|
222
|
+
|
|
223
|
+
execution_result = engine.run(str(executable), *command, timeout_sec=timeout_sec)
|
|
224
|
+
|
|
225
|
+
return execution_result
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
### Move to cache_mgr.py after merge to main ###
|
|
229
|
+
def map_doi(fm_data: FmToolVersion, tool_path: Path):
|
|
230
|
+
doi_map = tool_path.parent / "doi_map.json"
|
|
231
|
+
|
|
232
|
+
if os.path.exists(doi_map):
|
|
233
|
+
with open(doi_map, "r") as file:
|
|
234
|
+
data = json.load(file)
|
|
235
|
+
else:
|
|
236
|
+
data = {}
|
|
237
|
+
|
|
238
|
+
doi = str(tool_path).split("/")[-1]
|
|
239
|
+
if doi not in data:
|
|
240
|
+
data[doi] = []
|
|
241
|
+
if fm_data.get_tool_name_with_version() not in data[doi]:
|
|
242
|
+
data[doi].append(fm_data.get_tool_name_with_version())
|
|
243
|
+
|
|
244
|
+
with open(doi_map, "w") as file:
|
|
245
|
+
json.dump(data, file, indent=2)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
### Move to cache_mgr.py after merge to main ###
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# This file is part of fm-weck: executing fm-tools in containerized environments.
|
|
2
|
+
# https://gitlab.com/sosy-lab/software/fm-weck
|
|
3
|
+
#
|
|
4
|
+
# SPDX-FileCopyrightText: 2024 Dirk Beyer <https://www.sosy-lab.org>
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
from tabulate import tabulate
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class VersionListing:
|
|
13
|
+
tool_and_version: dict[str, list] = {}
|
|
14
|
+
|
|
15
|
+
def __init__(self, tool_paths: list):
|
|
16
|
+
for tool_path in tool_paths:
|
|
17
|
+
with open(tool_path) as stream:
|
|
18
|
+
tool_data = yaml.safe_load(stream)
|
|
19
|
+
|
|
20
|
+
versions = [version_data["version"] for version_data in tool_data["versions"]]
|
|
21
|
+
self.tool_and_version[tool_data["name"]] = versions
|
|
22
|
+
|
|
23
|
+
def print_versions(self):
|
|
24
|
+
data_list = list(self.tool_and_version.items())
|
|
25
|
+
print(tabulate(data_list, headers=["TOOL", "VERSIONS"], tablefmt="fancy_grid"))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: fm-weck
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.7
|
|
4
4
|
Author-email: Henrik Wachowitz <henrik.wachowitz@ifi.lmu.de>
|
|
5
5
|
Maintainer-email: Henrik Wachowitz <henrik.wachowitz@ifi.lmu.de>
|
|
6
6
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -10,8 +10,10 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
|
-
Requires-Dist:
|
|
13
|
+
Requires-Dist: argcomplete
|
|
14
|
+
Requires-Dist: fm-tools>=1.0.0
|
|
14
15
|
Requires-Dist: pyyaml>=6.0
|
|
16
|
+
Requires-Dist: tabulate
|
|
15
17
|
Requires-Dist: tomli>=2.0; python_version <= '3.10'
|
|
16
18
|
Requires-Dist: yaspin>=3.0
|
|
17
19
|
Description-Content-Type: text/markdown
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
fm_weck/__init__.py,sha256=qVPurJ_oj0SwP8asFRG0x8Qh7KDzNBLJf5jHKxcyDMc,351
|
|
2
|
+
fm_weck/__main__.py,sha256=IfNDAqM6MK6P7KsQoW3wOHPOscB8evdVlS9C7R4wd_0,391
|
|
3
|
+
fm_weck/cache_mgr.py,sha256=3-OQFmCeswazXmX08ND4oEHFOR07ZDCwWzjmFTDkOSE,1373
|
|
4
|
+
fm_weck/cli.py,sha256=k2-rHURw_w0yy5L97FofJ0jYVxqpNP79_XTtirYbyjY,17194
|
|
5
|
+
fm_weck/config.py,sha256=72HfwKJlLnyrBUmLyjEebgPerGMq0CdnQnugz1SIWis,8017
|
|
6
|
+
fm_weck/engine.py,sha256=1EhfL0tzgVyBNf4b40yt2w1netv2Elyop9aRpwzCvm0,17262
|
|
7
|
+
fm_weck/exceptions.py,sha256=xXxbYK-FZW6YksBtaN79KaA4fGnFCBO-wc0QMqtq3Og,282
|
|
8
|
+
fm_weck/image_mgr.py,sha256=mDqP-YD6AEOW2xldYJ4D-wxYKF0Ta5SgoJiX2CrhyQg,1906
|
|
9
|
+
fm_weck/run_result.py,sha256=0d8G3py1VCPP4jLxPCVzL8Vljvrwt9IHlmvCkW0pwx8,1249
|
|
10
|
+
fm_weck/runexec_mode.py,sha256=UamxVvYm0XErPjR2sRJaLMX8uHBzRcgCTWbQIZjdju0,2195
|
|
11
|
+
fm_weck/runexec_util.py,sha256=YBvVIPpmEousZVxbZ5NS8jzpKPLyws31kIFE2z3Ki2E,1370
|
|
12
|
+
fm_weck/serve.py,sha256=RL6LOnK0RMhFRWehwFdoydc0A619FqSaph7H0JFDYlo,9037
|
|
13
|
+
fm_weck/version_listing.py,sha256=caaoC3n9R-Ao2sEQ_ngOVO3bnKr7cNVeH6EiA8jO5Sc,864
|
|
14
|
+
fm_weck/resources/BenchExec-3.27-py3-none-any.whl,sha256=g-db8LM8HfqLhbnl7n5lvUbMnF2tZ4MHAVOxTGxqO8w,732849
|
|
15
|
+
fm_weck/resources/BenchExec-3.27-py3-none-any.whl.license,sha256=Nq2Mwgn_pyr6ZZrTT095QPtFP3hr15ZeIRIaY0B7eC8,201
|
|
16
|
+
fm_weck/resources/Containerfile,sha256=MltxP1of9klsQFNR8WyngRTJrPwxQTF4C9ennRxVqSo,391
|
|
17
|
+
fm_weck/resources/__init__.py,sha256=-YLqFTF2Gu4RA9ye3SdvBk1rjhlYxk_f1TgPsix3SAk,1213
|
|
18
|
+
fm_weck/resources/run_with_overlay.sh,sha256=v1gV_6kMQ0v9BQ3chgDqI1MAOLHbPWeeTC52aCqVpEM,1162
|
|
19
|
+
fm_weck/resources/runexec,sha256=ogIBO38HLu9C9kDTTANBgAqVnH-UIF1bSJ9d3DSjyF4,462
|
|
20
|
+
fm_weck/resources/properties/coverage-branches.prp,sha256=Gl2r1cgBFoh4M2laa8dVGhteHkL04oiBRLzxz_hbkEU,56
|
|
21
|
+
fm_weck/resources/properties/coverage-branches.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
22
|
+
fm_weck/resources/properties/coverage-conditions.prp,sha256=tj307UJBhj-PZqRxjijeNb0foWe2hWIc8CQP54gIUao,57
|
|
23
|
+
fm_weck/resources/properties/coverage-conditions.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
24
|
+
fm_weck/resources/properties/coverage-error-call.prp,sha256=ZHzqgYPHix1PINIcpvq2X0QGEKeB9C0fitoV_OPy9IE,61
|
|
25
|
+
fm_weck/resources/properties/coverage-error-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
26
|
+
fm_weck/resources/properties/coverage-statements.prp,sha256=drb8JyyDwwZ-cxbOyuzzapYIkl3r7sTlooBCavarYl4,59
|
|
27
|
+
fm_weck/resources/properties/coverage-statements.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
28
|
+
fm_weck/resources/properties/def-behavior.prp,sha256=MpuBzFOzJA2OpwJFS8HFuSo7E199LOKJNTTwr64Bis0,44
|
|
29
|
+
fm_weck/resources/properties/def-behavior.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
30
|
+
fm_weck/resources/properties/no-data-race.prp,sha256=Md-Kd2iEOHeJ00f7w4mpjK7qL8_wdV8jKmoi2gncjLs,43
|
|
31
|
+
fm_weck/resources/properties/no-data-race.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
32
|
+
fm_weck/resources/properties/no-overflow.prp,sha256=6C9SIsRmR2zEVWX8OecxGdhRLeYlhDkOsMMFHz1O5gI,42
|
|
33
|
+
fm_weck/resources/properties/no-overflow.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
34
|
+
fm_weck/resources/properties/termination.prp,sha256=Hp7ZRB6fd2hRaVeot25TyU6nF7ROZS7e_Gz0tT5ZMfk,35
|
|
35
|
+
fm_weck/resources/properties/termination.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
36
|
+
fm_weck/resources/properties/unreach-call.prp,sha256=DGqQz8OtRUUiWgU33cN7ihHqWje5BsBTuymLdI-BAVA,53
|
|
37
|
+
fm_weck/resources/properties/unreach-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
38
|
+
fm_weck/resources/properties/valid-memcleanup.prp,sha256=2oOe4eCP56QonUGOAeTQ0BCetbT4V31epndKobRxg54,48
|
|
39
|
+
fm_weck/resources/properties/valid-memcleanup.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
40
|
+
fm_weck/resources/properties/valid-memsafety.prp,sha256=TUbXRp2ksBzMYK8uZb5mXukRBluuyak3YjwYzWAKc_4,129
|
|
41
|
+
fm_weck/resources/properties/valid-memsafety.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
|
|
42
|
+
fm_weck/resources/fm_tools/2ls.yml,sha256=39BtjMhYN5wQbGGqJ1Ds1tYISLvTD_r7RYxMtDN-7dA,3916
|
|
43
|
+
fm_weck/resources/fm_tools/aise.yml,sha256=zuzzrM-XuRt1RlsjWeupqN2ydYSiR7PJQSF7Hhfw4Y0,1888
|
|
44
|
+
fm_weck/resources/fm_tools/aprove.yml,sha256=vbYUUb_YCHayyiS1oPCZAwMQyB0RVNzlupbBT1Segas,2431
|
|
45
|
+
fm_weck/resources/fm_tools/blast.yml,sha256=zwPhJN0PfNJo_ZM4a5DNTxKCqc_b0CDaADRf8RlmrVw,1689
|
|
46
|
+
fm_weck/resources/fm_tools/brick.yml,sha256=7mWXlRdc-XiFR2c2wohhuoWHCznmEcnr1i1aLCtcZTk,2007
|
|
47
|
+
fm_weck/resources/fm_tools/bubaak-split.yml,sha256=7hmY5CYgIdQJAXYrpcGwR-3tqDFnQNTemFUforrDojQ,1886
|
|
48
|
+
fm_weck/resources/fm_tools/bubaak.yml,sha256=pcJCljIHYmgEMOdeMp8YQxAURO0WlLQ-FpYlYktQHLw,2171
|
|
49
|
+
fm_weck/resources/fm_tools/cadp.yml,sha256=xkXVGEn4PYMK7ItnaleVLOvbmAU8_9VDlqKjaln5C-k,3352
|
|
50
|
+
fm_weck/resources/fm_tools/cbmc.yml,sha256=QfgJxq7aBhRcuQpR1_26wKvumM0H4JH7u3SQ_oXYyBM,2095
|
|
51
|
+
fm_weck/resources/fm_tools/cetfuzz.yml,sha256=4JULcR2E0rM_RhgaFv9x8J34loMwB1uiluIKKcQninw,1808
|
|
52
|
+
fm_weck/resources/fm_tools/coastal.yml,sha256=ebKhmUoTdlCTw6W4jIllpAJ-CSoFfGvaB004fDg17nY,1650
|
|
53
|
+
fm_weck/resources/fm_tools/concurrentwitness2test.yml,sha256=5BwfhoWUjB73W0VBgm56C7chj4jo4QoXhZmRHO59tYQ,2263
|
|
54
|
+
fm_weck/resources/fm_tools/cooperace.yml,sha256=oI5G2GeEHZjAZnkg2rJH0NP4NvV5fLioz2KPd1K7YHo,1136
|
|
55
|
+
fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml,sha256=iTEZlnzfVtDUg-cfDgnebIF9VaJ03m188WIbUt_VcAQ,2159
|
|
56
|
+
fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml,sha256=YaO7dPlUV-ctpHm0jHag39_rWySfQQVUAlqKAUuVUuQ,2143
|
|
57
|
+
fm_weck/resources/fm_tools/coveritest.yml,sha256=BJMeWvHQ1RddlPyaUGnXib7-NzhjQUKvnQcD4naGqbk,3223
|
|
58
|
+
fm_weck/resources/fm_tools/cpa-bam-bnb.yml,sha256=oN3noRPVE68xYeDN1LnvyROypuBEO0ex-GghPp9uMh8,1693
|
|
59
|
+
fm_weck/resources/fm_tools/cpa-bam-smg.yml,sha256=0b-5s1W6jzlVx9b2WXbqhW0yPuYVV5SLpLIi4vFRAk8,1743
|
|
60
|
+
fm_weck/resources/fm_tools/cpa-lockator.yml,sha256=y3PSzB0aQZKB8tID1dxif-EtWNE5s8I3Rmmd-wONjmE,1721
|
|
61
|
+
fm_weck/resources/fm_tools/cpa-witness2test.yml,sha256=5YyhBtMH_-3W9jCOJRpSKM4m-jyXb90XWPVtcP5UqY0,3626
|
|
62
|
+
fm_weck/resources/fm_tools/cpachecker.yml,sha256=RUJKnLrEbmKpWNx8PFqvsbMhHFBQ7myChdYoMiQY0Xk,10708
|
|
63
|
+
fm_weck/resources/fm_tools/cpv.yml,sha256=Q0wlS5l3CYRhNfsZNZDMAgBGZ3bTmdwKc8BhDU5ZZcQ,2481
|
|
64
|
+
fm_weck/resources/fm_tools/crux.yml,sha256=pSWP_AK7E5VZGrq02Unpt_1OCVY8Sf7g4XFPajqubLE,1640
|
|
65
|
+
fm_weck/resources/fm_tools/cseq.yml,sha256=IjAo-HFz-ME7CcY6BtrBeUwHcEY05OQWZzPmqmbnE5U,2025
|
|
66
|
+
fm_weck/resources/fm_tools/dartagnan.yml,sha256=ahDvBL9hUYeo6NCabqL4xAiqUmG4kprftutDhEVV3Oo,4022
|
|
67
|
+
fm_weck/resources/fm_tools/deagle.yml,sha256=f_uEhcm1OOp3ySnbc_KBCKve_3HpAwra9vYVl_s3xNs,2673
|
|
68
|
+
fm_weck/resources/fm_tools/divine.yml,sha256=R_KPU3biFnNzqV6U9GhWMFGQ0FwUCIYB-7ucp-JggE4,1549
|
|
69
|
+
fm_weck/resources/fm_tools/ebf.yml,sha256=nC2YfE6wveiWzaxIb1F_QXnJprKKDJIycZbZ7yogoB4,1661
|
|
70
|
+
fm_weck/resources/fm_tools/emergentheta.yml,sha256=l9iDthVia5XGa7lr51pw7LQyarnzVKgUVaxFWNn9X0I,2360
|
|
71
|
+
fm_weck/resources/fm_tools/esbmc-incr.yml,sha256=ZQzJSvdzVOTsE-ACtfS1bb2OpTSo4pkmoUJz9UorVf0,2326
|
|
72
|
+
fm_weck/resources/fm_tools/esbmc-kind.yml,sha256=3il2Cl3MePUYItGcrS3lEvPHxbVjwRPe4vs-QPUxaUc,3008
|
|
73
|
+
fm_weck/resources/fm_tools/fdse.yml,sha256=VPm7Uu-3JGdo5vCmpFBVH9oIuNktOoss3csZNygteN4,1694
|
|
74
|
+
fm_weck/resources/fm_tools/fizzer.yml,sha256=0T_NLV9cQ_H8aDjRFDHsDWNSAqbKEAQ7zoe5tQke58E,2433
|
|
75
|
+
fm_weck/resources/fm_tools/frama-c-sv.yml,sha256=riDGXuM161kkDKEGXW4EpEpvJ6jD4PLOFClsUg_tk-U,1941
|
|
76
|
+
fm_weck/resources/fm_tools/fshell-witness2test.yml,sha256=evJ_9oCIB4Vzt3Az7jynL7BADaV9U1fKHDKutLyn6EQ,1719
|
|
77
|
+
fm_weck/resources/fm_tools/fusebmc-ia.yml,sha256=lHfdXOdab6QbViEoZVCOpDWmnDmCVruA7QFhByypD2M,2375
|
|
78
|
+
fm_weck/resources/fm_tools/fusebmc.yml,sha256=nZf4dydFZ9rcgg5NUPHxN5QbpzehcTzFd8rywTDWIJk,3502
|
|
79
|
+
fm_weck/resources/fm_tools/gazer-theta.yml,sha256=zsDpcQCTkAbptL_GPsoom95BruxPj7X5LILJgKPM11c,1879
|
|
80
|
+
fm_weck/resources/fm_tools/gdart-llvm.yml,sha256=A1Pn8G0jbGmMRhiGVfpQIe179HJlrV3YGBWSOT8Zjk0,1442
|
|
81
|
+
fm_weck/resources/fm_tools/gdart.yml,sha256=UuZmWONU5kMJtYmq2qgIE4RxnYZwUW62Ym1fW2DqO2E,2656
|
|
82
|
+
fm_weck/resources/fm_tools/goblint.yml,sha256=B5Q43v6nyLodx88XiOgSenKzperRZYeb1nZ97KT37sQ,4182
|
|
83
|
+
fm_weck/resources/fm_tools/graves-par.yml,sha256=GLoBUwv16gQBzrtg5dota5-wbls8Dd_JQWCHKeqsLlE,1462
|
|
84
|
+
fm_weck/resources/fm_tools/graves.yml,sha256=adyp-k_7moQ9pgSeCtEauPOGFIufWoRlQydIRjn0yi0,2269
|
|
85
|
+
fm_weck/resources/fm_tools/gwit.yml,sha256=31k4Js4d3nCqW2uJDQnnfuqJcqfK77C0PuGBhdKMC98,1848
|
|
86
|
+
fm_weck/resources/fm_tools/hornix.yml,sha256=zfJZg09qiueTtyDcZLpWEQDK8GhwfvjfbLI1G_tzUUM,1532
|
|
87
|
+
fm_weck/resources/fm_tools/hybridtiger.yml,sha256=4ieXZSbm5qdmW3hK5vSfIwOPW6ZI7rSmecE5Ql0xPpI,1814
|
|
88
|
+
fm_weck/resources/fm_tools/infer.yml,sha256=sRIzRShUOhY_Y624Oiwdk5MR-c1ligXJdAgLdt-20qk,1884
|
|
89
|
+
fm_weck/resources/fm_tools/java-ranger.yml,sha256=3T1Vq3v_7dBZl3oIgjZjoZVkPK-OGeFzoaxzpn8h4sE,1989
|
|
90
|
+
fm_weck/resources/fm_tools/jayhorn.yml,sha256=4-R_2eBD_RvbY2f6Wsrp0ObssHdEsJT29aYCngYnozY,1994
|
|
91
|
+
fm_weck/resources/fm_tools/jbmc.yml,sha256=4TiAVbUPbccoChPBLmpXxRE1H6NBxqqGUTFt0kMbE_8,2735
|
|
92
|
+
fm_weck/resources/fm_tools/jcwit.yml,sha256=eJ4w5yGTIb_T-n4g5vki8L9Q_OeKHPYE-T4NLm0QZ7k,1297
|
|
93
|
+
fm_weck/resources/fm_tools/jdart.yml,sha256=sxH0f_FOF7xAVOosFvRcaiRwQ6qnELRUo_czqw1Jons,1516
|
|
94
|
+
fm_weck/resources/fm_tools/key.yml,sha256=wse7rCv33m2z8nbm9Dk-jAipkMaF8S0LINGCzfNfpfE,2478
|
|
95
|
+
fm_weck/resources/fm_tools/klee.yml,sha256=XCNXsPLH-AQPw-iDoJBY2QvByUV3QEf4ZipGwBCMu_o,1576
|
|
96
|
+
fm_weck/resources/fm_tools/kleef.yml,sha256=wheoFgTUTk6HzSPKOqHx8mWeVN9HnWupaP9QtPSKyOQ,1634
|
|
97
|
+
fm_weck/resources/fm_tools/korn.yml,sha256=Y4DyRuUJyoMbacDey22GxbTNWuoOonRmiegtFRp3iPw,2829
|
|
98
|
+
fm_weck/resources/fm_tools/lazycseq.yml,sha256=cS3fe0Pmu73iIx7TTs22l3oeH898WvKoDCrP4y0dQXE,1492
|
|
99
|
+
fm_weck/resources/fm_tools/legion-symcc.yml,sha256=mtobhu1AAXXXIGD0ebl9iD96VTauCkdL_ZFJEWrnaY8,1483
|
|
100
|
+
fm_weck/resources/fm_tools/legion.yml,sha256=ClD8_UEJq8wHIEp9_ifhTNKJuNmzvekaQx1BFOj4vlA,1675
|
|
101
|
+
fm_weck/resources/fm_tools/lf-checker.yml,sha256=lV4-GzzNvzWW505FFtYAUHlSG4gxOn-LL4xT8Tpyvq0,1386
|
|
102
|
+
fm_weck/resources/fm_tools/liv.yml,sha256=t0-Rfs0Ot3VPn7DD_pt3VAbyfpUOP8kdYV3E7uN3qGI,3260
|
|
103
|
+
fm_weck/resources/fm_tools/locksmith.yml,sha256=c3wNvIzQ_PZaYv6Mm15QH-Rm4oTuNzILNJs1fssESYQ,1397
|
|
104
|
+
fm_weck/resources/fm_tools/ltsmin.yml,sha256=vpfL4mBGlnxPtqoqaqUnR-Ph0kibaOd-h6FYuWHn91M,1206
|
|
105
|
+
fm_weck/resources/fm_tools/metaval++.yml,sha256=KAOcvftDNLvuHzIKaUoebekeOxBE6DVS2Acq2VbL1Dg,2006
|
|
106
|
+
fm_weck/resources/fm_tools/metaval.yml,sha256=aclr5cfGDuCduSrlk9kLOcK8GaUQAzPtDAxIJHgHs44,4668
|
|
107
|
+
fm_weck/resources/fm_tools/mlb.yml,sha256=S_ykc9ThLHBbMSXOgYIvk81r96cEwXbAXI5lPRDxJ4s,1907
|
|
108
|
+
fm_weck/resources/fm_tools/mopsa.yml,sha256=lOVxyLPoxsyeLhgFGm9X3D4cGrhC6X2jTO4MmyCBHbE,4172
|
|
109
|
+
fm_weck/resources/fm_tools/nacpa.yml,sha256=b59jqHyQGffRCTzGhyEL4zNUGz_Ss-eRw_s7W7MefaY,1417
|
|
110
|
+
fm_weck/resources/fm_tools/nitwit.yml,sha256=pAJXUtI35HqocZhseTqwkYOVis9Iv16C-UstDId4Juo,2097
|
|
111
|
+
fm_weck/resources/fm_tools/owic.yml,sha256=m0fcxyLurCLVFNmfiI0M6giSmsSEOHBdcyYyGbswiG0,1562
|
|
112
|
+
fm_weck/resources/fm_tools/pesco.yml,sha256=s5OOJUMTpoZEAgodj1q5kPrNcgGhQY5Tsk0Vw-4aAyo,2317
|
|
113
|
+
fm_weck/resources/fm_tools/pichecker.yml,sha256=ZNVlm230PlcbYttxwzE0oUUkxSFj_DLlpd7hLZZHr90,1646
|
|
114
|
+
fm_weck/resources/fm_tools/pinaka.yml,sha256=M-2Up2dKb3IJChpjsd1uWbX69bmEN_T4lM5NF0t77t4,1677
|
|
115
|
+
fm_weck/resources/fm_tools/predatorhp.yml,sha256=JjUWrV1u-XSw8bKJ5t371HG4yeAhuXPmZrtjpD3z5Yw,2513
|
|
116
|
+
fm_weck/resources/fm_tools/prism.yml,sha256=ruAG7Yvb_x6BlHzmadNX8M5DsL8ObsOz493g0kKCwL4,2320
|
|
117
|
+
fm_weck/resources/fm_tools/proton.yml,sha256=2iigAhBelOxN8we6NPPBuoGXPIllv6tzNQm1qqG5iM4,1629
|
|
118
|
+
fm_weck/resources/fm_tools/prtest.yml,sha256=ro1WPEA-FjumAOzGqN-5v6qOpx732x2Og4DerD04yEg,2250
|
|
119
|
+
fm_weck/resources/fm_tools/racerf.yml,sha256=6ck8P7i7QC_9Quq-nJxXeP_12ACKJzgV7CJfDT_hfdg,1747
|
|
120
|
+
fm_weck/resources/fm_tools/relay-sv.yml,sha256=rN4kf0EO_xVqzpPlFtWqdNjICjOjU4Uo7_YX9E6OPlo,1237
|
|
121
|
+
fm_weck/resources/fm_tools/rizzer.yml,sha256=ZmVL72-mBTzmMY29I3x5HmSCtQTMbJ0vw2Ucx_xSfnM,1523
|
|
122
|
+
fm_weck/resources/fm_tools/schema.yml,sha256=_SqJzwFGxM0EuuLgcMF-S_hUtoGxaFKraGTfQDUyILY,22945
|
|
123
|
+
fm_weck/resources/fm_tools/sikraken.yml,sha256=WnLxKyl-4zZ8rvXWqLuuqaC8b9GGQDg-jB3798SeK6M,1067
|
|
124
|
+
fm_weck/resources/fm_tools/spf.yml,sha256=6-7306izjPHKcLZ1veQRmGWOVQcsFJbNyL_55JYVQXA,1692
|
|
125
|
+
fm_weck/resources/fm_tools/sv-sanitizers.yml,sha256=bLG5MoLK95KruF5WCH0Yz2pJPAikPfkNgZRfbP5a2j0,1559
|
|
126
|
+
fm_weck/resources/fm_tools/svf-svc.yml,sha256=gQ12F7_7uis7fVgsTiNdleKBgydi-BOgS4ne-dRyHvk,1591
|
|
127
|
+
fm_weck/resources/fm_tools/swat.yml,sha256=gsvsFBeItbspzdXVVQ8TFWulbdYHzIHSmcKlWkWxGk0,1684
|
|
128
|
+
fm_weck/resources/fm_tools/symbiotic-witch.yml,sha256=6ND-WISFvJEeyEB3Q-Xu71dZrc_ayr1kAnEzfV3TA84,2421
|
|
129
|
+
fm_weck/resources/fm_tools/symbiotic.yml,sha256=cM7x0UIziMazq355CyZ9qBF0pEOuy4wjE9rmb_QSYE4,5796
|
|
130
|
+
fm_weck/resources/fm_tools/testcov.yml,sha256=UqI_uR1kYckBqiRArFP7sU_HLfu7jUq-GEsJOWgLu0s,5147
|
|
131
|
+
fm_weck/resources/fm_tools/theta.yml,sha256=nZFzCtxfCEATlctK4CAyj_zRnzqlqO_HfsC94df_Lt0,2894
|
|
132
|
+
fm_weck/resources/fm_tools/thorn.yml,sha256=2UuyPi1dKRjXObOVxj7x0joYxPmqDa-e3DZYjfKyweE,1326
|
|
133
|
+
fm_weck/resources/fm_tools/tracerx-wp.yml,sha256=LAfAd3f1u-6ZQ00fNvruqrlmvFVpK_rJV4HWYz7G4DE,2016
|
|
134
|
+
fm_weck/resources/fm_tools/tracerx.yml,sha256=I3r02dWrMEbcXyH2Nvn4skf5cKXjKESrA9boPaSw3ok,2370
|
|
135
|
+
fm_weck/resources/fm_tools/uautomizer.yml,sha256=CwwbVbtbKr5ri4PZ-g1WwUIsDWcnOyeYvRfVNSgrZi0,7604
|
|
136
|
+
fm_weck/resources/fm_tools/ugemcutter.yml,sha256=0APiSLnEt3_kfVHulAker97m4VvFMVFbb7o-fuObBpk,3318
|
|
137
|
+
fm_weck/resources/fm_tools/ukojak.yml,sha256=SRA0xSCBKdDeRDFhhWUDht6FK3MXMQyVzd-dtduHvi8,3041
|
|
138
|
+
fm_weck/resources/fm_tools/ureferee.yml,sha256=eNk0m1x36WSG9Y9-EtobRNoDmdFkAizEACfGAWFv2YY,2391
|
|
139
|
+
fm_weck/resources/fm_tools/utaipan.yml,sha256=oxAUMHHXRv4TWcGoOqkzyKtzKkPhJDBQAdmn1sLW_Gs,3565
|
|
140
|
+
fm_weck/resources/fm_tools/utestgen.yml,sha256=_mefwNOoW2Foa5IytA2fUpIg4gmqbmaXxUgFdiLmOkQ,2457
|
|
141
|
+
fm_weck/resources/fm_tools/vercors.yml,sha256=b7vEyzW61lQ6Dp9od65sUVYRbrQWtosN5p3-MjTXEvg,3190
|
|
142
|
+
fm_weck/resources/fm_tools/veriabs.yml,sha256=N4zCdZnrV8duOjcw1wzavp5oZtz21WShP_Z38tnIsTs,2490
|
|
143
|
+
fm_weck/resources/fm_tools/veriabsl.yml,sha256=4mj2IxMnTFNO7vQzSp5XBT7p32HhRW67Ip1BgZpCzAk,3581
|
|
144
|
+
fm_weck/resources/fm_tools/verifuzz.yml,sha256=1HHtZMkMhUyXxd20R7yXVEqyqOVo_O3G_j3zdSx3z9k,1845
|
|
145
|
+
fm_weck/resources/fm_tools/verioover.yml,sha256=Gjnxl3GYXDmes_nA_J1Jucc6DjfOX8Uz3DjTXiHeerg,1362
|
|
146
|
+
fm_weck/resources/fm_tools/wasp-c.yml,sha256=e2rureVEfS1wClCVknRg1MlatrL3x0fUhYV8A_eUAM8,1595
|
|
147
|
+
fm_weck/resources/fm_tools/wit4java.yml,sha256=ylfze2XbV4zKkVUH57Veqn7G49gW0Byxd5qFRnzs_bw,1861
|
|
148
|
+
fm_weck/resources/fm_tools/witch.yml,sha256=wwe6lrI2sxGKVZbLeipa38rPhB2pcSUFi9uVngtXGUQ,1795
|
|
149
|
+
fm_weck/resources/fm_tools/witnesslint.yml,sha256=EvMBcm5fx6lgSLRmHSKXSxXIJKZ-BrxLwTXI4GQ6FMs,6812
|
|
150
|
+
fm_weck/resources/fm_tools/witnessmap.yml,sha256=FyZtEloxpWBBjLn9kyqoen2kPjOkH2r4fxAj5gfV8Bg,1692
|
|
151
|
+
fm_weck-1.4.7.dist-info/METADATA,sha256=WnQnKmjvJ6HQouE2-s1Mil4cw9NJW0Sp3d9E43upkhk,2822
|
|
152
|
+
fm_weck-1.4.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
153
|
+
fm_weck-1.4.7.dist-info/entry_points.txt,sha256=toWpKCSY1u593MPnI_xW5gnwlnkerP4AvmPQ1s2nPgY,50
|
|
154
|
+
fm_weck-1.4.7.dist-info/RECORD,,
|