envision-unwrapped: 0-unstable-2024-10-20 -> 1.1.1 (#360652)
[NixPkgs.git] / pkgs / servers / sip / freeswitch / default.nix
blob9d11ad68a4056597d7e1334e1770cf543f0629e4
1 { fetchFromGitHub
2 , stdenv
3 , lib
4 , pkg-config
5 , autoreconfHook
6 , ncurses
7 , gnutls
8 , readline
9 , openssl
10 , perl
11 , sqlite
12 , libjpeg
13 , speex
14 , pcre
15 , libuuid
16 , ldns
17 , libedit
18 , yasm
19 , which
20 , libsndfile
21 , libtiff
22 , libxcrypt
23 , callPackage
24 , SystemConfiguration
25 , modules ? null
26 , nixosTests
29 let
31 availableModules = callPackage ./modules.nix { };
33 # the default list from v1.8.7, except with applications/mod_signalwire also disabled
34 defaultModules = mods: with mods; [
35   applications.commands
36   applications.conference
37   applications.db
38   applications.dptools
39   applications.enum
40   applications.esf
41   applications.expr
42   applications.fifo
43   applications.fsv
44   applications.hash
45   applications.httapi
46   applications.sms
47   applications.spandsp
48   applications.valet_parking
49   applications.voicemail
51   applications.curl
53   codecs.amr
54   codecs.b64
55   codecs.g723_1
56   codecs.g729
57   codecs.h26x
58   codecs.opus
60   databases.mariadb
61   databases.pgsql
63   dialplans.asterisk
64   dialplans.xml
66   endpoints.loopback
67   endpoints.rtc
68   endpoints.skinny
69   endpoints.sofia
70   endpoints.verto
72   event_handlers.cdr_csv
73   event_handlers.cdr_sqlite
74   event_handlers.event_socket
76   formats.local_stream
77   formats.native_file
78   formats.png
79   formats.sndfile
80   formats.tone_stream
82   languages.lua
84   loggers.console
85   loggers.logfile
86   loggers.syslog
88   say.en
90   xml_int.cdr
91   xml_int.rpc
92   xml_int.scgi
93 ] ++ lib.optionals stdenv.hostPlatform.isLinux [ endpoints.gsmopen ];
95 enabledModules = (if modules != null then modules else defaultModules) availableModules;
97 modulesConf = let
98   lst = builtins.map (mod: mod.path) enabledModules;
99   str = lib.strings.concatStringsSep "\n" lst;
100   in builtins.toFile "modules.conf" str;
104 stdenv.mkDerivation rec {
105   pname = "freeswitch";
106   version = "1.10.12";
107   src = fetchFromGitHub {
108     owner = "signalwire";
109     repo = pname;
110     rev = "v${version}";
111     hash = "sha256-uOO+TpKjJkdjEp4nHzxcHtZOXqXzpkIF3dno1AX17d8=";
112   };
114   postPatch = ''
115     patchShebangs     libs/libvpx/build/make/rtcd.pl
116     substituteInPlace libs/libvpx/build/make/configure.sh \
117       --replace AS=\''${AS} AS=yasm
119     # Disable advertisement banners
120     for f in src/include/cc.h libs/esl/src/include/cc.h; do
121       {
122         echo 'const char *cc = "";'
123         echo 'const char *cc_s = "";'
124       } > $f
125     done
126   '';
128   strictDeps = true;
129   nativeBuildInputs = [ pkg-config autoreconfHook perl which yasm ];
130   buildInputs = [
131     openssl ncurses gnutls readline libjpeg
132     sqlite pcre speex ldns libedit
133     libsndfile libtiff
134     libuuid libxcrypt
135   ]
136   ++ lib.unique (lib.concatMap (mod: mod.inputs) enabledModules)
137   ++ lib.optionals stdenv.hostPlatform.isDarwin [ SystemConfiguration ];
139   enableParallelBuilding = true;
141   env.NIX_CFLAGS_COMPILE = "-Wno-error";
143   # Using c++14 because of build error
144   # gsm_at.h:94:32: error: ISO C++17 does not allow dynamic exception specifications
145   CXXFLAGS = "-std=c++14";
147   CFLAGS = "-D_ANSI_SOURCE";
149   hardeningDisable = [ "format" ];
151   preConfigure = ''
152     ./bootstrap.sh
153     cp "${modulesConf}" modules.conf
154   '';
156   postInstall = ''
157     # helper for compiling modules... not generally useful; also pulls in perl dependency
158     rm "$out"/bin/fsxs
159     # include configuration templates
160     cp -r conf $out/share/freeswitch/
161   '';
163   passthru.tests.freeswitch = nixosTests.freeswitch;
165   meta = {
166     description = "Cross-Platform Scalable FREE Multi-Protocol Soft Switch";
167     homepage = "https://freeswitch.org/";
168     license = lib.licenses.mpl11;
169     maintainers = with lib.maintainers; [ mikaelfangel ];
170     platforms = with lib.platforms; unix;
171     broken = stdenv.hostPlatform.isDarwin;
172   };