fm-weck 1.3.0__py3-none-any.whl → 1.4.1__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.
Files changed (116) hide show
  1. fm_weck/__init__.py +1 -1
  2. fm_weck/cli.py +63 -11
  3. fm_weck/config.py +38 -13
  4. fm_weck/engine.py +52 -11
  5. fm_weck/image_mgr.py +9 -2
  6. fm_weck/resources/__init__.py +2 -2
  7. fm_weck/resources/fm_tools/2ls.yml +14 -0
  8. fm_weck/resources/fm_tools/aise.yml +16 -3
  9. fm_weck/resources/fm_tools/aprove.yml +25 -1
  10. fm_weck/resources/fm_tools/brick.yml +13 -0
  11. fm_weck/resources/fm_tools/bubaak-split.yml +15 -0
  12. fm_weck/resources/fm_tools/bubaak.yml +15 -0
  13. fm_weck/resources/fm_tools/cbmc.yml +10 -0
  14. fm_weck/resources/fm_tools/cetfuzz.yml +12 -1
  15. fm_weck/resources/fm_tools/coastal.yml +11 -0
  16. fm_weck/resources/fm_tools/concurrentwitness2test.yml +21 -2
  17. fm_weck/resources/fm_tools/cooperace.yml +51 -0
  18. fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml +13 -0
  19. fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml +13 -0
  20. fm_weck/resources/fm_tools/coveritest.yml +14 -0
  21. fm_weck/resources/fm_tools/cpa-bam-bnb.yml +11 -0
  22. fm_weck/resources/fm_tools/cpa-bam-smg.yml +11 -0
  23. fm_weck/resources/fm_tools/cpa-lockator.yml +11 -0
  24. fm_weck/resources/fm_tools/cpa-witness2test.yml +9 -0
  25. fm_weck/resources/fm_tools/cpachecker.yml +68 -1
  26. fm_weck/resources/fm_tools/cpv.yml +17 -2
  27. fm_weck/resources/fm_tools/crux.yml +11 -0
  28. fm_weck/resources/fm_tools/cseq.yml +11 -4
  29. fm_weck/resources/fm_tools/dartagnan.yml +22 -0
  30. fm_weck/resources/fm_tools/deagle.yml +27 -1
  31. fm_weck/resources/fm_tools/divine.yml +11 -0
  32. fm_weck/resources/fm_tools/ebf.yml +9 -0
  33. fm_weck/resources/fm_tools/emergentheta.yml +23 -0
  34. fm_weck/resources/fm_tools/esbmc-incr.yml +32 -5
  35. fm_weck/resources/fm_tools/esbmc-kind.yml +33 -1
  36. fm_weck/resources/fm_tools/fdse.yml +9 -0
  37. fm_weck/resources/fm_tools/fizzer.yml +23 -0
  38. fm_weck/resources/fm_tools/frama-c-sv.yml +11 -0
  39. fm_weck/resources/fm_tools/fshell-witness2test.yml +10 -0
  40. fm_weck/resources/fm_tools/fusebmc-ia.yml +9 -0
  41. fm_weck/resources/fm_tools/fusebmc.yml +19 -1
  42. fm_weck/resources/fm_tools/gazer-theta.yml +13 -0
  43. fm_weck/resources/fm_tools/gdart-llvm.yml +10 -0
  44. fm_weck/resources/fm_tools/gdart.yml +31 -0
  45. fm_weck/resources/fm_tools/goblint.yml +50 -2
  46. fm_weck/resources/fm_tools/graves-par.yml +13 -0
  47. fm_weck/resources/fm_tools/graves.yml +12 -0
  48. fm_weck/resources/fm_tools/gwit.yml +9 -0
  49. fm_weck/resources/fm_tools/hornix.yml +55 -0
  50. fm_weck/resources/fm_tools/hybridtiger.yml +11 -0
  51. fm_weck/resources/fm_tools/infer.yml +11 -0
  52. fm_weck/resources/fm_tools/java-ranger.yml +25 -3
  53. fm_weck/resources/fm_tools/jayhorn.yml +12 -0
  54. fm_weck/resources/fm_tools/jbmc.yml +14 -1
  55. fm_weck/resources/fm_tools/jcwit.yml +11 -0
  56. fm_weck/resources/fm_tools/jdart.yml +11 -0
  57. fm_weck/resources/fm_tools/klee.yml +11 -0
  58. fm_weck/resources/fm_tools/kleef.yml +24 -5
  59. fm_weck/resources/fm_tools/korn.yml +16 -0
  60. fm_weck/resources/fm_tools/lazycseq.yml +13 -0
  61. fm_weck/resources/fm_tools/legion-symcc.yml +10 -0
  62. fm_weck/resources/fm_tools/legion.yml +11 -0
  63. fm_weck/resources/fm_tools/lf-checker.yml +10 -0
  64. fm_weck/resources/fm_tools/liv.yml +28 -4
  65. fm_weck/resources/fm_tools/locksmith.yml +10 -0
  66. fm_weck/resources/fm_tools/metaval++.yml +49 -0
  67. fm_weck/resources/fm_tools/metaval.yml +51 -5
  68. fm_weck/resources/fm_tools/mlb.yml +21 -1
  69. fm_weck/resources/fm_tools/mopsa.yml +45 -0
  70. fm_weck/resources/fm_tools/nacpa.yml +51 -0
  71. fm_weck/resources/fm_tools/nitwit.yml +11 -0
  72. fm_weck/resources/fm_tools/owic.yml +11 -0
  73. fm_weck/resources/fm_tools/pesco.yml +12 -0
  74. fm_weck/resources/fm_tools/pichecker.yml +10 -0
  75. fm_weck/resources/fm_tools/pinaka.yml +11 -0
  76. fm_weck/resources/fm_tools/predatorhp.yml +12 -0
  77. fm_weck/resources/fm_tools/proton.yml +20 -0
  78. fm_weck/resources/fm_tools/prtest.yml +9 -0
  79. fm_weck/resources/fm_tools/racerf.yml +48 -0
  80. fm_weck/resources/fm_tools/relay-sv.yml +11 -0
  81. fm_weck/resources/fm_tools/rizzer.yml +9 -0
  82. fm_weck/resources/fm_tools/sikraken.yml +42 -0
  83. fm_weck/resources/fm_tools/spf.yml +11 -0
  84. fm_weck/resources/fm_tools/sv-sanitizers.yml +18 -1
  85. fm_weck/resources/fm_tools/svf-svc.yml +45 -0
  86. fm_weck/resources/fm_tools/swat.yml +9 -0
  87. fm_weck/resources/fm_tools/symbiotic-witch.yml +17 -1
  88. fm_weck/resources/fm_tools/symbiotic.yml +32 -1
  89. fm_weck/resources/fm_tools/testcov.yml +18 -1
  90. fm_weck/resources/fm_tools/theta.yml +24 -0
  91. fm_weck/resources/fm_tools/thorn.yml +46 -0
  92. fm_weck/resources/fm_tools/tracerx-wp.yml +19 -0
  93. fm_weck/resources/fm_tools/tracerx.yml +19 -0
  94. fm_weck/resources/fm_tools/uautomizer.yml +72 -4
  95. fm_weck/resources/fm_tools/ugemcutter.yml +24 -6
  96. fm_weck/resources/fm_tools/ukojak.yml +35 -6
  97. fm_weck/resources/fm_tools/ureferee.yml +82 -0
  98. fm_weck/resources/fm_tools/utaipan.yml +33 -4
  99. fm_weck/resources/fm_tools/utestgen.yml +27 -0
  100. fm_weck/resources/fm_tools/veriabs.yml +28 -1
  101. fm_weck/resources/fm_tools/veriabsl.yml +43 -3
  102. fm_weck/resources/fm_tools/verifuzz.yml +2 -0
  103. fm_weck/resources/fm_tools/verioover.yml +10 -0
  104. fm_weck/resources/fm_tools/wasp-c.yml +12 -0
  105. fm_weck/resources/fm_tools/wit4java.yml +12 -0
  106. fm_weck/resources/fm_tools/witch.yml +16 -1
  107. fm_weck/resources/fm_tools/witnesslint.yml +79 -1
  108. fm_weck/resources/run_with_overlay.sh +22 -4
  109. fm_weck/runexec_mode.py +52 -0
  110. fm_weck/runexec_util.py +7 -3
  111. fm_weck/serve.py +0 -27
  112. {fm_weck-1.3.0.dist-info → fm_weck-1.4.1.dist-info}/METADATA +1 -1
  113. fm_weck-1.4.1.dist-info/RECORD +145 -0
  114. {fm_weck-1.3.0.dist-info → fm_weck-1.4.1.dist-info}/WHEEL +1 -1
  115. fm_weck-1.3.0.dist-info/RECORD +0 -135
  116. {fm_weck-1.3.0.dist-info → fm_weck-1.4.1.dist-info}/entry_points.txt +0 -0
