1################################################################################
2#
3# freeswitch
4#
5################################################################################
6
7FREESWITCH_VERSION = 1.10.11
8FREESWITCH_SOURCE = freeswitch-$(FREESWITCH_VERSION).-release.tar.xz
9FREESWITCH_SITE = https://files.freeswitch.org/freeswitch-releases
10# External modules need headers/libs from staging
11FREESWITCH_INSTALL_STAGING = YES
12FREESWITCH_LICENSE = MPL-1.1, \
13	GPL-3.0+ with font exception (fonts), \
14	Apache-2.0 (apr), \
15	BSD-3-Clause (libsrtp)
16
17FREESWITCH_LICENSE_FILES = \
18	COPYING \
19	libs/apr/LICENSE \
20	libs/srtp/LICENSE
21
22FREESWITCH_CPE_ID_VENDOR = freeswitch
23
24# required dependencies
25FREESWITCH_DEPENDENCIES = \
26	host-pkgconf \
27	jpeg \
28	libcurl \
29	openssl \
30	pcre \
31	spandsp \
32	sofia-sip \
33	speex \
34	sqlite \
35	tiff \
36	util-linux \
37	zlib
38
39# disable display of ClueCon banner in fs_cli
40FREESWITCH_CONF_ENV += \
41	disable_cc=yes
42
43# we neither need host-perl nor host-php
44FREESWITCH_CONF_ENV += \
45	ac_cv_prog_PERL=false \
46	ac_cv_have_perl=no \
47	ac_cv_prog_PHP=false \
48	ac_cv_have_php=no \
49	ac_cv_prog_PHP_CONFIG=false \
50	ac_cv_have_php_config=no
51
52# disable pcap detection, pcap is an optional dependency for unit tests
53FREESWITCH_CONF_ENV += \
54	ac_cv_prog_HAVE_PCAP_CONFIG=false
55
56# copied from freeswitch/configure.ac, line 258+
57FREESWITCH_CONF_ENV += \
58	ac_cv_file__dev_ptmx=yes \
59	ac_cv_va_copy=yes \
60	ac_cv_file__dev_urandom=yes \
61	ac_cv_func_realloc_0_nonnull=yes \
62	ac_cv_func_malloc_0_nonnull=yes \
63	ac_cv_func_setpgrp_void=yes \
64	ac_cv_file__dev_zero=yes \
65	apr_cv_tcp_nodelay_with_cork=yes \
66	ac_cv_file_dbd_apr_dbd_mysql_c=no \
67	ac_cv_sizeof_ssize_t=4 \
68	apr_cv_mutex_recursive=yes \
69	ac_cv_func_pthread_rwlock_init=yes \
70	apr_cv_type_rwlock_t=yes \
71	apr_cv_process_shared_works=yes \
72	apr_cv_mutex_robust_shared=yes
73
74# build breaks with -Werror enabled
75FREESWITCH_CONF_ENV += \
76	ac_cv_gcc_supports_w_no_unused_result=no
77
78FREESWITCH_CONF_OPTS = \
79	--without-erlang \
80	--enable-fhs \
81	--without-python \
82	--disable-system-xmlrpc-c
83
84# Enable optional modules
85FREESWITCH_ENABLED_MODULES += \
86	applications/mod_avmd \
87	applications/mod_blacklist \
88	applications/mod_callcenter \
89	applications/mod_commands \
90	applications/mod_conference \
91	applications/mod_curl \
92	applications/mod_db \
93	applications/mod_directory \
94	applications/mod_dptools \
95	applications/mod_easyroute \
96	applications/mod_esf \
97	applications/mod_esl \
98	applications/mod_expr \
99	applications/mod_fifo \
100	applications/mod_fsk \
101	applications/mod_hash \
102	applications/mod_httapi \
103	applications/mod_lcr \
104	applications/mod_sms \
105	applications/mod_snom \
106	applications/mod_spandsp \
107	applications/mod_spy \
108	applications/mod_valet_parking \
109	applications/mod_voicemail \
110	codecs/mod_g723_1 \
111	dialplans/mod_dialplan_asterisk \
112	dialplans/mod_dialplan_xml \
113	endpoints/mod_loopback \
114	endpoints/mod_rtc \
115	endpoints/mod_rtmp \
116	endpoints/mod_sofia \
117	event_handlers/mod_cdr_csv \
118	event_handlers/mod_cdr_sqlite \
119	event_handlers/mod_event_socket \
120	formats/mod_local_stream \
121	formats/mod_native_file \
122	formats/mod_tone_stream \
123	loggers/mod_console \
124	loggers/mod_logfile \
125	loggers/mod_syslog \
126	say/mod_say_de \
127	say/mod_say_en \
128	say/mod_say_es \
129	say/mod_say_es_ar \
130	say/mod_say_fa \
131	say/mod_say_fr \
132	say/mod_say_he \
133	say/mod_say_hr \
134	say/mod_say_hu \
135	say/mod_say_it \
136	say/mod_say_ja \
137	say/mod_say_nl \
138	say/mod_say_pl \
139	say/mod_say_pt \
140	say/mod_say_ru \
141	say/mod_say_sv \
142	say/mod_say_th \
143	say/mod_say_zh \
144	timers/mod_timerfd \
145	xml_int/mod_xml_cdr \
146	xml_int/mod_xml_rpc \
147	xml_int/mod_xml_scgi
148
149define FREESWITCH_ENABLE_MODULES
150	$(Q)echo $(FREESWITCH_ENABLED_MODULES) \
151		| tr ' ' '\n' \
152		> $(@D)/modules.conf
153endef
154FREESWITCH_PRE_CONFIGURE_HOOKS += FREESWITCH_ENABLE_MODULES
155
156# mod_isac supports a limited set of archs
157# src/mod/codecs/mod_isac/typedefs.h
158ifeq ($(BR2_i386)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_x86_64),y)
159FREESWITCH_LICENSE += , BSD-3-Clause (mod_isac)
160FREESWITCH_LICENSE_FILES += src/mod/codecs/mod_isac/LICENSE
161FREESWITCH_ENABLED_MODULES += codecs/mod_isac
162endif
163
164ifeq ($(BR2_PACKAGE_ALSA_LIB),y)
165FREESWITCH_DEPENDENCIES += alsa-lib
166FREESWITCH_ENABLED_MODULES += endpoints/mod_alsa
167endif
168
169# Use the pass-through g729 module provided by freeswitch instead of
170# the external mod_bcg729 provided by freeswitch-mod-bcg729.
171ifeq ($(BR2_PACKAGE_FREESWITCH_MOD_BCG729),)
172FREESWITCH_ENABLED_MODULES += codecs/mod_g729
173endif
174
175ifeq ($(BR2_PACKAGE_FREETYPE),y)
176FREESWITCH_DEPENDENCIES += freetype
177endif
178
179ifeq ($(BR2_PACKAGE_LIBBROADVOICE),y)
180FREESWITCH_DEPENDENCIES += libbroadvoice
181FREESWITCH_ENABLED_MODULES += codecs/mod_bv
182endif
183
184ifeq ($(BR2_PACKAGE_LIBCODEC2),y)
185FREESWITCH_DEPENDENCIES += libcodec2
186FREESWITCH_ENABLED_MODULES += codecs/mod_codec2
187endif
188
189ifeq ($(BR2_PACKAGE_LIBEDIT),y)
190FREESWITCH_DEPENDENCIES += libedit
191FREESWITCH_CONF_OPTS += --enable-core-libedit-support
192else
193FREESWITCH_CONF_OPTS += --disable-core-libedit-support
194endif
195
196ifeq ($(BR2_PACKAGE_LIBG7221),y)
197FREESWITCH_DEPENDENCIES += libg7221
198endif
199
200ifeq ($(BR2_PACKAGE_LIBILBC),y)
201FREESWITCH_DEPENDENCIES += libilbc
202FREESWITCH_ENABLED_MODULES += codecs/mod_ilbc
203endif
204
205ifeq ($(BR2_PACKAGE_LIBKS),y)
206FREESWITCH_DEPENDENCIES += libks
207FREESWITCH_ENABLED_MODULES += endpoints/mod_verto
208endif
209
210ifeq ($(BR2_PACKAGE_LIBLDNS),y)
211FREESWITCH_DEPENDENCIES += libldns
212FREESWITCH_ENABLED_MODULES += applications/mod_enum
213endif
214
215ifeq ($(BR2_PACKAGE_LIBMEMCACHED),y)
216FREESWITCH_DEPENDENCIES += libmemcached
217FREESWITCH_ENABLED_MODULES += applications/mod_memcache
218endif
219
220ifeq ($(BR2_PACKAGE_LIBOPENH264),y)
221FREESWITCH_LICENSE += , BSD-2-Clause (libopenh264)
222FREESWITCH_LICENSE_FILES += docs/OPENH264_BINARY_LICENSE.txt
223FREESWITCH_DEPENDENCIES += libopenh264
224FREESWITCH_ENABLED_MODULES += codecs/mod_openh264
225endif
226
227ifeq ($(BR2_PACKAGE_LIBPNG),y)
228FREESWITCH_DEPENDENCIES += libpng
229FREESWITCH_ENABLED_MODULES += formats/mod_png
230endif
231
232ifeq ($(BR2_PACKAGE_LIBXCRYPT),y)
233FREESWITCH_DEPENDENCIES += libxcrypt
234endif
235
236ifeq ($(BR2_PACKAGE_LIBYAML),y)
237FREESWITCH_DEPENDENCIES += libyaml
238FREESWITCH_ENABLED_MODULES += languages/mod_yaml
239endif
240
241ifeq ($(BR2_PACKAGE_LUA),y)
242FREESWITCH_DEPENDENCIES += lua
243FREESWITCH_ENABLED_MODULES += languages/mod_lua
244endif
245
246ifeq ($(BR2_PACKAGE_OPENLDAP),y)
247FREESWITCH_DEPENDENCIES += openldap
248FREESWITCH_ENABLED_MODULES += directories/mod_ldap xml_int/mod_xml_ldap
249endif
250
251ifeq ($(BR2_PACKAGE_OPUS),y)
252FREESWITCH_DEPENDENCIES += opus
253FREESWITCH_ENABLED_MODULES += codecs/mod_opus
254endif
255
256ifeq ($(BR2_PACKAGE_PORTAUDIO),y)
257FREESWITCH_DEPENDENCIES += portaudio
258FREESWITCH_ENABLED_MODULES += endpoints/mod_portaudio
259endif
260
261ifeq ($(BR2_PACKAGE_LAME)$(BR2_PACKAGE_LIBSHOUT)$(BR2_PACKAGE_MPG123),yyy)
262FREESWITCH_DEPENDENCIES += lame libshout mpg123
263FREESWITCH_ENABLED_MODULES += formats/mod_shout
264endif
265
266ifeq ($(BR2_PACKAGE_LIBSILK),y)
267FREESWITCH_DEPENDENCIES += libsilk
268FREESWITCH_ENABLED_MODULES += codecs/mod_silk
269endif
270
271ifeq ($(BR2_PACKAGE_LIBSNDFILE),y)
272FREESWITCH_DEPENDENCIES += libsndfile
273FREESWITCH_ENABLED_MODULES += formats/mod_sndfile
274endif
275
276ifeq ($(BR2_PACKAGE_LIBSOUNDTOUCH),y)
277FREESWITCH_DEPENDENCIES += libsoundtouch
278FREESWITCH_ENABLED_MODULES += applications/mod_soundtouch
279endif
280
281ifeq ($(BR2_PACKAGE_OPENCV3),y)
282FREESWITCH_DEPENDENCIES += opencv3
283FREESWITCH_ENABLED_MODULES += applications/mod_cv
284endif
285
286ifeq ($(BR2_PACKAGE_POSTGRESQL),y)
287FREESWITCH_CONF_ENV += \
288	ac_cv_path_PG_CONFIG=$(STAGING_DIR)/usr/bin/pg_config
289FREESWITCH_DEPENDENCIES += postgresql
290FREESWITCH_ENABLED_MODULES += databases/mod_pgsql
291endif
292
293ifeq ($(BR2_PACKAGE_UNIXODBC),y)
294FREESWITCH_DEPENDENCIES += unixodbc
295FREESWITCH_CONF_OPTS += \
296	--enable-core-odbc-support \
297	--with-odbc=$(STAGING_DIR)/usr
298else
299FREESWITCH_CONF_OPTS += --disable-core-odbc-support
300endif
301
302ifeq ($(BR2_PACKAGE_XZ),y)
303FREESWITCH_DEPENDENCIES += xz
304endif
305
306ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_8)$(BR2_PACKAGE_FFMPEG),yy)
307FREESWITCH_LICENSE += , BSD-3-Clause (libvpx, libyuv)
308FREESWITCH_LICENSE_FILES += libs/libvpx/LICENSE libs/libyuv/LICENSE
309FREESWITCH_CONF_OPTS += --enable-libvpx --enable-libyuv
310FREESWITCH_DEPENDENCIES += host-yasm ffmpeg
311FREESWITCH_ENABLED_MODULES += applications/mod_av applications/mod_fsv
312FREESWITCH_MAKE_ENV += CROSS=$(TARGET_CROSS)
313
314# Freeswitch's buildsystem forgets to pass important environment
315# variables and config options when it configures libvpx, so
316# pre-build libvpx manually, so Freeswitch does not attempt to run
317# its flawed commands...
318# Freeswitch only ever uses the static libtrary, that's hard-coded,
319# we can't do anything about that...
320# From package/libvpx/libvpx.mk:
321# - this is not a true autotools package.  It is based on the ffmpeg
322#   build system.
323# - ld is being used with cc options. therefore, pretend ld is cc.
324define FREESWITCH_BUILD_LIBVPX
325	cd $(@D)/libs/libvpx && \
326	$(TARGET_CONFIGURE_OPTS) \
327	$(TARGET_CONFIGURE_ARGS) \
328	LD="$(TARGET_CC)" \
329	CROSS=$(GNU_TARGET_NAME) \
330	./configure \
331		--target=generic-gnu \
332		--enable-pic \
333		--prefix=/usr \
334		--disable-shared --enable-static \
335		--disable-examples \
336		--disable-docs \
337		--disable-unit-tests && \
338	$(TARGET_MAKE_ENV) \
339	$(LIBVPX_MAKE_ENV) \
340	$(MAKE) \
341		-C $(@D)/libs/libvpx \
342		all
343endef
344FREESWITCH_PRE_BUILD_HOOKS += FREESWITCH_BUILD_LIBVPX
345
346else
347FREESWITCH_CONF_OPTS += --disable-libvpx --disable-libyuv
348endif
349
350$(eval $(autotools-package))
351