Skip to content
Snippets Groups Projects
opam 5.33 KiB
Newer Older
opam-version: "2.0"
name: "frama-c"
synopsis: "Platform dedicated to the analysis of source code written in C"
Virgile Prevosto's avatar
Virgile Prevosto committed
version: "30.0+dev"
description:"""
Frama-C gathers several analysis techniques in a single collaborative
framework, based on analyzers (called "plug-ins") that can build upon the
results computed by other analyzers in the framework.
Thanks to this approach, Frama-C provides sophisticated tools, including:
- an analyzer based on abstract interpretation (Eva plug-in);
- a program proof framework based on weakest precondition calculus (WP plug-in);
- a program slicer (Slicing plug-in);
- a tool for verification of automata-based properties (Aoraï plug-in);
- a runtime verification tool (E-ACSL plug-in);
- several tools for code base exploration and dependency analysis
  (plug-ins From, Impact, Metrics, Occurrence, Scope, etc.).
These plug-ins communicate between each other via the Frama-C API
and via ACSL (ANSI/ISO C Specification Language) properties.
"""
maintainer: "frama-ci-bot@frama-c.com"
authors: [
  "Michele Alberti"
  "Thibaud Antignac"
  "Gergö Barany"
  "Patrick Baudin"
  "Nicolas Bellec"
Virgile Prevosto's avatar
Virgile Prevosto committed
  "Thibaut Benjamin"
Andre Maroneze's avatar
Andre Maroneze committed
  "Allan Blanchard"
  "Lionel Blatter"
  "François Bobot"
  "Richard Bonichon"
  "Vincent Botbol"
  "Quentin Bouillaguet"
  "David Bühler"
  "Zakaria Chihani"
  "Loïc Correnson"
  "Julien Crétin"
  "Pascal Cuoq"
  "Zaynah Dargaye"
Andre Maroneze's avatar
Andre Maroneze committed
  "Basile Desloges"
  "Jean-Christophe Filliâtre"
  "Philippe Herrmann"
  "Maxime Jacquemin"
  "Florent Kirchner"
  "Alexander Kogtenkov"
  "Remi Lazarini"
  "Kilyan Le Gallic"
  "Jean-Christophe Léchenet"
  "Matthieu Lemerre"
Andre Maroneze's avatar
Andre Maroneze committed
  "Dara Ly"
  "David Maison"
  "Claude Marché"
  "André Maroneze"
Andre Maroneze's avatar
Andre Maroneze committed
  "Fonenantsoa Maurica"
  "Melody Méaulle"
  "Benjamin Monate"
  "Yannick Moy"
  "Pierre Nigron"
  "Anne Pacalet"
  "Valentin Perrelle"
  "Guillaume Petiot"
François Bobot's avatar
François Bobot committed
  "Dario Pinto"
  "Virgile Prevosto"
  "Armand Puccetti"
Virgile Prevosto's avatar
Virgile Prevosto committed
  "Félix Ridoux"
Jan Rochel's avatar
Jan Rochel committed
  "Jan Rochel"
  "Cécile Ruet-Cros"
  "Nicolas Stouls"
  "Kostyantyn Vorobyov"
  "Boris Yakobowski"
]
homepage: "https://frama-c.com/"
license: "LGPL-2.1-only"
dev-repo: "git+https://git.frama-c.com/pub/frama-c.git"
doc: "https://frama-c.com/download/user-manual-30.0-Zinc.pdf"
bug-reports: "https://git.frama-c.com/pub/frama-c/issues"
  "deductive verification"
  "program verification"
  "formal specification"
  "automated theorem prover"
  "interactive theorem prover"
  "C"
  "plugins"
  "abstract interpretation"
  "slicing"
  "weakest precondition"
  "ACSL"
  "dataflow analysis"
  "runtime verification"
]

build: [
  ["bash" "dev/disable-plugins.sh" "e-acsl"] { os-family = "windows" }
  ["bash" "dev/disable-plugins.sh" "gui"] { os = "macos" }
  ["dune" "build" "-j%{jobs}%" "--release" "--promote-install-files=false"
   "@install"
   "@doc" { with-doc }
  ]
  [make
   "RELEASE=yes" "PREFIX=%{prefix}%" "MANDIR=%{man}%"
   "DOCDIR=%{doc}%" { with-doc }
   "install"
  ]
  [make "PREFIX=%{prefix}%" "-f" "ivette/Makefile.installation" "uninstall"]
  ["dune" "exec" "--" "frama-c-ptests" "tests" "src/plugins/*/tests"
Thibault Martin's avatar
Thibault Martin committed
  ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"}
  ["dune" "build" "-j%{jobs}%" "@ptests_config"
Thibault Martin's avatar
Thibault Martin committed
  ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"}
  ( "alt-ergo-free" | "alt-ergo" )
  "menhir" { >= "20181006" & build }
  "ocaml" { >= "4.14.0" }
Allan Blanchard's avatar
Allan Blanchard committed
  "ocamlgraph" { >= "2.0.0" }
  "ocamlgraph" { with-test & >= "2.1.0" }
  "ocp-indent" { with-dev-setup & >= "1.8.1" }
  "odoc" { with-doc }
  "unionFind" { >= "20220107" }
  "why3" { >= "1.8.0" & < "1.9.0" }
  "yaml" { >= "3.0.0" }
  "yojson" {>= "1.6.0" & (>= "2.0.1" | !with-test)}
  "zarith" { >= "1.9" }
  "ppx_deriving_yojson"
  "ppx_deriving_yaml" { >= "0.2.0" }
  # GTK3 disabled on macOS (segfaults), and made optional on Windows
  # (due to complex situation with Cygwin + MinGW).
  "lablgtk3" { >= "3.1.0" & os!="macos" & os-family!="windows" }
  "lablgtk3-sourceview3" { os!="macos" & os-family!="windows" }
  "conf-gtksourceview3" { os!="macos" & os-family!="windows" }
# Note: do not put particular versions here, if some version is *incompatible*,
# use the field 'conflicts'.
  "lablgtk3" { os-family="windows" }
  "lablgtk3-sourceview3" { os-family="windows" }
  "conf-gtksourceview3" { os-family="windows" }
conflicts: [
  "cairo2" { < "0.6.2" }
  "mlmpfr" { < "4.1.0-bugfix2" }
  "pilat"  { <= "1.6" }
  "result" { < "1.5" }
]

"The Frama-C/WP plug-in requires one or more external prover(s).
Recommended provers are:
- Alt-Ergo (https://alt-ergo.ocamlpro.com)
- CVC4     (https://cvc4.github.io)
- CVC5     (https://cvc5.github.io)
- Z3       (https://github.com/Z3Prover/z3)
Use 'why3 config detect' to configure new provers.
 " { success }
"Ivette is a new GUI for Frama-C, currently in development.
Run 'ivette' once to finalize installation (requires an internet connection).
Once finalized, 'ivette' will work offline.
Finalization also requires Node v20 or v22 and Yarn:
- install NVM (https://github.com/nvm-sh/nvm)
- run 'npm install --global yarn'" { success }