fm_weck/__init__.py CHANGED
@@ -8,4 +8,4 @@
8
8
  from .config import Config # noqa: F401
9
9
  from .image_mgr import ImageMgr # noqa: F401
10
10
 
11
- __version__ = "1.3.0"
11
+ __version__ = "1.4.1"
fm_weck/cli.py CHANGED
@@ -14,15 +14,29 @@ from functools import cache
14
14
  from pathlib import Path
15
15
  from typing import Any, Callable, Optional, Tuple, Union
16
16
 
17
- from fm_tools.benchexec_helper import DataModel
17
+ try:
18
+ from fm_tools.benchexec_helper import DataModel
19
+ except ImportError:
20
+ from enum import Enum
21
+
22
+ class DataModel(Enum):
23
+ """
24
+ Enum representing the data model of the tool.
25
+ """
26
+
27
+ LP64 = "LP64"
28
+ ILP32 = "ILP32"
29
+
30
+ def __str__(self):
31
+ return self.value
32
+
18
33
 
19
34
  from fm_weck import Config
20
35
  from fm_weck.config import _SEARCH_ORDER
21
36
  from fm_weck.resources import iter_fm_data, iter_properties
22
37
 
23
38
  from . import __version__
24
- from .engine import Engine, NoImageError
25
- from .serve import run_guided, run_manual, run_runexec, setup_fm_tool
39
+ from .exceptions import NoImageError
26
40
 
