1{ stdenv, lib, fetchFromGitHub, autoconf, automake, libtool, pkgconfig
2
3, ApplicationServices, CoreServices }:
4
5let
6 stable = "stable";
7 unstable = "unstable";
8
9 meta = with lib; {
10 description = "A multi-platform support library with a focus on asynchronous I/O";
11 homepage = https://github.com/libuv/libuv;
12 maintainers = with maintainers; [ cstrahan ];
13 platforms = with platforms; linux ++ darwin;
14 };
15
16 mkName = stability: version:
17 if stability == stable
18 then "libuv-${version}"
19 else "libuv-${stability}-${version}";
20
21 mkSrc = version: sha256: fetchFromGitHub {
22 owner = "libuv";
23 repo = "libuv";
24 rev = "v${version}";
25 inherit sha256;
26 };
27
28 # for versions < 0.11.6
29 mkWithoutAutotools = stability: version: sha256: stdenv.mkDerivation {
30 name = mkName stability version;
31 src = mkSrc version sha256;
32 buildPhase = lib.optionalString stdenv.isDarwin ''
33 mkdir extrapath
34 ln -s /usr/sbin/dtrace extrapath/dtrace
35 export PATH=$PATH:`pwd`/extrapath
36 '' + ''
37 mkdir build
38 make builddir_name=build
39
40 rm -r build/src
41 rm build/libuv.a
42 cp -r include build
43
44 mkdir build/lib
45 mv build/libuv.* build/lib
46
47 pushd build/lib
48 lib=$(basename libuv.*)
49 ext="''${lib##*.}"
50 mv $lib libuv.10.$ext
51 ln -s libuv.10.$ext libuv.$ext
52 popd
53 '';
54 installPhase = ''
55 cp -r build $out
56 '';
57 inherit meta;
58 };
59
60 # for versions > 0.11.6
61 mkWithAutotools = stability: version: sha256: stdenv.mkDerivation {
62 name = mkName stability version;
63 src = mkSrc version sha256;
64 buildInputs = [ automake autoconf libtool pkgconfig ]
65 ++ stdenv.lib.optionals stdenv.isDarwin [ ApplicationServices CoreServices ];
66 preConfigure = ''
67 LIBTOOLIZE=libtoolize ./autogen.sh
68 '';
69 inherit meta;
70 };
71
72 toVersion = with lib; name:
73 replaceChars ["_"] ["."] (removePrefix "v" name);
74
75in
76
77 with lib;
78
79 mapAttrs (v: h: mkWithoutAutotools stable (toVersion v) h) {
80 v0_10_27 = "0i00v216ha74xi374yhgmfrb4h84q2w4y1ync3y1qsngbm8irjhg";
81 }
82 //
83 mapAttrs (v: h: mkWithAutotools unstable (toVersion v) h) {
84 # Versions >= 0.11.1 and < 0.11.6 do not build a dynamic library
85 v0_11_6 = "15h903hz6kn8j1lp1160ia7llx0ypa5ch8ygkwpmrm31p50ng8r4";
86 v0_11_7 = "1l6hrz3g2c7qspy28inbrcd7byn2sncd42ncf4pr0ifpkkj083hh";
87 v0_11_8 = "0aag2v7bfi7kksna0867srlqcjxn8m287bpl2j5k11d07m382zs1";
88 v0_11_9 = "12ap0ix5ra24f30adgdr48l175vxfmh398mlilm8kdkld0dqfx24";
89 v0_11_10 = "17mn9xbygc2jpqv4a068i57rcp585bmcalpb9jpyz1jf030lllyy";
90 v0_11_11 = "1l06sznvd5nxzg3fqqb451g4fzygyb37apqyhyvbdb6dmklcm7xk";
91 v0_11_12 = "1kwqd3wk06mffhglawx7b2g4yddkg5597aa5jyw2zhzwkz2z4a27";
92 v0_11_13 = "0z30ljwgxbm120dy0i4knhj5zw6q7jcx5wi9v0v51ax6mhdgqy8a";
93 v0_11_14 = "0bk1bchfkbyyry3d4ggv754w5fyj6qbivbd42ggcr0hq55h49iwg";
94 v0_11_15 = "09qayz2k0337h7jbf8zs9lyxgp3ln0gq37r43wixfll7jjjkacvd";
95 v0_11_16 = "06jrwwnliqadqgp7fn2093xxljiz8iwdyywh2yljyp4zk8r4vzis";
96 v0_11_17 = "0i6nlxnlxwzpib0sp1191h9yymfvgwjwciiq9avcqljiklfg432r";
97 v0_11_18 = "0jxrfxf4iq34fjgbwdrvi36hqzgph87928n4q4gchpahywf2pjxk";
98 v0_11_19 = "16aw8jx571xxc6am4sbz17j2wb9pylv1svsmwxbczb3vd624vm32";
99 v0_11_20 = "0r7cyzxysgcfl4h9xis050b7x8cvmrwzwh1rr545q53j0gjxvzvi";
100 v0_11_21 = "0bxjzrlcs2f0va26i0ahvcpjbb0j66rq74smi95s6q73zl99n326";
101 v0_11_22 = "0r6nfavsndm1dzinzzxndr2h75g33vigx21z3f7w2x7qwa8a8hpp";
102 v0_11_23 = "01dlmpk8a4zvq6lm88bsfi7dzhl7xvma7q5ygi2x5ghdm4svki1m";
103 v0_11_24 = "1hygn81iwbdshzrq603qm6k1r7pjflx9qqazmlb72c3vy1hq21c6";
104 v0_11_25 = "1abszivlxf0sddwvcj3jywfsip5q9vz6axvn40qqyl8sjs80zcvj";
105 v0_11_26 = "1pfjdwrxhqz1vqcdm42g3j45ghrb4yl7wsngvraclhgqicff1sc3";
106 v0_11_29 = "1z07phfwryfy2155p3lxcm2a33h20sfl96lds5dghn157x6csz7m";
107 }
108 //
109 mapAttrs (v: h: mkWithAutotools stable (toVersion v) h) {
110 v1_2_0 = "1nbp8qpgw64gl9nrjzxw0ndv1m64cfms0cy5a2883vw6877kizmx";
111 v1_6_1 = "10w9pjbmqcv03v04rnjd8mdh886j7v4y0svdsdklz69zskgdvvqg";
112 }