python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / tools / analysis / frama-c / default.nix
blob869222e560b8326b8fe7d0d71fb57ca6315c7afd
1 { lib, stdenv, fetchurl, makeWrapper, writeText
2 , autoconf, ncurses, graphviz, doxygen
3 , ocamlPackages, ltl2ba, coq, why3
4 , gdk-pixbuf, wrapGAppsHook
5 }:
7 let
8   mkocamlpath = p: "${p}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib";
9   runtimeDeps = with ocamlPackages; [
10     apron.dev
11     biniou
12     camlzip
13     easy-format
14     menhirLib
15     mlgmpidl
16     num
17     ocamlgraph
18     ppx_deriving
19     ppx_import
20     stdlib-shims
21     why3
22     re
23     result
24     seq
25     sexplib
26     sexplib0
27     parsexp
28     base
29     yojson
30     zarith
31   ];
32   ocamlpath = lib.concatMapStringsSep ":" mkocamlpath runtimeDeps;
35 stdenv.mkDerivation rec {
36   pname = "frama-c";
37   version = "25.0";
38   slang   = "Manganese";
40   src = fetchurl {
41     url    = "https://frama-c.com/download/frama-c-${version}-${slang}.tar.gz";
42     sha256 = "sha256-Ii3O/NJyBTVAv1ts/zae/Ee4HCjzYOthZmnD8wqLwp8=";
43   };
45   preConfigure = lib.optionalString stdenv.cc.isClang "configureFlagsArray=(\"--with-cpp=clang -E -C\")";
47   postConfigure = "patchShebangs src/plugins/value/gen-api.sh";
49   nativeBuildInputs = [ autoconf wrapGAppsHook ];
51   buildInputs = with ocamlPackages; [
52     ncurses ocaml findlib ltl2ba ocamlgraph yojson menhirLib camlzip
53     lablgtk3 lablgtk3-sourceview3 coq graphviz zarith apron why3 mlgmpidl doxygen
54     ppx_deriving ppx_import
55     gdk-pixbuf
56   ];
58   enableParallelBuilding = true;
60   preFixup = ''
61      gappsWrapperArgs+=(--prefix OCAMLPATH ':' ${ocamlpath})
62   '';
64   # Allow loading of external Frama-C plugins
65   setupHook = writeText "setupHook.sh" ''
66     addFramaCPath () {
67       if test -d "''$1/lib/frama-c/plugins"; then
68         export FRAMAC_PLUGIN="''${FRAMAC_PLUGIN-}''${FRAMAC_PLUGIN:+:}''$1/lib/frama-c/plugins"
69         export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c/plugins"
70       fi
72       if test -d "''$1/lib/frama-c"; then
73         export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c"
74       fi
76       if test -d "''$1/share/frama-c/"; then
77         export FRAMAC_EXTRA_SHARE="''${FRAMAC_EXTRA_SHARE-}''${FRAMAC_EXTRA_SHARE:+:}''$1/share/frama-c"
78       fi
80     }
82     addEnvHooks "$targetOffset" addFramaCPath
83   '';
86   meta = {
87     description = "An extensible and collaborative platform dedicated to source-code analysis of C software";
88     homepage    = "http://frama-c.com/";
89     license     = lib.licenses.lgpl21;
90     maintainers = with lib.maintainers; [ thoughtpolice amiddelk ];
91     platforms   = lib.platforms.unix;
92   };