27
41
  logger = logging.getLogger(__name__)
28
42
 
@@ -84,12 +98,22 @@ def parse(raw_args: list[str]) -> Tuple[Callable[[], None], Namespace]:
84
98
  default=None,
85
99
  )
86
100
 
101
+ loglevels_lower = ["debug", "info", "warning", "error", "critical"]
102
+ loglevels = loglevels_lower + [level.upper() for level in loglevels_lower]
87
103
  parser.add_argument(
88
104
  "--loglevel",
89
- choices=["debug", "info", "warning", "error", "critical"],
105
+ choices=loglevels,
106
+ metavar="LEVEL",
107
+ action="store",
108
+ default=None,
109
+ help="Set the log level. Valid values are: " + ", ".join(loglevels_lower),
110
+ )
111
+
112
+ parser.add_argument(
113
+ "--logfile",
90
114
  action="store",
115
+ help="Path to the log file.",
91
116
  default=None,
92
- help="Set the log level.",
93
117
  )
94
118
 
95
119
  parser.add_argument(
@@ -181,7 +205,11 @@ def parse(raw_args: list[str]) -> Tuple[Callable[[], None], Namespace]:
181
205
  add_tool_arg(install, nargs="+")
182
206
  install.set_defaults(main=main_install)
183
207
 
184
- runexec = subparsers.add_parser("runexec", help="Run runexec on a command inside a container.")
208
+ runexec = subparsers.add_parser(
209
+ "runexec",
210
+ help="Run runexec on a command inside a container.",
211
+ allow_abbrev=False,
212
+ )
185
213
  runexec.add_argument(
186
214
  "--image",
187
215
  dest="use_image",
@@ -204,6 +232,16 @@ def parse(raw_args: list[str]) -> Tuple[Callable[[], None], Namespace]:
204
232
  default=None,
205
233
  )
206
234
 
235
+ # Arguments passed though to the container manager (i.e., docker or podman)
236
+ runexec.add_argument(
237
+ "--container-long-opt",
238
+ dest="container_long_opts",
239
+ help="Arguments passed as long options (prepending --) directly to the container manager "
240
+ "(e.g., docker or podman). Each usage passes additional arguments to the container manager.",
241
+ action="append",
242
+ nargs="+",
243
+ )
244
+
207
245
  runexec.add_argument("argument_list", metavar="args", nargs="*", help="Arguments for runexec.")
208
246
  runexec.set_defaults(main=main_runexec)
209
247
 
@@ -264,14 +302,19 @@ def resolve_property(prop_name: str) -> Path:
264
302
  return property_choice_map()[prop_name]
265
303
 
266
304
 
267
- def set_log_level(loglevel: Optional[str], config: dict[str, Any]):
305
+ def set_log_options(loglevel: Optional[str], logfile: Optional[str], config: dict[str, Any]):
268
306
  level = "WARNING"
269
307
  level = loglevel.upper() if loglevel else config.get("logging", {}).get("level", level)
270
- logging.basicConfig(level=level)
308
+ if logfile:
309
+ logging.basicConfig(level=level, filename=logfile)
310
+ else:
311
+ logging.basicConfig(level=level)
271
312
  logging.getLogger("httpcore").setLevel("WARNING")
272
313
 
273
314
 
274
315
  def main_run(args: argparse.Namespace):
316
+ from .serve import run_guided
317
+
275
318
  if not args.TOOL:
276
319
  logger.error("No fm-tool given. Aborting...")
277
320
  return 1
@@ -300,15 +343,20 @@ def main_run(args: argparse.Namespace):
300
343
 
301
344
 
302
345
  def main_runexec(args: argparse.Namespace):
346
+ from .runexec_mode import run_runexec
347
+
303
348
  run_runexec(
304
349
  benchexec_package=args.benchexec_package,
305
350
  use_image=args.use_image,
306
351
  configuration=Config(),
352
+ extra_container_args=args.container_long_opts or [],
307
353
  command=args.argument_list,
308
354
  )
309
355
 
310
356
 
311
357
  def main_manual(args: argparse.Namespace):
358
+ from .serve import run_manual
359
+
312
360
  if not args.TOOL:
313
361
  logger.error("No fm-tool given. Aborting...")
314
362
  return 1
@@ -328,6 +376,8 @@ def main_manual(args: argparse.Namespace):
328
376
 
329
377
 
330
378
  def main_install(args: argparse.Namespace):
379
+ from .serve import setup_fm_tool
380
+
331
381
  for tool in args.TOOL:
332
382
  try:
333
383
  fm_data = resolve_tool(tool)
@@ -343,6 +393,8 @@ def main_install(args: argparse.Namespace):
343
393
 
344
394
 
345
395
  def main_shell(args: argparse.Namespace):
396
+ from .engine import Engine
397
+
346
398
  if not args.TOOL:
347
399
  engine = Engine.from_config(Config())
348
400
  else:
@@ -378,7 +430,7 @@ Please specify an image in the fm-tool yml file or add a configuration.
378
430
 
379
431
  To add a configuration you can do the following (on POSIX Terminals):
380
432
 
381
- printf '[defaults]\\nimage = "<your_image>"' > .weck
433
+ printf '[defaults]\\nimage = "<your_image>"' > .fm-weck
382
434
 
383
435
  Replace <your_image> with the image you want to use.
384
436
  """
@@ -393,7 +445,7 @@ To specify an image add
393
445
  [defaults]
394
446
  image = "your_image"
395
447
 
396
- to your .weck file.
448
+ to your .fm-weck file.
397
449
  """
398
450
 
399
451
  logger.error(text, tool, config)
@@ -402,7 +454,7 @@ to your .weck file.
402
454
  def cli(raw_args: list[str]):
403
455
  help_callback, args = parse(raw_args)
404
456
  configuration = Config().load(args.config)
405
- set_log_level(args.loglevel, configuration)
457
+ set_log_options(args.loglevel, args.logfile, configuration)
406
458
  if args.dry_run:
407
459
  Config().set_dry_run(True)
408
460
 
fm_weck/config.py CHANGED
@@ -5,6 +5,7 @@
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 os
10
11
  import shutil
@@ -14,8 +15,20 @@ from functools import cache
14
15
  from pathlib import Path
15
16
  from typing import Any, Callable, Iterable, Optional, Tuple, TypeVar
16
17
 
17
- import yaml
18
- from fm_tools.fmdata import FmData
18
+ try:
19
+ from fm_tools.fmdata import FmData
20
+ except ImportError:
21
+
22
+ class FmData:
23
+ def __init__(self, data, version):
24
+ raise ImportError("fm_tools is not imported.")
25
+
26
+ def get_actor_name(self):
27
+ raise ImportError("fm_tools is not imported.")
28
+
29
+ def get_version(self):
30
+ raise ImportError("fm_tools is not imported.")
31
+
19
32
 
20
33
  from fm_weck.resources import RUN_WITH_OVERLAY, RUNEXEC_SCRIPT
21
34
 
@@ -167,21 +180,30 @@ class Config(object):
167
180
  return not (sys.platform.startswith("linux") or sys.platform == "darwin")
168
181
 
169
182
  def make_runexec_script_available(self) -> Path:
170
- return self.make_script_available(RUNEXEC_SCRIPT, "runexec")
183
+ return self.make_script_available(RUNEXEC_SCRIPT)
171
184
 
172
- def make_script_available(self, source: Path = RUN_WITH_OVERLAY, target_name: str = "run_with_overlay.sh") -> Path:
185
+ def make_script_available(self, target_name: str = RUN_WITH_OVERLAY) -> Path:
173
186
  script_dir = self.cache_location / ".scripts"
174
187
  target = script_dir / target_name
188
+
175
189
  if not (target.exists() and target.is_file()):
176
190
  script_dir.mkdir(parents=True, exist_ok=True)
177
- shutil.copy(source, target)
191
+
192
+ # Try to copy from package resources
193
+ try:
194
+ with pkg_resources.path("fm_weck.resources", target_name) as source_path:
195
+ shutil.copy(source_path, target)
196
+ except FileNotFoundError:
197
+ logging.error(f"Resource {target_name} not found in package.")
198
+ return None
178
199
  else:
179
- # Compare if the RUN_WITH_OVERLAY script is newer than the existing one
180
- if source.stat().st_mtime > target.stat().st_mtime:
181
- shutil.copy(source, target)
182
- else:
183
- logging.debug("Using existing run_with_overlay.sh script")
184
- return target
200
+ # Compare modification time if the file exists
201
+ with pkg_resources.path("fm_weck.resources", target_name) as source_path:
202
+ if source_path.stat().st_mtime > target.stat().st_mtime:
203
+ shutil.copy(source_path, target)
204
+ else:
205
+ logging.debug(f"Using existing {target_name} script")
206
+ return target
185
207
 
186
208
  if Config._system_is_not_posix():
187
209
  return target
@@ -195,13 +217,16 @@ class Config(object):
195
217
  except OSError as e:
196
218
  logging.error(
197
219
  f"Failed to set executable bit: {e}. "
198
- "In some cases this can lead to permission errors when "
199
- "running the script inside of the container."
220
+ "This may lead to permission errors when running the script in the container."
200
221
  )
201
222
 
223
+ return target
224
+
202
225
 
203
226
  @cache
204
227
  def parse_fm_data(fm_data: Path, version: Optional[str]) -> FmData:
228
+ import yaml
229
+
205
230
  if not fm_data.exists() or not fm_data.is_file():
206
231
  raise FileNotFoundError(f"fm data file {fm_data} does not exist")
207
232
 
fm_weck/engine.py CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  import logging
9
9
  import shutil
10
+ import signal
10
11
  import subprocess
11
12
  from abc import ABC, abstractmethod
12
13
  from functools import cached_property, singledispatchmethod
@@ -14,7 +15,17 @@ from pathlib import Path
14
15
  from tempfile import mkdtemp
15
16
  from typing import List, Optional, Union
16
17
 
17
- from fm_tools.fmdata import FmData, FmImageConfig
18
+ try:
19
+ from fm_tools.fmdata import FmData, FmImageConfig
20
+ except ImportError:
21
+ # Mock the FmData and FmImageConfig class for type checking
22
+ class FmData:
23
+ def get_images(self):
24
+ pass
25
+
26
+ class FmImageConfig:
27
+ pass
28
+
18
29
 
19
30
  from fm_weck.config import Config, parse_fm_data
20
31
  from fm_weck.exceptions import NoImageError
@@ -66,6 +77,24 @@ class Engine(ABC):
66
77
  f"{source}:{target}",
67
78
  ]
