summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/rebar3/default.nix
blob: dccb67efaf4c090bd4f6f82de1af56f2078f7f67 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{ stdenv, writeText, callPackage, fetchurl,
  fetchHex, erlang, rebar3-nix-bootstrap, tree, fetchFromGitHub }:


let
  version = "3.0.0-beta.4";
  registrySnapshot = callPackage ./registrySnapshot.nix { };

  # TODO: all these below probably should go into nixpkgs.erlangModules.sources.*
  # {erlware_commons,     "0.16.0"},
  erlware_commons = fetchHex {
    pkg = "erlware_commons";
    version = "0.16.0";
    sha256 = "0kh24d0001390wfx28d0xa874vrsfvjgj41g315vg4hac632krxx";
  };
  # {ssl_verify_hostname, "1.0.5"},
  ssl_verify_hostname = fetchHex {
    pkg = "ssl_verify_hostname";
    version = "1.0.5";
    sha256 = "1gzavzqzljywx4l59gvhkjbr1dip4kxzjjz1s4wsn42f2kk13jzj";
  };
  # {certifi,             "0.1.1"},
  certifi = fetchHex {
    pkg = "certifi";
    version = "0.1.1";
    sha256 = "0afylwqg74gprbg116asz0my2nipmki0512c8mdiq6xdiyjdvlg6";
  };
  # {providers,           "1.5.0"},
  providers = fetchHex {
    pkg = "providers";
    version = "1.5.0";
    sha256 = "1hc8sp2l1mmx9dfpmh1f8j9hayfg7541rmx05wb9cmvxvih7zyvf";
  };
  # {getopt,              "0.8.2"},
  getopt = fetchHex {
    pkg = "getopt";
    version = "0.8.2";
    sha256 = "1xw30h59zbw957cyjd8n50hf9y09jnv9dyry6x3avfwzcyrnsvkk";
  };
  # {bbmustache,          "1.0.4"},
  bbmustache = fetchHex {
    pkg = "bbmustache";
    version = "1.0.4";
    sha256 = "04lvwm7f78x8bys0js33higswjkyimbygp4n72cxz1kfnryx9c03";
  };
  # {relx,                "3.8.0"},
  relx = fetchHex {
    pkg = "relx";
    version = "3.8.0";
    sha256 = "0y89iirjz3kc1rzkdvc6p3ssmwcm2hqgkklhgm4pkbc14fcz57hq";
  };
  # {cf,                  "0.2.1"},
  cf = fetchHex {
    pkg = "cf";
    version = "0.2.1";
    sha256 = "19d0yvg8wwa57cqhn3vqfvw978nafw8j2rvb92s3ryidxjkrmvms";
  };
  # {cth_readable,        "1.1.0"},
  cth_readable = fetchHex {
    pkg = "cth_readable";
    version = "1.0.1";
    sha256 = "1cnc4fbypckqllfi5h73rdb24dz576k3177gzvp1kbymwkp1xcz1";
  };
  # {eunit_formatters,    "0.2.0"}
  eunit_formatters = fetchHex {
    pkg = "eunit_formatters";
    version = "0.2.0";
    sha256 = "03kiszlbgzscfd2ns7na6bzbfzmcqdb5cx3p6qy3657jk2fai332";
  };

in
stdenv.mkDerivation {
  name = "rebar3-${version}";
  inherit version;

  src = fetchurl {
    url = "https://github.com/rebar/rebar3/archive/${version}.tar.gz";
    sha256 = "0px66scjdia9aaa5z36qzxb848r56m0k98g0bxw065a2narsh4xy";
  };

  patches = [ ./hermetic-bootstrap.patch ];

  buildInputs = [ erlang tree  ];
  propagatedBuildInputs = [ registrySnapshot rebar3-nix-bootstrap ];

  postPatch = ''
    echo postPatch
    rebar3-nix-bootstrap registry-only
    echo "$ERL_LIBS"
    mkdir -p _build/default/lib/
    cp --no-preserve=mode -R ${erlware_commons} _build/default/lib/erlware_commons
    cp --no-preserve=mode -R ${providers} _build/default/lib/providers
    cp --no-preserve=mode -R ${getopt} _build/default/lib/getopt
    cp --no-preserve=mode -R ${bbmustache} _build/default/lib/bbmustache
    cp --no-preserve=mode -R ${certifi} _build/default/lib/certifi
    cp --no-preserve=mode -R ${cf} _build/default/lib/cf
    cp --no-preserve=mode -R ${cth_readable} _build/default/lib/cth_readable
    cp --no-preserve=mode -R ${eunit_formatters} _build/default/lib/eunit_formatters
    cp --no-preserve=mode -R ${relx} _build/default/lib/relx
    cp --no-preserve=mode -R ${ssl_verify_hostname} _build/default/lib/ssl_verify_hostname
  '';

  buildPhase = ''
    HOME=. escript bootstrap
  '';
  installPhase = ''
    mkdir -p $out/bin
    cp rebar3 $out/bin/rebar3
  '';

  meta = {
    homepage = "https://github.com/rebar/rebar3";
    description = "rebar 3.0 is an Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases.";

    longDescription = ''
      rebar is a self-contained Erlang script, so it's easy to distribute or
      even embed directly in a project. Where possible, rebar uses standard
      Erlang/OTP conventions for project structures, thus minimizing the amount
      of build configuration work. rebar also provides dependency management,
      enabling application writers to easily re-use common libraries from a
      variety of locations (hex.pm, git, hg, and so on).
      '';

    platforms = stdenv.lib.platforms.unix;
    maintainers = [ stdenv.lib.maintainers.gleber ];
  };
}