about summary refs log tree commit diff
path: root/pkgs/development/interpreters/erlang/R16B03-1-basho.nix
blob: cbb5f0789fa2a38b00fe112047a4fd0229474c0e (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
{ stdenv, fetchurl, fetchgit, perl, gnum4, ncurses, openssl, autoconf264, gcc, erlang
, gnused, gawk, makeWrapper
, odbcSupport ? false, unixODBC ? null
, wxSupport ? false, mesa ? null, wxGTK ? null, xorg ? null
, enableDebugInfo ? false 
, Carbon ? null, Cocoa ? null }:

assert wxSupport -> mesa != null && wxGTK != null && xorg != null;
assert odbcSupport -> unixODBC != null;

with stdenv.lib;

stdenv.mkDerivation rec {
  name = "erlang-basho-" + version + "${optionalString odbcSupport "-odbc"}";
  version = "16B03-1";

  src = fetchgit {
    url = "https://github.com/basho/otp";
    rev = "cb3a485894e493ad172db2749129e613fe52713a";
    sha256 = "0xn28cxlq0ya1aww9q14rg8jf3x2flwxrz6wdnpb0l2h2dasr655";
  };

  debugInfo = enableDebugInfo;

  buildInputs =
    [ perl gnum4 ncurses openssl makeWrapper autoconf264 gcc 
    ] ++ optional wxSupport [ mesa wxGTK xorg.libX11 ]
      ++ optional odbcSupport [ unixODBC ];

  patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure.in erts/configure.in '';

  preConfigure = ''
    export HOME=$PWD/../
    export LANG=C
    export ERL_TOP=$(pwd)
    sed -e s@/bin/pwd@pwd@g -i otp_build
    sed -e s@"/usr/bin/env escript"@${erlang}/bin/escript@g -i lib/diameter/bin/diameterc 
  '';

  configureFlags= [
    "--with-ssl=${openssl.dev}"
    "--enable-smp-support" 
    "--enable-threads" 
    "--enable-kernel-poll" 
    "--disable-hipe" 
    "${optionalString odbcSupport "--with-odbc=${unixODBC}"}" 
    "${optionalString stdenv.isDarwin "--enable-darwin-64bit"}" 
    "${optionalString stdenv.isLinux "--enable-m64-build"}"
  ];

  buildPhase = ''
    ./otp_build autoconf 
    ./otp_build setup -a --prefix=$out $configureFlags
  '';

  postInstall = let
    manpages = fetchurl {
      url = "http://www.erlang.org/download/otp_doc_man_R${version}.tar.gz";
      sha256 = "17f3k5j17rdsah18gywjngip6cbfgp6nb9di6il4pahmf9yvqc8g";
    };
  in ''
    ln -s $out/lib/erlang/lib/erl_interface*/bin/erl_call $out/bin/erl_call
    tar xf "${manpages}" -C "$out/lib/erlang"
    for i in "$out"/lib/erlang/man/man[0-9]/*.[0-9]; do
      prefix="''${i%/*}"
      ensureDir "$out/share/man/''${prefix##*/}"
      ln -s "$i" "$out/share/man/''${prefix##*/}/''${i##*/}erl"
    done
  '';

  # Some erlang bin/ scripts run sed and awk
  postFixup = ''
    wrapProgram $out/lib/erlang/bin/erl --prefix PATH ":" "${gnused}/bin/"
    wrapProgram $out/lib/erlang/bin/start_erl --prefix PATH ":" "${gnused}/bin/:${gawk}/bin"
  '';

  setupHook = ./setup-hook.sh;

  meta = {
    homepage = "https://github.com/basho/otp/";
    description = "Programming language used for massively scalable soft real-time systems, Basho fork";

    longDescription = ''
      Erlang is a programming language used to build massively scalable
      soft real-time systems with requirements on high availability.
      Some of its uses are in telecoms, banking, e-commerce, computer
      telephony and instant messaging. Erlang's runtime system has
      built-in support for concurrency, distribution and fault
      tolerance.
      This version of Erlang is Basho's version, forked from Ericsson's 
      repository.
    '';

    platforms = ["x86_64-linux" "x86_64-darwin"];
    license = stdenv.lib.licenses.asl20;
    maintainers = with maintainers; [ mdaiter ];
  };
}