68
79
 
80
+ def add_container_long_opt(self, arg: list[str]):
81
+ """
82
+ Add a long option to the container command.
83
+ If the first element of the list does not start with "--", it will be prepended.
84
+ Example:
85
+ add_container_long_opt(["--option", "value"]) -> --option value
86
+ add_container_long_opt(["option", "value"]) -> --option value
87
+ """
88
+
89
+ if not arg:
90
+ raise ValueError("Argument must not be empty.")
91
+
92
+ base = arg[0]
93
+ if not base.startswith("--"):
94
+ base = f"--{base}"
95
+
96
+ self.extra_args["container_args"] = self.extra_args.get("container_args", []) + [base] + arg[1:]
97
+
69
98
  @abstractmethod
70
99
  def benchexec_capabilities(self):
71
100
  raise NotImplementedError
@@ -261,15 +290,27 @@ class Engine(ABC):
261
290
  return tag
262
291
 
263
292
  def _run_process(self, command: tuple[str, ...] | list[str]):
293
+ process = None # To make sure process is defined if a signal is caught early
294
+
295
+ def terminate_process_group(signal_received, frame):
296
+ if process:
297
+ logging.info("Received signal %s. Terminating container process.", signal_received)
298
+ process.send_signal(signal.SIGTERM)
299
+
300
+ # Register signal handler
301
+ signal.signal(signal.SIGINT, terminate_process_group)
302
+ signal.signal(signal.SIGTERM, terminate_process_group)
303
+
304
+ logger.debug("\n\nRunning command:\n%s\n\n", " ".join(map(str, command)))
264
305
  if self.log_file is None:
