|
| 1 | +opam-version: "2.0" |
| 2 | +available: opam-version >= "2.1.0" |
| 3 | +flags: avoid-version |
| 4 | +synopsis: "Platform dedicated to the analysis of source code written in C" |
| 5 | +description:""" |
| 6 | +Frama-C gathers several analysis techniques in a single collaborative |
| 7 | +framework, based on analyzers (called "plug-ins") that can build upon the |
| 8 | +results computed by other analyzers in the framework. |
| 9 | +Thanks to this approach, Frama-C provides sophisticated tools, including: |
| 10 | +- an analyzer based on abstract interpretation (Eva plug-in); |
| 11 | +- a program proof framework based on weakest precondition calculus (WP plug-in); |
| 12 | +- a program slicer (Slicing plug-in); |
| 13 | +- a tool for verification of automata-based properties (Aoraï plug-in); |
| 14 | +- a runtime verification tool (E-ACSL plug-in); |
| 15 | +- several tools for code base exploration and dependency analysis |
| 16 | + (plug-ins From, Impact, Metrics, Occurrence, Scope, etc.). |
| 17 | +These plug-ins communicate between each other via the Frama-C API |
| 18 | +and via ACSL (ANSI/ISO C Specification Language) properties. |
| 19 | +""" |
| 20 | + |
| 21 | +authors: [ |
| 22 | + "Michele Alberti" |
| 23 | + "Thibaud Antignac" |
| 24 | + "Gergö Barany" |
| 25 | + "Patrick Baudin" |
| 26 | + "Nicolas Bellec" |
| 27 | + "Thibaut Benjamin" |
| 28 | + "Allan Blanchard" |
| 29 | + "Lionel Blatter" |
| 30 | + "François Bobot" |
| 31 | + "Richard Bonichon" |
| 32 | + "Vincent Botbol" |
| 33 | + "Quentin Bouillaguet" |
| 34 | + "David Bühler" |
| 35 | + "Zakaria Chihani" |
| 36 | + "Sylvain Chiron" |
| 37 | + "Loïc Correnson" |
| 38 | + "Julien Crétin" |
| 39 | + "Pascal Cuoq" |
| 40 | + "Zaynah Dargaye" |
| 41 | + "Basile Desloges" |
| 42 | + "Jean-Christophe Filliâtre" |
| 43 | + "Philippe Herrmann" |
| 44 | + "Maxime Jacquemin" |
| 45 | + "Benjamin Jorge" |
| 46 | + "Florent Kirchner" |
| 47 | + "Alexander Kogtenkov" |
| 48 | + "Remi Lazarini" |
| 49 | + "Tristan Le Gall" |
| 50 | + "Kilyan Le Gallic" |
| 51 | + "Jean-Christophe Léchenet" |
| 52 | + "Matthieu Lemerre" |
| 53 | + "Dara Ly" |
| 54 | + "David Maison" |
| 55 | + "Claude Marché" |
| 56 | + "André Maroneze" |
| 57 | + "Thibault Martin" |
| 58 | + "Fonenantsoa Maurica" |
| 59 | + "Melody Méaulle" |
| 60 | + "Benjamin Monate" |
| 61 | + "Yannick Moy" |
| 62 | + "Pierre Nigron" |
| 63 | + "Anne Pacalet" |
| 64 | + "Valentin Perrelle" |
| 65 | + "Guillaume Petiot" |
| 66 | + "Dario Pinto" |
| 67 | + "Virgile Prevosto" |
| 68 | + "Armand Puccetti" |
| 69 | + "Félix Ridoux" |
| 70 | + "Virgile Robles" |
| 71 | + "Jan Rochel" |
| 72 | + "Muriel Roger" |
| 73 | + "Cécile Ruet-Cros" |
| 74 | + "Julien Signoles" |
| 75 | + "Fabien Siron" |
| 76 | + "Nicolas Stouls" |
| 77 | + "Hugo Thievenaz" |
| 78 | + "Kostyantyn Vorobyov" |
| 79 | + "Boris Yakobowski" |
| 80 | +] |
| 81 | +homepage: "https://frama-c.com/" |
| 82 | +license: "LGPL-2.1-only" |
| 83 | +dev-repo: "git+https://git.frama-c.com/pub/frama-c.git" |
| 84 | +doc: "https://frama-c.com/download/user-manual-32.0-beta-Germanium.pdf" |
| 85 | +bug-reports: "https://git.frama-c.com/pub/frama-c/issues" |
| 86 | +tags: [ |
| 87 | + "deductive verification" |
| 88 | + "program verification" |
| 89 | + "formal specification" |
| 90 | + "automated theorem prover" |
| 91 | + "interactive theorem prover" |
| 92 | + "C" |
| 93 | + "plugins" |
| 94 | + "abstract interpretation" |
| 95 | + "slicing" |
| 96 | + "weakest precondition" |
| 97 | + "ACSL" |
| 98 | + "dataflow analysis" |
| 99 | + "runtime verification" |
| 100 | +] |
| 101 | + |
| 102 | +build: [ |
| 103 | + ["bash" "dev/disable-plugins.sh" "e-acsl"] { os-family = "windows" } |
| 104 | + ["bash" "dev/disable-plugins.sh" "gui"] { os = "macos" } |
| 105 | + ["dune" "build" "-j%{jobs}%" "--release" "--promote-install-files=false" |
| 106 | + "@install" |
| 107 | + "@doc" { with-doc } |
| 108 | + ] |
| 109 | +] |
| 110 | + |
| 111 | +install: [ |
| 112 | + [make |
| 113 | + "RELEASE=yes" "PREFIX=%{prefix}%" "MANDIR=%{man}%" |
| 114 | + "DOCDIR=%{doc}%" { with-doc } |
| 115 | + "install" |
| 116 | + ] |
| 117 | +] |
| 118 | + |
| 119 | +remove: [ |
| 120 | + [make "PREFIX=%{prefix}%" "-f" "ivette/Makefile.installation" "uninstall"] |
| 121 | +] |
| 122 | + |
| 123 | +run-test: [ |
| 124 | + ["dune" "exec" "--release" "--" "frama-c-ptests" "tests" "src/plugins/*/tests" |
| 125 | + ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"} |
| 126 | + ["dune" "build" "--release" "-j%{jobs}%" "@ptests_config" |
| 127 | + ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os-distribution != "freebsd"} |
| 128 | +] |
| 129 | + |
| 130 | +depends: [ |
| 131 | + "dune" { > "3.13.0" } |
| 132 | + "dune-configurator" |
| 133 | + "dune-site" { > "3.13.0" } |
| 134 | + ( "alt-ergo-free" | "alt-ergo" ) |
| 135 | + "camlzip" |
| 136 | + "conf-graphviz" { post } |
| 137 | + "conf-time" { with-test } |
| 138 | + "menhir" { >= "20181006" & build } |
| 139 | + "ocaml" { >= "4.14.0" } |
| 140 | + "ocamlgraph" { >= "2.0.0" } |
| 141 | + "ocamlgraph" { with-test & >= "2.2.0" } |
| 142 | + "ocp-indent" { with-dev-setup & >= "1.8.1" } |
| 143 | + "odoc" { with-doc } |
| 144 | + "unionFind" { >= "20220109" } |
| 145 | + "why3" { >= "1.8.2" & < "1.9.0" } |
| 146 | + "yaml" { >= "3.0.0" } |
| 147 | + "yojson" {>= "1.6.0" & (>= "2.0.1" | !with-test)} |
| 148 | + "zarith" { >= "1.13" } |
| 149 | + |
| 150 | + # PPXs |
| 151 | + "ppxlib" { >= "0.33.0" } |
| 152 | + "ppx_deriving" |
| 153 | + "ppx_deriving_yojson" |
| 154 | + "ppx_deriving_yaml" { >= "0.2.0" } |
| 155 | + "ppx_inline_test" |
| 156 | + |
| 157 | + # GTK3 disabled on macOS (segfaults), and made optional on Windows |
| 158 | + # (due to complex situation with Cygwin + MinGW). |
| 159 | + "lablgtk3" { >= "3.1.0" & os!="macos" & os-family!="windows" } |
| 160 | + "lablgtk3-sourceview3" { os!="macos" & os-family!="windows" } |
| 161 | + "conf-gtksourceview3" { os!="macos" & os-family!="windows" } |
| 162 | +] |
| 163 | + |
| 164 | +# Note: do not put particular versions here, if some version is *incompatible*, |
| 165 | +# use the field 'conflicts'. |
| 166 | +depopts: [ |
| 167 | + "apron" |
| 168 | + "zmq" |
| 169 | + "lablgtk3" { os-family="windows" } |
| 170 | + "lablgtk3-sourceview3" { os-family="windows" } |
| 171 | + "conf-gtksourceview3" { os-family="windows" } |
| 172 | +] |
| 173 | + |
| 174 | +conflicts: [ |
| 175 | + "cairo2" { < "0.6.2" } |
| 176 | + "mlmpfr" { < "4.1.0-bugfix2" } |
| 177 | + "pilat" { <= "1.6" } |
| 178 | + "result" { < "1.5" } |
| 179 | +] |
| 180 | + |
| 181 | +post-messages: [ |
| 182 | +"The Frama-C/WP plug-in requires one or more external prover(s). |
| 183 | +Recommended provers are: |
| 184 | +- Alt-Ergo (https://alt-ergo.ocamlpro.com) |
| 185 | +- CVC4 (https://cvc4.github.io) |
| 186 | +- CVC5 (https://cvc5.github.io) |
| 187 | +- Z3 (https://github.com/Z3Prover/z3) |
| 188 | +Use 'why3 config detect' to configure new provers. |
| 189 | + " { success } |
| 190 | +"Ivette is a new GUI for Frama-C, currently in development. |
| 191 | +Run 'ivette' once to finalize installation (requires an internet connection). |
| 192 | +Once finalized, 'ivette' will work offline. |
| 193 | +Finalization also requires Node v20 or v22 and Yarn: |
| 194 | +- install NVM (https://github.com/nvm-sh/nvm) |
| 195 | +- run 'nvm install 22' |
| 196 | +- run 'nvm use 22' |
| 197 | +- run 'npm install --global yarn'" { success } |
| 198 | +] |
| 199 | + |
| 200 | +url { |
| 201 | + src: "https://www.frama-c.com/download/frama-c-32.0-beta-Germanium.tar.gz" |
| 202 | + checksum: "sha256=868d57ef8007fe6c0836cd151d8c294003af34aa678285eff9547662cad36aa3" |
| 203 | +} |
| 204 | + |
| 205 | +x-maintenance-intent: [ |
| 206 | + "(latest).(any)" |
| 207 | + "(latest-1).(latest)" |
| 208 | + "(latest-2).(latest)" |
| 209 | + "(latest-3).(latest)" |
| 210 | + "(latest-4).(latest)" |
| 211 | +] |
| 212 | + |
| 213 | +x-ci-accept-failures: [ # the following either uses musl or has an incompatible gcc version |
| 214 | + "alpine-3.22" |
| 215 | + "centos-9" |
| 216 | + "debian-11" |
| 217 | + "debian-12" |
| 218 | + "opensuse-15.6" |
| 219 | + "ubuntu-22.04" |
| 220 | +] |
0 commit comments