1AC_DEFUN([CS_SETUP_DEFAULTS], [
2	ac_default_prefix=/usr
3	if test ${sysconfdir} = '${prefix}/etc'; then
4		sysconfdir=/etc
5	fi
6	if test ${mandir} = '${prefix}/man'; then
7		mandir=/usr/share/man
8	fi
9])
10
11AC_DEFUN([CS_SETUP_BUILD],[
12
13	AC_PATH_TOOL([UNAME],[uname],[No])
14	AC_PATH_PROGS([DATE],[date],[No])
15	AC_PATH_PROGS([UNAME],[uname],[No])
16	AC_PATH_PROGS([SED],[gsed sed],[No])
17	AC_PATH_PROGS([ID],[id],[No])
18
19	if test ! x"${UNAME}" = xNo; then
20		if test -n $BUILD_OS ; then
21		BUILD_DATE="`date -u "+%Y-%m-%d %H:%M:%S"` UTC"
22		BUILD_OS="`${UNAME} -s`"
23		BUILD_MACHINE="`${UNAME} -m`"
24		BUILD_HOSTNAME="`${UNAME} -n`"
25		BUILD_KERNEL="`${UNAME} -r`"
26		if test "_${SED}" != "_No" && test "_${ID}" != "_No"; then
27			BUILD_USER="`${ID} | ${SED} -n 's/.*(\(.*\)) .*/\1/p'`"
28		elif test ! -z "${USERNAME}"; then
29			BUILD_USER="${USERNAME}"
30		else
31			AC_PATH_PROGS([WHOAMI],[whoami],[No])
32			BUILD_USER="`${WHOAMI}`"
33		fi
34		AC_DEFINE_UNQUOTED([BUILD_DATE],"`echo ${BUILD_DATE}`",[The date of this build])
35		AC_DEFINE_UNQUOTED([BUILD_OS],"`echo ${BUILD_OS}`",[Operating System we are building on])
36		AC_DEFINE_UNQUOTED([BUILD_MACHINE],"`echo ${BUILD_MACHINE}`",[Machine we are building on])
37		AC_DEFINE_UNQUOTED([BUILD_HOSTNAME],"`echo ${BUILD_HOSTNAME}`",[Hostname of our Box])
38		AC_DEFINE_UNQUOTED([BUILD_KERNEL],"`echo ${BUILD_KERNEL}`",[Kernel version of this build])
39		AC_DEFINE_UNQUOTED([BUILD_USER],"`echo ${BUILD_USER}`",[building user])
40		AC_SUBST([BUILD_DATE])
41		AC_SUBST([BUILD_OS])
42		AC_SUBST([BUILD_MACHINE])
43		AC_SUBST([BUILD_HOSTNAME])
44		AC_SUBST([BUILD_KERNEL])
45		AC_SUBST([BUILD_USER])
46		fi
47	fi
48
49	AS_IF([test "${AWK}" == "No"],[
50		echo "Utility 'awk' is missing"
51 		echo "==================================="
52		echo "The awk programm is missing on your platform, this is required though."
53		echo "Please install awk / gnu-awk / mawk / nawk or some other Posix compatible version of AWK"
54		echo "And then rerun the configure process"
55		echo "==================================="
56 		echo "Exitting now."
57		exit
58	])
59	AC_SUBST(SED)
60	AC_SUBST(UNAME)
61	AC_SUBST(DATE)
62])
63
64AC_DEFUN([CS_SETUP_HOST_PLATFORM],[
65	astlibdir=''
66	strip_binaries=no
67	case "${host}" in
68		*-*-darwin*)
69			AC_DEFINE([__Darwin__],1,[Using Darwin / Apple OSX])
70			AC_DEFINE([DARWIN],1,[Using Darwin / Apple OSX])
71			AC_SUBST(__Darwin__)
72			use_poll_compat=yes
73			no_libcap=yes
74			ostype=bsd
75			;;
76		*-*-freebsd*)
77			AC_DEFINE([BSD], 1, [using BSD])
78			use_poll_compat=yes
79			no_libcap=yes
80			ostype=bsd
81			EXTRA_INCLUDE="-I/usr/local/include"
82			EXTRA_LIBS="-L/usr/local/lib"
83			;;
84		*-*-netbsd*)
85			AC_DEFINE([BSD], 1, [using BSD])
86			use_poll_compat=yes
87			no_libcap=yes
88			ostype=bsd
89			EXTRA_INCLUDE="-I/usr/local/include"
90			EXTRA_LIBS="-L/usr/local/lib"
91			;;
92		*-*-openbsd*)
93			AC_DEFINE([BSD], 1, [using BSD])
94			use_poll_compat=yes
95			no_libcap=yes
96			ostype=bsd
97			EXTRA_INCLUDE="-I/usr/local/include"
98			EXTRA_LIBS="-L/usr/local/lib"
99			;;
100		*-*-dragonfly*)
101			AC_DEFINE([BSD], 1, [using BSD])
102			use_poll_compat=yes
103			no_libcap=yes
104			ostype=bsd
105			EXTRA_INCLUDE="-I/usr/local/include"
106			EXTRA_LIBS="-L/usr/local/lib"
107			;;
108		*-aix*)
109			AC_DEFINE([AIX], 1, [using IAX])
110			use_poll_compat=yes
111			broken_types=yes
112			no_libcap=yes
113			ostype=aix
114			;;
115		*-osf4*)
116			AC_DEFINE([OSF1], 1, [using my beloved Digital OS])
117			use_poll_compat=yes
118			tru64_types=yes
119			no_libcap=yes
120			ostype=osf
121			;;
122		*-osf5.1*)
123			AC_DEFINE([OSF1], 1, [using my beloved Digital OS])
124			use_poll_compat=yes
125			no_libcap=yes
126			ostype=osf
127			;;
128		*-tru64*)
129			AC_DEFINE([OSF1], 1, [using my beloved Digital OS])
130			use_poll_compat=yes
131			tru64_types=yes
132			no_libcap=yes
133			ostype=osf
134			;;
135		*-*-linux*)
136			AC_DEFINE([LINUX],[1],[using LINUX])
137			LARGEFILE_FLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
138			CFLAGS_saved="$CFLAGS_saved $LARGEFILE_FLAGS"
139			ostype=linux
140			;;
141		*cygwin*)
142			AC_DEFINE([_WIN32_WINNT],[0x0500],[Heya, it's windows])
143			AC_DEFINE([INET_ADDRSTRLEN],[16],[cygwin detection does not work for that, anybody has an idea ?])
144			AC_DEFINE([INET6_ADDRSTRLEN],[46],[cygwin detection does not work for that, anybody has an idea ?])
145			AC_DEFINE([__CYGWIN__],[1],[make sure __CYGWIN__ is defined ...])
146			ostype=cygwin
147			;;
148		*-*-solaris2*)
149			AC_DEFINE([SOLARIS],[1],[using SOLARIS])
150			use_poll_compat=yes
151			no_libcap=yes
152			ostype=solaris
153			force_generic_timers=yes
154			;;
155		*)
156			AC_MSG_RESULT(["Unsupported/Unknown operating system: ${host}"])
157			use_poll_compat=yes
158			no_libcap=yes
159			ostype=unknown
160			;;
161	esac
162	if test "x$use_poll_compat" = "xyes"; then
163		AC_DEFINE([CS_USE_POLL_COMPAT], 1, [Define to 1 if internal poll should be used.])
164	fi
165	AC_MSG_RESULT([Running on: ${host}])
166	AC_SUBST(ostype)
167])
168
169AC_DEFUN([CS_SETUP_ENVIRONMENT], [
170	AC_LANG_SAVE
171	AC_LANG_C
172	AC_DISABLE_STATIC
173	AS_IF(	[test -z "`${CC} -std=gnu11 -fgnu89-inline -dM -E - </dev/null 2>&1 |grep 'unrecognized command line option'`" && test $? == 0],		[CFLAGS_saved="$CFLAGS_saved -std=gnu11 -fgnu89-inline"],
174		[test -n "`${CC} -std=gnu99 -fgnu89-inline -Wno-ignored-qualifiers -dM -E - </dev/null 2>&1 |grep '__STDC_VERSION__ 1999'`" && test $? == 0],	[CFLAGS_saved="$CFLAGS_saved -std=gnu99 -fgnu89-inline -Wno-ignored-qualifiers"],
175		[test -n "`${CC} -std=gnu99 -fgnu89-inline -Wno-return-type -dM -E - </dev/null 2>&1 |grep '__STDC_VERSION__ 1999'`" && test $? == 0],		[CFLAGS_saved="$CFLAGS_saved -std=gnu99 -fgnu89-inline -Wno-return-type"],
176		[test -n "`${CC} -std=gnu89 -Wno-return-type -dM -E - </dev/null 2>&1 |grep '__STDC__ 1'`" && test $? == 0], 					[CFLAGS_saved="$CFLAGS_saved -std=gnu89 -Wno-return-type";CC_works=0],
177		[CFLAGS_saved="$CFLAGS_saved -Wno-return-type";CC_works=0])
178	AS_IF(	[test "${cross_compiling}" = "yes"],
179	[
180		AC_CHECK_TOOL(CC, gcc, :)
181		AC_CHECK_TOOL(LD, ld, :)
182		AC_CHECK_TOOL(RANLIB, ranlib, :)
183	])
184])
185
186AC_DEFUN([CS_FIND_PROGRAMS], [
187	AC_LANG_SAVE
188	AC_LANG_C
189	dnl AC_PATH_PROGS([SVN],[svn],[echo Missing subversion],[${PATH}:/opt/csw/bin])
190	dnl AC_PATH_PROGS([SVNVERSION],[svnversion], [echo Missing subversion],[${PATH}:/opt/csw/bin])
191	AC_PATH_PROGS([GIT],[git],[No],[${PATH}:/opt/csw/bin])
192	dnl AC_PATH_PROGS([HG],[hg],[echo Missing mercurial],[${PATH}:/opt/csw/bin])
193	AC_PATH_PROGS([SHELL],[bash sh],[echo No compatible shell found])
194	AC_PATH_PROGS([SH],[bash sh],[echo No compatible shell found])
195	AC_PATH_PROGS([M4],[gm4 m4],[echo No m4 found, who will process my macros now ?])
196	AC_PATH_PROGS([GREP],[ggrep grep],[echo Missing grep so skipping but I doubt we will get anywhere])
197	AC_PATH_PROGS([CAT],[cat],[echo cat not found, Doh!])
198	AC_PATH_PROGS([UNAME],[uname],[echo uname not found so no version info will be available])
199	AC_PATH_PROGS([RPMBUILD],[rpmbuild],[echo rpmbuild not found so you cannot build rpm packages (no problem)])
200	AC_PATH_PROGS([OBJCOPY],[objcopy],[echo objcopy not found so we can not safe debug information (no problem)])
201	AC_PATH_PROGS([GDB],[gdb],[echo gdb not found so we can not generate backtraces (no problem)])
202	AC_PATH_PROGS([HEAD],[head],[No])
203	AC_PATH_PROGS([CUT],[cut],[No])
204	AC_PATH_PROGS([TR],[tr],[No])
205	AC_PATH_PROGS([AWK],[gawk awk],[No])
206	AC_PATH_PROGS([PKGCONFIG],[pkg-config],[No])
207	AC_PATH_PROGS([OPENSSL], [openssl], [No])
208	AC_PROG_CC([clang llvm-gcc gcc])
209	AC_PROG_CC_C_O
210	AC_PROG_GCC_TRADITIONAL
211	AC_PROG_CPP
212	AC_PROG_INSTALL
213	AC_PROG_AWK
214	AC_PROG_LN_S
215	AC_PROG_MAKE_SET
216	AC_C_CONST
217	AC_C_INLINE
218	AC_PROG_LIBTOOL
219	AC_SUBST([SVN])
220	AC_SUBST([SVNVERSION])
221	AC_SUBST([GIT])
222	AC_SUBST([HG])
223	AC_SUBST([GREP])
224	AC_SUBST([RPMBUILD])
225	AC_SUBST([OBJCOPY])
226	AC_SUBST([GDB])
227	AC_SUBST([HEAD])
228	AC_SUBST([CUT])
229	AC_SUBST([TR])
230	AC_SUBST([AWK])
231	AM_CONDITIONAL([ENABLE_RPMBUILD],[test "x${RPMBUILD}" != "xNo"])
232])
233
234AC_DEFUN([CS_FIND_LIBRARIES], [
235	LIBS_save=$LIBS
236	LIBS="$LIBS $EXTRA_LIBS"
237	AC_CHECK_LIB([c], [main])
238	AC_CHECK_LIB([pthread], [main])
239	AC_CHECK_LIB([socket], [main])
240dnl	AC_CHECK_PROG([CURLCFG],[curl-config],[:])
241dnl	AS_IF([test -n "$CURLCFG"],[
242dnl		AC_SUBST([LIBCURL_CFLAGS],[$(curl-config --cflags)])
243dnl		AC_SUBST([LIBCURL_LIBS],[$(curl-config --libs)])
244dnl		AC_CHECK_LIB([curl], [curl_global_init])
245dnl	])
246	AC_CHECK_HEADERS([sys/ioctl.h])
247	AC_CHECK_HEADERS([sys/socket.h])
248	AC_CHECK_HEADERS([netinet/in.h])
249	AC_CHECK_HEADERS([pthread.h])
250	AC_CHECK_HEADERS([xlocale.h])
251	AM_ICONV
252	AC_CHECK_LIB([iconv], [main])
253	AC_CHECK_FUNCS([gethostbyname inet_ntoa mkdir])
254	AC_HEADER_STDC
255	AC_HEADER_STDBOOL
256	AC_CHECK_HEADERS([netinet/in.h fcntl.h signal.h sys/signal.h stdio.h errno.h ctype.h assert.h sys/sysinfo.h])
257	AC_STRUCT_TM
258	AC_STRUCT_TIMEZONE
259	CS_WITH_LIBSSL
260])
261
262AC_DEFUN([CS_DISABLE_TLS], [
263	AC_ARG_ENABLE(tls,
264		[AC_HELP_STRING([--disable-tls], [disable Transport Layer Security (EXPERIMENTAL)])],
265		[ac_cv_tls=$enableval],
266		[ac_cv_tls=yes]
267	)
268	AS_IF([test "${ac_cv_tls}" == "yes"], [
269		AS_IF([test "${ac_cv_tls}" == "yes"], [
270			AC_DEFINE(CS_TLS, 1, [Transport Layer Security (EXPERIMENTAL) enabled])
271		])
272	])
273dnl	AC_MSG_RESULT([--enable-tls: ${ac_cv_tls}])
274])
275
276AC_DEFUN([CS_WITH_LIBSSL], [
277	CS_DISABLE_TLS
278	if test "x${ac_cv_tls}" = "xyes"; then
279		dnl AC_CHECK_LIB([crypto], [EVP_EncryptInit], [], AC_MSG_FAILURE([can't find openssl crypto lib]))
280		dnl AC_CHECK_LIB([ssl], [SSL_CTX_new], [], AC_MSG_FAILURE([can't find openssl ssl lib]))
281		AC_CHECK_LIB([crypto], [EVP_EncryptInit], [], AC_MSG_NOTICE([can't find openssl crypto lib]))
282		AC_CHECK_LIB([ssl], [SSL_CTX_new], [], AC_MSG_NOTICE([can't find openssl ssl lib]))
283	fi
284])
285
286AC_DEFUN([CS_CHECK_CROSSCOMPILE],[
287	if test "$host" = "$build"; then
288		HOST_CC="${CC}"
289	else
290		HOST_CC="${HOST_CC-gcc}"
291	fi
292	AC_SUBST(HOST_CC)
293])
294
295AC_DEFUN([CS_WITH_CCACHE],[
296	AC_ARG_WITH(ccache,
297		AC_HELP_STRING([--with-ccache[=PATH]], [use ccache during compile]), [ac_cv_use_ccache="${withval}"], [ac_cv_use_ccache="yes"])
298	AS_IF([test "_${ac_cv_use_ccache}" != "_no"], [
299		AC_PATH_PROGS(CCACHE,ccache,[No],${withval}:${PATH})
300		if test "${CCACHE}" != "No"; then
301			CC="$CCACHE $CC"
302			CPP="$CCACHE $CPP"
303			AC_SUBST([CC])
304			AC_SUBST([CPP])
305			AC_SUBST([CCACHE])
306			dnl AC_MSG_NOTICE([using ccache: ${ac_cv_use_ccache}])
307		else
308			CCACHE=""
309		fi
310	])
311])
312
313AC_DEFUN([CS_SETUP_LIBTOOL], [
314	CONFIGURE_PART([Checking Libtool:])
315	LT_PREREQ([2.0.0])
316	LT_INIT([dlopen])
317	LTDL_INIT([])
318	if test "x$with_included_ltdl" != "xyes"; then
319		save_CFLAGS="${CFLAGS}"
320		save_CPPFLAGS="${CPPFLAGS}"
321		save_LDFLAGS="${LDFLAGS}"
322		CFLAGS="${CFLAGS} ${LTDLINCL}"
323		LDFLAGS="${LDFLAGS} ${LIBLTDL}"
324		AC_CHECK_LIB([ltdl], [lt_dladvise_init],[],[AC_MSG_ERROR([installed libltdl is too old])])
325		LDFLAGS="${save_LDFLAGS}"
326		CFLAGS="${save_CFLAGS}"
327	fi
328	AC_MSG_RESULT([libtool: setup done])
329	AC_SUBST([LIBTOOL_DEPS])
330])
331
332AC_DEFUN([CS_CHECK_TYPES], [
333	AC_MSG_CHECKING([sizeof(long long) == sizeof(long)])
334	AC_RUN_IFELSE([AC_LANG_SOURCE([
335		int main(void)
336		{
337			if (sizeof(long long) == sizeof(long))
338				return 0;
339			else
340				return -1;
341		}
342	])], [
343		AC_DEFINE(ULONG, [unsigned long], [Define ULONG as long unsigned int])
344		AC_DEFINE(UI64FMT, ["%lu"], [Define UI64FMT as "%lu"])
345		AC_MSG_RESULT([yes])
346	],  [
347		AC_DEFINE(ULONG, [unsigned long long], [Define ULONG as long long unsigned int])
348		AC_DEFINE(UI64FMT, ["%llu"], [Define UI64FMT as "%llu"])
349		AC_MSG_RESULT([no])
350	],  [
351		dnl when cross compilation asume long long != long
352		AC_DEFINE(ULONG, [unsigned long long], [Define ULONG as long long unsigned int])
353		AC_DEFINE(UI64FMT, ["%llu"], [Define UI64FMT as "%llu"])
354		AC_MSG_RESULT([no])
355	])
356	# Big Endian / Little Endian
357	AC_CHECK_HEADERS([endian.h sys/endian.h], [break])
358	AC_C_BIGENDIAN(AC_DEFINE([SCCP_BIG_ENDIAN],1,[Big Endian]),AC_DEFINE([SCCP_LITTLE_ENDIAN],1,[Little Endian]))
359])
360
361dnl Conditional Makefile.am Macros
362AC_DEFUN([AST_SET_PBX_AMCONDITIONALS],[
363	AM_CONDITIONAL([BUILD_AST], test "$PBX_TYPE" == "Asterisk")
364	PBX_COND_SUBDIR=
365	PBX_COND_LIBADD=
366	PBXVER_COND_SUBDIR=
367	PBXVER_COND_LIBADD=
368	PBXVER_COND_ANNOUNCE_SUBDIR=
369	PBXVER_COND_ANNOUNCE_LIBADD=
370	if test "$PBX_TYPE" == "Asterisk"; then
371		PBX_COND_SUBDIR=pbx_impl/ast
372		PBX_COND_LIBADD=pbx_impl/ast/libast.la
373		PBXVER_COND_SUBDIR=pbx_impl/ast${ASTERISK_VER_GROUP}/
374		PBXVER_COND_LIBADD=pbx_impl/ast${ASTERISK_VER_GROUP}/libast${ASTERISK_VER_GROUP}.la
375		if test ${ASTERISK_VER_GROUP} -gt 111;then
376			PBXVER_COND_ANNOUNCE_SUBDIR=pbx_impl/ast_announce
377			PBXVER_COND_ANNOUNCE_LIBADD=pbx_impl/ast_announce/libast_announce.la
378		fi
379	fi
380	AC_SUBST([PBX_COND_SUBDIR])
381	AC_SUBST([PBX_COND_LIBADD])
382	AC_SUBST([PBXVER_COND_SUBDIR])
383	AC_SUBST([PBXVER_COND_LIBADD])
384	AC_SUBST([PBXVER_COND_ANNOUNCE_SUBDIR])
385	AC_SUBST([PBXVER_COND_ANNOUNCE_LIBADD])
386	AM_CONDITIONAL([ASTERISK_VER_GROUP_106], [test x${ASTTERISK_VER_GROUP} = x106])
387	AM_CONDITIONAL([ASTERISK_VER_GROUP_108], [test x${ASTTERISK_VER_GROUP} = x108])
388	AM_CONDITIONAL([ASTERISK_VER_GROUP_110], [test x${ASTTERISK_VER_GROUP} = x110])
389	AM_CONDITIONAL([ASTERISK_VER_GROUP_111], [test x${ASTTERISK_VER_GROUP} = x111])
390	AM_CONDITIONAL([ASTERISK_VER_GROUP_112], [test x${ASTTERISK_VER_GROUP} = x112])
391	AM_CONDITIONAL([ASTERISK_VER_GROUP_113], [test x${ASTTERISK_VER_GROUP} = x113])
392	AM_CONDITIONAL([ASTERISK_VER_GROUP_114], [test x${ASTTERISK_VER_GROUP} = x114])
393	AM_CONDITIONAL([ASTERISK_VER_GROUP_115], [test x${ASTTERISK_VER_GROUP} = x115])
394	AM_CONDITIONAL([ASTERISK_VER_GROUP_116], [test x${ASTTERISK_VER_GROUP} = x116])
395	AM_CONDITIONAL([ASTERISK_VER_GROUP_117], [test x${ASTTERISK_VER_GROUP} = x117])
396	AM_CONDITIONAL([ASTERISK_VER_GROUP_118], [test x${ASTTERISK_VER_GROUP} = x118])
397	AM_COND_IF([ASTERISK_VER_GROUP_106],[AC_CONFIG_FILES([src/pbx_impl/ast106/Makefile])])
398	AM_COND_IF([ASTERISK_VER_GROUP_108],[AC_CONFIG_FILES([src/pbx_impl/ast108/Makefile])])
399	AM_COND_IF([ASTERISK_VER_GROUP_110],[AC_CONFIG_FILES([src/pbx_impl/ast110/Makefile])])
400	AM_COND_IF([ASTERISK_VER_GROUP_111],[AC_CONFIG_FILES([src/pbx_impl/ast111/Makefile])])
401	AM_COND_IF([ASTERISK_VER_GROUP_112],[AC_CONFIG_FILES([src/pbx_impl/ast112/Makefile])])
402	AM_COND_IF([ASTERISK_VER_GROUP_113],[AC_CONFIG_FILES([src/pbx_impl/ast113/Makefile])])
403	AM_COND_IF([ASTERISK_VER_GROUP_114],[AC_CONFIG_FILES([src/pbx_impl/ast114/Makefile])])
404	AM_COND_IF([ASTERISK_VER_GROUP_115],[AC_CONFIG_FILES([src/pbx_impl/ast115/Makefile])])
405	AM_COND_IF([ASTERISK_VER_GROUP_116],[AC_CONFIG_FILES([src/pbx_impl/ast116/Makefile])])
406	AM_COND_IF([ASTERISK_VER_GROUP_117],[AC_CONFIG_FILES([src/pbx_impl/ast117/Makefile])])
407	AM_COND_IF([ASTERISK_VER_GROUP_118],[AC_CONFIG_FILES([src/pbx_impl/ast118/Makefile])])
408])
409
410AC_DEFUN([CS_WITH_PBX], [
411	AC_ARG_WITH([asterisk],
412		[AC_HELP_STRING([--with-asterisk=PATH],	[Location of the Asterisk installation])],
413		[NEW_PBX_PATH="${withval}"]
414	)
415
416	if test "x${NEW_PBX_PATH}" != "xyes" && test "x${NEW_PBX_PATH}" != "x"; then
417		PBX_PATH="${NEW_PBX_PATH}";
418	else
419		PBX_PATH="/usr /usr/local /opt"
420		if test -d /usr/pkg ; then
421			PBX_PATH="$PBX_PATH /usr/pkg"
422		fi
423		if test -d /usr/sfw ; then
424			PBX_PATH="$PBX_PATH /usr/sfw"
425		fi
426	fi
427
428	AC_SUBST([PBX_PATH])
429	PBX_MANDATORY="yes"
430
431	CS_CHECK_PBX
432
433	if test "${PBX_TYPE}" = "Asterisk"; then
434		AC_DEFINE_UNQUOTED([PBX_TYPE],ASTERISK,[PBX Type])
435		AC_DEFINE([HAVE_ASTERISK], 1, [Uses Asterisk as PBX])
436		AST_GET_VERSION
437		AST_CHECK_HEADERS
438	elif test "${PBX_TYPE}" = "Callweaver"; then
439		AC_DEFINE_UNQUOTED([PBX_TYPE],CALLWEAVER,[PBX Type])
440		AC_DEFINE([HAVE_CALLWEAVER], 1, [Uses Callweaver as PBX])
441		echo "We are working on a Callweaver version"
442	else
443		echo ""
444		echo ""
445		echo "PBX type could not be determined"
446		echo "================================"
447		echo "Either install asterisk and asterisk-devel packages using your package manager."
448		echo "If you compiled asterisk manually, make sure you also run `make install-headers` so chan-sccp can find them."
449		echo "Or specify the location where asterisk can be found, using ./configure --with-asterisk=[path]"
450		exit
451	fi
452	AC_SUBST([PBX_TYPE])
453])
454
455AC_DEFUN([CS_SETUP_DOXYGEN], [
456	CONFIGURE_PART([Checking for Doxygen:])
457	AC_ARG_ENABLE([devdoc],
458		[AC_HELP_STRING([--enable-devdoc], [Generate developer documentation])],
459		[ac_cv_use_devdoc=$enableval],
460		[ac_cv_use_devdoc=no]
461	)
462	AS_IF([test "_${ac_cv_use_devdoc}" == "_yes"], [DX_ENV_APPEND([INPUT],[. src src/pbx_impl src/pbx_impl/ast src/pbx_impl/ast116 src/pbx_impl/ast117 src/pbx_impl/ast118 src/pbx_impl/ast_announce])])
463	DX_HTML_FEATURE(ON)
464	DX_CHM_FEATURE(OFF)
465	DX_CHI_FEATURE(OFF)
466	DX_MAN_FEATURE(OFF)
467	DX_RTF_FEATURE(OFF)
468	DX_XML_FEATURE(OFF)
469	DX_PDF_FEATURE(OFF)
470	DX_PS_FEATURE(OFF)
471	DX_INIT_DOXYGEN($PACKAGE, doc/doxygen.cfg)
472])
473
474AC_DEFUN([CS_ENABLE_OPTIMIZATION], [
475	AC_ARG_ENABLE(optimization, [
476		AC_HELP_STRING([--enable-optimization],[do not detecti or tune flags for cpu version])],
477		[enable_optimization=$enableval],
478		[enable_optimization=no; if test "${REPOS_TYPE}" = "TGZ"; then enable_optimization=yes; fi]
479	)
480	AC_ARG_ENABLE(debug,
481		[AC_HELP_STRING([--disable-debug],[disable debug information])],
482		[enable_debug=$enableval],
483		[enable_debug=yes;if test "${REPOS_TYPE}" = "TGZ"; then enable_debug=no; fi]
484	)
485
486	LIBBFD=""
487	if test -n "${CPPFLAGS_saved}"; then
488	 	CPPFLAGS_saved="${CPPFLAGS_saved} -U_FORTIFY_SOURCE"
489 	else
490 		CPPFLAGS_saved="-U_FORTIFY_SOURCE"
491 	fi
492 	LDFLAGS_saved="${LDFLAGS}"
493
494	AS_IF([test "X$enable_optimization" == "Xyes"], [
495		strip_binaries="yes"
496		AS_IF([test -z "`echo \"${CFLAGS_saved}\" | grep -e '\-O[0-9]'`"], [
497			CFLAGS_saved="${CFLAGS_saved} -O3 "
498		])
499	 	CPPFLAGS_saved="${CPPFLAGS_saved} -D_FORTIFY_SOURCE=2"
500		GDB_FLAGS=""
501		AS_IF([test "x${GCC}" = "xyes"], [
502			AC_LANG_SAVE
503			AC_LANG_C
504			AX_APPEND_COMPILE_FLAGS([ dnl
505				-fvisibility=hidden dnl
506				-fvisibility-inlines-hidden dnl
507				-fexcess-precision=fast dnl
508				-fvisibility=hidden dnl
509				-fwrapv dnl
510				-fno-delete-null-pointer-checks dnl
511				-xldscope=hidden dnl
512				-Wl,--as-needed dnl
513				-fPIE dnl
514				-fPIE -pie dnl
515				-Wno-format-truncation dnl
516			], SUPPORTED_CFLAGS)
517		])
518		AC_SUBST([strip_binaries])
519	], [
520	 	CFLAGS_saved="`echo ${CFLAGS_saved} |sed -e 's/\-O[0-9]\ \?//g' -e 's/[^|\ ]\-g[$|\ ]//g'`"
521		optimize_flag="-O0"
522		case "${CC}" in
523			*gcc*)
524				AX_CHECK_COMPILE_FLAG(-Og, [
525					optimize_flag="-Og"
526				])
527			;;
528		esac
529		CFLAGS_saved="${CFLAGS_saved} ${optimize_flag} "
530	])
531
532	AS_IF([test "X${enable_debug}" == "Xyes"], [
533		AC_DEFINE([DEBUG],[1],[Extra debugging.])
534		DEBUG=1
535		enable_do_crash="yes"
536		enable_debug_mutex="yes"
537
538	 	dnl Remove leading/ending spaces
539		CFLAGS_saved="${CFLAGS_saved} -Wall"
540		GDB_FLAGS="-g3 -ggdb3"
541
542		AS_IF([test "x${GCC}" = "xyes"], [
543			AC_LANG_SAVE
544			AC_LANG_C
545			AX_APPEND_COMPILE_FLAGS([ dnl
546				-Wall dnl
547				-Wno-long-long dnl
548				-Wno-missing-field-initializers dnl
549				-Wmissing-declarations dnl
550				-Wnested-externs dnl
551				-Wnonnull dnl
552				-Wnonnull-compare dnl
553				-Wnull-dereference dnl
554				-Wcast-align dnl
555				-Wold-style-definition dnl
556				-Wformat-security dnl
557				-Wstrict-aliasing dnl
558				-Wmissing-format-attribute dnl
559				-Wmissing-noreturn dnl
560				-Wmissing-include-dirs dnl
561				-Winit-self dnl
562				-Warray-bounds dnl
563				-Wimplicit-function-declaration dnl
564				-Wreturn-type dnl
565				-Wsign-compare dnl
566				-Wstrict-prototypes dnl
567				-Wmissing-prototypes dnl
568				-Wempty-body dnl
569				-Wmissing-parameter-type dnl
570				-Woverride-init dnl
571				-Wtype-limits dnl
572				-Wuninitialized dnl
573				-Wshift-negative-value dnl
574				-Wendif-labels dnl
575				-Wformat-security dnl
576				-Waddress dnl
577				-Wno-pointer-sign dnl
578				-Wold-style-definition,  dnl
579				-Wstrict-prototypes dnl
580				-Werror=implicit dnl
581				-Wunused dnl
582				-Wunused-const-variable dnl
583				-Wunused-function dnl
584				-Wunused-label dnl
585				-Wunused-local-typedefs dnl
586				-Wpragmas dnl
587				-Wno-overlength-strings dnl
588				-Wheader-guard dnl
589				-Wattributes dnl
590				-Wdiv-by-zero dnl
591				-Wmisleading-indentation dnl
592				-Wswitch dnl
593				-fstack-protector-all dnl
594				-fvisibility=hidden dnl
595				-fvisibility-inlines-hidden dnl
596				-fexcess-precision=fast dnl
597				-fvisibility=hidden dnl
598				-fwrapv dnl
599				-fno-delete-null-pointer-checks dnl
600				-xldscope=hidden dnl
601				-Wl,--as-needed dnl
602				-fPIE dnl
603				-fPIE -pie dnl
604				-Wno-format-truncation dnl
605			], SUPPORTED_CFLAGS)
606		])
607		AS_IF([test "X${USE_MAINTAINER_MODE}" = "Xyes"], [
608			AC_LANG_SAVE
609			AC_LANG_C
610			AX_APPEND_COMPILE_FLAGS([ dnl
611				-Wsuggest-attribute=const dnl
612				-Wsuggest-attribute=format dnl
613				-Wsuggest-attribute=noreturn dnl
614				-Wc++-compat dnl
615				-Wenum-compare dnl
616				-Wformat-truncation dnl
617				dnl -Wshorten-64-to-32 dnl
618				dnl -Wsuggest-attribute=pure dnl
619				dnl // should be added and fixed
620				dnl -Wswitch-enum dnl
621				dnl
622				dnl // somewhat pedantic
623				dnl -Wunused-parameter dnl
624				dnl -Wignored-qualifiers dnl
625				dnl -Wextra dnl
626				dnl -Wunused-macros dnl
627				dnl -Wunused-parameter dnl
628				dnl -Wvla 		dnl Variable Length Arrays not actually allowed in C90
629				dnl -Wjump-misses-init	dnl Goto skipping variable declarations
630				dnl
631				dnl // do not add
632				dnl // has negative side effect on certain platforms (http://xen.1045712.n5.nabble.com/xen-4-0-testing-test-7147-regressions-FAIL-td4415622.html) dnl
633				dnl -Wno-unused-but-set-variable
634			], SUPPORTED_CFLAGS)
635			AC_DEFINE(MAINTAINER_MODE, 1, [Define MAINTAINER_MODE])
636		])
637
638		AS_IF([test "x${AST_C_COMPILER_FAMILY}" = "xgcc"], [
639			AC_LANG_SAVE
640			AC_LANG_C
641			AX_APPEND_COMPILE_FLAGS([ dnl
642				-Wshadow dnl
643				-fno-strict-overflow dnl
644				-Wshorten-64-to-32 dnl
645				-Wno-pointer-arith dnl
646				dnl -Wpointer-arith dnl
647			], SUPPORTED_CFLAGS)
648		])
649		AS_IF([test "x${AST_C_COMPILER_FAMILY}" = "xclang"], [
650			AC_LANG_SAVE
651			AC_LANG_C
652			AX_APPEND_COMPILE_FLAGS([ dnl
653				-Warray-bounds dnl
654				-Wparentheses-equality dnl
655				-Wunevaluated-expression dnl
656			], SUPPORTED_CFLAGS)
657		])
658		AS_IF([test ! -z "`echo ${CC} | grep ccc-analyzer`"], [
659			AC_LANG_SAVE
660			AC_LANG_C
661			AX_APPEND_COMPILE_FLAGS([ dnl
662				 -Wno-pointer-bool-conversion dnl Compensate for including NONENULL() attribute, null pointer checks should however remain for other compiler types
663			], SUPPORTED_CFLAGS)
664			AC_DEFINE([CCC_ANALYZER], 1, [Running static analysis using clang scan-build])
665		])
666
667		AX_APPEND_LINK_FLAGS([-Wl,--gc-sections], SECTION_LDFLAGS)
668		AS_IF([test -z "${SECTION_LDFLAGS}"], [
669			ac_cv_section_relocation=no
670		], [
671			AX_APPEND_COMPILE_FLAGS([ dnl
672				-ffunction-sections dnl
673				-fdata-sections dnl
674			], SECTION_CFLAGS)
675		])
676
677		AC_CHECK_HEADER([execinfo.h],
678			[
679				AC_DEFINE(HAVE_EXECINFO_H,1,[Found 'execinfo.h'])
680				AC_CHECK_LIB([execinfo], [backtrace_symbols], [LIBEXECINFO="-lexecinfo"], [LIBEXECINFO=""])
681				AC_CHECK_HEADER([dlfcn.h], [AC_DEFINE(HAVE_DLADDR_H, 1, [Found 'dlfcn.h'])])
682				AC_SEARCH_LIBS([bfd_openr], [bfd], [
683					AC_CHECK_HEADER([bfd.h], [AC_DEFINE(HAVE_BFD_H, 1, [Found 'bfd.h'])])
684					LIBBFD="-lbfd"
685				])
686			]
687		)
688	], [
689		AC_DEFINE([DEBUG],[0],[No Extra debugging.])
690		DEBUG=0
691		enable_do_crash="no"
692		enable_debug_mutex="no"
693		CFLAGS_saved="${CFLAGS_saved}"
694		AS_IF([test "x${GCC}" = "xyes"], [
695			AC_LANG_SAVE
696			AC_LANG_C
697			AX_APPEND_COMPILE_FLAGS([ dnl
698				-fstack-protector dnl
699				-Wno-long-long dnl
700				-Wno-ignored-qualifiers dnl
701				-Wno-missing-field-initializers dnl
702				dnl // do not add
703				dnl // has negative side effect on certain platforms (http://xen.1045712.n5.nabble.com/xen-4-0-testing-test-7147-regressions-FAIL-td4415622.html) dnl
704				dnl -Wno-unused-but-set-variable
705			], SUPPORTED_CFLAGS)
706		])
707	])
708	AC_LANG_SAVE
709	AC_LANG_C
710	CFLAGS_saved="`echo ${CFLAGS_saved}|sed 's/^[ \t]*//;s/[ \t]*$//'`"
711	CFLAGS_saved="${CFLAGS_saved} -I."		dnl include our own directory first, so that we can find config.h when using a builddir
712	CFLAGS="${CFLAGS_saved} "
713	CPPFLAGS="${CPPFLAGS_saved} -I. "
714	LDFLAGS="${LDFLAGS_saved}"
715	AC_SUBST([DEBUG])
716	AC_SUBST([GDB_FLAGS])
717	AC_SUBST([LIBBFD])
718	AC_SUBST([LIBEXECINFO])
719])
720
721#
722# LTO (link-time optimization)
723#
724AC_DEFUN([CS_ENABLE_LINK_TIME_OPTIMIZATION], [
725	AC_ARG_ENABLE(
726		[lto],
727		AC_HELP_STRING([--enable-lto],[Enables or Disables Linktime Code Optimization (LTO is enabled by default)]),
728	    	[
729			enable_lto="$enableval"
730			case $enableval in
731			    "no");;
732			    "yes");;
733			    *) AC_MSG_ERROR([[invalid argument --enable-lto=$disableval... stopping]]);;
734			esac
735	    	],
736		[enable_lto="no"]
737	)
738
739	#
740	# LTO Support test
741	#
742	if test "$enable_lto" != "no" ; then
743		OLD_CXXFLAGS="$CFLAGS"
744		CXXFLAGS="$CXXFLAGS -flto"
745		OLD_CFLAGS="$CFLAGS"
746		CFLAGS="$CFLAGS -flto"
747		OLD_LDFLAGS="$LDFLAGS"
748		LDFLAGS="$LDFLAGS -flto"
749		AC_MSG_CHECKING([whether $CXX supports -flto])
750		AC_RUN_IFELSE(
751		[ AC_LANG_SOURCE([[
752			int main(int argc, char **argv){
753				return 0;
754			}
755			]])
756		],
757		[
758			AC_MSG_RESULT([yes])
759		],
760		[
761			AC_MSG_RESULT([no])
762			CXXFLAGS="$OLD_CXXFLAGS"
763			CFLAGS="$OLD_CXXFLAGS"
764			LDFLAGS="$OLD_LDFLAGS"
765		],
766		[
767			AC_MSG_RESULT([guessing no])
768		])
769	fi
770])
771
772AC_DEFUN([CS_ENABLE_GCOV], [
773	COVERAGE_CFLAGS=''
774	COVERAGE_LDFLAGS=''
775	AC_ARG_ENABLE([gcov],
776		[AS_HELP_STRING([--enable-gcov], [generate Gcov to profile sources])],
777		[ac_cv_enable_gcov=$enableval],
778		[ac_cv_enable_gcov=no]
779	)
780	AS_IF([test "_${ac_cv_enable_gcov}" = "_yes"], [
781		COVERAGE_CFLAGS='-fprofile-arcs -ftest-coverage'
782		COVERAGE_LDFLAGS='--coverage --no-inline'
783	],[])
784	AC_MSG_RESULT([--enable-gcov: ${ac_cv_enable_gcov}])
785	AC_SUBST([COVERAGE_CFLAGS])
786	AC_SUBST([COVERAGE_LDFLAGS])
787])
788
789AC_DEFUN([CS_ENABLE_REFCOUNT_DEBUG], [
790	AC_ARG_ENABLE(refcount_debug,
791		[AC_HELP_STRING([--enable-refcount-debug], [enable refcount debugging (developer only)])],
792		[ac_cv_refcount_debug=$enableval],
793		[ac_cv_refcount_debug=no]
794	)
795	AS_IF([test "_${ac_cv_refcount_debug}" == "_yes"], [AC_DEFINE(CS_REFCOUNT_DEBUG, 1, [refcount debug enabled])])
796	AC_MSG_RESULT([--enable-refcount-debug: ${ac_cv_refcount_debug}])
797])
798
799AC_DEFUN([CS_ENABLE_ASTOBJ_REFCOUNT], [
800	AS_IF([test "${ASTOBJ2_AVAILABLE}" == "yes"],
801	[
802		AC_ARG_ENABLE(astobj_refcount,
803			[AC_HELP_STRING([--enable-astobj2-refcount], [enable using astobj2 refcount implementation])],
804			[ac_cv_astobj_refcount=$enableval],
805			[ac_cv_astobj_refcount=no]
806		)
807		AS_IF([test "_${ac_cv_astobj_refcount}" == "_yes"], [AC_DEFINE(CS_ASTOBJ_REFCOUNT, 1, [astobj2 refcount enabled])])
808		AC_MSG_RESULT([--enable-astobj2-refcount: ${ac_cv_astobj_refcount}])
809	], [
810		AC_MSG_RESULT([--enable-astobj2-refcount: no (astobj2.h not available)])
811	])
812])
813
814AC_DEFUN([CS_ENABLE_LOCK_DEBUG], [
815	AC_ARG_ENABLE(lock_debug,
816		[AC_HELP_STRING([--enable-lock-debug], [enable lock debugging (developer only)])],
817		[ac_cv_lock_debug=$enableval],
818		[ac_cv_lock_debug=no]
819	)
820	AS_IF([test "_${ac_cv_lock_debug}" == "_yes"], [AC_DEFINE(CS_LOCK_DEBUG, 1, [lock debug enabled])])
821	AC_MSG_RESULT([--enable-lock-debug: ${ac_cv_lock_debug}])
822])
823
824
825AC_DEFUN([CS_ENABLE_STRIP], [
826	AC_ARG_ENABLE(strip,
827		[AC_HELP_STRING([--enable-strip], [strip the symbols from the binary during installation])],
828		[ac_cv_enable_strip=$enableval],
829		[ac_cv_enable_strip=no; if [ test "x$enable_optimization" == "xyes"; ] then ac_cv_enable_strip="yes";fi]
830	)
831	strip_binaries="${ac_cv_enable_strip}"
832	AC_MSG_RESULT([--enable-strip: ${ac_cv_enable_strip}])
833	AC_SUBST([strip_binaries])
834])
835
836AC_DEFUN([CS_DISABLE_SECTION_RELOCATION], [
837	case "${host}" in
838	*-*-darwin*)
839		AC_MSG_RESULT([section relocation not supported on apple/darwin. skipping.])
840		SECTION_LDFLAGS=""
841		SECTION_CFLAGS=""
842		;;
843	*)
844		AC_ARG_ENABLE(section_relocation,
845			[AC_HELP_STRING([--enable-section-relocation], [enable compiler section relocation])],
846			[ac_cv_section_relocation=$enableval],
847			[ac_cv_section_relocation=no]
848		)
849		AS_IF([test "_${ac_cv_section_relocation}" == "_no"], [
850			SECTION_LDFLAGS=""
851			SECTION_CFLAGS=""
852		])
853		AC_MSG_RESULT([--enable-section_relocation: ${ac_cv_section_relocation}])
854		;;
855	esac
856	SUPPORTED_CFLAGS="$SECTION_CFLAGS $SUPPORTED_CFLAGS"
857	SUPPORTED_LDFLAGS="$SECTION_LDFLAGS $SUPPORTED_LDFLAGS"
858])
859
860AC_DEFUN([CS_DISABLE_PICKUP], [
861	AC_ARG_ENABLE(pickup,
862		[AC_HELP_STRING([--disable-pickup], [disable pickup function])],
863		[ac_cv_use_pickup=$enableval],
864		[ac_cv_use_pickup=yes]
865	)
866	AS_IF([test "_${ac_cv_use_pickup}" == "_yes"], [AC_DEFINE(CS_SCCP_PICKUP, 1, [pickup function enabled])])
867	AC_MSG_RESULT([--enable-pickup: ${ac_cv_use_pickup}])
868])
869
870AC_DEFUN([CS_DISABLE_PARK], [
871	AC_ARG_ENABLE(park,
872		[AC_HELP_STRING([--disable-park], [disable park functionality])],
873		[ac_cv_use_park=$enableva]l,
874		[ac_cv_use_park=yes]
875	)
876	AS_IF([test "_${ac_cv_use_park}" == "_yes"], [AC_DEFINE(CS_SCCP_PARK, 1, [park functionality enabled])])
877	AC_MSG_RESULT([--enable-park: ${ac_cv_use_park}])
878])
879
880AC_DEFUN([CS_DISABLE_DIRTRFR], [
881	AC_ARG_ENABLE(dirtrfr,
882		[AC_HELP_STRING([--disable-dirtrfr], [disable direct transfer])],
883		[ac_cv_use_dirtrfr=$enableval],
884		[ac_cv_use_dirtrfr=yes]
885	)
886	AS_IF([test "_${ac_cv_use_dirtrfr}" == "_yes"], [AC_DEFINE(CS_SCCP_DIRTRFR, 1, [direct transfer enabled])])
887	AC_MSG_RESULT([--enable-dirtrfr: ${ac_cv_use_dirtrfr}])
888])
889
890AC_DEFUN([CS_DISABLE_MONITOR], [
891	AC_ARG_ENABLE(monitor,
892		[AC_HELP_STRING([--disable-monitor], [disable feature monitor)])],
893		[ac_cv_use_monitor=$enableval],
894		[ac_cv_use_monitor=yes]
895	)
896	AS_IF([test "_${ac_cv_use_monitor}" == "_yes"], [AC_DEFINE(CS_SCCP_FEATURE_MONITOR, 1, [feature monitor enabled])])
897	AC_MSG_RESULT([--enable-monitor: ${ac_cv_use_monitor}])
898])
899
900AC_DEFUN([CS_ENABLE_CONFERENCE], [
901	AC_ARG_ENABLE(conference,
902		[AC_HELP_STRING([--enable-conference], [enable conference (>ast 1.6.2)])],
903		[ac_cv_use_conference=$enableval],
904		[ac_cv_use_conference=no]
905	)
906	AS_IF([test "_${ac_cv_use_conference}" == "_yes"], [AC_DEFINE(CS_SCCP_CONFERENCE, 1, [conference enabled])])
907	AC_MSG_RESULT([--enable-conference: ${ac_cv_use_conference}])
908])
909
910AC_DEFUN([CS_DISABLE_MANAGER], [
911	AC_ARG_ENABLE(manager,
912		[AC_HELP_STRING([--disable-manager], [disabled ast manager events])],
913		[ac_cv_use_manager=$enableval],
914		[ac_cv_use_manager=yes]
915	)
916	AS_IF([test "_${ac_cv_use_manager}" == "_yes"], [
917		AC_DEFINE(CS_MANAGER_EVENTS, 1, [manager events enabled])
918		AC_DEFINE(CS_SCCP_MANAGER, 1, [manager console control enabled])
919	])
920	AC_MSG_RESULT([--enable-manager: ${ac_cv_use_manager}])
921])
922
923AC_DEFUN([CS_DISABLE_FUNCTIONS], [
924	AC_ARG_ENABLE(functions,
925		[AC_HELP_STRING([--disable-functions], [disabled Dialplan functions])],
926		[ac_cv_use_functions=$enableval],
927		[ac_cv_use_functions=yes]
928	)
929	AS_IF([test "_${ac_cv_use_functions}" == "_yes"], [AC_DEFINE(CS_SCCP_FUNCTIONS, 1, [dialplan function enabled])])
930	AC_MSG_RESULT([--enable-functions: ${ac_cv_use_functions}])
931])
932
933AC_DEFUN([CS_ENABLE_INDICATIONS], [
934	AC_ARG_ENABLE(indications,
935		[AC_HELP_STRING([--enable-indications], [enable debug indications]]),
936		[ac_cv_debug_indications=$enableval],
937		[ac_cv_debug_indications=no]
938	)
939	AS_IF([test "_${ac_cv_debug_indications}" == "_yes"], [AC_DEFINE(CS_DEBUG_INDICATIONS, 1, [debug indications enabled])])
940	AC_MSG_RESULT([--enable-indications: ${ac_cv_debug_indications}])
941])
942
943AC_DEFUN([CS_DISABLE_REALTIME], [
944	AC_ARG_ENABLE(realtime,
945		[AC_HELP_STRING([--disable-realtime], [disable realtime support])],
946		[ac_cv_realtime=$enableval],
947		[ac_cv_realtime=yes]
948	)
949	AS_IF([test "_${ac_cv_realtime}" == "_yes"], [AC_DEFINE(CS_SCCP_REALTIME, 1, [realtime enabled])])
950	AC_MSG_RESULT([--enable-realtime: ${ac_cv_realtime}])
951])
952
953AC_DEFUN([CS_DISABLE_FEATURE_MONITOR], [
954	AC_ARG_ENABLE(feature_monitor,
955		[AC_HELP_STRING([--disable-feature-monitor], [disable feature monitor])],
956		[ac_cv_feature_monitor=$enableval],
957		[ac_cv_feature_monitor=yes]
958	)
959	AS_IF([test "_${ac_cv_feature_monitor}" == "_yes"], [AC_DEFINE(CS_SCCP_FEATURE_MONITOR, 1, [feature monitor enabled])])
960	AC_MSG_RESULT([--enable-feature-monitor: ${ac_cv_feature_monitor}])
961])
962
963AC_DEFUN([CS_ENABLE_ADVANCED_FUNCTIONS], [
964	AC_ARG_ENABLE(advanced_functions,
965		[AC_HELP_STRING([--enable-advanced-functions], [enable advanced functions (experimental)])],
966		[ac_cv_advanced_functions=$enableval],
967		[ac_cv_advanced_functions=no]
968	)
969	AS_IF([test "_${ac_cv_advanced_functions}" == "_yes"], [AC_DEFINE(CS_ADV_FEATURES, 1, [advanced functions enabled])])
970	AC_MSG_RESULT([--enable-advanced-functions: ${ac_cv_advanced_functions}])
971])
972
973AC_DEFUN([CS_ENABLE_EXPERIMENTAL_MODE], [
974	AC_ARG_ENABLE(experimental_mode,
975		[AC_HELP_STRING([--enable-experimental-mode], [enable experimental mode (only for developers)])],
976		[ac_cv_experimental_mode=$enableval],
977		[ac_cv_experimental_mode=no]
978	)
979	AS_IF([test "_${ac_cv_experimental_mode}" == "_yes"], [AC_DEFINE(CS_EXPERIMENTAL, 1, [experimental mode enabled])])
980	AC_MSG_RESULT([--enable-experimental-mode: ${ac_cv_experimental_mode} (only for developers)])
981])
982
983AC_DEFUN([CS_ENABLE_EXPERIMENTAL_XML], [
984	AC_LANG_SAVE
985	AC_LANG_C
986	CFLAGS_save=${CFLAGS}
987	CPPFLAGS_save=${CPPFLAGS}
988	LDFLAGS_save=${LDFLAGS}
989	AC_ARG_ENABLE(experimental_xml,
990		[AC_HELP_STRING([--enable-experimental-xml], [enable experimental xml (only for developers)])],
991		[ac_cv_experimental_xml=$enableval],
992		[ac_cv_experimental_xml=no]
993	)
994	AM_CONDITIONAL([CS_EXPERIMENTAL_XML], test "_${ac_cv_experimental_xml}" == "_yes")
995	AS_IF([test "_${ac_cv_experimental_xml}" == "_yes" ], [
996		CONFIGURE_PART([Checking XML2/EXSLT:])
997		LIBEXSLT_CFLAGS=`${PKGCONFIG} libexslt --cflags`
998		LIBEXSLT_LIBS=`${PKGCONFIG} libexslt --libs`
999		CFLAGS="${LIBEXSLT_CFLAGS} "
1000		CPPFLAGS="${LIBEXSLT_CFLAGS} "
1001		LDFLAGS="${LIBEXSLT_LIBS} "
1002		AC_CHECK_LIB([xml2],[xmlInitParser],
1003		[
1004			HAVE_LIBXML2=yes
1005			AC_DEFINE(HAVE_LIBXML2, 1, [Found 'LIBXML2'])
1006		], [
1007			HAVE_LIBXML2=no
1008		])
1009		AC_CHECK_HEADERS([libxml/tree.h libxml/parser.h libxml/xmlstring.h])
1010		AC_CHECK_LIB([xslt],[xsltInit],
1011		[
1012			HAVE_LIBXSLT=yes
1013			AC_DEFINE(HAVE_LIBXSLT, 1, [Found 'LIBXSLT'])
1014		], [
1015			HAVE_LIBXSLT=no
1016		])
1017		AC_CHECK_HEADERS([libxslt/xsltInternals.h libxslt/transform.h libxslt/xsltutils.h libxslt/extensions.h])
1018		AC_CHECK_LIB([exslt],[exsltRegisterAll],
1019		[
1020			HAVE_LIBEXSLT=yes
1021			AC_DEFINE(HAVE_LIBEXSLT, 1, [Found 'LIBEXSLT'])
1022		], [
1023			HAVE_LIBEXSLT=no
1024		])
1025		AC_CHECK_HEADERS([libexslt/exslt.h])
1026		AC_CHECK_LIB([xml2],[xmlInitParser],[HAVE_LIBXML2=yes],[HAVE_LIBXML2=no])
1027		AC_CHECK_LIB([xslt],[xsltInit],[HAVE_LIBXSLT=yes],[HAVE_LIBXSLT=no])
1028		AC_CHECK_LIB([exslt],[exsltRegisterAll],[HAVE_LIBEXSLT=yes],[HAVE_LIBEXSLT=no])
1029		AC_SUBST([LIBEXSLT_CFLAGS])
1030		AC_SUBST([LIBEXSLT_LIBS])
1031		AS_IF([test "_${HAVE_LIBEXSLT}" == "_yes"],[
1032			AS_IF([test "_${HAVE_PBX_HTTP}" == "_yes"], [
1033				AC_DEFINE(CS_EXPERIMENTAL_XML, 1, [experimental xml enabled])
1034				CPPFLAGS_saved="${CPPFLAGS_saved} $LIBEXSLT_CFLAGS"
1035			],[
1036				AC_MSG_ERROR([asterisk/http.h required to enable-experimental-xml])
1037			])
1038		],[
1039			AC_MSG_ERROR([libxslt required to enable-experimental-xml])
1040		])
1041	])
1042	CFLAGS=${CFLAGS_save}
1043	CPPFLAGS=${CPPFLAGS_save}
1044	LDFLAGS=${LDFLAGS_save}
1045])
1046
1047AC_DEFUN([CS_DISABLE_DEVSTATE_FEATURE], [
1048	AC_ARG_ENABLE(devstate_feature,
1049		[AC_HELP_STRING([--disable-devstate-feature], [disable device state feature button])],
1050		[ac_cv_devstate_feature=$enableval],
1051		[ac_cv_devstate_feature=yes]
1052	)
1053	AS_IF([test ${ASTERISK_VERSION_NUMBER} -lt 10601], [ac_cv_devstate_feature=no])
1054	AS_IF([test "_${DEVICESTATE_H}" != "_yes"], [ac_cv_devstate_feature=no])
1055	AS_IF([test "_${ac_cv_devstate_feature}" == "_yes"], [AC_DEFINE(CS_DEVSTATE_FEATURE, 1, [devstate feature enabled])])
1056	AC_MSG_RESULT([--enable-devstate-feature: ${ac_cv_devstate_feature}])
1057])
1058
1059AC_DEFUN([CS_DISABLE_DYNAMIC_SPEEDDIAL], [
1060	AC_ARG_ENABLE(dynamic_speeddial,
1061		[AC_HELP_STRING([--disable-dynamic-speeddial], [disable dynamic speeddials])],
1062		[ac_cv_dynamic_speeddial=$enableval],
1063		[ac_cv_dynamic_speeddial=yes]
1064	)
1065	AS_IF([test "_${ac_cv_dynamic_speeddial}" == "_yes"], [AC_DEFINE(CS_DYNAMIC_SPEEDDIAL, 1, [dynamic speeddials enabled])])
1066	AC_MSG_RESULT([--enable-dynamic-speeddial: ${ac_cv_dynamic_speeddial}])
1067])
1068
1069AC_DEFUN([CS_DISABLE_DYNAMIC_SPEEDDIAL_CID], [
1070	AC_ARG_ENABLE(dynamic_speeddial_cid,
1071		[AC_HELP_STRING([--disable-dynamic-speeddial-cid], [disable dynamic speeddials with call info])],
1072		[ac_cv_dynamic_speeddial_cid=$enableval],
1073		[ac_cv_dynamic_speeddial_cid=yes]
1074	)
1075	AS_IF([test "${ac_cv_dynamic_speeddial}" == "yes"], [
1076		AS_IF([test "${ac_cv_dynamic_speeddial_cid}" == "yes"], [
1077			AC_DEFINE(CS_DYNAMIC_SPEEDDIAL_CID, 1, [dynamic speeddials with callinfo enabled])
1078		])
1079	])
1080	AC_MSG_RESULT([--enable-dynamic-speeddial_cid: ${ac_cv_dynamic_speeddial_cid}])
1081])
1082
1083AC_DEFUN([CS_ENABLE_VIDEO], [
1084	AC_ARG_ENABLE(video,
1085		[AC_HELP_STRING([--enable-video], [enable streaming video (experimental)])],
1086		[ac_cv_streaming_video=$enableval],
1087		[ac_cv_streaming_video=no]
1088	)
1089	AS_IF([test "_${ac_cv_streaming_video}" == "_yes"], [AC_DEFINE(CS_SCCP_VIDEO, 1, [Using streaming video])])
1090	AC_MSG_RESULT([--enable-video: ${ac_cv_streaming_video}])
1091])
1092
1093AC_DEFUN([CS_ENABLE_DISTRIBUTED_DEVSTATE], [
1094	AC_ARG_ENABLE(distributed_devicestate,
1095		[AC_HELP_STRING([--enable-distributed-devicestate], [enable distributed devicestate (ast 1.8 - 12)])],
1096		[ac_cv_use_distributed_devicestate=$enableval],
1097		[ac_cv_use_distributed_devicestate=no]
1098	)
1099	AS_IF([test "_${ac_cv_use_distributed_devicestate}" == "_yes"], [AC_DEFINE(CS_USE_ASTERISK_DISTRIBUTED_DEVSTATE, 1, [distributed devicestate])])
1100	AC_MSG_RESULT([--enable-distributed-devicestate: ${ac_cv_use_distributed_devicestate}])
1101])
1102
1103AC_DEFUN([CS_WITH_HASH_SIZE], [
1104	AC_ARG_WITH(hash_size,
1105		[AC_HELP_STRING([--with-hash-size], [to provide room for higher number of phones (>100), specify a prime number, bigger then number of phones times 4 (default=563)])],
1106		[ac_cv_set_hashsize=$withval], [ac_cv_set_hashsize=563])
1107	AS_CASE([${ac_cv_set_hashsize}],
1108		[''|'yes'|'no'|*[!0-9]*], [
1109			ac_cv_set_hashsize=563
1110			AC_MSG_ERROR(['When using --with-hash-size, you need to supply a (prime) value, only needed when you have move than 100 phones'])
1111			],
1112		[*], [
1113	    		AS_IF([test 0${ac_cv_set_hashsize} -lt 563], [ac_cv_set_hashsize=563])
1114			]
1115	)
1116	AC_DEFINE_UNQUOTED(SCCP_HASH_PRIME, `echo ${ac_cv_set_hashsize}`, [defined SCCP_HASH_PRIME])
1117	AC_MSG_RESULT([--with-hash-size: ${ac_cv_set_hashsize}])
1118])
1119
1120
1121AC_DEFUN([CS_PARSE_WITH_AND_ENABLE], [
1122	CS_DISABLE_SECTION_RELOCATION
1123	AC_MSG_RESULT([--enable-optimization: ${enable_optimization}])
1124	AC_MSG_RESULT([--enable-debug: ${enable_debug}])
1125	AC_MSG_RESULT([--enable-devdoc: ${ac_cv_use_devdoc}])
1126	AC_MSG_RESULT([--enable-tls: ${ac_cv_tls}])
1127	CS_ENABLE_GCOV
1128	CS_ENABLE_REFCOUNT_DEBUG
1129	CS_ENABLE_ASTOBJ_REFCOUNT
1130	CS_ENABLE_LOCK_DEBUG
1131	CS_ENABLE_STRIP
1132	CS_DISABLE_PICKUP
1133	CS_DISABLE_PARK
1134	CS_DISABLE_DIRTRFR
1135	CS_DISABLE_MONITOR
1136	CS_ENABLE_CONFERENCE
1137	CS_DISABLE_MANAGER
1138	CS_DISABLE_FUNCTIONS
1139	CS_DISABLE_REALTIME
1140	CS_DISABLE_FEATURE_MONITOR
1141	CS_ENABLE_ADVANCED_FUNCTIONS
1142	CS_DISABLE_DEVSTATE_FEATURE
1143	CS_DISABLE_DYNAMIC_SPEEDDIAL
1144	CS_DISABLE_DYNAMIC_SPEEDDIAL_CID
1145	CS_ENABLE_VIDEO
1146	CS_ENABLE_DISTRIBUTED_DEVSTATE
1147	CS_ENABLE_EXPERIMENTAL_MODE
1148	AC_MSG_RESULT([--enable-experimental-xml: ${ac_cv_experimental_xml}])
1149	CS_WITH_HASH_SIZE
1150])
1151
1152AC_DEFUN([CS_SETUP_MODULE_DIR], [
1153	AC_ARG_WITH([astmoddir],
1154		[AC_HELP_STRING([--with-astmoddir=PATH],[Location of the Asterisk Module Directory])],
1155		[PBX_MODDIR="${withval}"],
1156		[PBX_MODDIR=${PBX_TEMPMODDIR}
1157		case "${host}" in
1158			*-*-darwin*)
1159				PBX_MODDIR='/Library/Application Support/Asterisk/Modules/modules'
1160				;;
1161			*)
1162				if test -d "${PBX_TEMPMODDIR}"; then
1163					PBX_MODDIR="${PBX_TEMPMODDIR}"
1164				elif test "x${prefix}" != "xNONE"; then
1165					case "$build_cpu" in
1166					x86_64|amd64|ppc64)
1167						if test -d ${prefix}/lib64/asterisk/modules; then
1168							PBX_MODDIR=${prefix}/lib64/asterisk/modules
1169						else
1170							PBX_MODDIR=${prefix}/lib/asterisk/modules
1171						fi
1172						;;
1173					*)
1174						PBX_MODDIR=${prefix}/lib/asterisk/modules;
1175						;;
1176					esac
1177				fi
1178				;;
1179		 esac])
1180	PBX_DEBUGMODDIR="$PBX_MODDIR/.debug/"
1181	AC_SUBST([PBX_MODDIR])
1182	csmoddir=${PBX_MODDIR}
1183	AC_SUBST([csmoddir])
1184	AC_SUBST([PBX_DEBUGMODDIR])
1185])
1186
1187AC_DEFUN([CS_PARSE_WITH_LIBEV], [
1188	EVENT_LIBS=""
1189	EVENT_CFLAGS=""
1190	EVENT_TYPE=""
1191	AC_ARG_WITH(libevent,
1192		[AC_HELP_STRING([--with-libevent=yes|no],[use garbage collector (libgc) as allocator (experimental)])],
1193		uselibevent="$withval")
1194	if test "x$uselibevent" = "xyes"; then
1195		if test -z "$EVENT_HOME" ; then
1196			AC_CHECK_LIB([ev], [event_init], [HAVE_EVENT="yes"], [])
1197			if test "$HAVE_EVENT" = "yes" ; then
1198				EVENT_LIBS="-lev"
1199				EVENT_TYPE="ev"
1200			else
1201				AC_CHECK_LIB([event], [event_init], [HAVE_EVENT="yes"], [])
1202				if test "$HAVE_EVENT" = "yes" ; then
1203					EVENT_LIBS="-levent"
1204					EVENT_TYPE="event"
1205				fi
1206			fi
1207		else
1208			EVENT_OLD_LDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS -L$EVENT_HOME/lib"
1209			EVENT_OLD_CFLAGS="$CFLAGS" ; CFLAGS="$CFLAGS -I$EVENT_HOME/include"
1210			AC_CHECK_LIB([ev], [event_init], [HAVE_EVENT="yes"], [])
1211			if test "$HAVE_EVENT" = "yes"; then
1212				CFLAGS="$EVENT_OLD_CFLAGS"
1213				LDFLAGS="$EVENT_OLD_LDFLAGS"
1214				if test "$HAVE_EVENT" = "yes" ; then
1215					EVENT_LIBS="-L$EVENT_HOME/lib -lev"
1216					test -d "$EVENT_HOME/include" && EVENT_CFLAGS="-I$EVENT_HOME/include"
1217					EVENT_TYPE="ev"
1218				fi
1219			else
1220				AC_CHECK_LIB([event], [event_init], [HAVE_EVENT="yes"], [])
1221				CFLAGS="$EVENT_OLD_CFLAGS"
1222				LDFLAGS="$EVENT_OLD_LDFLAGS"
1223				if test "$HAVE_EVENT" = "yes" ; then
1224					EVENT_LIBS="-L$EVENT_HOME/lib -levent"
1225					test -d "$EVENT_HOME/include" && EVENT_CFLAGS="-I$EVENT_HOME/include"
1226					EVENT_TYPE="event"
1227				fi
1228			fi
1229		fi
1230		AC_MSG_CHECKING([for libev/libevent...])
1231		if test "$HAVE_EVENT" = "yes" ; then
1232			if test "$EVENT_TYPE" = "ev"; then
1233				AC_MSG_RESULT([libev])
1234				AC_DEFINE(HAVE_LIBEV, 1, [Define to 1 if libev is available])
1235				AC_DEFINE(HAVE_LIBEVENT_COMPAT, 1, [Define to 1 if libev-libevent is available])
1236			else
1237				AC_MSG_RESULT([libevent])
1238				AC_DEFINE(HAVE_LIBEVENT, 1, [Define to 1 if libevent is available])
1239			fi
1240		else
1241			AC_MSG_RESULT([no])
1242	dnl		AC_MSG_ERROR([
1243	dnl			*** ERROR: cannot find libev or libevent!
1244	dnl			***
1245	dnl			*** Either install libev + libev-libevent-dev (preferred) or the older libevent
1246	dnl			*** Sources can be found here: http://software.schmorp.de/pkg/libev.html or http://www.monkey.org/~provos/libevent/
1247	dnl			*** If it's already installed, specify its path using --with-libevent=PATH
1248	dnl		])
1249		fi
1250	fi
1251	AM_CONDITIONAL([BUILD_WITH_LIBEVENT], test "$EVENT_TYPE" != "")
1252	AC_SUBST([EVENT_LIBS])
1253	AC_SUBST([EVENT_CFLAGS])
1254	AC_SUBST([EVENT_TYPE])
1255])
1256
1257