265
306
  process = subprocess.Popen(command)
266
- process.wait()
267
- return
307
+ else:
308
+ self.log_file.parent.mkdir(parents=True, exist_ok=True)
309
+ with self.log_file.open("wb") as f:
310
+ process = subprocess.Popen(command, stdout=f, stderr=f)
268
311
 
269
- self.log_file.parent.mkdir(parents=True, exist_ok=True)
270
- with self.log_file.open("wb") as f:
271
- process = subprocess.Popen(command, stdout=f, stderr=f)
272
- process.wait()
312
+ assert process is not None, "Process should be defined at this point."
313
+ process.wait()
273
314
 
274
315
  def run(self, *command: str) -> None:
275
316
  if self.image is None:
@@ -279,7 +320,7 @@ class Engine(ABC):
279
320
  logger.debug("Running: %s", command)
280
321
  if self.dry_run:
281
322
  print("Command to be executed:")
282
- print(" ".join(command))
323
+ print(" ".join(map(str, command)))
283
324
  return
284
325
 
285
326
  self._run_process(command)
@@ -303,15 +344,15 @@ class Podman(Engine):
303
344
  return [
304
345
  "--annotation",
305
346
  "run.oci.keep_original_groups=1",
306
- # "--cgroups=split",
347
+ "--cgroups=split",
307
348
  "--security-opt",
308
349
  "unmask=/sys/fs/cgroup",
309
350
  "--security-opt",
310
351
  "unmask=/proc/*",
311
352
  "--security-opt",
312
353
  "seccomp=unconfined",
313
- "-v",
314
- "/sys/fs/cgroup:/sys/fs/cgroup:rw",
354
+ # "-v",
355
+ # "/sys/fs/cgroup:/sys/fs/cgroup:rw",
315
356
  ]
