···
2
+
synopsis: "Platform dedicated to the analysis of source code written in C"
4
+
Frama-C gathers several analysis techniques in a single collaborative
5
+
framework, based on analyzers (called "plug-ins") that can build upon the
6
+
results computed by other analyzers in the framework.
7
+
Thanks to this approach, Frama-C provides sophisticated tools, including:
8
+
- an analyzer based on abstract interpretation (Eva plug-in);
9
+
- a program proof framework based on weakest precondition calculus (WP plug-in);
10
+
- a program slicer (Slicing plug-in);
11
+
- a tool for verification of automata-based properties (Aoraï plug-in);
12
+
- a runtime verification tool (E-ACSL plug-in);
13
+
- several tools for code base exploration and dependency analysis
14
+
(plug-ins From, Impact, Metrics, Occurrence, Scope, etc.).
15
+
These plug-ins communicate between each other via the Frama-C API
16
+
and via ACSL (ANSI/ISO C Specification Language) properties.
18
+
maintainer: "frama-ci-bot@frama-c.com"
31
+
"Quentin Bouillaguet"
39
+
"Jean-Christophe Filliâtre"
43
+
"Alexander Kogtenkov"
47
+
"Jean-Christophe Léchenet"
54
+
"Fonenantsoa Maurica"
72
+
"Kostyantyn Vorobyov"
75
+
homepage: "https://frama-c.com/"
76
+
license: "LGPL-2.1-only"
77
+
dev-repo: "git+https://git.frama-c.com/pub/frama-c.git"
78
+
doc: "https://frama-c.com/download/user-manual-30.0-Zinc.pdf"
79
+
bug-reports: "https://git.frama-c.com/pub/frama-c/issues"
81
+
"deductive verification"
82
+
"program verification"
83
+
"formal specification"
84
+
"automated theorem prover"
85
+
"interactive theorem prover"
88
+
"abstract interpretation"
90
+
"weakest precondition"
93
+
"runtime verification"
97
+
["bash" "dev/disable-plugins.sh" "e-acsl"] { os-family = "windows" }
98
+
["bash" "dev/disable-plugins.sh" "gui"] { os = "macos" }
99
+
["dune" "build" "-j%{jobs}%" "--release" "--promote-install-files=false"
101
+
"@doc" { with-doc }
107
+
"RELEASE=yes" "PREFIX=%{prefix}%" "MANDIR=%{man}%"
108
+
"DOCDIR=%{doc}%" { with-doc }
114
+
[make "PREFIX=%{prefix}%" "-f" "ivette/Makefile.installation" "uninstall"]
118
+
["dune" "exec" "--" "frama-c-ptests" "tests" "src/plugins/*/tests"
119
+
] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"}
120
+
["dune" "build" "-j%{jobs}%" "@ptests_config"
121
+
] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"}
125
+
"dune" { > "3.13.0" }
126
+
"dune-configurator"
127
+
"dune-site" { > "3.13.0" }
128
+
( "alt-ergo-free" | "alt-ergo" )
129
+
"conf-graphviz" { post }
130
+
"conf-time" { with-test }
131
+
"menhir" { >= "20181006" & build }
132
+
"ocaml" { >= "4.14.0" }
133
+
"ocamlgraph" { >= "2.0.0" }
134
+
"ocamlgraph" { with-test & >= "2.1.0" }
135
+
"ocp-indent" { with-dev-setup & >= "1.8.1" }
136
+
"odoc" { with-doc }
137
+
"unionFind" { >= "20220107" }
138
+
"why3" { >= "1.7.1" & < "1.8.0" }
139
+
"yaml" { >= "3.0.0" }
140
+
"yojson" {>= "1.6.0" & (>= "2.0.1" | !with-test)}
141
+
"zarith" { >= "1.9" }
145
+
"ppx_deriving_yojson"
146
+
"ppx_deriving_yaml" { >= "0.2.0" }
148
+
# GTK3 disabled on macOS (segfaults), and made optional on Windows
149
+
# (due to complex situation with Cygwin + MinGW).
150
+
"lablgtk3" { >= "3.1.0" & os!="macos" & os-family!="windows" }
151
+
"lablgtk3-sourceview3" { os!="macos" & os-family!="windows" }
152
+
"conf-gtksourceview3" { os!="macos" & os-family!="windows" }
155
+
# Note: do not put particular versions here, if some version is *incompatible*,
156
+
# use the field 'conflicts'.
161
+
"lablgtk3" { os-family="windows" }
162
+
"lablgtk3-sourceview3" { os-family="windows" }
163
+
"conf-gtksourceview3" { os-family="windows" }
167
+
"cairo2" { < "0.6.2" }
168
+
"mlmpfr" { < "4.1.0-bugfix2" }
169
+
"pilat" { <= "1.6" }
170
+
"result" { < "1.5" }
174
+
"The Frama-C/WP plug-in requires one or more external prover(s).
175
+
Recommended provers are:
176
+
- Alt-Ergo (https://alt-ergo.ocamlpro.com)
177
+
- CVC4 (https://cvc4.github.io)
178
+
- CVC5 (https://cvc5.github.io)
179
+
- Z3 (https://github.com/Z3Prover/z3)
180
+
Use 'why3 config detect' to configure new provers.
182
+
"Ivette is a new GUI for Frama-C, currently in development.
183
+
Run 'ivette' once to finalize installation (requires an internet connection).
184
+
Once finalized, 'ivette' will work offline.
185
+
Finalization also requires Node v20 or v22 and Yarn:
186
+
- install NVM (https://github.com/nvm-sh/nvm)
188
+
- run 'npm install --global yarn'" { success }
191
+
x-maintenance-intent: [
193
+
"(latest-1).(latest)"
194
+
"(latest-2).(latest)"
195
+
"(latest-3).(latest)"
196
+
"(latest-4).(latest)"
200
+
src: "https://www.frama-c.com/download/frama-c-30.0-Zinc.tar.gz"
201
+
checksum: "sha256=3ac0f995261ec829a7bd042bf70fc29ac6379029eb9df30bcc044748eb4d2a56"