diff --git a/nix/frama-c.nix b/nix/frama-c.nix index c03f56160248c9963e1554b9548c4be314d4a109..e25338c5ae19f917a60ce2240774c630eee55aaa 100644 --- a/nix/frama-c.nix +++ b/nix/frama-c.nix @@ -84,6 +84,8 @@ stdenv.mkDerivation rec { autoconf ''; + # Do not use default parallel building, but allow 2 cores for Frama-C build + enableParallelBuilding = false; buildPhase = '' make config.sed dune build -j2 --display short @install @@ -104,9 +106,33 @@ stdenv.mkDerivation rec { cp -r $out/share/doc $out/doc ''; - # Required so that Frama-C libs are found after install + # Allow loading of external Frama-C plugins setupHook = writeText "setupHook.sh" '' - export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib" + has_dirs() { + for f do + [ -d "$f" ] && return + done + false + } + + addFramaCPath () { + if test -d "''$1/lib/frama-c/plugins"; then + export FRAMAC_PLUGIN="''${FRAMAC_PLUGIN-}''${FRAMAC_PLUGIN:+:}''$1/lib/frama-c/plugins" + export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c/plugins" + fi + + if has_dirs ''$1/lib/frama-c-*; then + export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib" + export DUNE_DIR_LOCATIONS="''${DUNE_DIR_LOCATIONS-}''${DUNE_DIR_LOCATIONS:+:}frama-c:lib:''$1/lib/frama-c" + fi + + if test -d "''$1/share/frama-c/"; then + export FRAMAC_EXTRA_SHARE="''${FRAMAC_EXTRA_SHARE-}''${FRAMAC_EXTRA_SHARE:+:}''$1/share/frama-c" + fi + + } + + addEnvHooks "$targetOffset" addFramaCPath ''; meta = {