316
357
 
317
358
 
fm_weck/image_mgr.py CHANGED
@@ -9,8 +9,14 @@ import logging
9
9
  from pathlib import Path
10
10
  from typing import TYPE_CHECKING
11
11
 
12
- from fm_tools.fmdata import FmImageConfig
13
- from yaspin import yaspin
12
+ try:
13
+ from fm_tools.fmdata import FmImageConfig
14
+ except ImportError:
15
+
16
+ class FmImageConfig:
17
+ def __init__(self, full_images, base_images, required_packages):
18
+ raise ImportError("fm_tools is not imported.")
19
+
14
20
 
15
21
  from fm_weck.exceptions import NoImageError
16
22
 
@@ -48,6 +54,7 @@ class ImageMgr(object):
48
54
  image_cmd = engine.image_from(CONTAINERFILE)
49
55
  image_cmd.base_image(image.base_images[0])
50
56
  image_cmd.packages(image.required_packages)
57
+ from yaspin import yaspin
51
58
 
52
59
  with yaspin(text="Building image", color="cyan") as spinner:
53
60
  tag = image_cmd.build()
@@ -15,9 +15,9 @@ CONTAINERFILE = resource_dir / "Containerfile"
15
15
  # to the wheel file under fm_weck/resources/fm_tools
16
16
  FM_DATA_LOCATION = resource_dir / "fm_tools"
17
17
  PROPERTY_LOCATION = resource_dir / "properties"
18
- RUN_WITH_OVERLAY = resource_dir / "run_with_overlay.sh"
18
+ RUN_WITH_OVERLAY = "run_with_overlay.sh"
19
19
  BENCHEXEC_WHL = resource_dir / "BenchExec-3.25-py3-none-any.whl"
20
- RUNEXEC_SCRIPT = resource_dir / "runexec"
20
+ RUNEXEC_SCRIPT = "runexec"
21
21
 
22
22
 
23
23
  def iter_fm_data():
@@ -9,6 +9,7 @@ fmtools_format_version: "2.0"
9
9
  fmtools_entry_maintainers:
10
10
  - viktor.malik
11
11
  - FrNecas
12
+ - peterschrammel
12
13
 
13
14
  maintainers:
14
15
  - orcid: 0000-0002-0608-0748
@@ -18,6 +19,10 @@ maintainers:
18
19
  url: https://www.fit.vut.cz/person/imalik/.en
19
20
 
20
21
  versions:
22
+ - version: "svcomp25"
23
+ doi: "10.5281/zenodo.10184626"
24
+ benchexec_toolinfo_options: ['--graphml-witness', 'witness.graphml']
25
+ required_ubuntu_packages: []
21
26
  - version: "svcomp24"
22
27
  doi: "10.5281/zenodo.10184626"
23
28
  benchexec_toolinfo_options: ['--graphml-witness', 'witness.graphml']
@@ -28,6 +33,15 @@ versions:
28
33
  required_ubuntu_packages: []
29
34
 
30
35
  competition_participations:
36
+ - competition: "SV-COMP 2025"
37
+ track: "Verification"
38
+ tool_version: "svcomp25"
39
+ jury_member:
40
+ orcid: 0000-0002-0608-0748
41
+ name: Viktor Malík
42
+ institution: Brno University of Technology
43
+ country: Czechia
44
+ url: https://www.fit.vut.cz/person/imalik/.en
31
45
  - competition: "SV-COMP 2024"
32
46
  track: "Verification"
33
47
  tool_version: "svcomp24"
