depot/third_party/nixpkgs/pkgs/by-name/ej/ejabberd/package.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
];
};
})