mastodon: 4.3.1 -> 4.3.2 (#361487)
[NixPkgs.git] / pkgs / by-name / ej / ejabberd / package.nix
blob106a46d6c1452de8f3f7d5c29d27bbc50cd9d85f
2   stdenv,
3   makeWrapper,
4   lib,
5   libpng,
6   libjpeg,
7   libwebp,
8   erlang,
9   openssl,
10   expat,
11   libyaml,
12   bash,
13   gnused,
14   gnugrep,
15   coreutils,
16   util-linux,
17   procps,
18   gd,
19   autoreconfHook,
20   gawk,
21   rebar3WithPlugins,
22   fetchFromGitHub,
23   fetchgit,
24   fetchHex,
25   beamPackages,
26   nixosTests,
27   withMysql ? false,
28   withPgsql ? false,
29   withSqlite ? false,
30   sqlite,
31   withPam ? false,
32   pam,
33   withZlib ? true,
34   zlib,
35   withSip ? false,
36   withLua ? false,
37   withTools ? false,
38   withRedis ? false,
39   withImagemagick ? false,
40   imagemagick,
43 let
44   ctlpath = lib.makeBinPath [
45     bash
46     gnused
47     gnugrep
48     gawk
49     coreutils
50     util-linux
51     procps
52   ];
54   provider_asn1 = beamPackages.buildRebar3 {
55     name = "provider_asn1";
56     version = "0.3.0";
57     src = fetchHex {
58       pkg = "provider_asn1";
59       version = "0.3.0";
60       sha256 = "sha256-MuelWYZi01rBut8jM6a5alMZizPGZoBE/LveSRu/+wU=";
61     };
62     beamDeps = [ ];
63   };
64   rebar3_hex = beamPackages.buildRebar3 {
65     name = "rebar3_hex";
66     version = "7.0.7";
67     src = fetchHex {
68       pkg = "rebar3_hex";
69       version = "7.0.7";
70       sha256 = "sha256-1S2igSwiInATUgULZ1E6e2dK6YI5gvRffHRfF1Gg5Ok=";
71     };
72     beamDeps = [ ];
73   };
75   allBeamDeps = import ./rebar-deps.nix {
76     inherit fetchHex fetchgit fetchFromGitHub;
77     builder = lib.makeOverridable beamPackages.buildRebar3;
79     overrides = final: prev: {
80       jiffy = prev.jiffy.override { buildPlugins = [ beamPackages.pc ]; };
81       cache_tab = prev.cache_tab.override { buildPlugins = [ beamPackages.pc ]; };
82       mqtree = prev.mqtree.override { buildPlugins = [ beamPackages.pc ]; };
83       stringprep = prev.stringprep.override { buildPlugins = [ beamPackages.pc ]; };
84       p1_acme = prev.p1_acme.override { buildPlugins = [ beamPackages.pc ]; };
85       eimp = prev.eimp.override {
86         buildInputs = [
87           gd
88           libwebp
89           libpng
90           libjpeg
91         ];
92         buildPlugins = [ beamPackages.pc ];
93       };
94       fast_tls = prev.fast_tls.override {
95         buildInputs = [ openssl ];
96         buildPlugins = [ beamPackages.pc ];
97       };
98       fast_xml = prev.fast_xml.override {
99         buildInputs = [ expat ];
100         buildPlugins = [ beamPackages.pc ];
101       };
102       fast_yaml = prev.fast_yaml.override {
103         buildInputs = [ libyaml ];
104         buildPlugins = [ beamPackages.pc ];
105       };
106       xmpp = prev.xmpp.override {
107         buildPlugins = [
108           beamPackages.pc
109           provider_asn1
110         ];
111       };
112       # Optional deps
113       sqlite3 = prev.sqlite3.override {
114         buildInputs = [ sqlite ];
115         buildPlugins = [ beamPackages.pc ];
116       };
117       p1_mysql = prev.p1_mysql.override { buildPlugins = [ beamPackages.pc ]; };
118       epam = prev.epam.override {
119         buildInputs = [ pam ];
120         buildPlugins = [ beamPackages.pc ];
121       };
122       esip = prev.esip.override { buildPlugins = [ beamPackages.pc ]; };
123       ezlib = prev.ezlib.override {
124         buildInputs = [ zlib ];
125         buildPlugins = [ beamPackages.pc ];
126       };
127     };
128   };
130   beamDeps = builtins.removeAttrs allBeamDeps [
131     "sqlite3"
132     "p1_pgsql"
133     "p1_mysql"
134     "luerl"
135     "esip"
136     "eredis"
137     "epam"
138     "ezlib"
139   ];
142 stdenv.mkDerivation (finalAttrs:{
143   pname = "ejabberd";
144   version = "24.10";
146   nativeBuildInputs = [
147     makeWrapper
148     autoreconfHook
149     (rebar3WithPlugins {
150       plugins = [
151         provider_asn1
152         rebar3_hex
153       ];
154     })
155   ];
157   buildInputs =
158     [ erlang ]
159     ++ builtins.attrValues beamDeps
160     ++ lib.optional withMysql allBeamDeps.p1_mysql
161     ++ lib.optional withPgsql allBeamDeps.p1_pgsql
162     ++ lib.optional withSqlite allBeamDeps.sqlite3
163     ++ lib.optional withPam allBeamDeps.epam
164     ++ lib.optional withZlib allBeamDeps.ezlib
165     ++ lib.optional withSip allBeamDeps.esip
166     ++ lib.optional withLua allBeamDeps.luerl
167     ++ lib.optional withRedis allBeamDeps.eredis;
169   src = fetchFromGitHub {
170     owner = "processone";
171     repo = "ejabberd";
172     rev = "refs/tags/${finalAttrs.version}";
173     hash = "sha256-WQCFwhyaTVAX1bQURJkiCupgr3zc5yKrhQBiGyYsWZk=";
174   };
176   passthru.tests = {
177     inherit (nixosTests) ejabberd;
178   };
180   configureFlags = [
181     (lib.enableFeature withMysql "mysql")
182     (lib.enableFeature withPgsql "pgsql")
183     (lib.enableFeature withSqlite "sqlite")
184     (lib.enableFeature withPam "pam")
185     (lib.enableFeature withZlib "zlib")
186     (lib.enableFeature withSip "sip")
187     (lib.enableFeature withLua "lua")
188     (lib.enableFeature withTools "tools")
189     (lib.enableFeature withRedis "redis")
190   ] ++ lib.optional withSqlite "--with-sqlite3=${sqlite.dev}";
192   enableParallelBuilding = true;
194   postPatch = ''
195     patchShebangs .
196     mkdir -p _build/default/lib
197     touch _build/default/lib/.got
198     touch _build/default/lib/.built
199   '';
201   REBAR_IGNORE_DEPS = 1;
203   postInstall = ''
204     sed -i \
205       -e '2iexport PATH=${ctlpath}:$PATH' \
206       -e "s,\(^ *ERL_LIBS=.*\),\1:$ERL_LIBS," \
207       $out/sbin/ejabberdctl
208     ${lib.optionalString withImagemagick ''wrapProgram $out/lib/ejabberd-*/priv/bin/captcha.sh --prefix PATH : "${
209       lib.makeBinPath [ imagemagick ]
210     }"''}
211   '';
213   passthru.updateScript = ./update.sh;
215   meta = {
216     description = "Open-source XMPP application server written in Erlang";
217     mainProgram = "ejabberdctl";
218     license = lib.licenses.gpl2Plus;
219     homepage = "https://www.ejabberd.im";
220     platforms = lib.platforms.linux;
221     maintainers = with lib.maintainers; [
222       sander
223       abbradar
224       chuangzhu
225     ];
226   };