1{
2 lib,
3 stdenv,
4 curl,
5 hiredis,
6 iptables,
7 jdk,
8 libatasmart,
9 libdbi,
10 libesmtp,
11 libgcrypt,
12 libmemcached,
13 cyrus_sasl,
14 libmodbus,
15 libmicrohttpd,
16 libmnl,
17 libmysqlclient,
18 libnotify,
19 gdk-pixbuf,
20 liboping,
21 libpcap,
22 libpq,
23 libsigrok,
24 libvirt,
25 libxml2,
26 lua,
27 lvm2,
28 lm_sensors,
29 mongoc,
30 mosquitto,
31 net-snmp,
32 openldap,
33 openipmi,
34 perl,
35 protobufc,
36 python3,
37 rabbitmq-c,
38 rdkafka,
39 riemann_c_client,
40 rrdtool,
41 udev,
42 varnish,
43 xen,
44 yajl,
45 # Defaults to `null` for all supported plugins (except xen, which is marked as
46 # insecure), otherwise a list of plugin names for a custom build
47 enabledPlugins ? null,
48 ...
49}:
50
51let
52 # Plugins that have dependencies.
53 # Please help to extend these!
54 plugins = {
55 amqp.buildInputs = [
56 yajl
57 ]
58 ++ lib.optionals stdenv.hostPlatform.isLinux [ rabbitmq-c ];
59 apache.buildInputs = [ curl ];
60 ascent.buildInputs = [
61 curl
62 libxml2
63 ];
64 bind.buildInputs = [
65 curl
66 libxml2
67 ];
68 ceph.buildInputs = [ yajl ];
69 curl.buildInputs = [ curl ];
70 curl_json.buildInputs = [
71 curl
72 yajl
73 ];
74 curl_xml.buildInputs = [
75 curl
76 libxml2
77 ];
78 dbi.buildInputs = [ libdbi ];
79 disk.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
80 udev
81 ];
82 dns.buildInputs = [ libpcap ];
83 ipmi.buildInputs = [ openipmi ];
84 iptables.buildInputs = [
85 libpcap
86 ]
87 ++ lib.optionals stdenv.hostPlatform.isLinux [
88 iptables
89 libmnl
90 ];
91 java.buildInputs = [
92 jdk
93 libgcrypt
94 libxml2
95 ];
96 log_logstash.buildInputs = [ yajl ];
97 lua.buildInputs = [ lua ];
98 memcachec.buildInputs = [
99 libmemcached
100 cyrus_sasl
101 ];
102 modbus.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libmodbus ];
103 mqtt.buildInputs = [ mosquitto ];
104 mysql.buildInputs = lib.optionals (libmysqlclient != null) [
105 libmysqlclient
106 ];
107 netlink.buildInputs = [
108 libpcap
109 ]
110 ++ lib.optionals stdenv.hostPlatform.isLinux [
111 libmnl
112 ];
113 network.buildInputs = [ libgcrypt ];
114 nginx.buildInputs = [ curl ];
115 notify_desktop.buildInputs = [
116 libnotify
117 gdk-pixbuf
118 ];
119 notify_email.buildInputs = [ libesmtp ];
120 openldap.buildInputs = [ openldap ];
121 ovs_events.buildInputs = [ yajl ];
122 ovs_stats.buildInputs = [ yajl ];
123 perl.buildInputs = [ perl ];
124 pinba.buildInputs = [ protobufc ];
125 ping.buildInputs = [ liboping ];
126 postgresql.buildInputs = [ libpq ];
127 python.buildInputs = [ python3 ];
128 redis.buildInputs = [ hiredis ];
129 rrdcached.buildInputs = [
130 rrdtool
131 libxml2
132 ];
133 rrdtool.buildInputs = [
134 rrdtool
135 libxml2
136 ];
137 sensors.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ lm_sensors ];
138 sigrok.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
139 libsigrok
140 udev
141 ];
142 smart.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
143 libatasmart
144 udev
145 ];
146 snmp.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ net-snmp ];
147 snmp_agent.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ net-snmp ];
148 varnish.buildInputs = [
149 curl
150 varnish
151 ];
152 virt.buildInputs = [
153 libvirt
154 libxml2
155 yajl
156 ]
157 ++ lib.optionals stdenv.hostPlatform.isLinux [
158 lvm2
159 udev
160 ];
161 write_http.buildInputs = [
162 curl
163 yajl
164 ];
165 write_kafka.buildInputs = [
166 yajl
167 rdkafka
168 ];
169 write_log.buildInputs = [ yajl ];
170 write_mongodb.buildInputs = [ mongoc ];
171 write_prometheus.buildInputs = [
172 protobufc
173 libmicrohttpd
174 ];
175 write_redis.buildInputs = [ hiredis ];
176 write_riemann.buildInputs = [
177 protobufc
178 riemann_c_client
179 ];
180 xencpu.buildInputs = [ xen ];
181 };
182
183 configureFlags = lib.optionals (enabledPlugins != null) (
184 [ "--disable-all-plugins" ] ++ (map (plugin: "--enable-${plugin}") enabledPlugins)
185 );
186
187 pluginBuildInputs =
188 plugin:
189 lib.optionals (
190 plugins ? ${plugin} && plugins.${plugin} ? buildInputs
191 ) plugins.${plugin}.buildInputs;
192
193 buildInputs =
194 if enabledPlugins == null then
195 builtins.concatMap pluginBuildInputs (
196 builtins.attrNames (builtins.removeAttrs plugins [ "xencpu" ])
197 )
198 else
199 builtins.concatMap pluginBuildInputs enabledPlugins;
200in
201{
202 inherit configureFlags buildInputs;
203}