227 lines
5.4 KiB
Nix
227 lines
5.4 KiB
Nix
{
|
|
stdenv,
|
|
makeWrapper,
|
|
lib,
|
|
libpng,
|
|
libjpeg,
|
|
libwebp,
|
|
erlang,
|
|
openssl,
|
|
expat,
|
|
libyaml,
|
|
bash,
|
|
gnused,
|
|
gnugrep,
|
|
coreutils,
|
|
util-linux,
|
|
procps,
|
|
gd,
|
|
autoreconfHook,
|
|
gawk,
|
|
rebar3WithPlugins,
|
|
fetchFromGitHub,
|
|
fetchgit,
|
|
fetchHex,
|
|
beamPackages,
|
|
nixosTests,
|
|
withMysql ? false,
|
|
withPgsql ? false,
|
|
withSqlite ? false,
|
|
sqlite,
|
|
withPam ? false,
|
|
pam,
|
|
withZlib ? true,
|
|
zlib,
|
|
withSip ? false,
|
|
withLua ? false,
|
|
withTools ? false,
|
|
withRedis ? false,
|
|
withImagemagick ? false,
|
|
imagemagick,
|
|
}:
|
|
|
|
let
|
|
ctlpath = lib.makeBinPath [
|
|
bash
|
|
gnused
|
|
gnugrep
|
|
gawk
|
|
coreutils
|
|
util-linux
|
|
procps
|
|
];
|
|
|
|
provider_asn1 = beamPackages.buildRebar3 {
|
|
name = "provider_asn1";
|
|
version = "0.3.0";
|
|
src = fetchHex {
|
|
pkg = "provider_asn1";
|
|
version = "0.3.0";
|
|
sha256 = "sha256-MuelWYZi01rBut8jM6a5alMZizPGZoBE/LveSRu/+wU=";
|
|
};
|
|
beamDeps = [ ];
|
|
};
|
|
rebar3_hex = beamPackages.buildRebar3 {
|
|
name = "rebar3_hex";
|
|
version = "7.0.7";
|
|
src = fetchHex {
|
|
pkg = "rebar3_hex";
|
|
version = "7.0.7";
|
|
sha256 = "sha256-1S2igSwiInATUgULZ1E6e2dK6YI5gvRffHRfF1Gg5Ok=";
|
|
};
|
|
beamDeps = [ ];
|
|
};
|
|
|
|
allBeamDeps = import ./rebar-deps.nix {
|
|
inherit fetchHex fetchgit fetchFromGitHub;
|
|
builder = lib.makeOverridable beamPackages.buildRebar3;
|
|
|
|
overrides = final: prev: {
|
|
jiffy = prev.jiffy.override { buildPlugins = [ beamPackages.pc ]; };
|
|
cache_tab = prev.cache_tab.override { buildPlugins = [ beamPackages.pc ]; };
|
|
mqtree = prev.mqtree.override { buildPlugins = [ beamPackages.pc ]; };
|
|
stringprep = prev.stringprep.override { buildPlugins = [ beamPackages.pc ]; };
|
|
p1_acme = prev.p1_acme.override { buildPlugins = [ beamPackages.pc ]; };
|
|
eimp = prev.eimp.override {
|
|
buildInputs = [
|
|
gd
|
|
libwebp
|
|
libpng
|
|
libjpeg
|
|
];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
fast_tls = prev.fast_tls.override {
|
|
buildInputs = [ openssl ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
fast_xml = prev.fast_xml.override {
|
|
buildInputs = [ expat ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
fast_yaml = prev.fast_yaml.override {
|
|
buildInputs = [ libyaml ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
xmpp = prev.xmpp.override {
|
|
buildPlugins = [
|
|
beamPackages.pc
|
|
provider_asn1
|
|
];
|
|
};
|
|
# Optional deps
|
|
sqlite3 = prev.sqlite3.override {
|
|
buildInputs = [ sqlite ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
p1_mysql = prev.p1_mysql.override { buildPlugins = [ beamPackages.pc ]; };
|
|
epam = prev.epam.override {
|
|
buildInputs = [ pam ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
esip = prev.esip.override { buildPlugins = [ beamPackages.pc ]; };
|
|
ezlib = prev.ezlib.override {
|
|
buildInputs = [ zlib ];
|
|
buildPlugins = [ beamPackages.pc ];
|
|
};
|
|
};
|
|
};
|
|
|
|
beamDeps = builtins.removeAttrs allBeamDeps [
|
|
"sqlite3"
|
|
"p1_pgsql"
|
|
"p1_mysql"
|
|
"luerl"
|
|
"esip"
|
|
"eredis"
|
|
"epam"
|
|
"ezlib"
|
|
];
|
|
|
|
in
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
pname = "ejabberd";
|
|
version = "24.10";
|
|
|
|
nativeBuildInputs = [
|
|
makeWrapper
|
|
autoreconfHook
|
|
(rebar3WithPlugins {
|
|
plugins = [
|
|
provider_asn1
|
|
rebar3_hex
|
|
];
|
|
})
|
|
];
|
|
|
|
buildInputs =
|
|
[ erlang ]
|
|
++ builtins.attrValues beamDeps
|
|
++ lib.optional withMysql allBeamDeps.p1_mysql
|
|
++ lib.optional withPgsql allBeamDeps.p1_pgsql
|
|
++ lib.optional withSqlite allBeamDeps.sqlite3
|
|
++ lib.optional withPam allBeamDeps.epam
|
|
++ lib.optional withZlib allBeamDeps.ezlib
|
|
++ lib.optional withSip allBeamDeps.esip
|
|
++ lib.optional withLua allBeamDeps.luerl
|
|
++ lib.optional withRedis allBeamDeps.eredis;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "processone";
|
|
repo = "ejabberd";
|
|
rev = "refs/tags/${finalAttrs.version}";
|
|
hash = "sha256-WQCFwhyaTVAX1bQURJkiCupgr3zc5yKrhQBiGyYsWZk=";
|
|
};
|
|
|
|
passthru.tests = {
|
|
inherit (nixosTests) ejabberd;
|
|
};
|
|
|
|
configureFlags = [
|
|
(lib.enableFeature withMysql "mysql")
|
|
(lib.enableFeature withPgsql "pgsql")
|
|
(lib.enableFeature withSqlite "sqlite")
|
|
(lib.enableFeature withPam "pam")
|
|
(lib.enableFeature withZlib "zlib")
|
|
(lib.enableFeature withSip "sip")
|
|
(lib.enableFeature withLua "lua")
|
|
(lib.enableFeature withTools "tools")
|
|
(lib.enableFeature withRedis "redis")
|
|
] ++ lib.optional withSqlite "--with-sqlite3=${sqlite.dev}";
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
postPatch = ''
|
|
patchShebangs .
|
|
mkdir -p _build/default/lib
|
|
touch _build/default/lib/.got
|
|
touch _build/default/lib/.built
|
|
'';
|
|
|
|
REBAR_IGNORE_DEPS = 1;
|
|
|
|
postInstall = ''
|
|
sed -i \
|
|
-e '2iexport PATH=${ctlpath}:$PATH' \
|
|
-e "s,\(^ *ERL_LIBS=.*\),\1:$ERL_LIBS," \
|
|
$out/sbin/ejabberdctl
|
|
${lib.optionalString withImagemagick ''wrapProgram $out/lib/ejabberd-*/priv/bin/captcha.sh --prefix PATH : "${
|
|
lib.makeBinPath [ imagemagick ]
|
|
}"''}
|
|
'';
|
|
|
|
passthru.updateScript = ./update.sh;
|
|
|
|
meta = {
|
|
description = "Open-source XMPP application server written in Erlang";
|
|
mainProgram = "ejabberdctl";
|
|
license = lib.licenses.gpl2Plus;
|
|
homepage = "https://www.ejabberd.im";
|
|
platforms = lib.platforms.linux;
|
|
maintainers = with lib.maintainers; [
|
|
sander
|
|
abbradar
|
|
chuangzhu
|
|
];
|
|
};
|
|
})
|