nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix

122 lines
3.3 KiB
Nix
Raw Normal View History

{ stdenv, writeScriptBin, makeWrapper, lib, fetchurl, git, cacert, libpng, libjpeg, libwebp
2018-02-25 20:17:51 +03:00
, erlang, openssl, expat, libyaml, bash, gnused, gnugrep, coreutils, utillinux, procps, gd
, flock
2015-09-11 23:39:21 +03:00
, withMysql ? false
, withPgsql ? false
, withSqlite ? false, sqlite
, withPam ? false, pam
, withZlib ? true, zlib
, withRiak ? false
, withElixir ? false, elixir
, withIconv ? true
, withTools ? false
, withRedis ? false
}:
2015-09-11 23:39:21 +03:00
let
fakegit = writeScriptBin "git" ''
2016-02-11 02:36:09 +03:00
#! ${stdenv.shell} -e
if [ "$1" = "describe" ]; then
[ -r .rev ] && cat .rev || true
fi
2015-09-11 23:39:21 +03:00
'';
2016-04-29 20:56:02 +03:00
ctlpath = lib.makeBinPath [ bash gnused gnugrep coreutils utillinux procps ];
2015-09-11 23:39:21 +03:00
in stdenv.mkDerivation rec {
2020-03-19 07:44:02 +03:00
version = "20.03";
pname = "ejabberd";
2015-09-11 23:39:21 +03:00
src = fetchurl {
2020-03-19 07:44:02 +03:00
url = "https://www.process-one.net/downloads/downloads-action.php?file=/${version}/${pname}-${version}.tgz";
sha256 = "0i013l9cygmgainfid298n6llhs3mblfklry3jw2a6irvhffym0s";
};
2015-09-11 23:39:21 +03:00
nativeBuildInputs = [ fakegit ];
buildInputs = [ erlang openssl expat libyaml gd makeWrapper ]
2015-09-11 23:39:21 +03:00
++ 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";
2016-04-29 20:56:02 +03:00
deps = stdenv.mkDerivation {
2019-08-14 00:52:01 +03:00
pname = "ejabberd-deps";
inherit version;
2016-04-29 20:56:02 +03:00
inherit src;
configureFlags = [ "--enable-all" "--with-sqlite3=${sqlite.dev}" ];
2016-04-29 20:56:02 +03:00
nativeBuildInputs = [ git erlang openssl expat libyaml sqlite pam zlib elixir ];
2016-04-29 20:56:02 +03:00
GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
makeFlags = [ "deps" ];
phases = [ "unpackPhase" "configurePhase" "buildPhase" "installPhase" ];
2016-04-29 20:56:02 +03:00
installPhase = ''
for i in deps/*; do
( cd $i
git reset --hard
git clean -ffdx
2016-04-29 20:56:02 +03:00
git describe --always --tags > .rev
rm -rf .git
)
done
2016-04-30 03:48:47 +03:00
rm deps/.got
2016-04-29 20:56:02 +03:00
cp -r deps $out
'';
outputHashMode = "recursive";
outputHashAlgo = "sha256";
2020-03-19 07:44:02 +03:00
outputHash = "0xwgi9hy6y0m8mwznl6px98kdmkcxg98k62zgqbaqd4paks5zwqa";
2016-04-29 20:56:02 +03:00
};
2015-09-11 23:39:21 +03:00
configureFlags =
2016-02-11 02:36:09 +03:00
[ (lib.enableFeature withMysql "mysql")
2015-09-11 23:39:21 +03:00
(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 withTools "tools")
(lib.enableFeature withRedis "redis")
] ++ lib.optional withSqlite "--with-sqlite3=${sqlite.dev}";
2015-09-11 23:39:21 +03:00
enableParallelBuilding = true;
preBuild = ''
2016-04-29 20:56:02 +03:00
cp -r $deps deps
chmod -R +w deps
2016-07-23 12:23:25 +03:00
patchShebangs deps
'';
2015-09-11 23:39:21 +03:00
postInstall = ''
sed -i \
-e '2iexport PATH=${ctlpath}:$PATH' \
-e 's,\(^ *FLOCK=\).*,\1${flock}/bin/flock,' \
2015-09-11 23:39:21 +03:00
-e 's,\(^ *JOT=\).*,\1,' \
-e 's,\(^ *CONNLOCKDIR=\).*,\1/var/lock/ejabberdctl,' \
$out/sbin/ejabberdctl
wrapProgram $out/lib/eimp-*/priv/bin/eimp --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ libpng libjpeg libwebp ]}"
2013-11-02 04:46:30 +04:00
'';
2018-02-25 20:17:51 +03:00
meta = with stdenv.lib; {
description = "Open-source XMPP application server written in Erlang";
2018-02-25 20:17:51 +03:00
license = licenses.gpl2;
homepage = "https://www.ejabberd.im";
2018-02-25 20:17:51 +03:00
platforms = platforms.linux;
2019-12-02 16:18:20 +03:00
maintainers = with maintainers; [ sander abbradar ajs124 ];
2016-04-29 20:56:02 +03:00
broken = withElixir;
};
}