1{
2 lib,
3 mkCoqDerivation,
4 mathcomp,
5 mathcomp-finmap,
6 mathcomp-bigenough,
7 hierarchy-builder,
8 stdlib,
9 single ? false,
10 coqPackages,
11 coq,
12 version ? null,
13}@args:
14
15let
16 repo = "analysis";
17 owner = "math-comp";
18
19 release."1.12.0".sha256 = "sha256-PF10NlZ+aqP3PX7+UsZwgJT9PEaDwzvrS/ZGzjP64Wo=";
20 release."1.11.0".sha256 = "sha256-1apbzBvaLNw/8ARLUhGGy89CyXW+/6O4ckdxKPraiVc=";
21 release."1.9.0".sha256 = "sha256-zj7WSDUg8ISWxcipGpjEwvvnLp1g8nm23BZiib/15+g=";
22 release."1.8.0".sha256 = "sha256-2ZafDmZAwGB7sxdUwNIE3xvwBRw1kFDk0m5Vz+onWZc=";
23 release."1.7.0".sha256 = "sha256-GgsMIHqLkWsPm2VyOPeZdOulkN00IoBz++qA6yE9raQ=";
24 release."1.5.0".sha256 = "sha256-EWogrkr5TC5F9HjQJwO3bl4P8mij8U7thUGJNNI+k88=";
25 release."1.4.0".sha256 = "sha256-eDggeuEU0fMK7D5FbxvLkbAgpLw5lwL/Rl0eLXAnJeg=";
26 release."1.2.0".sha256 = "sha256-w6BivDM4dF4Iv4rUTy++2feweNtMAJxgGExPfYGhXxo=";
27 release."1.1.0".sha256 = "sha256-wl4kZf4mh9zbFfGcqaFEgWRyp0Bj511F505mYodpS6o=";
28 release."1.0.0".sha256 = "sha256-KiXyaWB4zQ3NuXadq4BSWfoN1cIo1xiLVSN6nW03tC4=";
29 release."0.7.0".sha256 = "sha256-JwkyetXrFsFHqz8KY3QBpHsrkhmEFnrCGuKztcoen60=";
30 release."0.6.7".sha256 = "sha256-3i2PBMEwihwgwUmnS0cmrZ8s+aLPFVq/vo0aXMUaUyA=";
31 release."0.6.6".sha256 = "sha256-tWtv6yeB5/vzwpKZINK9OQ0yQsvD8qu9zVSNHvLMX5Y=";
32 release."0.6.5".sha256 = "sha256-oJk9/Jl1SWra2aFAXRAVfX7ZUaDfajqdDksYaW8dv8E=";
33 release."0.6.1".sha256 = "sha256-1VyNXu11/pDMuH4DmFYSUF/qZ4Bo+/Zl3Y0JkyrH/r0=";
34 release."0.6.0".sha256 = "sha256-0msICcIrK6jbOSiBu0gIVU3RHwoEEvB88CMQqW/06rg=";
35 release."0.5.3".sha256 = "sha256-1NjFsi5TITF8ZWx1NyppRmi8g6YaoUtTdS9bU/sUe5k=";
36 release."0.5.2".sha256 = "0yx5p9zyl8jv1vg7rgkyq8dqzkdnkqv969mi62whmhkvxbavgzbw";
37 release."0.5.1".sha256 = "1hnzqb1gxf88wgj2n1b0f2xm6sxg9j0735zdsv6j12hlvx5lwk68";
38 release."0.3.13".sha256 = "sha256-Yaztew79KWRC933kGFOAUIIoqukaZOdNOdw4XszR1Hg=";
39 release."0.3.10".sha256 = "sha256-FBH2c8QRibq5Ycw/ieB8mZl0fDiPrYdIzZ6W/A3pIhI=";
40 release."0.3.9".sha256 = "sha256-uUU9diBwUqBrNRLiDc0kz0CGkwTZCUmigPwLbpDOeg4=";
41 release."0.3.6".sha256 = "0g2j7b2hca4byz62ssgg90bkbc8wwp7xkb2d3225bbvihi92b4c5";
42 release."0.3.4".sha256 = "18mgycjgg829dbr7ps77z6lcj03h3dchjbj5iir0pybxby7gd45c";
43 release."0.3.3".sha256 = "1m2mxcngj368vbdb8mlr91hsygl430spl7lgyn9qmn3jykack867";
44 release."0.3.1".sha256 = "1iad288yvrjv8ahl9v18vfblgqb1l5z6ax644w49w9hwxs93f2k8";
45 release."0.2.3".sha256 = "0p9mr8g1qma6h10qf7014dv98ln90dfkwn76ynagpww7qap8s966";
46
47 defaultVersion =
48 let
49 case = coq: mc: out: {
50 cases = [
51 coq
52 mc
53 ];
54 inherit out;
55 };
56 in
57 with lib.versions;
58 lib.switch
59 [ coq.coq-version mathcomp.version ]
60 [
61 (case (range "8.20" "9.1") (range "2.1.0" "2.4.0") "1.12.0")
62 (case (range "8.19" "8.20") (range "2.1.0" "2.3.0") "1.9.0")
63 (case (range "8.17" "8.20") (range "2.0.0" "2.2.0") "1.1.0")
64 (case (range "8.17" "8.19") (range "1.17.0" "1.19.0") "0.7.0")
65 (case (range "8.17" "8.18") (range "1.15.0" "1.18.0") "0.6.7")
66 (case (range "8.17" "8.18") (range "1.15.0" "1.18.0") "0.6.6")
67 (case (range "8.14" "8.18") (range "1.15.0" "1.17.0") "0.6.5")
68 (case (range "8.14" "8.18") (range "1.13.0" "1.16.0") "0.6.1")
69 (case (range "8.14" "8.18") (range "1.13" "1.15") "0.5.2")
70 (case (range "8.13" "8.15") (range "1.13" "1.14") "0.5.1")
71 (case (range "8.13" "8.15") (range "1.12" "1.14") "0.3.13")
72 (case (range "8.11" "8.14") (range "1.12" "1.13") "0.3.10")
73 (case (range "8.10" "8.12") "1.11.0" "0.3.3")
74 (case (range "8.10" "8.11") "1.11.0" "0.3.1")
75 (case (range "8.8" "8.11") (range "1.8" "1.10") "0.2.3")
76 ]
77 null;
78
79 # list of analysis packages sorted by dependency order
80 packages = {
81 "classical" = [ ];
82 "reals" = [ "classical" ];
83 "experimental-reals" = [ "reals" ];
84 "analysis" = [ "reals" ];
85 "reals-stdlib" = [ "reals" ];
86 "analysis-stdlib" = [
87 "analysis"
88 "reals-stdlib"
89 ];
90 };
91
92 mathcomp_ =
93 package:
94 let
95 classical-deps = [
96 mathcomp.ssreflect
97 mathcomp.algebra
98 mathcomp-finmap
99 ];
100 experimental-reals-deps = [ mathcomp-bigenough ];
101 analysis-deps = [
102 mathcomp.field
103 mathcomp-bigenough
104 ];
105 intra-deps = lib.optionals (package != "single") (map mathcomp_ packages.${package});
106 pkgpath = lib.switch package [
107 {
108 case = "single";
109 out = ".";
110 }
111 {
112 case = "analysis";
113 out = "theories";
114 }
115 {
116 case = "experimental-reals";
117 out = "experimental_reals";
118 }
119 {
120 case = "reals-stdlib";
121 out = "reals_stdlib";
122 }
123 {
124 case = "analysis-stdlib";
125 out = "analysis_stdlib";
126 }
127 ] package;
128 pname = if package == "single" then "mathcomp-analysis-single" else "mathcomp-${package}";
129 derivation = mkCoqDerivation ({
130 inherit
131 version
132 pname
133 defaultVersion
134 release
135 repo
136 owner
137 ;
138
139 namePrefix = [
140 "coq"
141 "mathcomp"
142 ];
143
144 propagatedBuildInputs =
145 intra-deps
146 ++ lib.optionals (lib.elem package [
147 "classical"
148 "single"
149 ]) classical-deps
150 ++ lib.optionals (lib.elem package [
151 "experimental-reals"
152 "single"
153 ]) experimental-reals-deps
154 ++ lib.optionals (lib.elem package [
155 "analysis"
156 "single"
157 ]) analysis-deps
158 ++ lib.optional (lib.elem package [
159 "reals-stdlib"
160 "analysis-stdlib"
161 "single"
162 ]) stdlib;
163
164 preBuild = ''
165 cd ${pkgpath}
166 '';
167
168 meta = {
169 description = "Analysis library compatible with Mathematical Components";
170 maintainers = [ lib.maintainers.cohencyril ];
171 license = lib.licenses.cecill-c;
172 };
173
174 passthru = lib.mapAttrs (package: deps: mathcomp_ package) packages;
175 });
176 # split packages didn't exist before 0.6, so building nothing in that case
177 patched-derivation1 = derivation.overrideAttrs (
178 o:
179 lib.optionalAttrs
180 (
181 o.pname != null
182 && o.pname != "mathcomp-analysis"
183 && o.version != null
184 && o.version != "dev"
185 && lib.versions.isLt "0.6" o.version
186 )
187 {
188 preBuild = "";
189 buildPhase = "echo doing nothing";
190 installPhase = "echo doing nothing";
191 }
192 );
193 patched-derivation2 = patched-derivation1.overrideAttrs (
194 o:
195 lib.optionalAttrs (
196 o.pname != null
197 && o.pname == "mathcomp-analysis"
198 && o.version != null
199 && o.version != "dev"
200 && lib.versions.isLt "0.6" o.version
201 ) { preBuild = ""; }
202 );
203 # only packages classical and analysis existed before 1.7, so building nothing in that case
204 patched-derivation3 = patched-derivation2.overrideAttrs (
205 o:
206 lib.optionalAttrs
207 (
208 o.pname != null
209 && o.pname != "mathcomp-classical"
210 && o.pname != "mathcomp-analysis"
211 && o.version != null
212 && o.version != "dev"
213 && lib.versions.isLt "1.7" o.version
214 )
215 {
216 preBuild = "";
217 buildPhase = "echo doing nothing";
218 installPhase = "echo doing nothing";
219 }
220 );
221 patched-derivation = patched-derivation3.overrideAttrs (
222 o:
223 lib.optionalAttrs (o.version != null && (o.version == "dev" || lib.versions.isGe "0.3.4" o.version))
224 {
225 propagatedBuildInputs = o.propagatedBuildInputs ++ [ hierarchy-builder ];
226 }
227 );
228 in
229 patched-derivation;
230in
231mathcomp_ (if single then "single" else "analysis")