1{
2 lib,
3 stdenv,
4 alsa-lib,
5 atk,
6 autoconf,
7 automake,
8 cairo,
9 capnproto,
10 clang,
11 cmake,
12 curl,
13 dbus,
14 dbus-glib,
15 fontconfig,
16 foundationdb,
17 freetype,
18 gdk-pixbuf,
19 glib,
20 gmp,
21 gobject-introspection,
22 graphene,
23 gtk3,
24 gtk4,
25 libevdev,
26 libgit2,
27 libsodium,
28 libsoup_3,
29 libssh2,
30 libtool,
31 linux-pam,
32 llvmPackages,
33 nettle,
34 openssl,
35 pango,
36 pkg-config,
37 libpq,
38 protobuf,
39 python3,
40 rdkafka,
41 seatd, # =libseat
42 sqlite,
43 udev,
44 webkitgtk_4_1,
45 zlib,
46 buildPackages,
47 ...
48}:
49
50{
51 alsa-sys = attrs: {
52 nativeBuildInputs = [ pkg-config ];
53 buildInputs = [ alsa-lib ];
54 };
55
56 cairo-rs = attrs: {
57 buildInputs = [ cairo ];
58 };
59
60 cairo-sys-rs = attrs: {
61 nativeBuildInputs = [ pkg-config ];
62 buildInputs = [ cairo ];
63 extraLinkFlags = [ "-L${zlib.out}/lib" ];
64 };
65
66 capnp-rpc = attrs: {
67 nativeBuildInputs = [ capnproto ];
68 };
69
70 cargo = attrs: {
71 buildInputs = [
72 openssl
73 zlib
74 curl
75 ];
76 };
77
78 libz-sys = attrs: {
79 nativeBuildInputs = [ pkg-config ];
80 buildInputs = [ zlib ];
81 extraLinkFlags = [ "-L${zlib.out}/lib" ];
82 };
83
84 curl-sys = attrs: {
85 nativeBuildInputs = [ pkg-config ];
86 buildInputs = [
87 zlib
88 curl
89 ];
90 propagatedBuildInputs = [
91 curl
92 zlib
93 ];
94 extraLinkFlags = [ "-L${zlib.out}/lib" ];
95 };
96
97 dbus = attrs: {
98 nativeBuildInputs = [ pkg-config ];
99 buildInputs = [ dbus ];
100 };
101
102 evdev-sys = attrs: {
103 nativeBuildInputs = [
104 pkg-config
105 ]
106 ++ lib.optionals (stdenv.buildPlatform.config != stdenv.hostPlatform.config) [
107 python3
108 autoconf
109 automake
110 libtool
111 ];
112 buildInputs = [ libevdev ];
113
114 # This prevents libevdev's build.rs from trying to `git fetch` when HOST!=TARGET
115 prePatch = ''
116 touch libevdev/.git
117 '';
118 };
119
120 expat-sys = attrs: {
121 nativeBuildInputs = [ cmake ];
122 };
123
124 foundationdb-sys = attrs: {
125 buildInputs = [ foundationdb ];
126 # needed for 0.4+ release, when the FFI bindings are auto-generated
127 #
128 # patchPhase = ''
129 # substituteInPlace ./foundationdb-sys/build.rs \
130 # --replace /usr/local/include ${foundationdb.dev}/include
131 # '';
132 };
133
134 foundationdb = attrs: {
135 buildInputs = [ foundationdb ];
136 };
137
138 freetype-sys = attrs: {
139 nativeBuildInputs = [ cmake ];
140 buildInputs = [ freetype ];
141 };
142
143 glib-sys = attrs: {
144 nativeBuildInputs = [ pkg-config ];
145 buildInputs = [ glib ];
146 extraLinkFlags = [ "-L${zlib.out}/lib" ];
147 };
148
149 gobject-sys = attrs: {
150 nativeBuildInputs = [ pkg-config ];
151 buildInputs = [ dbus-glib ];
152 };
153
154 gio-sys = attrs: {
155 nativeBuildInputs = [ pkg-config ];
156 buildInputs = [ dbus-glib ];
157 };
158
159 gdk-pixbuf = attrs: {
160 buildInputs = [
161 dbus-glib
162 gdk-pixbuf
163 ];
164 };
165
166 gdk-pixbuf-sys = attrs: {
167 nativeBuildInputs = [ pkg-config ];
168 buildInputs = [ gdk-pixbuf ];
169 };
170
171 gdk-sys = attrs: {
172 nativeBuildInputs = [ pkg-config ];
173 buildInputs = [ gtk3 ]; # libgdk-3
174 };
175
176 gdkx11-sys = attrs: {
177 nativeBuildInputs = [ pkg-config ];
178 buildInputs = [ gtk3 ];
179 };
180
181 gtk-sys = attrs: {
182 buildInputs = [ gtk3 ];
183 nativeBuildInputs = [ pkg-config ];
184 };
185
186 gtk4-sys = attrs: {
187 buildInputs = [ gtk4 ];
188 nativeBuildInputs = [ pkg-config ];
189 };
190
191 gdk4-sys = attrs: {
192 buildInputs = [ gtk4 ];
193 nativeBuildInputs = [ pkg-config ];
194 };
195
196 gsk4-sys = attrs: {
197 buildInputs = [ gtk4 ];
198 nativeBuildInputs = [ pkg-config ];
199 };
200
201 libgit2-sys = attrs: {
202 LIBGIT2_SYS_USE_PKG_CONFIG = true;
203 nativeBuildInputs = [ pkg-config ];
204 buildInputs = [
205 openssl
206 zlib
207 libgit2
208 ];
209 };
210
211 libseat-sys = attrs: {
212 nativeBuildInputs = [ pkg-config ];
213 buildInputs = [ seatd ];
214 };
215
216 libsqlite3-sys = attrs: {
217 nativeBuildInputs = [ pkg-config ];
218 buildInputs = [ sqlite ];
219 };
220
221 libssh2-sys = attrs: {
222 nativeBuildInputs = [ pkg-config ];
223 buildInputs = [
224 openssl
225 zlib
226 libssh2
227 ];
228 };
229
230 libdbus-sys = attrs: {
231 nativeBuildInputs = [ pkg-config ];
232 buildInputs = [ dbus ];
233 };
234
235 libudev-sys = attrs: {
236 nativeBuildInputs = [ pkg-config ];
237 buildInputs = [ udev ];
238 };
239
240 graphene-sys = attrs: {
241 nativeBuildInputs = [
242 pkg-config
243 gobject-introspection
244 ];
245 buildInputs = [ graphene ];
246 };
247
248 javascriptcore-rs-sys = attrs: {
249 nativeBuildInputs = [ pkg-config ];
250 buildInputs = [ webkitgtk_4_1 ];
251 };
252
253 nettle-sys = attrs: {
254 nativeBuildInputs = [ pkg-config ];
255 buildInputs = [
256 nettle
257 clang
258 ];
259 LIBCLANG_PATH = "${lib.getLib llvmPackages.libclang}/lib";
260 };
261
262 openssl = attrs: {
263 buildInputs = [ openssl ];
264 };
265
266 openssl-sys = attrs: {
267 nativeBuildInputs = [ pkg-config ];
268 buildInputs = [ openssl ];
269 };
270
271 opentelemetry-proto = attrs: {
272 nativeBuildInputs = [ protobuf ];
273 };
274
275 pam-sys = attr: {
276 buildInputs = [ linux-pam ];
277 };
278
279 pango-sys = attr: {
280 nativeBuildInputs = [ pkg-config ];
281 buildInputs = [ pango ];
282 };
283
284 pq-sys = attr: {
285 nativeBuildInputs = [ pkg-config ];
286 buildInputs = [ libpq ];
287 };
288
289 prost-build = attr: {
290 nativeBuildInputs = [ protobuf ];
291 };
292
293 prost-wkt-types = attr: {
294 nativeBuildInputs = [ protobuf ];
295 };
296
297 rdkafka-sys = attr: {
298 nativeBuildInputs = [ pkg-config ];
299 buildInputs = [ rdkafka ];
300 };
301
302 rink = attrs: {
303 buildInputs = [ gmp ];
304 crateBin = [
305 {
306 name = "rink";
307 path = "src/bin/rink.rs";
308 }
309 ];
310 };
311
312 sequoia-openpgp = attrs: {
313 buildInputs = [ gmp ];
314 };
315
316 sequoia-openpgp-ffi = attrs: {
317 buildInputs = [ gmp ];
318 };
319
320 sequoia-ipc = attrs: {
321 buildInputs = [ gmp ];
322 };
323
324 sequoia-guide = attrs: {
325 buildInputs = [ gmp ];
326 };
327
328 pangocairo-sys = attr: {
329 nativeBuildInputs = [ pkg-config ];
330 buildInputs = [ pango ];
331 };
332
333 sequoia-store = attrs: {
334 nativeBuildInputs = [ capnproto ];
335 buildInputs = [
336 sqlite
337 gmp
338 ];
339 };
340
341 sequoia-sq = attrs: {
342 buildInputs = [
343 sqlite
344 gmp
345 ];
346 };
347
348 sequoia-tool = attrs: {
349 nativeBuildInputs = [ capnproto ];
350 buildInputs = [
351 sqlite
352 gmp
353 ];
354 };
355
356 servo-fontconfig-sys = attrs: {
357 nativeBuildInputs = [ pkg-config ];
358 buildInputs = [
359 freetype
360 fontconfig
361 ];
362 };
363
364 soup3-sys = attrs: {
365 nativeBuildInputs = [ pkg-config ];
366 buildInputs = [ libsoup_3 ];
367 extraLinkFlags = [ "-L${zlib.out}/lib" ];
368 };
369
370 thrussh-libsodium = attrs: {
371 nativeBuildInputs = [ pkg-config ];
372 buildInputs = [ libsodium ];
373 };
374
375 tonic-reflection = attrs: {
376 nativeBuildInputs = [ protobuf ];
377 };
378
379 webkit2gtk-sys = attrs: {
380 nativeBuildInputs = [ pkg-config ];
381 buildInputs = [ webkitgtk_4_1 ];
382 extraLinkFlags = [ "-L${zlib.out}/lib" ];
383 };
384
385 xcb = attrs: {
386 buildInputs = [ python3 ];
387 };
388
389 atk-sys = attrs: {
390 nativeBuildInputs = [ pkg-config ];
391 buildInputs = [ atk ];
392 };
393
394 # Assumes it can run Command::new(env::var("CARGO")).arg("locate-project")
395 # https://github.com/bkchr/proc-macro-crate/blame/master/src/lib.rs#L242
396 proc-macro-crate =
397 attrs:
398 lib.optionalAttrs (lib.versionAtLeast attrs.version "2.0") {
399 postPatch = (attrs.postPatch or "") + ''
400 substituteInPlace \
401 src/lib.rs \
402 --replace-fail \
403 'env::var("CARGO")' \
404 'Ok::<_, core::convert::Infallible>("${lib.getBin buildPackages.cargo}/bin/cargo")'
405 '';
406 };
407}