Skip to content
Snippets Groups Projects
default.nix 14.67 KiB
# paramaterised derivation with dependencies injected (callPackage style)
{ pkgs, stdenv, src ? ../., opam2nix, ocaml ? pkgs.ocaml-ng.ocamlPackages_4_08.ocaml, plugins ? { } }:

let mydir = builtins.getEnv("PWD");
   mk-opam-selection = { name, opamSrc?{}, ... }: {
      inherit ocaml;
      src = opamSrc;
      selection = "${mydir}/${name}-${ocaml.version}-opam-selection.nix";
    };
     opamPackages =
      [ "ocamlfind" "zarith" "ocamlgraph" "yojson" "zmq"
        "ppx_deriving" "ppx_deriving_yojson"
        "coq=8.13.0" "alt-ergo=2.2.0"
        "why3=1.4.0" "why3-coq=1.4.0"
      ];
    # only pure nix packages. See mk_deriv below for adding opam2nix packages
    mk_buildInputs = { nixPackages ? [] } :
    [ pkgs.gnugrep pkgs.gnused  pkgs.autoconf pkgs.gnumake pkgs.gcc pkgs.ncurses pkgs.time pkgs.python3 pkgs.perl pkgs.file pkgs.which pkgs.dos2unix] ++ nixPackages;
    # Extends the call to stdenv.mkDerivation with parameters common for all
    # frama-c derivations
    mk_deriv = args:
      let my_opam_packages =
            if args?opamPackages then
              opamPackages ++ args.opamPackages
            else opamPackages
          ;
          opam-selection = mk-opam-selection args;
          buildInputs = args.buildInputs ++ opam2nix.buildInputs opam-selection;
      in
        stdenv.mkDerivation (
          args //
          {
            # Disable Nix's GCC hardening
            hardeningDisable = [ "all" ];
            inherit buildInputs;
          })
        //
        { gen-opam-selection =
            opam2nix.resolve opam-selection my_opam_packages; }
    ;
in

pkgs.lib.makeExtensible
(self: {
  inherit src mk_buildInputs opamPackages mk_deriv;
  buildInputs = mk_buildInputs {};
  installed = self.main.out;
  main = mk_deriv {
        name = "frama-c";
        src = self.src;
        buildInputs =self.buildInputs;
        outputs = [ "out" "build_dir" ];
        postPatch = ''
               patchShebangs .
        '';
        configurePhase = ''
               unset CC
               autoconf
               ./configure --prefix=$out
        '';
        buildPhase = ''
                make -j 4
        '';
        installPhase = ''
               make install
               mkdir -p $build_dir
               tar -cf $build_dir/dir.tar .
               pwd > $build_dir/old_pwd
        '';
        setupHook = pkgs.writeText "setupHook.sh" ''