audiod: Switch the status task to the alternative post select method.
[paraslash.git] / configure.ac
1 #                                               -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 AC_PREREQ([2.61])
5
6
7 AC_INIT([paraslash],[git],[maan@systemlinux.org])
8 AC_CONFIG_HEADER([config.h])
9
10 AC_CONFIG_FILES([Makefile])
11 AC_DEFUN([add_dot_o],[$(for i in $@; do printf "$i.o "; done)])
12 AC_DEFUN([add_para],[$(for i in $@; do printf "para_$i "; done)])
13 AC_DEFUN([objlist_to_errlist],[$(for i in $@; do printf "DEFINE_ERRLIST($(echo $i| tr 'a-z' 'A-Z'));"; done) [const char **para_errlist[[]]] = {$(for i in $@; do printf "PARA_ERRLIST($(echo $i | tr 'a-z' 'A-Z')), "; done) }])
14 AC_PATH_PROG(UNAMEPATH, uname, no)
15 if test "$UNAMEPATH" = "no"; then
16         AC_MSG_ERROR(unable to determine system type)
17 fi
18 AC_MSG_CHECKING(os type)
19 OSTYPE="`$UNAMEPATH -s`"
20 AC_MSG_RESULT("$OSTYPE")
21
22 if test "$OSTYPE" = "SunOS"; then
23         # needed on SunOS for socket magic
24         arch_cppflags="-D_XOPEN_SOURCE=500 -D__EXTENSIONS__"
25         AC_SUBST(arch_cppflags)
26 fi
27
28 AC_C_BIGENDIAN()
29
30 AC_PATH_PROG([gengetopt], [gengetopt])
31 test -z "$gengetopt" && AC_MSG_ERROR(
32         [gengetopt is required to build this package])
33
34 AC_PATH_PROG([help2man], [help2man])
35 test -z "$help2man" && AC_MSG_ERROR(
36         [help2man is required to build this package])
37
38 AC_PROG_CC
39 AC_PROG_CPP
40 AC_PROG_INSTALL
41 AC_SUBST(install_sh, [$INSTALL])
42 AC_REPLACE_FNMATCH
43
44 AC_HEADER_DIRENT
45 AC_HEADER_STDC
46 AC_HEADER_SYS_WAIT
47 AC_HEADER_STDBOOL
48 AC_CHECK_HEADERS([arpa/inet.h ctype.h fcntl.h limits.h netdb.h netinet/in.h \
49         stdlib.h string.h sys/socket.h sys/time.h sys/timeb.h sys/un.h \
50         sys/ipc.h unistd.h utime.h stddef.h],
51         [], [AC_MSG_ERROR([$ac_header not found])])
52
53 # Checks for typedefs, structures, and compiler characteristics.
54 AC_C_CONST
55 AC_C_INLINE
56 AC_TYPE_OFF_T
57 AC_TYPE_PID_T
58 AC_TYPE_SIZE_T
59 AC_HEADER_TIME
60 AC_STRUCT_TM
61 AC_TYPE_INT8_T
62 AC_TYPE_INT16_T
63 AC_TYPE_INT32_T
64 AC_TYPE_INT64_T
65 AC_TYPE_MODE_T
66 AC_TYPE_SSIZE_T
67 AC_TYPE_UID_T
68 AC_TYPE_UINT8_T
69 AC_TYPE_UINT16_T
70 AC_TYPE_UINT32_T
71 AC_TYPE_UINT64_T
72
73 # Checks for library functions.
74 AC_FUNC_FORK
75 AC_PROG_GCC_TRADITIONAL
76 AC_FUNC_MALLOC
77 AC_FUNC_MEMCMP
78 AC_FUNC_MKTIME
79 AC_FUNC_MMAP
80 AC_FUNC_REALLOC
81 AC_FUNC_SELECT_ARGTYPES
82 AC_FUNC_STAT
83 AC_FUNC_STRFTIME
84 AC_FUNC_VPRINTF
85 AC_FUNC_CLOSEDIR_VOID
86 AC_FUNC_LSTAT
87
88 AC_CHECK_FUNCS([atexit dup2 memchr memmove memset \
89         regcomp select strchr strdup strerror strstr strtol uname \
90         fchdir gettimeofday localtime_r munmap strcasecmp strcspn \
91         strncasecmp strrchr strspn alarm mkdir inet_ntoa socket], [],
92         [AC_MSG_ERROR([function not found, cannot live without it])])
93
94 AC_DEFUN([add_cmdline],[$(for i in $@; do printf "${i}.cmdline "; done)])
95
96
97 all_errlist_objs="mp3_afh afh_common net string signal time daemon
98         stat afh amp_filter fd ringbuffer sched audiod
99         grab_client filter_common wav_filter compress_filter http_recv
100         dccp_recv recv_common write_common file_write audiod_command
101         client_common recv stdout filter stdin audioc write client
102         exec send_common ggo udp_recv color fec fecdec_filter
103         prebuffer_filter bitstream imdct check_wav
104         wma_afh wma_common wmadec_filter buffer_tree crypt_common
105         gui gui_theme sideband afh_recv play"
106
107 executables="recv filter audioc write client afh audiod play"
108
109 recv_cmdline_objs="add_cmdline(recv http_recv dccp_recv udp_recv afh_recv)"
110
111 recv_errlist_objs="
112         http_recv recv_common recv time string net dccp_recv fd
113         sched stdout ggo udp_recv buffer_tree afh_recv afh_common
114         wma_afh wma_common mp3_afh
115 "
116
117 recv_ldflags=""
118
119 filter_cmdline_objs="add_cmdline(filter compress_filter amp_filter prebuffer_filter)"
120 filter_errlist_objs="filter_common wav_filter compress_filter filter string
121         stdin stdout sched fd amp_filter ggo fecdec_filter fec
122         prebuffer_filter time bitstream imdct wma_common wmadec_filter buffer_tree"
123 filter_ldflags="-lm"
124 filters=" compress wav amp fecdec wmadec prebuffer"
125
126 audioc_cmdline_objs="add_cmdline(audioc)"
127 audioc_errlist_objs="audioc string net fd"
128 audioc_ldflags=""
129
130 audiod_cmdline_objs="add_cmdline(audiod compress_filter http_recv dccp_recv file_write client amp_filter udp_recv prebuffer_filter)"
131 audiod_errlist_objs="audiod signal string daemon stat net crypt_common sideband
132         time grab_client filter_common wav_filter compress_filter amp_filter http_recv dccp_recv
133         recv_common fd sched write_common file_write audiod_command fecdec_filter
134         client_common ggo udp_recv color fec prebuffer_filter
135         bitstream imdct wma_common wmadec_filter buffer_tree"
136 audiod_ldflags="-lm"
137 audiod_audio_formats="wma"
138
139 afh_cmdline_objs="add_cmdline(afh)"
140 afh_errlist_objs="afh string fd mp3_afh afh_common time wma_afh wma_common"
141 afh_ldflags=""
142
143 write_cmdline_objs="add_cmdline(write file_write)"
144 write_errlist_objs="write write_common file_write time fd string sched stdin
145         buffer_tree ggo check_wav"
146 write_ldflags=""
147 writers=" file"
148 default_writer="FILE_WRITE"
149
150 client_cmdline_objs="add_cmdline(client)"
151 client_errlist_objs="client net string fd sched stdin stdout time sideband
152         client_common buffer_tree crypt_common"
153 client_ldflags=""
154
155 gui_cmdline_objs="add_cmdline(gui)"
156 gui_errlist_objs="exec signal string stat ringbuffer fd gui gui_theme"
157 gui_objs="$gui_cmdline_objs $gui_errlist_objs"
158 play_errlist_objs="play fd sched ggo buffer_tree time string net
159         afh_recv afh_common
160         wma_afh wma_common mp3_afh
161         recv_common udp_recv http_recv dccp_recv
162         filter_common fec bitstream imdct
163         wav_filter compress_filter amp_filter prebuffer_filter fecdec_filter
164                 wmadec_filter
165         write_common file_write
166 "
167 play_cmdline_objs="add_cmdline(http_recv dccp_recv udp_recv afh_recv compress_filter amp_filter prebuffer_filter file_write play)"
168 play_ldflags="-lm"
169 ########################################################################### snprintf
170 # ===========================================================================
171 #        http://www.nongnu.org/autoconf-archive/ax_func_snprintf.html
172 # ===========================================================================
173 #
174 # SYNOPSIS
175 #
176 #   AX_FUNC_SNPRINTF
177 #
178 # DESCRIPTION
179 #
180 #   Checks for a fully C99 compliant snprintf, in particular checks whether
181 #   it does bounds checking and returns the correct string length; does the
182 #   same check for vsnprintf. If no working snprintf or vsnprintf is found,
183 #   it prints an error message and aborts.
184 #
185 # LICENSE
186 #
187 #   Copyright (c) 2008 Ruediger Kuhlmann <info@ruediger-kuhlmann.de>
188 #
189 #   Copying and distribution of this file, with or without modification, are
190 #   permitted in any medium without royalty provided the copyright notice
191 #   and this notice are preserved.
192
193 AU_ALIAS([AC_FUNC_SNPRINTF], [AX_FUNC_SNPRINTF])
194 AC_DEFUN([AX_FUNC_SNPRINTF],
195 [AC_CHECK_FUNCS(snprintf vsnprintf)
196 AC_MSG_CHECKING(for working snprintf)
197 AC_CACHE_VAL(ac_cv_have_working_snprintf,
198 [AC_RUN_IFELSE([AC_LANG_SOURCE([[
199 #include <stdio.h>
200
201 int main(void)
202 {
203     char bufs[5] = { 'x', 'x', 'x', '\0', '\0' };
204     char bufd[5] = { 'x', 'x', 'x', '\0', '\0' };
205     int i;
206     i = snprintf (bufs, 2, "%s", "111");
207     if (strcmp (bufs, "1")) exit (1);
208     if (i != 3) exit (1);
209     i = snprintf (bufd, 2, "%d", 111);
210     if (strcmp (bufd, "1")) exit (1);
211     if (i != 3) exit (1);
212     exit(0);
213 }]])],[ac_cv_have_working_snprintf=yes],
214 [ac_cv_have_working_snprintf=no],[ac_cv_have_working_snprintf=cross])])
215 AC_MSG_RESULT([$ac_cv_have_working_snprintf])
216 AC_MSG_CHECKING(for working vsnprintf)
217 AC_CACHE_VAL(ac_cv_have_working_vsnprintf,
218 [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
219 #include <stdarg.h>
220
221 int my_vsnprintf (char *buf, const char *tmpl, ...)
222 {
223     int i;
224     va_list args;
225     va_start (args, tmpl);
226     i = vsnprintf (buf, 2, tmpl, args);
227     va_end (args);
228     return i;
229 }
230
231 int main(void)
232 {
233     char bufs[5] = { 'x', 'x', 'x', '\0', '\0' };
234     char bufd[5] = { 'x', 'x', 'x', '\0', '\0' };
235     int i;
236     i = my_vsnprintf (bufs, "%s", "111");
237     if (strcmp (bufs, "1")) exit (1);
238     if (i != 3) exit (1);
239     i = my_vsnprintf (bufd, "%d", 111);
240     if (strcmp (bufd, "1")) exit (1);
241     if (i != 3) exit (1);
242     exit(0);
243 }]])],[ac_cv_have_working_vsnprintf=yes],
244 [ac_cv_have_working_vsnprintf=no],[ac_cv_have_working_vsnprintf=cross])])
245 AC_MSG_RESULT([$ac_cv_have_working_vsnprintf])
246 if test x$ac_cv_have_working_snprintf$ac_cv_have_working_vsnprintf != "xyesyes"; then
247 AC_MSG_ERROR([fatal: buggy snprintf() detected])
248 fi])
249 AX_FUNC_SNPRINTF()
250 ################################################################## clock_gettime
251 clock_gettime_lib=
252 AC_CHECK_LIB([c], [clock_gettime], [clock_gettime_lib=c], [
253         AC_CHECK_LIB([rt], [clock_gettime], [clock_gettime_lib=rt], [], [])
254 ])
255 if test -n "$clock_gettime_lib"; then
256         AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [
257                 define to 1 if clock_gettime() is supported])
258 fi
259 if test "$clock_gettime_lib" = "rt"; then
260         AC_SUBST(clock_gettime_ldflags, -lrt)
261 fi
262 ########################################################################### osl
263 have_osl=yes
264 OLD_CPPFLAGS="$CPPFLAGS"
265 OLD_LD_FLAGS="$LDFLAGS"
266 OLD_LIBS="$LIBS"
267 AC_ARG_WITH(osl_headers, [AS_HELP_STRING(--with-osl-headers=dir,
268         [look for osl.h also in dir])])
269 if test -n "$with_osl_headers"; then
270         osl_cppflags="-I$with_osl_headers"
271         CPPFLAGS="$CPPFLAGS $osl_cppflags"
272 fi
273 AC_ARG_WITH(osl_libs, [AS_HELP_STRING(--with-osl-libs=dir,
274         [look for libosl also in dir])])
275 if test -n "$with_osl_libs"; then
276         osl_libs="-L$with_osl_libs"
277         LDFLAGS="$LDFLAGS $osl_libs"
278 fi
279
280 AC_CHECK_HEADER(osl.h, [], have_osl=no)
281 AC_CHECK_LIB([osl], [osl_open_table], [], have_osl=no)
282 if test "$have_osl" = "no"; then
283         AC_MSG_WARN([libosl not found, can not build para_server.
284 Download libosl at
285         http://systemlinux.org/~maan/osl
286 or execute
287         git clone git://git.tuebingen.mpg.de/osl
288         ])
289 else
290         extras="$extras server"
291         executables="$executables server"
292         server_cmdline_objs="add_cmdline(server)"
293         server_errlist_objs="server afh_common mp3_afh vss command net
294                 string signal time daemon http_send close_on_fork mm
295                 crypt_common ipc dccp_send fd user_list chunk_queue
296                 afs aft mood score attribute blob playlist sched acl
297                 send_common udp_send color fec wma_afh wma_common sideband"
298         all_errlist_objs="$all_errlist_objs server vss command
299                 http_send close_on_fork mm ipc dccp_send user_list
300                 chunk_queue afs aft mood score attribute blob playlist
301                 acl udp_send"
302
303         server_ldflags=""
304         audio_format_handlers="mp3 wma"
305         AC_SUBST(osl_cppflags)
306         server_ldflags="$server_ldflags $osl_libs -losl"
307 fi
308 CPPFLAGS="$OLD_CPPFLAGS"
309 LDFLAGS="$OLD_LDFLAGS"
310 LIBS="$OLD_LIBS"
311 ########################################################################### crypto
312 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
313         Force using crypto library "lib". This package requires either
314         openssl or libgcrypt being installed. Possible values for "lib"
315         are thus "openssl" and "gcrypt". If this option is not given,
316         openssl is tried first. If openssl was not found, gcrypt is
317         tried next.])])
318
319 case "$enable_cryptolib" in
320         "openssl") check_openssl="yes"; check_gcrypt="no";;
321         "gcrypt") check_openssl="no"; check_gcrypt="yes";;
322         "") check_openssl="yes"; check_gcrypt="yes";;
323         *) AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib]);;
324 esac
325 ###################################################################### openssl
326 if test "$check_openssl" = "yes"; then
327         OLD_CPPFLAGS="$CPPFLAGS"
328         OLD_LD_FLAGS="$LDFLAGS"
329         OLD_LIBS="$LIBS"
330         have_openssl="yes"
331         AC_ARG_WITH(openssl_headers, [AS_HELP_STRING(--with-openssl-headers=dir,
332                 [look for openssl headers also in dir])])
333         if test -n "$with_openssl_headers"; then
334                 openssl_cppflags="-I$with_openssl_headers"
335                 CPPFLAGS="$CPPFLAGS $openssl_cppflags"
336         fi
337         AC_ARG_WITH(openssl_libs, [AS_HELP_STRING(--with-openssl-libs=dir,
338                 [look for openssl libraries also in dir])])
339         if test -n "$with_openssl_libs"; then
340                 openssl_libs="-L$with_openssl_libs"
341                 LDFLAGS="$LDFLAGS $openssl_libs"
342         fi
343         AC_CHECK_HEADER(openssl/ssl.h, [], [have_openssl="no"])
344         AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
345         if test "$have_openssl" = "no" -a -z "$with_openssl_headers$with_openssl_libs"; then
346                 # try harder: openssl is sometimes installed in /usr/local/ssl
347                 openssl_cppflags="-I/usr/local/ssl/include"
348                 CPPFLAGS="$CPPFLAGS $openssl_cppflags"
349                 openssl_libs="-L/usr/local/ssl/lib"
350                 LDFLAGS="$LDFLAGS $openssl_libs"
351                 # clear cache
352                 unset ac_cv_header_openssl_ssl_h 2> /dev/null
353                 unset ac_cv_lib_crypto_RAND_bytes 2> /dev/null
354                 AC_CHECK_HEADER(openssl/ssl.h, [have_openssl="yes"], [])
355                 if test "$have_openssl" = "yes"; then
356                         AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
357                 fi
358         fi
359         if test "$have_openssl" = "yes"; then
360                 AC_DEFINE(HAVE_OPENSSL, 1, [define to 1 to turn on openssl support])
361                 AC_SUBST(openssl_cppflags)
362                 openssl_libs="$openssl_libs -lssl -lcrypto"
363                 server_ldflags="$server_ldflags $openssl_libs"
364                 client_ldflags="$client_ldflags $openssl_libs"
365                 audiod_ldflags="$audiod_ldflags $openssl_libs"
366
367                 all_errlist_objs="$all_errlist_objs crypt"
368                 server_errlist_objs="$server_errlist_objs crypt"
369                 client_errlist_objs="$client_errlist_objs crypt"
370                 audiod_errlist_objs="$audiod_errlist_objs crypt"
371
372                 check_gcrypt="no"
373         else
374                 AC_MSG_WARN([openssl libraries not found])
375         fi
376         CPPFLAGS="$OLD_CPPFLAGS"
377         LDFLAGS="$OLD_LDFLAGS"
378         LIBS="$OLD_LIBS"
379 else
380         have_openssl="no"
381 fi
382 ########################################################################### gcrypt
383 if test "$check_gcrypt" = "yes"; then
384         OLD_CPPFLAGS="$CPPFLAGS"
385         OLD_LD_FLAGS="$LDFLAGS"
386         OLD_LIBS="$LIBS"
387         have_gcrypt="yes"
388         AC_ARG_WITH(gcrypt_headers, [AS_HELP_STRING(--with-gcrypt-headers=dir,
389                 [look for gcrypt headers also in dir])])
390         if test -n "$with_gcrypt_headers"; then
391                 gcrypt_cppflags="-I$with_gcrypt_headers"
392                 CPPFLAGS="$CPPFLAGS $gcrypt_cppflags"
393         fi
394         AC_ARG_WITH(gcrypt_libs, [AS_HELP_STRING(--with-gcrypt-libs=dir,
395                 [look for libgcrypt also in dir])])
396         if test -n "$with_gcrypt_libs"; then
397                 gcrypt_libs="-L$with_gcrypt_libs"
398                 LDFLAGS="$LDFLAGS $gcrypt_libs"
399         fi
400         AC_CHECK_HEADER(gcrypt.h, [], [have_gcrypt="no"])
401         AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [have_gcrypt="no"])
402         if test "$have_gcrypt" = "yes"; then
403                 AC_DEFINE(HAVE_GCRYPT, 1, [define to 1 to turn on gcrypt support])
404                 AC_SUBST(gcrypt_cppflags)
405                 gcrypt_libs="$gcrypt_libs -lgcrypt"
406                 server_ldflags="$server_ldflags $gcrypt_libs"
407                 client_ldflags="$client_ldflags $gcrypt_libs"
408                 audiod_ldflags="$audiod_ldflags $gcrypt_libs"
409
410                 all_errlist_objs="$all_errlist_objs gcrypt"
411                 server_errlist_objs="$server_errlist_objs gcrypt"
412                 client_errlist_objs="$client_errlist_objs gcrypt"
413                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
414         else
415                 AC_MSG_WARN([gcrypt library not found])
416         fi
417         CPPFLAGS="$OLD_CPPFLAGS"
418         LDFLAGS="$OLD_LDFLAGS"
419         LIBS="$OLD_LIBS"
420 else
421         have_gcrypt="no"
422 fi
423 ###########################################################################
424 if test "$have_openssl" = "no" -a "$have_gcrypt" = "no"; then
425         AC_MSG_ERROR([neither openssl nor gcrypt usable])
426 fi
427 ########################################################################### libsocket
428 AC_CHECK_LIB([c], [socket],
429         [socket_lib=],
430         [socket_lib="-lsocket"]
431 )
432 server_ldflags="$server_ldflags $socket_lib"
433 client_ldflags="$client_ldflags $socket_lib"
434 audioc_ldflags="$audioc_ldflags $socket_lib"
435 audiod_ldflags="$audiod_ldflags $socket_lib"
436 recv_ldflags="$recv_ldflags $socket_lib"
437 AC_SEARCH_LIBS([connect],[socket],[],[
438         AC_MSG_ERROR([Fatal: Did not find connect().])
439 ],[])
440 ########################################################################### libnsl
441 AC_CHECK_LIB([c], [gethostbyname],
442         [nsl_lib=],
443         [nsl_lib="-lnsl"]
444 )
445 server_ldflags="$server_ldflags $nsl_lib"
446 client_ldflags="$client_ldflags $nsl_lib"
447 audioc_ldflags="$audioc_ldflags $nsl_lib"
448 recv_ldflags="$recv_ldflags $nsl_lib"
449 AC_SEARCH_LIBS([inet_ntoa],[nsl],[],[
450         AC_MSG_ERROR([Fatal: Did not find inet_ntoa().])
451 ],[])
452 ########################################################################### ucred
453 AC_MSG_CHECKING(for struct ucred)
454 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
455         #define _GNU_SOURCE
456         #include <sys/types.h>
457         #include <sys/socket.h>
458 ]], [[
459         struct ucred sucred; sucred.pid=0;
460 ]])],[have_ucred=yes],[have_ucred=no])
461 AC_MSG_RESULT($have_ucred)
462 if test ${have_ucred} = yes; then
463         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
464 fi
465
466 ########################################################################### curses
467 have_curses="yes"
468 OLD_CPPFLAGS="$CPPFLAGS"
469 OLD_LD_FLAGS="$LDFLAGS"
470 OLD_LIBS="$LIBS"
471 AC_ARG_WITH(curses_headers, [AS_HELP_STRING(--with-curses-headers=dir,
472         [look for curses.h also in dir])])
473 if test -n "$with_curses_headers"; then
474         curses_cppflags="-I$with_curses_headers"
475         CPPFLAGS="$CPPFLAGS $curses_cppflags"
476 fi
477 AC_ARG_WITH(curses_libs, [AS_HELP_STRING(--with-curses-libs=dir,
478         [look for libcurses also in dir])])
479 if test -n "$with_curses_libs"; then
480         curses_libs="-L$with_curses_libs"
481         LDFLAGS="$LDFLAGS $curses_libs"
482 fi
483 AC_CHECK_HEADER(curses.h, [], [
484         have_curses="no"
485 ])
486 AC_CHECK_LIB([curses], [initscr], [], [
487         have_curses="no"
488 ])
489 if test "$have_curses" = "yes"; then
490         AC_SUBST(curses_cppflags)
491         AC_DEFINE(HAVE_NCURSES, 1, [define to 1 to turn on curses support])
492         extras="$extras gui"
493         executables="$executables gui"
494 else
495         AC_MSG_WARN([no curses lib, cannot build para_gui])
496 fi
497 CPPFLAGS="$OLD_CPPFLAGS"
498 LDFLAGS="$OLD_LDFLAGS"
499 LIBS="$OLD_LIBS"
500
501 ########################################################################### ip_mreqn
502 AC_MSG_CHECKING(for struct ip_mreqn (UDPv4 multicast))
503 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
504         #include <netdb.h>
505         #include <net/if.h>
506 ]], [[
507         struct ip_mreqn mn;
508         mn.imr_ifindex = 0;
509 ]])],[have_ip_mreqn=yes],[have_ip_mreqn=no])
510 AC_MSG_RESULT($have_ip_mreqn)
511 if test ${have_ip_mreqn} = yes; then
512         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 you have struct ip_mreqn)
513 fi
514 ########################################################################### osx
515
516 AC_MSG_CHECKING(for CoreAudio (MacOs))
517 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
518         #include <CoreAudio/CoreAudio.h>
519 ]], [[
520         AudioDeviceID id;
521 ]])],[have_core_audio=yes],[have_core_audio=no])
522 AC_MSG_RESULT($have_core_audio)
523 if test ${have_core_audio} = yes; then
524         f1="-framework CoreAudio"
525         f2="-framework AudioToolbox"
526         f3="-framework AudioUnit"
527         f4="-framework CoreServices"
528         f="$f1 $f2 $f3 $f4"
529
530         all_errlist_objs="$all_errlist_objs osx_write"
531         # ipc is linked into para_server server and into the osx writer. If osl
532         # was not found, para_server will not be built and ipc has not yet been
533         # added to the list of all objects, so we must add it here.
534         if test "$have_osl" = "no"; then
535                 all_errlist_objs="$all_errlist_objs ipc"
536         fi
537         audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
538         audiod_cmdline_objs="$audiod_cmdline_objs osx_write.cmdline"
539         audiod_ldflags="$audiod_ldflags $f"
540
541         play_errlist_objs="$play_errlist_objs osx_write ipc"
542         play_cmdline_objs="$play_cmdline_objs osx_write.cmdline"
543         play_ldflags="$play_ldflags $f"
544
545         write_errlist_objs="$write_errlist_objs osx_write ipc"
546         write_cmdline_objs="$write_cmdline_objs osx_write.cmdline"
547         write_ldflags="$write_ldflags $f"
548         writers="$writers osx"
549         default_writer="OSX_WRITE"
550         AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X)
551 fi
552 ########################################################### ogg/vorbis/speex
553 have_ogg="yes"
554 OLD_CPPFLAGS="$CPPFLAGS"
555 OLD_LD_FLAGS="$LDFLAGS"
556 OLD_LIBS="$LIBS"
557 AC_ARG_WITH(ogg_headers, [AS_HELP_STRING(--with-ogg-headers=dir,
558         [look for ogg headers also in dir])])
559 AC_ARG_WITH(ogg_libs, [AS_HELP_STRING(--with-ogg-libs=dir,
560         [look for ogg libs also in dir])])
561 AC_ARG_WITH(vorbis_headers, [AS_HELP_STRING(--with-vorbis-headers=dir,
562         [look for vorbis headers also in dir])])
563 AC_ARG_WITH(vorbis_libs, [AS_HELP_STRING(--with-vorbis-libs=dir,
564         [look for vorbis libs also in dir])])
565 AC_ARG_WITH(speex_headers, [AS_HELP_STRING(--with-speex-headers=dir,
566         [look for speex headers also in dir])])
567 AC_ARG_WITH(speex_libs, [AS_HELP_STRING(--with-speex-libs=dir,
568         [look for speex libs also in dir])])
569
570 if test -n "$with_ogg_headers"; then
571         ogg_cppflags="-I$with_ogg_headers"
572         CPPFLAGS="$CPPFLAGS $ogg_cppflags"
573 fi
574 if test -n "$with_ogg_libs"; then
575         ogg_libs="-L$with_ogg_libs"
576         LDFLAGS="$LDFLAGS $ogg_libs"
577 fi
578 AC_CHECK_HEADERS([ogg/ogg.h], [], [ have_ogg="no"; ])
579 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [ have_ogg="no" ])
580
581 have_vorbis="yes"
582 have_speex="yes"
583 if test "$have_ogg" = "yes"; then
584         # vorbis
585         if test -n "$with_vorbis_headers"; then
586                 vorbis_cppflags="-I$with_vorbis_headers"
587                 CPPFLAGS="$CPPFLAGS $vorbis_cppflags"
588         fi
589         if test -n "$with_vorbis_libs"; then
590                 vorbis_libs="-L$with_vorbis_libs"
591                 LDFLAGS="$LDFLAGS $vorbis_libs"
592         fi
593         AC_CHECK_HEADERS([vorbis/codec.h], [], [ have_vorbis="no" ])
594         AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [ have_vorbis="no" ])
595
596         # speex
597         if test -n "$with_speex_headers"; then
598                 speex_cppflags="-I$with_speex_headers"
599                 CPPFLAGS="$CPPFLAGS $speex_cppflags"
600         fi
601         if test -n "$with_speex_libs"; then
602                 speex_libs="-L$with_speex_libs"
603                 LDFLAGS="$LDFLAGS $speex_libs"
604         fi
605         AC_CHECK_LIB([speex], [speex_decoder_init], [], [ have_speex="no" ])
606         AC_CHECK_HEADERS([speex/speex.h], [], [ have_speex="no" ])
607 else
608         AC_MSG_WARN([vorbis/speex depend on libogg, which was not detected])
609         have_vorbis="no"
610         have_speex="no"
611 fi
612
613 msg="support in para_server/para_filter/para_afh"
614 if test "$have_vorbis" = "yes" || test "$have_speex" = "yes"; then
615         AC_SUBST(ogg_cppflags)
616         ogg_libs="$ogg_libs -logg"
617         if test "$OSTYPE" = "Darwin"; then
618                 ogg_libs="-Wl,-bind_at_load $ogg_libs"
619         fi
620         server_ldflags="$server_ldflags $ogg_libs"
621         filter_ldflags="$filter_ldflags $ogg_libs"
622         audiod_ldflags="$audiod_ldflags $ogg_libs"
623         play_ldflags="$play_ldflags $ogg_libs"
624         afh_ldflags="$afh_ldflags $ogg_libs"
625         recv_ldflags="$recv_ldflags $ogg_libs"
626         all_errlist_objs="$all_errlist_objs ogg_afh_common"
627         afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
628         recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
629         server_errlist_objs="$server_errlist_objs ogg_afh_common"
630         play_errlist_objs="$play_errlist_objs ogg_afh_common"
631 fi
632 if test "$have_vorbis" = "yes"; then
633         all_errlist_objs="$all_errlist_objs oggdec_filter ogg_afh"
634         AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg/vorbis support)
635         filters="$filters oggdec"
636         vorbis_libs="-lvorbis -lvorbisfile"
637         server_ldflags="$server_ldflags $vorbis_libs"
638         filter_ldflags="$filter_ldflags $vorbis_libs"
639         audiod_ldflags="$audiod_ldflags $vorbis_libs"
640         play_ldflags="$play_ldflags $vorbis_libs"
641         afh_ldflags="$afh_ldflags $vorbis_libs"
642         recv_ldflags="$recv_ldflags $vorbis_libs"
643
644         server_errlist_objs="$server_errlist_objs ogg_afh"
645         filter_errlist_objs="$filter_errlist_objs oggdec_filter"
646         audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
647         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
648         afh_errlist_objs="$afh_errlist_objs ogg_afh"
649         recv_errlist_objs="$recv_errlist_objs ogg_afh"
650
651         audiod_audio_formats="$audiod_audio_formats ogg"
652         audio_format_handlers="$audio_format_handlers ogg"
653 else
654         AC_MSG_WARN([no ogg/vorbis $msg])
655 fi
656 if test "$have_speex" = "yes"; then
657         all_errlist_objs="$all_errlist_objs spxdec_filter spx_afh spx_common"
658         AC_DEFINE(HAVE_SPEEX, 1, define to 1 to turn on ogg/speex support)
659         filters="$filters spxdec"
660         speex_libs="-lspeex"
661         server_ldflags="$server_ldflags $speex_libs"
662         filter_ldflags="$filter_ldflags $speex_libs"
663         audiod_ldflags="$audiod_ldflags $speex_libs"
664         play_ldflags="$play_ldflags $speex_libs"
665         afh_ldflags="$afh_ldflags $speex_libs"
666         recv_ldflags="$recv_ldflags $speex_libs"
667
668         server_errlist_objs="$server_errlist_objs spx_afh spx_common"
669         filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
670         audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
671         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
672         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
673         recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
674
675         audiod_audio_formats="$audiod_audio_formats spx"
676         audio_format_handlers="$audio_format_handlers spx"
677 else
678         AC_MSG_WARN([no ogg/speex $msg])
679 fi
680 CPPFLAGS="$OLD_CPPFLAGS"
681 LDFLAGS="$OLD_LDFLAGS"
682 LIBS="$OLD_LIBS"
683 ########################################################################### faad
684 have_faad=yes
685 OLD_CPPFLAGS="$CPPFLAGS"
686 OLD_LD_FLAGS="$LDFLAGS"
687 OLD_LIBS="$LIBS"
688 AC_ARG_WITH(faad_headers, [AS_HELP_STRING(--with-faad-headers=dir,
689         [look for neaacdec.h also in dir])])
690 if test -n "$with_faad_headers"; then
691         faad_cppflags="-I$with_faad_headers"
692         CPPFLAGS="$CPPFLAGS $faad_cppflags"
693 fi
694 AC_ARG_WITH(faad_libs, [AS_HELP_STRING(--with-faad-libs=dir,
695         [look for libfaad also in dir])])
696 if test -n "$with_faad_libs"; then
697         faad_libs="-L$with_faad_libs"
698         LDFLAGS="$LDFLAGS $faad_libs"
699 fi
700 AC_CHECK_HEADER(neaacdec.h, [], have_faad=no)
701 AC_CHECK_LIB([faad], [NeAACDecOpen], [], have_faad=no)
702 if test "$have_faad" = "yes"; then
703         AC_DEFINE(HAVE_FAAD, 1, define to 1 if you want to build the aacdec filter)
704         all_errlist_objs="$all_errlist_objs aac_common aacdec_filter aac_afh"
705         filter_errlist_objs="$filter_errlist_objs aacdec_filter aac_common"
706         afh_errlist_objs="$afh_errlist_objs aac_common aac_afh"
707         audiod_errlist_objs="$audiod_errlist_objs aacdec_filter aac_common"
708         play_errlist_objs="$play_errlist_objs aacdec_filter aac_afh aac_common"
709         server_errlist_objs="$server_errlist_objs aac_afh aac_common"
710         recv_errlist_objs="$recv_errlist_objs aac_afh aac_common"
711
712         server_ldflags="$server_ldflags $faad_libs -lfaad"
713         filter_ldflags="$filter_ldflags $faad_libs -lfaad"
714         audiod_ldflags="$audiod_ldflags $faad_libs -lfaad"
715         play_ldflags="$play_ldflags $faad_libs -lfaad"
716         afh_ldflags="$afh_ldflags $faad_libs -lfaad"
717         recv_ldflags="$afh_ldflags $faad_libs -lfaad"
718
719         audiod_audio_formats="$audiod_audio_formats aac"
720         audio_format_handlers="$audio_format_handlers aac"
721         filters="$filters aacdec"
722         AC_SUBST(faad_cppflags)
723 else
724         AC_MSG_WARN([no aac support in para_audiod/para_filter])
725 fi
726 CPPFLAGS="$OLD_CPPFLAGS"
727 LDFLAGS="$OLD_LDFLAGS"
728 LIBS="$OLD_LIBS"
729 ########################################################################### mad
730 have_mad="yes"
731 OLD_CPPFLAGS="$CPPFLAGS"
732 OLD_LD_FLAGS="$LDFLAGS"
733 OLD_LIBS="$LIBS"
734
735 AC_ARG_WITH(mad_headers, [AS_HELP_STRING(--with-mad-headers=dir,
736         [look for mad.h also in dir])])
737 if test -n "$with_mad_headers"; then
738         mad_cppflags="-I$with_mad_headers"
739         CPPFLAGS="$CPPFLAGS $mad_cppflags"
740 fi
741 AC_ARG_WITH(mad_libs, [AS_HELP_STRING(--with-mad-libs=dir,
742         [look for libmad also in dir])])
743 if test -n "$with_mad_libs"; then
744         mad_libs="-L$with_mad_libs"
745         LDFLAGS="$LDFLAGS $mad_libs"
746 fi
747 AC_CHECK_HEADERS([mad.h], [], [
748         have_mad="no"
749 ])
750 AC_CHECK_LIB([mad], [mad_stream_init], [], [
751         have_mad="no"
752 ])
753 if test "$have_mad" = "yes"; then
754         AC_DEFINE(HAVE_MAD, 1, define to 1 if you want to build the mp3dec filter)
755         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(mp3dec_filter)"
756         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(mp3dec_filter)"
757         play_cmdline_objs="$play_cmdline_objs add_cmdline(mp3dec_filter)"
758         all_errlist_objs="$all_errlist_objs mp3dec_filter"
759         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
760         audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
761         play_errlist_objs="$play_errlist_objs mp3dec_filter"
762         filter_ldflags="$filter_ldflags $mad_libs -lmad"
763         audiod_ldflags="$audiod_ldflags $mad_libs -lmad"
764         play_ldflags="$play_ldflags $mad_libs -lmad"
765         audiod_audio_formats="$audiod_audio_formats mp3"
766         filters="$filters mp3dec"
767         AC_SUBST(mad_cppflags)
768 else
769         AC_MSG_WARN([no mp3dec support in para_audiod/para_filter])
770 fi
771 CPPFLAGS="$OLD_CPPFLAGS"
772 LDFLAGS="$OLD_LDFLAGS"
773 LIBS="$OLD_LIBS"
774 ###################################################################### libid3tag
775 OLD_CPPFLAGS="$CPPFLAGS"
776 OLD_LD_FLAGS="$LDFLAGS"
777 OLD_LIBS="$LIBS"
778
779 have_libid3tag="yes"
780 AC_ARG_WITH(id3tag_headers, [AS_HELP_STRING(--with-id3tag-headers=dir,
781         [look for id3tag header files also in dir])])
782 if test -n "$with_id3tag_headers"; then
783         id3tag_cppflags="-I$with_id3tag_headers"
784         CPPFLAGS="$CPPFLAGS $id3tag_cppflags"
785 fi
786 AC_ARG_WITH(id3tag_libs, [AS_HELP_STRING(--with-id3tag-libs=dir,
787         [look for id3tag libs also in dir])])
788 if test -n "$with_id3tag_libs"; then
789         id3tag_libs="-L$with_id3tag_libs"
790         LDFLAGS="$LDFLAGS $id3tag_libs"
791 fi
792
793 AC_MSG_CHECKING(for libid3tag)
794 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
795         #include <id3tag.h>
796 ]], [[
797         struct id3_tag t = {.flags = 0};
798 ]])],[],[have_libid3tag=no])
799 AC_MSG_RESULT($have_libid3tag)
800
801 if test ${have_libid3tag} = yes; then
802         AC_DEFINE(HAVE_LIBID3TAG, 1, define to 1 you have libid3tag)
803         server_ldflags="$server_ldflags $id3tag_libs -lid3tag -lz"
804         afh_ldflags="$afh_ldflags $id3tag_libs -lid3tag -lz"
805         play_ldflags="$play_ldflags -lz"
806         recv_ldflags="$recv_ldflags $id3tag_libs -lid3tag"
807         play_ldflags="$play_ldflags $id3tag_libs -lid3tag"
808         AC_SUBST(id3tag_cppflags)
809 else
810         AC_MSG_WARN([no support for id3v2 tags])
811 fi
812 CPPFLAGS="$OLD_CPPFLAGS"
813 LDFLAGS="$OLD_LDFLAGS"
814 LIBS="$OLD_LIBS"
815 ########################################################################### flac
816 OLD_CPPFLAGS="$CPPFLAGS"
817 OLD_LD_FLAGS="$LDFLAGS"
818 OLD_LIBS="$LIBS"
819
820 have_flac="yes"
821 AC_ARG_WITH(flac_headers, [AS_HELP_STRING(--with-flac-headers=dir,
822         [look for flac headers also in dir])])
823 if test -n "$with_flac_headers"; then
824         flac_cppflags="-I$with_flac_headers"
825         CPPFLAGS="$CPPFLAGS $flac_cppflags"
826 fi
827 AC_ARG_WITH(flac_libs, [AS_HELP_STRING(--with-flac-libs=dir,
828         [look for flac libs also in dir])])
829 if test -n "$with_flac_libs"; then
830         flac_libs="-L$with_flac_libs"
831         LDFLAGS="$LDFLAGS $flac_libs"
832 fi
833 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], have_flac=no)
834 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], have_flac=no, -logg -lm)
835 if test "$have_flac" = "yes"; then
836         AC_DEFINE(HAVE_FLAC, 1, define to 1 if you want to build the flacdec filter)
837         all_errlist_objs="$all_errlist_objs flacdec_filter flac_afh"
838         filter_errlist_objs="$filter_errlist_objs flacdec_filter"
839         audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
840         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
841         afh_errlist_objs="$afh_errlist_objs flac_afh"
842         server_errlist_objs="$server_errlist_objs flac_afh"
843         recv_errlist_objs="$recv_errlist_objs flac_afh"
844         filter_ldflags="$filter_ldflags $flac_libs -lFLAC"
845         audiod_ldflags="$audiod_ldflags $flac_libs -lFLAC"
846         play_ldflags="$play_ldflags $flac_libs -lFLAC"
847         server_ldflags="$server_ldflags $flac_libs -lFLAC"
848         afh_ldflags="$afh_ldflags $flac_libs -lFLAC"
849         recv_ldflags="$afh_ldflags $flac_libs -lFLAC"
850         filters="$filters flacdec"
851         audio_format_handlers="$audio_format_handlers flac"
852         audiod_audio_formats="$audiod_audio_formats flac"
853         AC_SUBST(flac_cppflags)
854 else
855         AC_MSG_WARN([no flac support in para_audiod/para_filter/para_afh/para_server])
856 fi
857 CPPFLAGS="$OLD_CPPFLAGS"
858 LDFLAGS="$OLD_LDFLAGS"
859 LIBS="$OLD_LIBS"
860 ########################################################################### oss
861 OLD_CPPFLAGS="$CPPFLAGS"
862 OLD_LD_FLAGS="$LDFLAGS"
863 OLD_LIBS="$LIBS"
864
865 have_oss="yes"
866 msg="=> will not build oss writer"
867
868 AC_CHECK_HEADER(sys/soundcard.h, [
869         audiod_errlist_objs="$audiod_errlist_objs oss_write"
870         play_errlist_objs="$play_errlist_objs oss_write"
871         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oss_write)"
872         play_cmdline_objs="$play_cmdline_objs add_cmdline(oss_write)"
873
874         write_errlist_objs="$write_errlist_objs oss_write"
875         write_cmdline_objs="$write_cmdline_objs add_cmdline(oss_write)"
876         fade_errlist_objs="$fade_errlist_objs oss_mix"
877         all_errlist_objs="$all_errlist_objs oss_write oss_mix"
878
879         writers="$writers oss"
880         default_writer="OSS_WRITE"
881         mixers="${mixers}oss "
882         default_mixer="OSS_MIX"
883
884         AC_CHECK_LIB(ossaudio, _oss_ioctl, [
885                         audiod_ldflags="$audiod_ldflags -lossaudio"
886                         play_ldflags="$play_ldflags -lossaudio"
887                         write_ldflags="$write_ldflags -lossaudio"
888                         fade_ldflags="$fade_ldflags -lossaudio"
889                 ]
890         )
891         ],
892         [
893                 have_oss="no"
894                 AC_MSG_WARN([no sys/soundcard.h $msg])
895         ]
896 )
897 CPPFLAGS="$OLD_CPPFLAGS"
898 LDFLAGS="$OLD_LDFLAGS"
899 LIBS="$OLD_LIBS"
900
901 ########################################################################### alsa
902 OLD_CPPFLAGS="$CPPFLAGS"
903 OLD_LD_FLAGS="$LDFLAGS"
904 OLD_LIBS="$LIBS"
905
906 msg="=> no alsa support for para_audiod/para_write"
907 if test "$OSTYPE" != "Linux"; then
908         have_alsa="no"
909 else
910         have_alsa="yes"
911 fi
912 if test "$have_alsa" = "yes"; then
913         AC_CHECK_HEADERS([alsa/asoundlib.h], [], [
914                 have_alsa="no"
915                 AC_MSG_WARN([no alsa/asoundlib $msg])
916         ])
917 fi
918
919 if test "$have_alsa" = "yes"; then
920         AC_CHECK_LIB([asound], [snd_pcm_open], [], [
921                 have_alsa="no"
922                 AC_MSG_WARN([no libasound $msg])
923         ])
924 fi
925
926 if test "$have_alsa" = "yes"; then
927         audiod_errlist_objs="$audiod_errlist_objs alsa_write"
928         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(alsa_write)"
929         audiod_ldflags="$audiod_ldflags -lasound"
930         play_errlist_objs="$play_errlist_objs alsa_write"
931         play_cmdline_objs="$play_cmdline_objs add_cmdline(alsa_write)"
932         play_ldflags="$play_ldflags -lasound"
933
934         write_errlist_objs="$write_errlist_objs alsa_write"
935         write_cmdline_objs="$write_cmdline_objs add_cmdline(alsa_write)"
936         write_ldflags="$write_ldflags -lasound"
937         fade_errlist_objs="$fade_errlist_objs alsa_mix"
938         fade_ldflags="$fade_ldflags -lasound"
939         all_errlist_objs="$all_errlist_objs alsa_write alsa_mix"
940
941         writers="$writers alsa"
942         default_writer="ALSA_WRITE"
943         mixers="${mixers}alsa "
944         default_mixer="ALSA_MIX"
945 fi
946
947 CPPFLAGS="$OLD_CPPFLAGS"
948 LDFLAGS="$OLD_LDFLAGS"
949 LIBS="$OLD_LIBS"
950 ########################################################################### fade
951 if test -n "$mixers"; then
952         extras="$extras fade"
953         executables="$executables fade"
954         all_errlist_objs="$all_errlist_objs fade"
955         fade_errlist_objs="$fade_errlist_objs fade exec string fd"
956         fade_cmdline_objs="add_cmdline(fade)"
957         fade_objs="$fade_cmdline_objs $fade_errlist_objs"
958         AC_SUBST(fade_objs, add_dot_o($fade_objs))
959         AC_SUBST(fade_ldflags, $fade_ldflags)
960         AC_DEFINE_UNQUOTED(INIT_FADE_ERRLISTS,
961                 objlist_to_errlist($fade_errlist_objs),
962                 errors used by para_fade)
963         enum="$(
964                 for i in $mixers; do
965                         printf "${i}_MIX, " | tr '[a-z]' '[A-Z]'
966                 done
967         )"
968         AC_DEFINE_UNQUOTED(MIXER_ENUM, $enum NUM_SUPPORTED_MIXERS,
969                 enum of supported mixers)
970         AC_DEFINE_UNQUOTED(DEFAULT_MIXER, $default_mixer,
971                 use this mixer if none was specified)
972         names="$(for i in $mixers; do printf \"$i\",' ' ; done)"
973         AC_DEFINE_UNQUOTED(MIXER_NAMES, $names, supported mixer names)
974         inits="$(
975                 for i in $mixers; do
976                         printf 'extern void '$i'_mix_init(struct mixer *); '
977                 done
978         )"
979         AC_DEFINE_UNQUOTED(DECLARE_MIXER_INITS, $inits,
980                 init functions of the supported mixers)
981         array="$(for i in $mixers; do printf '{.init = '$i'_mix_init},'; done)"
982         AC_DEFINE_UNQUOTED(MIXER_ARRAY, $array, array of supported mixers)
983         mixer_summary="supported mixers:: $mixers, default: $default_mixer"
984 else
985         AC_MSG_WARN([no mixer support])
986         mixer_summary="para_fade: no"
987 fi
988 ########################################################################### libao
989 OLD_CPPFLAGS="$CPPFLAGS"
990 OLD_LD_FLAGS="$LDFLAGS"
991 OLD_LIBS="$LIBS"
992
993 have_ao="yes"
994 AC_ARG_WITH(ao_headers, [AS_HELP_STRING(--with-ao-headers=dir,
995         [look for ao/ao.h also in dir])])
996 if test -n "$with_ao_headers"; then
997         ao_cppflags="-I$with_ao_headers"
998         CPPFLAGS="$CPPFLAGS $ao_cppflags"
999 fi
1000 AC_ARG_WITH(ao_libs, [AS_HELP_STRING(--with-ao-libs=dir,
1001         [look for libao also in dir])])
1002 if test -n "$with_ao_libs"; then
1003         ao_libs="-L$with_ao_libs"
1004         LDFLAGS="$LDFLAGS $ao_libs"
1005 fi
1006 msg="no libao support for para_audiod/para_write"
1007 AC_CHECK_HEADERS([ao/ao.h], [
1008         ], [
1009         have_ao="no"
1010         AC_MSG_WARN([ao.h not found, $msg])
1011 ])
1012 if test "$have_ao" = "yes"; then
1013         AC_CHECK_LIB([ao], [ao_initialize], [], [
1014                 have_ao="no"
1015                 AC_MSG_WARN([ao lib not found or not working, $msg])
1016         ])
1017 fi
1018 if test "$have_ao" = "yes"; then
1019         AC_CHECK_HEADERS([pthread.h], [
1020                 ], [
1021                 have_ao="no"
1022                 AC_MSG_WARN([pthread.h not found, $msg])
1023         ])
1024 fi
1025 if test "$have_ao" = "yes"; then
1026         AC_CHECK_LIB([pthread], [pthread_create], [], [
1027                 have_ao="no"
1028                 AC_MSG_WARN([pthread lib not found or not working, $msg])
1029         ])
1030 fi
1031 if test "$have_ao" = "yes"; then
1032         all_errlist_objs="$all_errlist_objs ao_write"
1033         audiod_errlist_objs="$audiod_errlist_objs ao_write"
1034         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(ao_write)"
1035         audiod_ldflags="$audiod_ldflags -lao -lpthread"
1036
1037         play_errlist_objs="$play_errlist_objs ao_write"
1038         play_cmdline_objs="$play_cmdline_objs add_cmdline(ao_write)"
1039         play_ldflags="$play_ldflags -lao -lpthread"
1040
1041         write_errlist_objs="$write_errlist_objs ao_write"
1042         write_cmdline_objs="$write_cmdline_objs add_cmdline(ao_write)"
1043         write_ldflags="$write_ldflags $ao_libs -lao -lpthread"
1044         writers="$writers ao"
1045         AC_SUBST(ao_cppflags)
1046 fi
1047
1048 CPPFLAGS="$OLD_CPPFLAGS"
1049 LDFLAGS="$OLD_LDFLAGS"
1050 LIBS="$OLD_LIBS"
1051 ############################################################# readline
1052 OLD_CPPFLAGS="$CPPFLAGS"
1053 OLD_LD_FLAGS="$LDFLAGS"
1054 OLD_LIBS="$LIBS"
1055
1056 have_readline="yes"
1057 AC_ARG_WITH(readline_headers, [AS_HELP_STRING(--with-readline-headers=dir,
1058         [look for libreadline header files also in dir])])
1059 if test -n "$with_readline_headers"; then
1060         readline_cppflags="-I$with_readline_headers"
1061         CPPFLAGS="$CPPFLAGS $readline_cppflags"
1062 fi
1063
1064 AC_ARG_WITH(readline_libs, [AS_HELP_STRING(--with-readline-libs=dir,
1065         [look for readline library also in dir])])
1066 if test -n "$with_readline_libs"; then
1067         readline_libs="-L$with_readline_libs"
1068         LDFLAGS="$LDFLAGS $readline_libs"
1069 fi
1070 msg="no interactive cli support"
1071 AC_CHECK_HEADERS([readline/readline.h], [
1072         ], [
1073         have_readline="no"
1074         AC_MSG_WARN([readline/readline.h not found, $msg])
1075 ])
1076
1077 if test "$have_curses" != "yes"; then
1078         have_readline="no"
1079         AC_MSG_WARN([interactive cli support depends on curses,])
1080         AC_MSG_WARN([but no curses lib was detected, $msg])
1081 fi
1082
1083 if test "$have_readline" = "yes"; then
1084         readline_libs="$readline_libs -lreadline"
1085         AC_SEARCH_LIBS([rl_free_keymap], [readline], [], [have_readline="no"])
1086         if test "$have_readline" = "no"; then # try with -lcurses
1087                 # clear cache
1088                 AC_MSG_NOTICE([trying again with -lcurses])
1089                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1090                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1091                         have_readline=yes
1092                         readline_libs="$readline_libs -lcurses"
1093                 ], [], [-lcurses])
1094         fi
1095         if test "$have_readline" = "no"; then # try with -ltermcap
1096                 # clear cache
1097                 AC_MSG_NOTICE([trying again with -ltermcap])
1098                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1099                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1100                         have_readline=yes
1101                         readline_libs="$readline_libs -ltermcap"
1102                 ], [], [-ltermcap])
1103         fi
1104 fi
1105
1106 if test "$have_readline" = "yes"; then
1107         all_errlist_objs="$all_errlist_objs interactive"
1108         client_errlist_objs="$client_errlist_objs interactive"
1109         client_ldflags="$client_ldflags $readline_libs"
1110         audioc_errlist_objs="$audioc_errlist_objs buffer_tree interactive sched time"
1111         audioc_ldflags="$audioc_ldflags $readline_libs"
1112         play_errlist_objs="$play_errlist_objs interactive"
1113         play_ldflags="$play_ldflags $readline_libs"
1114         AC_SUBST(readline_cppflags)
1115         AC_DEFINE(HAVE_READLINE, 1, define to 1 to turn on readline support)
1116 else
1117         AC_MSG_WARN([libreadline not found or unusable])
1118 fi
1119 CPPFLAGS="$OLD_CPPFLAGS"
1120 LDFLAGS="$OLD_LDFLAGS"
1121 LIBS="$OLD_LIBS"
1122 ############################################################# libsamplerate
1123 OLD_CPPFLAGS="$CPPFLAGS"
1124 OLD_LD_FLAGS="$LDFLAGS"
1125 OLD_LIBS="$LIBS"
1126
1127 have_samplerate="yes"
1128 AC_ARG_WITH(samplerate_headers, [AS_HELP_STRING(--with-samplerate-headers=dir,
1129         [look for samplerate headers also in dir])])
1130 if test -n "$with_samplerate_headers"; then
1131         samplerate_cppflags="-I$with_samplerate_headers"
1132         CPPFLAGS="$CPPFLAGS $samplerate_cppflags"
1133 fi
1134 AC_ARG_WITH(samplerate_libs, [AS_HELP_STRING(--with-samplerate-libs=dir,
1135         [look for samplerate libs also in dir])])
1136 if test -n "$with_samplerate_libs"; then
1137         samplerate_libs="-L$with_samplerate_libs"
1138         LDFLAGS="$LDFLAGS $samplerate_libs"
1139 fi
1140
1141 AC_CHECK_HEADER(samplerate.h, [], have_samplerate=no)
1142 AC_CHECK_LIB([samplerate], [src_process], [], have_samplerate=no, [])
1143
1144 if test "$have_samplerate" = "yes"; then
1145         all_errlist_objs="$all_errlist_objs resample_filter"
1146         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
1147         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(resample_filter)"
1148         audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
1149         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(resample_filter)"
1150         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
1151         play_cmdline_objs="$play_cmdline_objs add_cmdline(resample_filter)"
1152         filter_ldflags="$filter_ldflags $samplerate_libs -lsamplerate"
1153         audiod_ldflags="$audiod_ldflags $samplerate_libs -lsamplerate"
1154         play_ldflags="$play_ldflags $samplerate_libs -lsamplerate"
1155         filters="$filters resample"
1156         AC_SUBST(samplerate_cppflags)
1157 else
1158         AC_MSG_WARN([no resample support in para_audiod/para_filter])
1159 fi
1160 CPPFLAGS="$OLD_CPPFLAGS"
1161 LDFLAGS="$OLD_LDFLAGS"
1162 LIBS="$OLD_LIBS"
1163 ############################################################# error2.h
1164 AC_MSG_NOTICE(creating error2.h)
1165 for i in $executables; do
1166         echo "$i: "
1167         eval echo \$${i}_errlist_objs
1168 done | ./error2.pl > error2.h
1169 for obj in $all_errlist_objs; do
1170         SS="$SS SS_$(echo $obj | tr 'a-z' 'A-Z'),"
1171 done
1172 AC_DEFINE_UNQUOTED(DEFINE_ERRLIST_OBJECT_ENUM,
1173         [enum {$SS NUM_SS}],
1174         [list of all objects that use the paraslash error facility]
1175 )
1176
1177 ################################################################## status items
1178
1179 status_items="basename status num_played mtime bitrate frequency file_size
1180 status_flags format score techinfo afs_mode
1181 attributes_txt decoder_flags audiod_status play_time attributes_bitmap
1182 offset seconds_total stream_start current_time audiod_uptime image_id
1183 lyrics_id duration directory lyrics_name image_name path hash channels
1184 last_played num_chunks chunk_time amplification artist title year album
1185 comment"
1186
1187 result=
1188 for i in $status_items; do
1189         result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), "
1190 done
1191 AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result],
1192         [enum of all status items])
1193
1194 result=
1195 for i in $status_items; do
1196         result="$result \"$i\", "
1197 done
1198 AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result],
1199         [char * array of all status items])
1200
1201 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
1202         [formats supported by para_server and para_afh])
1203
1204 AC_SUBST(executables, add_para($executables))
1205
1206 recv_objs="$recv_cmdline_objs $recv_errlist_objs"
1207 filter_objs="$filter_cmdline_objs $filter_errlist_objs"
1208 audiod_objs="$audiod_cmdline_objs $audiod_errlist_objs"
1209 server_objs="$server_cmdline_objs $server_errlist_objs"
1210 write_objs="$write_cmdline_objs $write_errlist_objs"
1211 client_objs="$client_cmdline_objs $client_errlist_objs"
1212 audioc_objs="$audioc_cmdline_objs $audioc_errlist_objs"
1213 afh_objs="$afh_cmdline_objs $afh_errlist_objs"
1214 play_objs="$play_cmdline_objs $play_errlist_objs"
1215
1216
1217 AC_SUBST(recv_objs, add_dot_o($recv_objs))
1218 AC_SUBST(recv_ldflags, $recv_ldflags)
1219 AC_DEFINE_UNQUOTED(INIT_RECV_ERRLISTS, objlist_to_errlist($recv_errlist_objs),
1220         errors used by para_recv)
1221
1222 AC_SUBST(filter_objs, add_dot_o($filter_objs))
1223 AC_SUBST(filter_ldflags, $filter_ldflags)
1224 AC_DEFINE_UNQUOTED(INIT_FILTER_ERRLISTS,
1225         objlist_to_errlist($filter_errlist_objs), errors used by para_filter)
1226
1227 AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
1228 AC_SUBST(audiod_ldflags, $audiod_ldflags)
1229 AC_DEFINE_UNQUOTED(INIT_AUDIOD_ERRLISTS, objlist_to_errlist($audiod_errlist_objs),
1230         errors used by para_audiod)
1231
1232 AC_SUBST(server_objs, add_dot_o($server_objs))
1233 AC_SUBST(server_ldflags, $server_ldflags)
1234 AC_DEFINE_UNQUOTED(INIT_SERVER_ERRLISTS,
1235         objlist_to_errlist($server_errlist_objs), errors used by para_server)
1236
1237 AC_SUBST(afh_objs, add_dot_o($afh_objs))
1238 AC_SUBST(afh_ldflags, $afh_ldflags)
1239 AC_DEFINE_UNQUOTED(INIT_AFH_ERRLISTS,
1240         objlist_to_errlist($afh_errlist_objs), errors used by para_afh)
1241
1242 AC_SUBST(write_objs, add_dot_o($write_objs))
1243 AC_SUBST(write_ldflags, $write_ldflags)
1244 AC_DEFINE_UNQUOTED(INIT_WRITE_ERRLISTS,
1245         objlist_to_errlist($write_errlist_objs), errors used by para_write)
1246
1247 AC_SUBST(client_objs, add_dot_o($client_objs))
1248 AC_SUBST(client_ldflags, $client_ldflags)
1249 AC_DEFINE_UNQUOTED(INIT_CLIENT_ERRLISTS,
1250         objlist_to_errlist($client_errlist_objs), errors used by para_client)
1251
1252 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
1253 AC_SUBST(audioc_ldflags, $audioc_ldflags)
1254 AC_DEFINE_UNQUOTED(INIT_AUDIOC_ERRLISTS,
1255         objlist_to_errlist($audioc_errlist_objs), errors used by para_audioc)
1256
1257 AC_SUBST(gui_objs, add_dot_o($gui_objs))
1258 AC_DEFINE_UNQUOTED(INIT_GUI_ERRLISTS,
1259         objlist_to_errlist($gui_errlist_objs), errors used by para_gui)
1260
1261 AC_SUBST(play_objs, add_dot_o($play_objs))
1262 AC_SUBST(play_ldflags, $play_ldflags)
1263 AC_DEFINE_UNQUOTED(INIT_PLAY_ERRLISTS,
1264         objlist_to_errlist($play_errlist_objs), errors used by para_play)
1265
1266 AC_MSG_NOTICE(play objs: $play_objs)
1267
1268 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
1269 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
1270         enum of supported filters)
1271 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
1272 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
1273 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
1274 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
1275
1276 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
1277 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
1278         enum of supported writers)
1279 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
1280 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
1281 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
1282 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
1283 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
1284 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
1285 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
1286
1287 enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
1288 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
1289         enum of audio formats supported by audiod)
1290 names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
1291 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
1292
1293 AC_OUTPUT
1294 AC_MSG_NOTICE([
1295 paraslash configuration:
1296 ~~~~~~~~~~~~~~~~~~~~~~~~
1297 unix socket credentials: $have_ucred
1298 readline (interactive CLIs): $have_readline
1299 audio formats handlers: $audio_format_handlers
1300 id3 version2 support: $have_libid3tag
1301 filters: $filters
1302 writers: $writers
1303 optional executables: $extras
1304 $mixer_summary
1305 ])