nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix
2016-01-10 21:28:27 +03:00

280 lines
9.1 KiB
Nix

{ stdenv, writeScriptBin, lib, fetchurl, fetchFromGitHub
, erlang, openssl, expat, libyaml, bash, gnused, gnugrep, coreutils, utillinux, procps
, withMysql ? false
, withPgsql ? false
, withSqlite ? false, sqlite
, withPam ? false, pam
, withZlib ? true, zlib
, withRiak ? false
, withElixir ? false, elixir
, withIconv ? true
, withLager ? true
, withTools ? false
, withRedis ? false
}:
let
ctlpath = lib.makeSearchPath "bin" [ bash gnused gnugrep coreutils utillinux procps ];
fakegit = writeScriptBin "git" ''
#! ${stdenv.shell}
exit 0
'';
# These can be extracted from `rebar.config.script`
# Some dependencies are from another packages. Try commenting them out; then during build
# you'll get necessary revision information.
ejdeps = {
p1_cache_tab = fetchFromGitHub {
owner = "processone";
repo = "cache_tab";
rev = "f7ea12b0ba962a3d2f9a406d2954cf7de4e27230";
sha256 = "043rz66s6vhcbk02qjhn1r8jv8yyy4gk0gsknmk7ya6wq2v1farw";
};
p1_tls = fetchFromGitHub {
owner = "processone";
repo = "tls";
rev = "e56321afd974e9da33da913cd31beebc8e73e75f";
sha256 = "0k8dx8mww2ilr4y5m2llhqh673l0z7r73f0lh7klyf57wfqy7hzk";
};
p1_stringprep = fetchFromGitHub {
owner = "processone";
repo = "stringprep";
rev = "3c640237a3a7831dc39de6a6d329d3a9af25c579";
sha256 = "0mwlkivkfj16bdv80jr8kqa0vcqglxkq90m9qn0m6zp4bjc3jm3n";
};
p1_xml = fetchFromGitHub {
owner = "processone";
repo = "xml";
rev = "1c8b016b0ac7986efb823baf1682a43565449e65";
sha256 = "192jhj0cwwypbiass3rm2449410pqyk3mgrdg7yyvqwmjzzkmh87";
};
esip = fetchFromGitHub {
owner = "processone";
repo = "p1_sip";
rev = "d662d3fe7f6288b444ea321d854de0bd6d40e022";
sha256 = "1mwzkkv01vr9n13h6h3100jrrlgb683ncq9jymnbxqxk6rn7xjd1";
};
p1_stun = fetchFromGitHub {
owner = "processone";
repo = "stun";
rev = "061bdae484268cbf0457ad4797e74b8516df3ad1";
sha256 = "0zaw8yq4sk7x4ybibcq93k9b6rb7fn03i0k8gb2dnlipmbcdd8cf";
};
p1_yaml = fetchFromGitHub {
owner = "processone";
repo = "p1_yaml";
rev = "79f756ba73a235c4d3836ec07b5f7f2b55f49638";
sha256 = "05jjw02ay8v34izwgi5zizqp1mj68ypjilxn59c262xj7c169pzh";
};
p1_utils = fetchFromGitHub {
owner = "processone";
repo = "p1_utils";
rev = "d7800881e6702723ce58b7646b60c9e4cd25d563";
sha256 = "07p47ccrdjymjmn6rn9jlcyg515bs9l0iwfbc75qsk10ddnmbvdi";
};
jiffy = fetchFromGitHub {
owner = "davisp";
repo = "jiffy";
rev = "cfc61a2e952dc3182e0f9b1473467563699992e2";
sha256 = "1c2x71x90jlx4585znxz8fg46q3jxm80nk7v184lf4pqa1snk8kk";
};
oauth2 = fetchFromGitHub {
owner = "prefiks";
repo = "oauth2";
rev = "e6da9912e5d8f658e7e868f41a102d085bdbef59";
sha256 = "0di33bkj8xc7h17z1fs4birp8a88c1ds72jc4xz2qmz8kh7q9m3k";
};
xmlrpc = fetchFromGitHub {
owner = "rds13";
repo = "xmlrpc";
rev = "42e6e96a0fe7106830274feed915125feb1056f3";
sha256 = "10dk480s6z653lr5sap4rcx3zsfmg68hgapvc4jvcyf7vgg12d3s";
};
p1_mysql = fetchFromGitHub {
owner = "processone";
repo = "mysql";
rev = "dfa87da95f8fdb92e270741c2a53f796b682f918";
sha256 = "1nw7n1xvid4yqp57s94drdjf6ffap8zpy8hkrz9yffzkhk9biz5y";
};
p1_pgsql = fetchFromGitHub {
owner = "processone";
repo = "pgsql";
rev = "e72c03c60bfcb56bbb5d259342021d9cb3581dac";
sha256 = "0y89995h7g8bi12qi1m4cdzcswsljbv7y8zb43rjg5ss2bcq7kb6";
};
sqlite3 = fetchFromGitHub {
owner = "alexeyr";
repo = "erlang-sqlite3";
rev = "8350dc603804c503f99c92bfd2eab1dd6885758e";
sha256 = "0d0pbqmi3hsvzjp4vjp7a6bq3pjvkfv0spszh6485x9cmxsbwfpc";
};
p1_pam = fetchFromGitHub {
owner = "processone";
repo = "epam";
rev = "d3ce290b7da75d780a03e86e7a8198a80e9826a6";
sha256 = "0s0czrgjvc1nw7j66x8b9rlajcap0yfnv6zqd4gs76ky6096qpb0";
};
p1_zlib = fetchFromGitHub {
owner = "processone";
repo = "zlib";
rev = "e3d4222b7aae616d7ef2e7e2fa0bbf451516c602";
sha256 = "0z960nwva8x4lw1k91i53kpn2bjbf1v1amslkyp8sx2gc5zf0gbn";
};
riakc = fetchFromGitHub {
owner = "basho";
repo = "riak-erlang-client";
rev = "1.4.2";
sha256 = "128jz83n1990m9c2fzwsif6hyapmq46720nzfyyb4z2j75vn85zz";
};
# dependency of riakc
riak_pb = fetchFromGitHub {
owner = "basho";
repo = "riak_pb";
rev = "1.4.4.0";
sha256 = "054fg9gaxk4n0id0qs6k8i919qvxsvmh76m6fgfbmixyfxh5jp3w";
};
# dependency of riak_pb
protobuffs = fetchFromGitHub {
owner = "basho";
repo = "erlang_protobuffs";
rev = "0.8.1p1";
sha256 = "1x75a26y1gx6pzr829i4sx2mxm5w40kb6hfd5y511him56jcczna";
};
rebar_elixir_plugin = fetchFromGitHub {
owner = "yrashk";
repo = "rebar_elixir_plugin";
rev = "7058379b7c7e017555647f6b9cecfd87cd50f884";
sha256 = "1s5bvbrhal866gbp72lgp0jzphs2cmgmafmka0pylwj30im41c71";
};
elixir = fetchFromGitHub {
owner = "elixir-lang";
repo = "elixir";
rev = "1d9548fd285d243721b7eba71912bde2ffd1f6c3";
sha256 = "1lxn9ly73rm797p6slfx7grsq32nn6bz15qhkbra834rj01fqzh8";
};
p1_iconv = fetchFromGitHub {
owner = "processone";
repo = "eiconv";
rev = "8b7542b1aaf0a851f335e464956956985af6d9a2";
sha256 = "1w3k41fpynqylc2vnirz0fymlidpz0nnym0070f1f1s3pd6g5906";
};
lager = fetchFromGitHub {
owner = "basho";
repo = "lager";
rev = "4d2ec8c701e1fa2d386f92f2b83b23faf8608ac3";
sha256 = "03aav3cid0qpl1n8dn83hk0p70rw05nqvhq1abdh219nrlk9gfmx";
};
# dependency of lager
goldrush = fetchFromGitHub {
owner = "DeadZen";
repo = "goldrush";
rev = "0.1.7";
sha256 = "1104j8v86hdavxf08yjyjkpi5vf95rfvsywdx29c69x3z33i4z3m";
};
p1_logger = fetchFromGitHub {
owner = "processone";
repo = "p1_logger";
rev = "3e19507fd5606a73694917158767ecb3f5704e3f";
sha256 = "0mq86gh8x3bgqcpwdjkdn7m3bj2006gbarnj7cn5dfs21m2h2mdn";
};
meck = fetchFromGitHub {
owner = "eproxus";
repo = "meck";
rev = "fc362e037f424250130bca32d6bf701f2f49dc75";
sha256 = "056yca394f8mbg8vwxxlq47dbjx48ykdrg4lvnbi5gfijl786i3s";
};
eredis = fetchFromGitHub {
owner = "wooga";
repo = "eredis";
rev = "770f828918db710d0c0958c6df63e90a4d341ed7";
sha256 = "0qv8hldn5972328pa1qz2lbblw1p2283js5y98dc8papldkicvmm";
};
};
in stdenv.mkDerivation rec {
version = "15.11";
name = "ejabberd-${version}";
src = fetchurl {
url = "http://www.process-one.net/downloads/ejabberd/${version}/${name}.tgz";
sha256 = "0sll1si9pd4v7yibzr8hp18hfrbxsa5nj9h7qsldvy7r4md4n101";
};
nativeBuildInputs = [ fakegit ];
buildInputs = [ erlang openssl expat libyaml ]
++ lib.optional withSqlite sqlite
++ lib.optional withPam pam
++ lib.optional withZlib zlib
++ lib.optional withElixir elixir
;
# Apparently needed for Elixir
LANG = "en_US.UTF-8";
depsNames =
[ "p1_cache_tab" "p1_tls" "p1_stringprep" "p1_xml" "esip" "p1_stun" "p1_yaml" "p1_utils" "jiffy" "oauth2" "xmlrpc" ]
++ lib.optional withMysql "p1_mysql"
++ lib.optional withPgsql "p1_pgsql"
++ lib.optional withSqlite "sqlite3"
++ lib.optional withPam "p1_pam"
++ lib.optional withZlib "p1_zlib"
++ lib.optionals withRiak [ "riakc" "riak_pb" "protobuffs" ]
++ lib.optionals withElixir [ "rebar_elixir_plugin" "elixir" ]
++ lib.optional withIconv "p1_iconv"
++ lib.optionals withLager [ "lager" "goldrush" ]
++ lib.optional (!withLager) "p1_logger"
++ lib.optional withTools "meck"
++ lib.optional withRedis "eredis"
;
configureFlags =
[ "--enable-nif"
(lib.enableFeature withMysql "mysql")
(lib.enableFeature withPgsql "pgsql")
(lib.enableFeature withSqlite "sqlite")
(lib.enableFeature withPam "pam")
(lib.enableFeature withZlib "zlib")
(lib.enableFeature withRiak "riak")
(lib.enableFeature withElixir "elixir")
(lib.enableFeature withIconv "iconv")
(lib.enableFeature withLager "lager")
(lib.enableFeature withTools "tools")
(lib.enableFeature withRedis "redis")
] ++ lib.optional withSqlite "--with-sqlite3=${sqlite}";
depsPaths = map (x: builtins.getAttr x ejdeps) depsNames;
enableParallelBuilding = true;
preBuild = ''
mkdir deps
depsPathsA=( $depsPaths )
depsNamesA=( $depsNames )
for i in {0..${toString (builtins.length depsNames - 1)}}; do
cp -R ''${depsPathsA[$i]} deps/''${depsNamesA[$i]}
done
chmod -R +w deps
touch deps/.got
patchShebangs .
'';
postInstall = ''
sed -i \
-e '2iexport PATH=${ctlpath}:$PATH' \
-e 's,\(^ *FLOCK=\).*,\1${utillinux}/bin/flock,' \
-e 's,\(^ *JOT=\).*,\1,' \
-e 's,\(^ *CONNLOCKDIR=\).*,\1/var/lock/ejabberdctl,' \
$out/sbin/ejabberdctl
'';
meta = {
description = "Open-source XMPP application server written in Erlang";
license = stdenv.lib.licenses.gpl2;
homepage = http://www.ejabberd.im;
maintainers = [ lib.maintainers.sander ];
};
}