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