@@ -1,13 +1,13 @@
1
1
  name: aise
2
2
  input_languages:
3
3
  - C
4
- project_url: https://github.com/ZhenWang233/AISE
5
- repository_url: https://github.com/ZhenWang233/AISE
4
+ project_url: https://github.com/zbchen/aise-verifier
5
+ repository_url: https://github.com/zbchen/aise-verifier
6
6
  spdx_license_identifier: GPL-3.0-or-later
7
7
  benchexec_toolinfo_module: "https://gitlab.com/sosy-lab/software/benchexec/-/raw/main/benchexec/tools/aise.py"
8
8
  fmtools_format_version: "2.0"
9
9
  fmtools_entry_maintainers:
10
- - ZhenWang233
10
+ - liar1007
11
11
 
12
12
  maintainers:
13
13
  - orcid: 0000-0002-4066-7892
@@ -17,12 +17,25 @@ maintainers:
17
17
  url: https://zbchen.github.io/
18
18
 
19
19
  versions:
20
+ - version: "svcomp25"
21
+ doi: "10.5281/zenodo.14162938"
22
+ benchexec_toolinfo_options: []
23
+ required_ubuntu_packages: []
20
24
  - version: "svcomp24"
21
25
  doi: "10.5281/zenodo.10201159"
22
26
  benchexec_toolinfo_options: []
23
27
  required_ubuntu_packages: []
24
28
 
25
29
  competition_participations:
30
+ - competition: "SV-COMP 2025"
31
+ track: "Verification"
32
+ tool_version: "svcomp25"
33
+ jury_member:
34
+ orcid: 0000-0002-4066-7892
35
+ name: Zhenbang Chen
36
+ institution: National University of Defense Technology
37
+ country: China
38
+ url: https://zbchen.github.io/
26
39
  - competition: "SV-COMP 2024"
27
40
  track: "Verification"
28
41
  tool_version: "svcomp24"
@@ -1,4 +1,4 @@
1
- name: AProVE
1
+ name: AProVE (KoAT + LoAT)
2
2
  input_languages:
3
3
  - C
4
4
  project_url: https://aprove.informatik.rwth-aachen.de/
@@ -6,9 +6,15 @@ spdx_license_identifier: AProVE license
6
6
  benchexec_toolinfo_module: benchexec.tools.aprove
7
7
  fmtools_format_version: "2.0"
8
8
  fmtools_entry_maintainers:
9
+ - nilslommen
9
10
  - JCKassing
10
11
 
11
12
  maintainers:
13
+ - orcid: 0000-0003-3187-9217
14
+ name: Nils Lommen
15
+ institution: RWTH Aachen
16
+ country: Germany
17
+ url: https://verify.rwth-aachen.de/nlommen/
12
18
  - orcid: 0009-0001-9972-2470
13
19
  name: Jan-Christoph Kassing
14
20
  institution: RWTH Aachen
@@ -16,6 +22,15 @@ maintainers:
16
22
  url: https://verify.rwth-aachen.de/jckassing/
17
23
 
18
24
  versions:
25
+ - version: "svcomp25"
26
+ doi: "10.5281/zenodo.14168633"
27
+ benchexec_toolinfo_options: []
28
+ required_ubuntu_packages:
29
+ - openjdk-17-jre-headless
30
+ base_container_images:
31
+ - docker.io/ubuntu:20.04
32
+ full_container_images:
33
+ - registry.gitlab.com/sosy-lab/benchmarking/competition-scripts/user:2022
19
34
  - version: "svcomp22"
20
35
  url: "https://gitlab.com/sosy-lab/sv-comp/archives-2022/raw/svcomp22/2022/aprove.zip"
21
36
  benchexec_toolinfo_options: []
@@ -26,6 +41,15 @@ versions:
26
41
  - registry.gitlab.com/sosy-lab/benchmarking/competition-scripts/user:2022
27
42
 
28
43
  competition_participations:
44
+ - competition: "SV-COMP 2025"
45
+ track: "Verification"
46
+ tool_version: "svcomp25"
47
+ jury_member:
48
+ orcid: 0000-0003-3187-9217
49
+ name: Nils Lommen
50
+ institution: RWTH Aachen
51
+ country: Germany
52
+ url: https://verify.rwth-aachen.de/nlommen/
29
53
  - competition: "SV-COMP 2022"
30
54
  track: "Verification"
31
55
  tool_version: "svcomp22"
@@ -17,6 +17,10 @@ maintainers:
17
17
  url: null
18
18
 
19
19
  versions:
20
+ - version: "svcomp25"
21
+ doi: "10.5281/zenodo.13961249"
22
+ benchexec_toolinfo_options: []
23
+ required_ubuntu_packages: []
20
24
  - version: "svcomp24"
