Skip to content
Snippets Groups Projects
Commit c47a8581 authored by Virgile Prevosto's avatar Virgile Prevosto
Browse files

[nix] migrating to opam2nix v1: allow derivation to add custom opam packages

parent d1905a79
No related branches found
No related tags found
No related merge requests found
# paramaterised derivation with dependencies injected (callPackage style) # paramaterised derivation with dependencies injected (callPackage style)
{ pkgs, stdenv, src ? ../., opam2nix, ocaml_version ? "ocaml-ng.ocamlPackages_4_08.ocaml", plugins ? { } }: { pkgs, stdenv, src ? ../., opam2nix, ocaml ? "ocaml-ng.ocamlPackages_4_08.ocaml", plugins ? { } }:
let mk_buildInputs = { opamPackages ? [], nixPackages ? [] } : let opam-selection = {
[ 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 ++ opam2nix.build { inherit ocaml;
specs = opam2nix.toSpecs ([ "ocamlfind" "zarith" "ocamlgraph" "yojson" "zmq" selection = ./opam-selection.nix;
"ppx_deriving" "ppx_deriving_yojson" };
{ name = "coq"; constraint = "=8.12.0"; } mk_opam_derivations = packages: opam2nix.resolve opam-selection packages;
{ name = "alt-ergo" ; constraint = "=2.2.0"; } opam_packages =
{ name = "why3" ; constraint = "=1.4.0"; } [ "ocamlfind" "zarith" "ocamlgraph" "yojson" "zmq"
{ name = "why3-coq" ; constraint = "=1.4.0"; } "ppx_deriving" "ppx_deriving_yojson"
] ++ opamPackages "coq=8.12.0" "alt-ergo=2.2.0" "why3=1.4.0" "why3-coq=1.4.0" ];
);
ocamlAttr = ocaml_version;
};
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 ++ opam2nix.buildInputs opam-selection;
# Extends the call to stdenv.mkDerivation with parameters common for all # Extends the call to stdenv.mkDerivation with parameters common for all
# frama-c derivations # frama-c derivations
mk_deriv = args: mk_deriv = args:
let my_opam_packages =
if args?opam_packages then
opam_packages ++ args.opam_packages
else opam_packages
;
in
stdenv.mkDerivation ({ stdenv.mkDerivation ({
# Disable Nix's GCC hardening # Disable Nix's GCC hardening
hardeningDisable = [ "all" ]; hardeningDisable = [ "all" ];
} // args); } // args)
//
{ gen-opam-selection = mk_opam_derivations my_opam_packages; }
;
in in
pkgs.lib.makeExtensible pkgs.lib.makeExtensible
(self: { (self: {
inherit src mk_buildInputs; inherit src mk_buildInputs opam_packages;
gen-opam-selection = mk_opam_derivations self.opam_packages;
buildInputs = mk_buildInputs {}; buildInputs = mk_buildInputs {};
installed = self.main.out; installed = self.main.out;
main = mk_deriv { main = mk_deriv {
...@@ -74,13 +83,9 @@ pkgs.lib.makeExtensible ...@@ -74,13 +83,9 @@ pkgs.lib.makeExtensible
lint = mk_deriv { lint = mk_deriv {
name = "frama-c-lint"; name = "frama-c-lint";
src = self.src; src = self.src;
opam_packages = [ "ocp-indent=1.7.0" "headache=1.05"];
buildInputs = buildInputs =
(self.mk_buildInputs { self.mk_buildInputs { nixPackages = [ pkgs.bc ]; };
nixPackages = [ pkgs.bc ];
opamPackages = [
{ name = "ocp-indent"; constraint = "=1.7.0"; }
{ name = "headache"; constraint = "=1.05"; }
];} );
outputs = [ "out" ]; outputs = [ "out" ];
postPatch = '' postPatch = ''
patchShebangs . patchShebangs .
...@@ -125,11 +130,8 @@ pkgs.lib.makeExtensible ...@@ -125,11 +130,8 @@ pkgs.lib.makeExtensible
build-distrib-tarball = mk_deriv { build-distrib-tarball = mk_deriv {
name = "frama-c-build-distrib-tarball"; name = "frama-c-build-distrib-tarball";
src = self.src; src = self.src;
buildInputs = buildInputs = self.buildInputs;
(self.mk_buildInputs { opam_packages = [ "headache=1.05" ];
opamPackages = [
{ name = "headache"; constraint = "=1.05"; }
];} );
outputs = [ "out" ]; outputs = [ "out" ];
postPatch = '' postPatch = ''
patchShebangs . patchShebangs .
...@@ -152,6 +154,7 @@ pkgs.lib.makeExtensible ...@@ -152,6 +154,7 @@ pkgs.lib.makeExtensible
build-from-distrib-tarball = mk_deriv { build-from-distrib-tarball = mk_deriv {
name = "frama-c-build-from-distrib-tarball"; name = "frama-c-build-from-distrib-tarball";
buildInputs = self.buildInputs; buildInputs = self.buildInputs;
opam_packages = self.build-distrib-tarball.opam_packages;
src = self.build-distrib-tarball.out ; src = self.build-distrib-tarball.out ;
outputs = [ "out" ]; outputs = [ "out" ];
configurePhase = '' configurePhase = ''
...@@ -248,12 +251,13 @@ pkgs.lib.makeExtensible ...@@ -248,12 +251,13 @@ pkgs.lib.makeExtensible
internal = mk_deriv { internal = mk_deriv {
name = "frama-c-internal"; name = "frama-c-internal";
src = self.src; src = self.src;
buildInputs = (self.mk_buildInputs { opamPackages = [ "xml-light" ]; } ) ++ opam_packages = [ "xml-light" ];
[ pkgs.getopt buildInputs =
pkgs.libxslt pkgs.libxml2 pkgs.autoPatchelfHook self.mk_buildInputs
pkgs.swiProlog { nixPackages =
stdenv.cc.cc.lib [ pkgs.getopt pkgs.libxslt pkgs.libxml2 pkgs.autoPatchelfHook
]; pkgs.swiProlog stdenv.cc.cc.lib ];
};
counter_examples_src = plugins.counter-examples.src; counter_examples_src = plugins.counter-examples.src;
genassigns_src = plugins.genassigns.src; genassigns_src = plugins.genassigns.src;
frama_clang_src = plugins.frama-clang.src; frama_clang_src = plugins.frama-clang.src;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment