|
| 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 temporal (LTL) 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 | + "Thibaut Benjamin" |
| 27 | + "Allan Blanchard" |
| 28 | + "Lionel Blatter" |
| 29 | + "François Bobot" |
| 30 | + "Richard Bonichon" |
| 31 | + "Quentin Bouillaguet" |
| 32 | + "David Bühler" |
| 33 | + "Zakaria Chihani" |
| 34 | + "Loïc Correnson" |
| 35 | + "Julien Crétin" |
| 36 | + "Pascal Cuoq" |
| 37 | + "Zaynah Dargaye" |
| 38 | + "Basile Desloges" |
| 39 | + "Jean-Christophe Filliâtre" |
| 40 | + "Philippe Herrmann" |
| 41 | + "Maxime Jacquemin" |
| 42 | + "Florent Kirchner" |
| 43 | + "Alexander Kogtenkov" |
| 44 | + "Tristan Le Gall" |
| 45 | + "Jean-Christophe Léchenet" |
| 46 | + "Matthieu Lemerre" |
| 47 | + "Dara Ly" |
| 48 | + "David Maison" |
| 49 | + "Claude Marché" |
| 50 | + "André Maroneze" |
| 51 | + "Thibault Martin" |
| 52 | + "Fonenantsoa Maurica" |
| 53 | + "Melody Méaulle" |
| 54 | + "Benjamin Monate" |
| 55 | + "Yannick Moy" |
| 56 | + "Pierre Nigron" |
| 57 | + "Anne Pacalet" |
| 58 | + "Valentin Perrelle" |
| 59 | + "Guillaume Petiot" |
| 60 | + "Dario Pinto" |
| 61 | + "Virgile Prevosto" |
| 62 | + "Armand Puccetti" |
| 63 | + "Félix Ridoux" |
| 64 | + "Virgile Robles" |
| 65 | + "Jan Rochel" |
| 66 | + "Muriel Roger" |
| 67 | + "Julien Signoles" |
| 68 | + "Nicolas Stouls" |
| 69 | + "Kostyantyn Vorobyov" |
| 70 | + "Boris Yakobowski" |
| 71 | +] |
| 72 | +homepage: "https://frama-c.com/" |
| 73 | +license: "LGPL-2.1-only" |
| 74 | +dev-repo: "git+https://git.frama-c.com/pub/frama-c.git" |
| 75 | +doc: "http://frama-c.com/download/user-manual-28.0-Nickel.pdf" |
| 76 | +bug-reports: "https://git.frama-c.com/pub/frama-c/issues" |
| 77 | +tags: [ |
| 78 | + "deductive" |
| 79 | + "program verification" |
| 80 | + "formal specification" |
| 81 | + "automated theorem prover" |
| 82 | + "interactive theorem prover" |
| 83 | + "C" |
| 84 | + "plugins" |
| 85 | + "abstract interpretation" |
| 86 | + "slicing" |
| 87 | + "weakest precondition" |
| 88 | + "ACSL" |
| 89 | + "dataflow analysis" |
| 90 | + "runtime verification" |
| 91 | +] |
| 92 | + |
| 93 | +build: [ |
| 94 | + ["bash" "dev/disable-plugins.sh" "e-acsl"] { os-family = "windows" } |
| 95 | + ["bash" "dev/disable-plugins.sh" "gui"] { os = "macos" } |
| 96 | + ["dune" "build" "-j%{jobs}%" "--release" "--promote-install-files=false" |
| 97 | + "@install" |
| 98 | + "@doc" { with-doc } |
| 99 | + ] |
| 100 | +] |
| 101 | + |
| 102 | +install: [ |
| 103 | + [make |
| 104 | + "RELEASE=yes" "PREFIX=%{prefix}%" "MANDIR=%{man}%" |
| 105 | + "DOCDIR=%{doc}%" { with-doc } |
| 106 | + "install" |
| 107 | + ] |
| 108 | +] |
| 109 | + |
| 110 | +remove: [ |
| 111 | + [make "PREFIX=%{prefix}%" "-f" "ivette/Makefile.installation" "uninstall"] |
| 112 | +] |
| 113 | + |
| 114 | +run-test: [ |
| 115 | + ["dune" "exec" "--" "frama-c-ptests" "tests" "src/plugins/*/tests" |
| 116 | + ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os != "macos" } |
| 117 | + ["dune" "build" "-j%{jobs}%" "@ptests_config" |
| 118 | + ] { arch != "ppc64" & arch != "x86_32" & arch != "arm32" & os != "macos" } |
| 119 | +] |
| 120 | + |
| 121 | +depends: [ |
| 122 | + "dune" { >= "3.7.0" } |
| 123 | + "dune-configurator" |
| 124 | + "dune-site" |
| 125 | + |
| 126 | + ( "alt-ergo-free" | "alt-ergo" ) |
| 127 | + "conf-graphviz" { post } |
| 128 | + "conf-time" { with-test } |
| 129 | + "menhir" { >= "20181006" & build } |
| 130 | + "ocaml" { >= "4.13.1" } |
| 131 | + "ocamlgraph" { >= "1.8.8" } |
| 132 | + "ocamlgraph" { with-test & >= "2.1.0" } |
| 133 | + "odoc" { with-doc } |
| 134 | + "unionFind" { >= "20220107" } |
| 135 | + "why3" { >= "1.6.0" } |
| 136 | + "yaml" { >= "3.0.0" } |
| 137 | + "yojson" {>= "1.6.0" & (>= "2.0.1" | !with-test)} |
| 138 | + "zarith" { >= "1.5" } |
| 139 | + |
| 140 | + # PPXs |
| 141 | + "ppx_deriving" |
| 142 | + "ppx_deriving_yojson" |
| 143 | + "ppx_deriving_yaml" { >= "0.2.0" } |
| 144 | + "ppx_import" |
| 145 | + |
| 146 | + # GTK3 for non-macos only |
| 147 | + "lablgtk3" { >= "3.1.0" & os!="macos" } |
| 148 | + "lablgtk3-sourceview3" { os!="macos" } |
| 149 | + "conf-gtksourceview3" { os!="macos" } |
| 150 | +] |
| 151 | + |
| 152 | +# Note: do not put particular versions here, if some version is *incompatible*, |
| 153 | +# use the field 'conflicts'. |
| 154 | +depopts: [ |
| 155 | + "apron" |
| 156 | + "mlmpfr" |
| 157 | + "zmq" |
| 158 | +] |
| 159 | + |
| 160 | +conflicts: [ |
| 161 | + "cairo2" { < "0.6.2" } |
| 162 | + "mlmpfr" { < "4.1.0-bugfix2" } |
| 163 | + "pilat" { <= "1.6" } |
| 164 | + "result" { < "1.5" } |
| 165 | +] |
| 166 | + |
| 167 | +post-messages: [ |
| 168 | +"The Frama-C/WP plug-in requires one or more external prover(s). |
| 169 | +Recommended provers are: |
| 170 | +- Alt-Ergo (https://alt-ergo.ocamlpro.com) |
| 171 | +- CVC4 (https://cvc4.github.io) |
| 172 | +- Z3 (https://github.com/Z3Prover/z3) |
| 173 | +Use 'why3 config detect' to configure new provers. |
| 174 | + " { success } |
| 175 | +"Ivette is a new GUI for Frama-C, currently in development. |
| 176 | +Run 'ivette' once to finalize installation (requires an internet connection). |
| 177 | +Once finalized, 'ivette' will work offline. |
| 178 | +Finalization also requires Node v16 and Yarn: |
| 179 | +- install NVM (https://github.com/nvm-sh/nvm) |
| 180 | +- run 'nvm use 16' |
| 181 | +- run 'npm install --global yarn'" { success } |
| 182 | +] |
| 183 | + |
| 184 | +url { |
| 185 | + src: "https://www.frama-c.com/download/frama-c-28.0-beta-Nickel.tar.gz" |
| 186 | + checksum: "sha256=0c80dae8074fcb3f6a33d7a41faf9939a2a336478a8d2c79e20e2d7bab953735" |
| 187 | +} |
0 commit comments