nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 mkCoqDerivation,
4 which,
5 coq,
6 stdlib,
7 version ? null,
8 elpi-version ? null,
9}:
10
11let
12 default-elpi-version =
13 if elpi-version != null then
14 elpi-version
15 else
16 (
17 let
18
19 case = case: out: { inherit case out; };
20 in
21 with lib.versions;
22 lib.switch coq.coq-version [
23 (case (range "8.20" "8.20") "2.0.7")
24 (case (range "8.18" "8.19") "1.18.1")
25 (case (range "8.16" "8.17") "1.17.0")
26 (case "8.15" "1.15.0")
27 (case (range "8.13" "8.14") "1.13.7")
28 (case "8.12" "1.12.0")
29 (case "8.11" "1.11.4")
30 ] { }
31 );
32 elpi = coq.ocamlPackages.elpi.override { version = default-elpi-version; };
33 propagatedBuildInputs_wo_elpi = [
34 coq.ocamlPackages.findlib
35 ];
36 derivation = mkCoqDerivation {
37 pname = "elpi";
38 repo = "coq-elpi";
39 owner = "LPCIC";
40 inherit version;
41 defaultVersion =
42 let
43 case = case: out: { inherit case out; };
44 in
45 with lib.versions;
46 lib.switch coq.coq-version [
47 (case (range "8.20" "8.20") "2.6.0")
48 (case (range "8.20" "8.20") "2.5.2")
49 (case "8.19" "2.0.1")
50 (case "8.18" "2.0.0")
51 (case "8.17" "1.18.0")
52 (case "8.16" "1.15.6")
53 (case "8.15" "1.14.0")
54 (case "8.14" "1.11.2")
55 (case "8.13" "1.11.1")
56 (case "8.12" "1.8.3_8.12")
57 (case "8.11" "1.6.3_8.11")
58 ] null;
59 release."2.6.0".sha256 = "sha256-23BHq1NFUkI3ayXnGUwiGFySLyY3EuH4RyMgAhQqI4g=";
60 release."2.5.2".sha256 = "sha256-lLzjPrbVB3rrqox528YiheUb0u89R84Xmrgkn0oplOs=";
61 release."2.5.0".sha256 = "sha256-Z5xjO83X/ZoTQlWnVupGXPH3HuJefr57Kv128I0dltg=";
62 release."2.4.0".sha256 = "sha256-W2+vVGExLLux8e0nSZESSoMVvrLxhL6dmXkb+JuKiqc=";
63 release."2.3.0".sha256 = "sha256-XVOI+s8Qpa7f17+Xq0y7IGPLFeJqo+cDcd3zfMuO7UU=";
64 release."2.2.0".sha256 = "sha256-rADEoqTXM7/TyYkUKsmCFfj6fjpWdnZEOK++5oLfC/I=";
65 release."2.0.1".sha256 = "sha256-cuoPsEJ+JRLVc9Golt2rJj4P7lKltTrrmQijjoViooc=";
66 release."2.0.0".sha256 = "sha256-A/cH324M21k3SZ7+YWXtaYEbu6dZQq3K0cb1RMKjbsM=";
67 release."1.19.0".sha256 = "sha256-kGoo61nJxeG/BqV+iQaV3iinwPStND+7+fYMxFkiKrQ=";
68 release."1.18.0".sha256 = "sha256-2fCOlhqi4YkiL5n8SYHuc3pLH+DArf9zuMH7IhpBc2Y=";
69 release."1.17.0".sha256 = "sha256-J8GatRKFU0ekNCG3V5dBI+FXypeHcLgC5QJYGYzFiEM=";
70 release."1.15.6".sha256 = "sha256-qc0q01tW8NVm83801HHOBHe/7H1/F2WGDbKO6nCXfno=";
71 release."1.15.1".sha256 = "sha256-NT2RlcIsFB9AvBhMxil4ZZIgx+KusMqDflj2HgQxsZg=";
72 release."1.14.0".sha256 = "sha256:1v2p5dlpviwzky2i14cj7gcgf8cr0j54bdm9fl5iz1ckx60j6nvp";
73 release."1.13.0".sha256 = "1j7s7dlnjbw222gnbrsjgmjck1yrx7h6hwm8zikcyxi0zys17w7n";
74 release."1.12.1".sha256 = "sha256-4mO6/co7NcIQSGIQJyoO8lNWXr6dqz+bIYPO/G0cPkY=";
75 release."1.11.2".sha256 = "0qk5cfh15y2zrja7267629dybd3irvxk1raz7z8qfir25a81ckd4";
76 release."1.11.1".sha256 = "10j076vc2hdcbm15m6s7b6xdzibgfcbzlkgjnlkr2vv9k13qf8kc";
77 release."1.10.1".sha256 = "1zsyx26dvj7pznfd2msl2w7zbw51q1nsdw0bdvdha6dga7ijf7xk";
78 release."1.9.7".sha256 = "0rvn12h9dpk9s4pxy32p8j0a1h7ib7kg98iv1cbrdg25y5vs85n1";
79 release."1.9.5".sha256 = "0gjdwmb6bvb5gh0a6ra48bz5fb3pr5kpxijb7a8mfydvar5i9qr6";
80 release."1.9.4".sha256 = "0nii7238mya74f9g6147qmpg6gv6ic9b54x5v85nb6q60d9jh0jq";
81 release."1.9.3".sha256 = "198irm800fx3n8n56vx1c6f626cizp1d7jfkrc6ba4iqhb62ma0z";
82 release."1.9.2".sha256 = "1rr2fr8vjkc0is7vh1461aidz2iwkigdkp6bqss4hhv0c3ijnn07";
83 release."1.8.3_8.12".sha256 = "15z2l4zy0qpw0ws7bvsmpmyv543aqghrfnl48nlwzn9q0v89p557";
84 release."1.8.3_8.12".version = "1.8.3";
85 release."1.8.2_8.12".sha256 = "1n6jwcdazvjgj8vsv2r9zgwpw5yqr5a1ndc2pwhmhqfl04b5dk4y";
86 release."1.8.2_8.12".version = "1.8.2";
87 release."1.8.1".sha256 = "1fbbdccdmr8g4wwpihzp4r2xacynjznf817lhijw6kqfav75zd0r";
88 release."1.8.0".sha256 = "13ywjg94zkbki22hx7s4gfm9rr87r4ghsgan23xyl3l9z8q0idd1";
89 release."1.7.0".sha256 = "1ws5cqr0xawv69prgygbl3q6dgglbaw0vc397h9flh90kxaqgyh8";
90 release."1.6.3_8.11".sha256 = "1j340cr2bv95clzzkkfmsjkklham1mj84cmiyprzwv20q89zr1hp";
91 release."1.6.3_8.11".version = "1.6.3";
92 release."1.6.2_8.11".sha256 = "06xrx0ljilwp63ik2sxxr7h617dgbch042xfcnfpy5x96br147rn";
93 release."1.6.2_8.11".version = "1.6.2";
94 release."1.6.1_8.11".sha256 = "0yyyh35i1nb3pg4hw7cak15kj4y6y9l84nwar9k1ifdsagh5zq53";
95 release."1.6.1_8.11".version = "1.6.1";
96 release."1.6.0_8.11".sha256 = "0ahxjnzmd7kl3gl38kyjqzkfgllncr2ybnw8bvgrc6iddgga7bpq";
97 release."1.6.0_8.11".version = "1.6.0";
98 release."1.6.0".sha256 = "0kf99i43mlf750fr7fric764mm495a53mg5kahnbp6zcjcxxrm0b";
99 releaseRev = v: "v${v}";
100
101 buildFlags = [ "OCAMLWARN=" ];
102
103 mlPlugin = true;
104 useDuneifVersion = v: lib.versions.isGe "2.2.0" v || v == "dev";
105
106 propagatedBuildInputs = propagatedBuildInputs_wo_elpi ++ [ elpi ];
107
108 preConfigure = ''
109 make elpi/dune || true
110 '';
111
112 meta = {
113 description = "Coq plugin embedding ELPI";
114 maintainers = [ lib.maintainers.cohencyril ];
115 license = lib.licenses.lgpl21Plus;
116 };
117 };
118 patched-derivation1 = derivation.overrideAttrs (
119 o:
120 lib.optionalAttrs (o ? elpi-version) {
121 propagatedBuildInputs = propagatedBuildInputs_wo_elpi ++ [
122 (coq.ocamlPackages.elpi.override { version = o.elpi-version; })
123 ];
124 }
125 );
126 patched-derivation2 = patched-derivation1.overrideAttrs (
127 o:
128 lib.optionalAttrs (o.version != null && (o.version == "dev" || lib.versions.isGe "2.2.0" o.version))
129 {
130 propagatedBuildInputs = o.propagatedBuildInputs ++ [ coq.ocamlPackages.ppx_optcomp ];
131 }
132 );
133 patched-derivation3 = patched-derivation2.overrideAttrs (
134 o:
135 lib.optionalAttrs (o.version != null && o.version == "2.4.0") {
136 propagatedBuildInputs = o.propagatedBuildInputs ++ [ stdlib ];
137 }
138 );
139 patched-derivation4 = patched-derivation3.overrideAttrs (
140 o:
141 lib.optionalAttrs (o.version != null && (o.version == "dev" || lib.versions.isGe "2.5.0" o.version))
142 {
143 configurePhase = ''
144 make dune-files || true
145 '';
146 buildPhase = ''
147 dune build -p rocq-elpi @install ''${enableParallelBuilding:+-j $NIX_BUILD_CORES}
148 '';
149 installPhase = ''
150 dune install --root . rocq-elpi --prefix=$out --libdir $OCAMLFIND_DESTDIR
151 mkdir $out/lib/coq/
152 mv $OCAMLFIND_DESTDIR/coq $out/lib/coq/${coq.coq-version}
153 '';
154 }
155 );
156in
157# this is just a wrapper for rocqPackages.stdlib for Rocq >= 9.0
158if coq.rocqPackages ? rocq-elpi then
159 coq.rocqPackages.rocq-elpi.override {
160 inherit version elpi-version;
161 inherit (coq.rocqPackages) rocq-core;
162 }
163else
164 patched-derivation4