From c3af54fbe4439c4788a4245895447fcf601c08e6 Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Thu, 4 Nov 2021 16:47:54 +0100 Subject: [PATCH] 24.0-beta-Chromium release --- _events/framac-24.0-beta.md | 43 ++ _fc-versions/chromium.md | 42 ++ download/acsl-1.17.pdf | 4 +- ...acsl-implementation-24.0-beta-Chromium.pdf | 3 + download/aorai-example-24.0-beta-Chromium.tgz | 3 + download/aorai-manual-24.0-beta-Chromium.pdf | 3 + download/e-acsl/e-acsl-1.17.pdf | 4 +- ...acsl-implementation-24.0-beta-Chromium.pdf | 3 + .../e-acsl-manual-24.0-beta-Chromium.pdf | 3 + download/eva-manual-24.0-beta-Chromium.pdf | 3 + .../frama-c-24.0-beta-Chromium-api.tar.gz | 3 + download/frama-c-24.0-beta-Chromium.tar.gz | 3 + download/hello-24.0-beta-Chromium.tar.gz | 3 + .../metrics-manual-24.0-beta-Chromium.pdf | 3 + ...n-development-guide-24.0-beta-Chromium.pdf | 3 + download/rte-manual-24.0-beta-Chromium.pdf | 3 + download/user-manual-24.0-beta-Chromium.pdf | 3 + download/wp-manual-24.0-beta-Chromium.pdf | 3 + html/installations/chromium.md | 467 ++++++++++++++++++ 19 files changed, 598 insertions(+), 4 deletions(-) create mode 100644 _events/framac-24.0-beta.md create mode 100644 _fc-versions/chromium.md create mode 100644 download/acsl-implementation-24.0-beta-Chromium.pdf create mode 100644 download/aorai-example-24.0-beta-Chromium.tgz create mode 100644 download/aorai-manual-24.0-beta-Chromium.pdf create mode 100644 download/e-acsl/e-acsl-implementation-24.0-beta-Chromium.pdf create mode 100644 download/e-acsl/e-acsl-manual-24.0-beta-Chromium.pdf create mode 100644 download/eva-manual-24.0-beta-Chromium.pdf create mode 100644 download/frama-c-24.0-beta-Chromium-api.tar.gz create mode 100644 download/frama-c-24.0-beta-Chromium.tar.gz create mode 100644 download/hello-24.0-beta-Chromium.tar.gz create mode 100644 download/metrics-manual-24.0-beta-Chromium.pdf create mode 100644 download/plugin-development-guide-24.0-beta-Chromium.pdf create mode 100644 download/rte-manual-24.0-beta-Chromium.pdf create mode 100644 download/user-manual-24.0-beta-Chromium.pdf create mode 100644 download/wp-manual-24.0-beta-Chromium.pdf create mode 100644 html/installations/chromium.md diff --git a/_events/framac-24.0-beta.md b/_events/framac-24.0-beta.md new file mode 100644 index 00000000..c47511ea --- /dev/null +++ b/_events/framac-24.0-beta.md @@ -0,0 +1,43 @@ +--- +layout: default +date: "04-11-2021" +short_title: Frama-C 24.0-beta (Chromium) +title: Beta release of Frama-C 24.0-beta (Chromium) +link: /fc-versions/chromium.html +--- + +Frama-C 24.0-beta (Chromium) is out. Download it [here](/fc-versions/chromium.html). + +Main changes with respect to Frama-C 23 (Vanadium) include: + +#### Kernel + +- support C11's `_Static_assert` +- support for flexible array members in nested struct (gcc machdeps only) +- fixes unsound reuse of recursive functions + +#### E-ACSL + +- new options for more precise reporting in case of failed assertion +- support for `\sum`, `\prod` and `\numof` + +#### Eva + +- new experimental `taint` domain for taint analysis +- new experimental `multidim` domain to improve analysis precision on arrays of structures and multidimensional arrays. +- new options for interprocedural states partitioning +- new `dynamic_split` annotation +- fixes soundness bugs in `octagon` and `bitwise` domains +- improve precision for `octagon` and `symbolic-locations` domains + +#### Variadic + +- translation of printf/scanf calls with non-constant formatting string + (assuming arguments match the format) +- falls back to a generic translation if specialized one fails, to + guarantee the absence of variadic calls after the plugin has run + +#### WP + +- removed `-wp-overflows` option, which was unsound +- experimental support for `terminates` clauses diff --git a/_fc-versions/chromium.md b/_fc-versions/chromium.md new file mode 100644 index 00000000..806fdad5 --- /dev/null +++ b/_fc-versions/chromium.md @@ -0,0 +1,42 @@ +--- +layout: version +number: 24 +name: Chromium +beta: true +releases: + - number: 0 + categories: + - name: Frama-C v24.0-beta Chromium + files: + - name: Source distribution + link: /download/frama-c-24.0-beta-Chromium.tar.gz + help: Compilation instructions + help_link: /html/installations/chromium.html + - name: User manual + link: /download/user-manual-24.0-beta-Chromium.pdf + - name: Plug-in development guide + link: /download/plugin-development-guide-24.0-beta-Chromium.pdf + help: Hello plug-in tutorial archive + help_link: /download/hello-24.0-beta-Chromium.tar.gz + - name: API Documentation + link: /download/frama-c-24.0-beta-Chromium-api.tar.gz + - name: ACSL 1.17 (Chromium implementation) + link: /download/acsl-implementation-24.0-beta-Chromium.pdf + - name: Plug-in Manuals + sort: true + files: + - name: Aoraï manual + link: /download/aorai-manual-24.0-beta-Chromium.pdf + help: Aoraï example + help_link: /download/aorai-example-24.0-beta-Chromium.tgz + - name: Metrics manual + link: /download/metrics-manual-24.0-beta-Chromium.pdf + - name: Rte manual + link: /download/rte-manual-24.0-beta-Chromium.pdf + - name: Eva manual + link: /download/eva-manual-24.0-beta-Chromium.pdf + - name: WP manual + link: /download/wp-manual-24.0-beta-Chromium.pdf + - name: E-ACSL manual + link: /download/e-acsl/e-acsl-manual-24.0-beta-Chromium.pdf +--- diff --git a/download/acsl-1.17.pdf b/download/acsl-1.17.pdf index 43792ab0..2ab65506 100644 --- a/download/acsl-1.17.pdf +++ b/download/acsl-1.17.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6345781874115b98906bc4f8f53e598a3b49190a74e708de549bb2ab579dac9 -size 1395481 +oid sha256:47c7942678d2915244663b5fa56df5f259328ae8784c78e79eb5fafef19b4f9e +size 1410891 diff --git a/download/acsl-implementation-24.0-beta-Chromium.pdf b/download/acsl-implementation-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..122b4809 --- /dev/null +++ b/download/acsl-implementation-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:146864b34c0f8af44045d417900e3ac58385a430e3daa3f50881dd70edb74f6f +size 1416495 diff --git a/download/aorai-example-24.0-beta-Chromium.tgz b/download/aorai-example-24.0-beta-Chromium.tgz new file mode 100644 index 00000000..f27773a6 --- /dev/null +++ b/download/aorai-example-24.0-beta-Chromium.tgz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b142ef3ab9c9a28c775899609fe3fd84e861817f78e3a5d6df53977ad0261aa7 +size 1659 diff --git a/download/aorai-manual-24.0-beta-Chromium.pdf b/download/aorai-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..f88299a0 --- /dev/null +++ b/download/aorai-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fad9da33e74bf79245bb04b96085774e65a5688e10d6701b01f1c0e523c486b +size 478424 diff --git a/download/e-acsl/e-acsl-1.17.pdf b/download/e-acsl/e-acsl-1.17.pdf index 05096a10..3a21521c 100644 --- a/download/e-acsl/e-acsl-1.17.pdf +++ b/download/e-acsl/e-acsl-1.17.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:675ed88eff368de02e273a2c20e1f31e26eedc55b9abfe200aafe4d7213ce5c6 -size 702637 +oid sha256:bb59695615ad588609d0a5f0a96ce31693a00095c1a8c5be8c502b17d9458065 +size 721835 diff --git a/download/e-acsl/e-acsl-implementation-24.0-beta-Chromium.pdf b/download/e-acsl/e-acsl-implementation-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..320014e0 --- /dev/null +++ b/download/e-acsl/e-acsl-implementation-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bb7e883717c11888f2355cd69754c7cfdc5e6341c894016da4dc0e3c846cf3 +size 776233 diff --git a/download/e-acsl/e-acsl-manual-24.0-beta-Chromium.pdf b/download/e-acsl/e-acsl-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..9560be17 --- /dev/null +++ b/download/e-acsl/e-acsl-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2a3a8d78c601d5a8dfb837d94505984c3ccee5f31818b7c5c19198e8cf2329a +size 831444 diff --git a/download/eva-manual-24.0-beta-Chromium.pdf b/download/eva-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..d524faf2 --- /dev/null +++ b/download/eva-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d899c5f823a4d9b7f783d7610563a2bcedbf4d87ac1eac6719ab5a702308e5cf +size 1917526 diff --git a/download/frama-c-24.0-beta-Chromium-api.tar.gz b/download/frama-c-24.0-beta-Chromium-api.tar.gz new file mode 100644 index 00000000..3117a849 --- /dev/null +++ b/download/frama-c-24.0-beta-Chromium-api.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13d7dd3a620e5976445d6b60642b49b33fd90ca5eed1577e6e57ccb03c37925b +size 8693566 diff --git a/download/frama-c-24.0-beta-Chromium.tar.gz b/download/frama-c-24.0-beta-Chromium.tar.gz new file mode 100644 index 00000000..c40b7cba --- /dev/null +++ b/download/frama-c-24.0-beta-Chromium.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5feca306d19df218730a6c1ec036fabddb668aa761087ad49c7908ee030e187f +size 7497201 diff --git a/download/hello-24.0-beta-Chromium.tar.gz b/download/hello-24.0-beta-Chromium.tar.gz new file mode 100644 index 00000000..7492b6a0 --- /dev/null +++ b/download/hello-24.0-beta-Chromium.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:295475c2792e0f81e64f098037ad76f0a741c8e3c7d279d8a6a3570b6477dd71 +size 1462 diff --git a/download/metrics-manual-24.0-beta-Chromium.pdf b/download/metrics-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..bfef545c --- /dev/null +++ b/download/metrics-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29e5f8d4e251fe6dc7523f7e2a7e7f4ace82059087b28d16abd2c1ad54d40604 +size 813060 diff --git a/download/plugin-development-guide-24.0-beta-Chromium.pdf b/download/plugin-development-guide-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..398cd48c --- /dev/null +++ b/download/plugin-development-guide-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80167916c848a3274db64ee558a95c61448dd80470343a69e83940703769fc90 +size 1486783 diff --git a/download/rte-manual-24.0-beta-Chromium.pdf b/download/rte-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..5c14a1b8 --- /dev/null +++ b/download/rte-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb3fb60f678ff4e53ff73a170ed4e16443fa250edfb783cd47b9c350aae0d245 +size 667480 diff --git a/download/user-manual-24.0-beta-Chromium.pdf b/download/user-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..85b673df --- /dev/null +++ b/download/user-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a5a0f71e7702b0c63702eb34e2af202f32c30268ebf02f63fbb7d5ab2753b0c +size 1838240 diff --git a/download/wp-manual-24.0-beta-Chromium.pdf b/download/wp-manual-24.0-beta-Chromium.pdf new file mode 100644 index 00000000..0d66eba6 --- /dev/null +++ b/download/wp-manual-24.0-beta-Chromium.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd0261fb05990dbe09cdb5b4af273e10d3a9894583de22d3b296307ada180545 +size 1432072 diff --git a/html/installations/chromium.md b/html/installations/chromium.md new file mode 100644 index 00000000..87a151b9 --- /dev/null +++ b/html/installations/chromium.md @@ -0,0 +1,467 @@ +--- +layout: installation_page +version: chromium +title: Installation instructions for Chromium +--- + +# Installing Frama-C Chromium (released on 2021-11-04) + +- [Installing Frama-C](#installing-frama-c) + - [Table of Contents](#table-of-contents) + - [Installing Frama-C via opam](#installing-frama-c-via-opam) + - [Installing opam](#installing-opam) + - [Installing Frama-C from opam repository](#installing-frama-c-from-opam-repository) + - [Installing Custom Versions of Frama-C](#installing-custom-versions-of-frama-c) + - [Installing Frama-C on Windows via WSL](#installing-frama-c-on-windows-via-wsl) + - [Installing Frama-C on macOS](#installing-frama-c-on-macos) + - [Installing Frama-C via your Linux distribution (Debian/Ubuntu/Fedora)](#installing-frama-c-via-your-linux-distribution-debianubuntufedora) + - [Compiling from source](#compiling-from-source) + - [Quick Start](#quick-start) + - [Full Compilation Guide](#full-compilation-guide) +- [Testing the Installation](#testing-the-installation) + - [Available resources](#available-resources) + - [Executables: (in `/INSTALL_DIR/bin`)](#executables-in-install_dirbin) + - [Shared files: (in `/INSTALL_DIR/share/frama-c` and subdirectories)](#shared-files-in-install_dirshareframa-c-and-subdirectories) + - [Documentation files: (in `/INSTALL_DIR/share/frama-c/doc`)](#documentation-files-in-install_dirshareframa-cdoc) + - [Object files: (in `/INSTALL_DIR/lib/frama-c`)](#object-files-in-install_dirlibframa-c) + - [Plugin files: (in `/INSTALL_DIR/lib/frama-c/plugins`)](#plugin-files-in-install_dirlibframa-cplugins) + - [Man files: (in `/INSTALL_DIR/share/man/man1`)](#man-files-in-install_dirsharemanman1) +- [Installing Additional Frama-C Plugins](#installing-additional-frama-c-plugins) + - [HAVE FUN WITH FRAMA-C!](#have-fun-with-frama-c) + +## Installing Frama-C via opam + +[opam](http://opam.ocaml.org/) is the OCaml package manager. Every Frama-C +release is made available via an opam package. + +First you need to install opam, then you may install Frama-C using opam. + +### Installing opam + +Several Linux distributions already include an `opam` package. + +macOS has opam through Homebrew. + +Windows users can install opam via WSL (Windows Subsystem for Linux). + +If your system does not have an opam package >= 2, you can use the provided +opam binaries available at: + +http://opam.ocaml.org/doc/Install.html + +### Installing Frama-C from opam repository + +The Frama-C package in opam is called `frama-c`, which includes both the +command-line `frama-c` executable and the graphical interface `frama-c-gui`. + +`frama-c` has some non-OCaml dependencies, such as Gtk and GMP. On most +systems, `opam`'s `depext` mechanism can take care of installing these +external dependencies. As of version +2.1.0, `depext` is [directly included](https://opam.ocaml.org/blog/opam-2-1-0/#Seamless-integration-of-System-dependencies-handling-a-k-a-quot-depexts-quot) +in `opam`, so that the following command should install everything, at +least if your OS is supported by `depext` (and you have administrative +rights): + + opam install frama-c + +For older `opam` versions, you have to install it +separately and call it explicitely with the following commands, before +installing Frama-C as above. Again, installing the external dependencies +requires administrative rights. + + # install Frama-C's dependencies with pre-2.1.0 opam + opam install depext + opam depext frama-c + +If there are errors due to missing external dependencies, opam may emit a +message indicating which packages to install. If this is not sufficient, +there may be missing dependencies in opam's `depext` tool. In this case, +you may [create a Gitlab issue](https://git.frama-c.com/pub/frama-c/issues/new) +indicating your distribution and error message. + +### Configuring provers for Frama-C/WP + +Frama-C/WP uses the [Why3](http://why3.lri.fr/) platform to run external provers +for proving ACSL annotations. +The Why3 platform and the Alt-Ergo prover are automatically installed _via_ opam +when installing Frama-C. + +Other recommended, efficient provers are CVC4 and Z3. +They can be used as replacement or combined with Alt-Ergo. +Actually, you can use any prover supported by Why3 in combination with Frama-C/WP. + +Most provers are available on all platforms. After their installation, +Why3 must be configured to make them available for Frama-C/WP: + +```shell +why3 config detect +``` + +### Reference configuration + +See file [reference-configuration.md](reference-configuration.md) +for a set of packages that is known to work with Frama-C 24 (Chromium). + +### Installing Custom Versions of Frama-C + +If you have a **non-standard** version of Frama-C available +(with proprietary extensions, custom plugins, etc.), +you can use opam to install Frama-C's dependencies and compile your +own sources directly: + + # optional: remove the standard frama-c package if it was installed + opam remove --force frama-c + + # install Frama-C's dependencies + opam install depext # only for opam < 2.1.0 + opam depext frama-c # only for opam < 2.1.0 + opam install --deps-only frama-c + + # install custom version of frama-c + opam pin add --kind=path frama-c <dir> + +where `<dir>` is the root of your unpacked Frama-C archive. +See `opam pin` for more details. + +If your extensions require other libraries than the ones already used +by Frama-C, they must of course be installed as well. + +### Installing Frama-C on Windows via WSL + +Frama-C is developed on Linux, but it can be installed on Windows using the +following tools: + +- Windows Subsystem for Linux +- VcXsrv (X server for Windows) + +#### Prerequisites: WSL + a Linux distribution + +For enabling WSL on Windows, you may follow these instructions +(we tested with Ubuntu 20.04 LTS; +other distributions/versions should also work, +but the instructions below may require some modifications). + +https://docs.microsoft.com/en-us/windows/wsl/install-win10 + +Notes: + +- older builds of Windows 10 and systems without access to the + Microsoft Store may have no compatible Linux packages. +- in WSL 1, Frama-C/WP cannot use Why3 because of some missing features in WSL + support, thus using WSL 2 is **highly recommended**. + +#### Installing opam and Frama-C on WSL + +For installing opam, some packages are required. The following commands can be +run to update the system and install those packages: + +``` +sudo apt update +sudo apt upgrade +sudo apt install make m4 gcc opam yaru-theme-gtk yaru-theme-icon +``` + +Then opam can be set up using these commands: + +``` +opam init --disable-sandboxing --shell-setup +eval $(opam env) +opam install -y depext +``` + +You can force a particular Ocaml version during `opam init` by using the option +`-c <version>` if needed. + +Now, for installing Frama-C, run the following commands that will use `apt` to +install the dependencies of the opam packages and then install them: + +``` +opam depext --install -y lablgtk3 lablgtk3-sourceview3 +opam depext --install -y frama-c +``` + +#### Running the Frama-C GUI on WSL + +Microsoft WSL does not support graphical user interfaces directly. If you want +to run Frama-C's GUI, you need to install an X server, such as VcXsrv or +Cygwin/X. We present below how to install VcXsrv. + +First, install VcXsrv from: + +https://sourceforge.net/projects/vcxsrv/ + +The default installation settings should work. + +Now run VcXsrv from the Windows menu (it is named XLaunch), the firewall +must authorize both "Public" and "Private" domains. On the first configuration +screen, select "Multiple Windows". On the second: + +- keep "Start no client" selected, +- keep "Native opengl" selected, +- select "Disable access control". + +Now specific settings must be provided in WSL. you can put the export commands +in your `~/.bashrc` file, so this is done automatically when starting WSL. + +##### WSL 1 + +The Xserver is ready. From WSL, run: + +``` +export LIBGL_ALWAYS_INDIRECT=1 +export DISPLAY=:0 +frama-c-gui +``` + +##### WSL 2 + +``` +export LIBGL_ALWAYS_INDIRECT=1 +export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0 +frama-c-gui +``` + +### Installing Frama-C on macOS + +[opam](https://opam.ocaml.org) works perfectly on macOS via +[Homebrew](https://brew.sh). +We highly recommend to rely on it for the installation of Frama-C. + +1. Install *required* general macOS tools for OCaml: + + ```shell + brew install autoconf pkg-config opam + ``` + + Do not forget to `opam init` and ``eval `opam config env` `` for a proper + opam installation (if not already done before). + +2. Set up a compatible OCaml version (replace `<version>` with the version + indicated in the 'recommended working configuration' section): + + ```shell + opam switch create <version> + ``` + +3. Install *required* dependencies for Frama-C: + + ```shell + brew install gmp gtk+ gtksourceview libgnomecanvas + ``` + + The graphical libraries require additional manual configuration of your + bash profile. Consult this [issue](https://github.com/ocaml/opam-repository/issues/13709) on opam + for details. A known working configuration is: + + ```shell + export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/lib/pkgconfig + ``` + +4. Install *recommended* dependencies for Frama-C: + + ```shell + brew install graphviz + ``` + +5. Install Frama-C: + + ```shell + opam install frama-c + ``` + +## Installing Frama-C via your Linux distribution (Debian/Ubuntu/Fedora) + +**NOTE**: Distribution packages are updated later than opam packages, + so if you want access to the most recent versions of Frama-C, + opam is currently the recommended approach. + +Also note that it is **not** recommended to mix OCaml packages installed by +your distribution with packages installed via opam. When using opam, +we recommend uninstalling all `ocaml-*` packages from your distribution, and +then installing, exclusively via opam, an OCaml compiler and all the OCaml +packages you need. This ensures that only those versions will be in the PATH. + +The advantage of using distribution packages is that dependencies are almost +always handled by the distribution's package manager. The disadvantage is that, +if you need some optional OCaml package that has not been packaged in your +distribution (e.g. `landmarks`, which is distributed via opam), it may be very +hard to install it, since mixing opam and non-opam packages often fails +(and is **strongly** discouraged). + +Debian/Ubuntu: `apt-get install frama-c` + +Fedora: `dnf install frama-c` + +Arch Linux: `pikaur -S frama-c` + +## Compiling from source + +**Note**: These instructions are no longer required in the vast majority + of cases. They are kept here mostly for historical reference. + +### Quick Start + +1. Install [opam](http://opam.ocaml.org/) and use it to get all of Frama-C's + dependencies (including some external ones): + + opam install depext # only for opam < 2.1.0 + opam depext frama-c # only for opam < 2.1.0 + opam install --deps-only frama-c + + If not using [opam](http://opam.ocaml.org/), you will need to install + the Frama-C dependencies by yourself. The `opam/opam` file in the Frama-C + .tar.gz lists the required dependencies (e.g. `ocamlfind`, `ocamlgraph`, + `zarith`, etc.). A few of these dependencies are optional, only required + for the graphical interface: `lablgtk`, `conf-gnomecanvas` and + `conf-gtksourceview` (or the equivalent Gtk+3 packages). + +2. On Linux-like distributions: + + ./configure && make && sudo make install + + See section *Configuration* below for options. + +3. On Windows+Cygwin: + + ./configure --prefix="$(cygpath -a -m <installation path>)" && make && make install + +4. The binary `frama-c` (and `frama-c-gui` if you have lablgtk2) is now installed. + +### Full Compilation Guide + +#### Frama-C Requirements + +See the `opam/opam` file, section `depends`, for compatible OCaml versions and +required dependencies (except for those related to `lablgtk`, which are +required for the GUI but otherwise optional). + +Section `depopts` lists optional dependencies. + +#### Configuration + +Frama-C is configured by `./configure [options]`. + +`configure` is generated by `autoconf`, so that the standard options for setting +installation directories are available, in particular `--prefix=/path`. + +A plugin can be enabled by `--enable-plugin` and disabled by `--disable-plugin`. +By default, all distributed plugins are enabled, unless some optional +dependencies are not met. + +See `./configure --help` for the current list of plugins, and available options. + +##### Under Cygwin + +Use `./configure --prefix="$(cygpath -a -m <installation path>)"`. + +(using Unix-style paths without the drive letter will probably not work) + + +#### Compilation + +Type `make` (you can use `-j` for parallelization). + +Some Makefile targets of interest are: +- `doc` generates the API documentation. +- `oracles` sets up the Frama-C test suite oracles for your own configuration. +- `tests` performs Frama-C's own tests. + + +#### Installation + +Type `make install` +(depending on the installation directory, this may require superuser +privileges. The installation directory is chosen through `--prefix`). + + +#### API Documentation + +For plugin developers, the API documentation of the Frama-C kernel and +distributed plugins is available in the file `frama-c-api.tar.gz`, after running +`make doc-distrib`. + + +#### Uninstallation + +Type `make uninstall` to remove Frama-C and all the installed plugins. +(Depending on the installation directory, this may require superuser +privileges.) + + +# Testing the Installation + +This step is optional. + +Download some test files: + + export PREFIX_URL="https://git.frama-c.com/pub/frama-c/raw/master/tests/value" + wget -P test ${PREFIX_URL}/CruiseControl.c + wget -P test ${PREFIX_URL}/CruiseControl_const.c + wget -P test ${PREFIX_URL}/CruiseControl.h + wget -P test ${PREFIX_URL}/CruiseControl_extern.h + wget -P test ${PREFIX_URL}/scade_types.h + wget -P test ${PREFIX_URL}/config_types.h + wget -P test ${PREFIX_URL}/definitions.h + +Then test your installation by running: + + frama-c -eva test/CruiseControl*.c + # or (if frama-c-gui is available) + frama-c-gui -eva test/CruiseControl*.c + +# Available resources + +Once Frama-C is installed, the following resources should be installed and +available: + +## Executables: (in `/INSTALL_DIR/bin`) + +- `frama-c` +- `frama-c-gui` if available +- `frama-c-config` lightweight wrapper used to display configuration paths +- `frama-c.byte` bytecode version of frama-c +- `frama-c-gui.byte` bytecode version of frama-c-gui, if available +- `ptests.opt` testing tool for Frama-c +- `frama-c-script` utilities related to analysis parametrization + +## Shared files: (in `/INSTALL_DIR/share/frama-c` and subdirectories) + +- some `.h` and `.c` files used as preludes by Frama-C +- some `Makefiles` used to compile dynamic plugins +- some `.rc` files used to configure Frama-C +- some image files used by the Frama-C GUI +- some files for Frama-C/plug-in development (autocomplete scripts, + Emacs settings, scripts for running Eva, ...) +- an annotated C standard library (with ACSL annotations) in `libc` +- plugin-specific files (in directories `wp`, `e-acsl`, etc.) + +## Documentation files: (in `/INSTALL_DIR/share/frama-c/doc`) + +- files used to generate dynamic plugin documentation + +## Object files: (in `/INSTALL_DIR/lib/frama-c`) + +- object files used to compile dynamic plugins + +## Plugin files: (in `/INSTALL_DIR/lib/frama-c/plugins`) + +- object files of available dynamic plugins + +## Man files: (in `/INSTALL_DIR/share/man/man1`) + +- `man` files for `frama-c` (and `frama-c-gui` if available) + + +# Installing Additional Frama-C Plugins + +Plugins may be released independently of Frama-C. + +The standard way for installing them should be: + + ./configure && make && make install + +Plugins may have their own custom installation procedures. +Consult their specific documentation for details. + + +# HAVE FUN WITH FRAMA-C! -- GitLab