1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
let
# the default list from v1.8.5, except with applications/mod_signalwire also disabled
defaultModules = mods: with mods; [
applications.commands
applications.conference
applications.db
applications.dptools
applications.enum
applications.esf
applications.expr
applications.fifo
applications.fsv
applications.hash
applications.httapi
applications.sms
applications.spandsp
applications.valet_parking
applications.voicemail
applications.curl
codecs.amr
codecs.b64
codecs.g723_1
codecs.g729
codecs.h26x
codecs.opus
dialplans.asterisk
dialplans.xml
endpoints.loopback
endpoints.rtc
endpoints.skinny
endpoints.sofia
endpoints.verto
event_handlers.cdr_csv
event_handlers.cdr_sqlite
event_handlers.event_socket
formats.local_stream
formats.native_file
formats.png
formats.sndfile
formats.tone_stream
languages.lua
loggers.console
loggers.logfile
loggers.syslog
say.en
xml_int.cdr
xml_int.rpc
xml_int.scgi
];
in
{ fetchurl, stdenv, lib, ncurses, curl, pkgconfig, gnutls, readline
, openssl, perl, sqlite, libjpeg, speex, pcre
, ldns, libedit, yasm, which, lua, libopus, libsndfile
, modules ? defaultModules
, postgresql
, enablePostgres ? true
, SystemConfiguration
}:
let
availableModules = import ./modules.nix { inherit curl lua libopus; };
enabledModules = modules availableModules;
modulesConf = let
lst = builtins.map (mod: mod.path) enabledModules;
str = lib.strings.concatStringsSep "\n" lst;
in builtins.toFile "modules.conf" str;
in
stdenv.mkDerivation rec {
name = "freeswitch-1.6.20";
src = fetchurl {
url = "https://files.freeswitch.org/freeswitch-releases/${name}.tar.bz2";
sha256 = "0hqz68abs5x5vzf1mndcvdi35nrhmnklzdrnrk8dyvzvz67hp2ah";
};
postPatch = ''
patchShebangs libs/libvpx/build/make/rtcd.pl
substituteInPlace libs/libvpx/build/make/configure.sh \
--replace AS=\''${AS} AS=yasm
'';
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
openssl ncurses curl gnutls readline perl libjpeg
sqlite pcre speex ldns libedit yasm which lua libopus
libsndfile
]
++ lib.unique (lib.concatMap (mod: mod.inputs) enabledModules)
++ lib.optionals enablePostgres [ postgresql ]
++ lib.optionals stdenv.isDarwin [ SystemConfiguration ];
NIX_CFLAGS_COMPILE = "-Wno-error";
hardeningDisable = [ "format" ];
configureFlags = lib.optionals enablePostgres [ "--enable-core-pgsql-support" ];
preConfigure = ''
cp "${modulesConf}" modules.conf
'';
meta = {
description = "Cross-Platform Scalable FREE Multi-Protocol Soft Switch";
homepage = https://freeswitch.org/;
license = stdenv.lib.licenses.mpl11;
maintainers = with stdenv.lib.maintainers; [ ];
platforms = with stdenv.lib.platforms; unix;
};
}
|