21
25
  doi: "10.5281/zenodo.10202700"
22
26
  benchexec_toolinfo_options: []
@@ -27,6 +31,15 @@ versions:
27
31
  required_ubuntu_packages: []
28
32
 
29
33
  competition_participations:
34
+ - competition: "SV-COMP 2025"
35
+ track: "Verification"
36
+ tool_version: "svcomp25"
37
+ jury_member:
38
+ orcid: 0000-0003-0517-7801
39
+ name: Lei Bu
40
+ institution: Nanjing University
41
+ country: China
42
+ url: null
30
43
  - competition: "SV-COMP 2024"
31
44
  track: "Verification"
32
45
  tool_version: "svcomp24"
@@ -18,6 +18,12 @@ maintainers:
18
18
  url: null
19
19
 
20
20
  versions:
21
+ - version: "svcomp25"
22
+ doi: "10.5281/zenodo.13958522"
23
+ benchexec_toolinfo_options: ["-sv-comp", "-sv-comp-witness", "witness.graphml", "-cfg", "splitting-svcomp24"]
24
+ required_ubuntu_packages:
25
+ - clang
26
+ - python3
21
27
  - version: "svcomp24"
22
28
  doi: "10.5281/zenodo.10202207"
23
29
  benchexec_toolinfo_options: ["-sv-comp", "-sv-comp-witness", "witness.graphml", "-cfg", "splitting-svcomp24"]
@@ -27,6 +33,15 @@ versions:
27
33
  - python3-lxml
28
34
 
29
35
  competition_participations:
36
+ - competition: "SV-COMP 2025"
37
+ track: "Verification"
38
+ tool_version: "svcomp25"
39
+ jury_member:
40
+ orcid: 0000-0003-1132-5516
41
+ name: Marek Chalupa
42
+ institution: ISTA
43
+ country: Austria
44
+ url: null
30
45
  - competition: "SV-COMP 2024"
31
46
  track: "Verification"
32
47
  tool_version: "svcomp24"
@@ -17,6 +17,12 @@ maintainers:
17
17
  url: null
18
18
 
19
19
  versions:
20
+ - version: "svcomp25"
21
+ doi: "10.5281/zenodo.13958522"
22
+ benchexec_toolinfo_options: ["-sv-comp", "-sv-comp-witness", "witness.graphml", "-timeout", "900"]
23
+ required_ubuntu_packages:
24
+ - clang
25
+ - python3
20
26
  - version: "svcomp24"
21
27
  doi: "10.5281/zenodo.10202207"
22
28
  benchexec_toolinfo_options: ["-sv-comp", "-sv-comp-witness", "witness.graphml", "-timeout", "900"]
@@ -33,6 +39,15 @@ versions:
33
39
  - python3-lxml
34
40
 
35
41
  competition_participations:
42
+ - competition: "SV-COMP 2025"
43
+ track: "Verification"
44
+ tool_version: "svcomp25"
45
+ jury_member:
46
+ orcid: 0000-0003-1132-5516
47
+ name: Marek Chalupa
48
+ institution: ISTA
49
+ country: Austria
50
+ url: null
36
51
  - competition: "SV-COMP 2024"
37
52
  track: "Verification"
38
53
  tool_version: "svcomp24"
@@ -25,8 +25,18 @@ versions:
25
25
  - libc6-dev-i386
26
26
 
27
27
  competition_participations:
28
+ - competition: "SV-COMP 2025"
29
+ track: "Verification"
30
+ hors-concours: true
31
+ tool_version: "svcomp23"
32
+ jury_member:
33
+ name: Hors Concours
34
+ institution: --
35
+ country: --
36
+ url: null
28
37
  - competition: "SV-COMP 2024"
29
38
  track: "Verification"
39
+ hors-concours: true
30
40
  tool_version: "svcomp23"
31
41
  jury_member:
32
42
  orcid: 0000-0002-7947-983X
@@ -39,8 +39,19 @@ versions:
39
39
  - python3-pandas
40
40
  - python3-pycparser
41
41
  - python3-sklearn
42
-
42
+ full_container_images:
43
+ - registry.gitlab.com/sosy-lab/benchmarking/competition-scripts/user:2024
44
+
43
45
  competition_participations:
46
+ - competition: "Test-Comp 2025"
47
+ track: "Test Generation"
48
+ hors-concours: true
49
+ tool_version: "testcomp24"
50
+ jury_member:
51
+ name: Hors Concours
52
+ institution: --
53
+ country: --
54
+ url: null
44
55
  - competition: "Test-Comp 2024"
45
56
  track: "Test Generation"
46
57
  tool_version: "testcomp24"