-
Virgile Prevosto authoredVirgile Prevosto authored
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" ''