Merge branch 't/stdin_stdout_fixes'
[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 time"
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 gui_ldflags="$curses_libs"
487 AC_CHECK_LIB([ncursesw], [initscr],
488         [gui_ldflags="$curses_libs -lncursesw"], [
489                 AC_CHECK_LIB([curses], [initscr],
490                         [gui_ldflags="$curses_libs -lcurses"],
491                         [have_curses="no"]
492                 )
493         ]
494 )
495 if test "$have_curses" = "yes"; then
496         AC_SUBST(curses_cppflags)
497         extras="$extras gui"
498         executables="$executables gui"
499 else
500         AC_MSG_WARN([no curses lib, cannot build para_gui])
501 fi
502 CPPFLAGS="$OLD_CPPFLAGS"
503 LDFLAGS="$OLD_LDFLAGS"
504 LIBS="$OLD_LIBS"
505
506 ########################################################################### ip_mreqn
507 AC_MSG_CHECKING(for struct ip_mreqn (UDPv4 multicast))
508 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
509         #include <netdb.h>
510         #include <net/if.h>
511 ]], [[
512         struct ip_mreqn mn;
513         mn.imr_ifindex = 0;
514 ]])],[have_ip_mreqn=yes],[have_ip_mreqn=no])
515 AC_MSG_RESULT($have_ip_mreqn)
516 if test ${have_ip_mreqn} = yes; then
517         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 you have struct ip_mreqn)
518 fi
519 ########################################################################### osx
520
521 AC_MSG_CHECKING(for CoreAudio (MacOs))
522 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
523         #include <CoreAudio/CoreAudio.h>
524 ]], [[
525         AudioDeviceID id;
526 ]])],[have_core_audio=yes],[have_core_audio=no])
527 AC_MSG_RESULT($have_core_audio)
528 if test ${have_core_audio} = yes; then
529         f1="-framework CoreAudio"
530         f2="-framework AudioToolbox"
531         f3="-framework AudioUnit"
532         f4="-framework CoreServices"
533         f="$f1 $f2 $f3 $f4"
534
535         all_errlist_objs="$all_errlist_objs osx_write"
536         # ipc is linked into para_server server and into the osx writer. If osl
537         # was not found, para_server will not be built and ipc has not yet been
538         # added to the list of all objects, so we must add it here.
539         if test "$have_osl" = "no"; then
540                 all_errlist_objs="$all_errlist_objs ipc"
541         fi
542         audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
543         audiod_cmdline_objs="$audiod_cmdline_objs osx_write.cmdline"
544         audiod_ldflags="$audiod_ldflags $f"
545
546         play_errlist_objs="$play_errlist_objs osx_write ipc"
547         play_cmdline_objs="$play_cmdline_objs osx_write.cmdline"
548         play_ldflags="$play_ldflags $f"
549
550         write_errlist_objs="$write_errlist_objs osx_write ipc"
551         write_cmdline_objs="$write_cmdline_objs osx_write.cmdline"
552         write_ldflags="$write_ldflags $f"
553         writers="$writers osx"
554         default_writer="OSX_WRITE"
555         AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X)
556 fi
557 ########################################################### ogg/vorbis/speex
558 have_ogg="yes"
559 OLD_CPPFLAGS="$CPPFLAGS"
560 OLD_LD_FLAGS="$LDFLAGS"
561 OLD_LIBS="$LIBS"
562 AC_ARG_WITH(ogg_headers, [AS_HELP_STRING(--with-ogg-headers=dir,
563         [look for ogg headers also in dir])])
564 AC_ARG_WITH(ogg_libs, [AS_HELP_STRING(--with-ogg-libs=dir,
565         [look for ogg libs also in dir])])
566 AC_ARG_WITH(vorbis_headers, [AS_HELP_STRING(--with-vorbis-headers=dir,
567         [look for vorbis headers also in dir])])
568 AC_ARG_WITH(vorbis_libs, [AS_HELP_STRING(--with-vorbis-libs=dir,
569         [look for vorbis libs also in dir])])
570 AC_ARG_WITH(speex_headers, [AS_HELP_STRING(--with-speex-headers=dir,
571         [look for speex headers also in dir])])
572 AC_ARG_WITH(speex_libs, [AS_HELP_STRING(--with-speex-libs=dir,
573         [look for speex libs also in dir])])
574
575 if test -n "$with_ogg_headers"; then
576         ogg_cppflags="-I$with_ogg_headers"
577         CPPFLAGS="$CPPFLAGS $ogg_cppflags"
578 fi
579 if test -n "$with_ogg_libs"; then
580         ogg_libs="-L$with_ogg_libs"
581         LDFLAGS="$LDFLAGS $ogg_libs"
582 fi
583 AC_CHECK_HEADERS([ogg/ogg.h], [], [ have_ogg="no"; ])
584 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [ have_ogg="no" ])
585
586 have_vorbis="yes"
587 have_speex="yes"
588 if test "$have_ogg" = "yes"; then
589         # vorbis
590         if test -n "$with_vorbis_headers"; then
591                 vorbis_cppflags="-I$with_vorbis_headers"
592                 CPPFLAGS="$CPPFLAGS $vorbis_cppflags"
593         fi
594         if test -n "$with_vorbis_libs"; then
595                 vorbis_libs="-L$with_vorbis_libs"
596                 LDFLAGS="$LDFLAGS $vorbis_libs"
597         fi
598         AC_CHECK_HEADERS([vorbis/codec.h], [], [ have_vorbis="no" ])
599         AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [ have_vorbis="no" ])
600
601         # speex
602         if test -n "$with_speex_headers"; then
603                 speex_cppflags="-I$with_speex_headers"
604                 CPPFLAGS="$CPPFLAGS $speex_cppflags"
605         fi
606         if test -n "$with_speex_libs"; then
607                 speex_libs="-L$with_speex_libs"
608                 LDFLAGS="$LDFLAGS $speex_libs"
609         fi
610         AC_CHECK_LIB([speex], [speex_decoder_init], [], [ have_speex="no" ])
611         AC_CHECK_HEADERS([speex/speex.h], [], [ have_speex="no" ])
612 else
613         AC_MSG_WARN([vorbis/speex depend on libogg, which was not detected])
614         have_vorbis="no"
615         have_speex="no"
616 fi
617
618 msg="support in para_server/para_filter/para_afh"
619 if test "$have_vorbis" = "yes" || test "$have_speex" = "yes"; then
620         AC_SUBST(ogg_cppflags)
621         ogg_libs="$ogg_libs -logg"
622         if test "$OSTYPE" = "Darwin"; then
623                 ogg_libs="-Wl,-bind_at_load $ogg_libs"
624         fi
625         server_ldflags="$server_ldflags $ogg_libs"
626         filter_ldflags="$filter_ldflags $ogg_libs"
627         audiod_ldflags="$audiod_ldflags $ogg_libs"
628         play_ldflags="$play_ldflags $ogg_libs"
629         afh_ldflags="$afh_ldflags $ogg_libs"
630         recv_ldflags="$recv_ldflags $ogg_libs"
631         all_errlist_objs="$all_errlist_objs ogg_afh_common"
632         afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
633         recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
634         server_errlist_objs="$server_errlist_objs ogg_afh_common"
635         play_errlist_objs="$play_errlist_objs ogg_afh_common"
636 fi
637 if test "$have_vorbis" = "yes"; then
638         all_errlist_objs="$all_errlist_objs oggdec_filter ogg_afh"
639         AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg/vorbis support)
640         filters="$filters oggdec"
641         vorbis_libs="-lvorbis -lvorbisfile"
642         server_ldflags="$server_ldflags $vorbis_libs"
643         filter_ldflags="$filter_ldflags $vorbis_libs"
644         audiod_ldflags="$audiod_ldflags $vorbis_libs"
645         play_ldflags="$play_ldflags $vorbis_libs"
646         afh_ldflags="$afh_ldflags $vorbis_libs"
647         recv_ldflags="$recv_ldflags $vorbis_libs"
648
649         server_errlist_objs="$server_errlist_objs ogg_afh"
650         filter_errlist_objs="$filter_errlist_objs oggdec_filter"
651         audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
652         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
653         afh_errlist_objs="$afh_errlist_objs ogg_afh"
654         recv_errlist_objs="$recv_errlist_objs ogg_afh"
655
656         audiod_audio_formats="$audiod_audio_formats ogg"
657         audio_format_handlers="$audio_format_handlers ogg"
658 else
659         AC_MSG_WARN([no ogg/vorbis $msg])
660 fi
661 if test "$have_speex" = "yes"; then
662         all_errlist_objs="$all_errlist_objs spxdec_filter spx_afh spx_common"
663         AC_DEFINE(HAVE_SPEEX, 1, define to 1 to turn on ogg/speex support)
664         filters="$filters spxdec"
665         speex_libs="-lspeex"
666         server_ldflags="$server_ldflags $speex_libs"
667         filter_ldflags="$filter_ldflags $speex_libs"
668         audiod_ldflags="$audiod_ldflags $speex_libs"
669         play_ldflags="$play_ldflags $speex_libs"
670         afh_ldflags="$afh_ldflags $speex_libs"
671         recv_ldflags="$recv_ldflags $speex_libs"
672
673         server_errlist_objs="$server_errlist_objs spx_afh spx_common"
674         filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
675         audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
676         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
677         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
678         recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
679
680         audiod_audio_formats="$audiod_audio_formats spx"
681         audio_format_handlers="$audio_format_handlers spx"
682 else
683         AC_MSG_WARN([no ogg/speex $msg])
684 fi
685 CPPFLAGS="$OLD_CPPFLAGS"
686 LDFLAGS="$OLD_LDFLAGS"
687 LIBS="$OLD_LIBS"
688 ########################################################################### faad
689 have_faad=yes
690 OLD_CPPFLAGS="$CPPFLAGS"
691 OLD_LD_FLAGS="$LDFLAGS"
692 OLD_LIBS="$LIBS"
693 AC_ARG_WITH(faad_headers, [AS_HELP_STRING(--with-faad-headers=dir,
694         [look for neaacdec.h also in dir])])
695 if test -n "$with_faad_headers"; then
696         faad_cppflags="-I$with_faad_headers"
697         CPPFLAGS="$CPPFLAGS $faad_cppflags"
698 fi
699 AC_ARG_WITH(faad_libs, [AS_HELP_STRING(--with-faad-libs=dir,
700         [look for libfaad also in dir])])
701 if test -n "$with_faad_libs"; then
702         faad_libs="-L$with_faad_libs"
703         LDFLAGS="$LDFLAGS $faad_libs"
704 fi
705 AC_CHECK_HEADER(neaacdec.h, [], have_faad=no)
706 AC_CHECK_LIB([faad], [NeAACDecOpen], [], have_faad=no)
707 if test "$have_faad" = "yes"; then
708         AC_DEFINE(HAVE_FAAD, 1, define to 1 if you want to build the aacdec filter)
709         all_errlist_objs="$all_errlist_objs aac_common aacdec_filter aac_afh"
710         filter_errlist_objs="$filter_errlist_objs aacdec_filter aac_common"
711         afh_errlist_objs="$afh_errlist_objs aac_common aac_afh"
712         audiod_errlist_objs="$audiod_errlist_objs aacdec_filter aac_common"
713         play_errlist_objs="$play_errlist_objs aacdec_filter aac_afh aac_common"
714         server_errlist_objs="$server_errlist_objs aac_afh aac_common"
715         recv_errlist_objs="$recv_errlist_objs aac_afh aac_common"
716
717         server_ldflags="$server_ldflags $faad_libs -lfaad"
718         filter_ldflags="$filter_ldflags $faad_libs -lfaad"
719         audiod_ldflags="$audiod_ldflags $faad_libs -lfaad"
720         play_ldflags="$play_ldflags $faad_libs -lfaad"
721         afh_ldflags="$afh_ldflags $faad_libs -lfaad"
722         recv_ldflags="$afh_ldflags $faad_libs -lfaad"
723
724         audiod_audio_formats="$audiod_audio_formats aac"
725         audio_format_handlers="$audio_format_handlers aac"
726         filters="$filters aacdec"
727         AC_SUBST(faad_cppflags)
728 else
729         AC_MSG_WARN([no aac support in para_audiod/para_filter])
730 fi
731 CPPFLAGS="$OLD_CPPFLAGS"
732 LDFLAGS="$OLD_LDFLAGS"
733 LIBS="$OLD_LIBS"
734 ########################################################################### mad
735 have_mad="yes"
736 OLD_CPPFLAGS="$CPPFLAGS"
737 OLD_LD_FLAGS="$LDFLAGS"
738 OLD_LIBS="$LIBS"
739
740 AC_ARG_WITH(mad_headers, [AS_HELP_STRING(--with-mad-headers=dir,
741         [look for mad.h also in dir])])
742 if test -n "$with_mad_headers"; then
743         mad_cppflags="-I$with_mad_headers"
744         CPPFLAGS="$CPPFLAGS $mad_cppflags"
745 fi
746 AC_ARG_WITH(mad_libs, [AS_HELP_STRING(--with-mad-libs=dir,
747         [look for libmad also in dir])])
748 if test -n "$with_mad_libs"; then
749         mad_libs="-L$with_mad_libs"
750         LDFLAGS="$LDFLAGS $mad_libs"
751 fi
752 AC_CHECK_HEADERS([mad.h], [], [
753         have_mad="no"
754 ])
755 AC_CHECK_LIB([mad], [mad_stream_init], [], [
756         have_mad="no"
757 ])
758 if test "$have_mad" = "yes"; then
759         AC_DEFINE(HAVE_MAD, 1, define to 1 if you want to build the mp3dec filter)
760         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(mp3dec_filter)"
761         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(mp3dec_filter)"
762         play_cmdline_objs="$play_cmdline_objs add_cmdline(mp3dec_filter)"
763         all_errlist_objs="$all_errlist_objs mp3dec_filter"
764         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
765         audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
766         play_errlist_objs="$play_errlist_objs mp3dec_filter"
767         filter_ldflags="$filter_ldflags $mad_libs -lmad"
768         audiod_ldflags="$audiod_ldflags $mad_libs -lmad"
769         play_ldflags="$play_ldflags $mad_libs -lmad"
770         audiod_audio_formats="$audiod_audio_formats mp3"
771         filters="$filters mp3dec"
772         AC_SUBST(mad_cppflags)
773 else
774         AC_MSG_WARN([no mp3dec support in para_audiod/para_filter])
775 fi
776 CPPFLAGS="$OLD_CPPFLAGS"
777 LDFLAGS="$OLD_LDFLAGS"
778 LIBS="$OLD_LIBS"
779 ###################################################################### libid3tag
780 OLD_CPPFLAGS="$CPPFLAGS"
781 OLD_LD_FLAGS="$LDFLAGS"
782 OLD_LIBS="$LIBS"
783
784 have_libid3tag="yes"
785 AC_ARG_WITH(id3tag_headers, [AS_HELP_STRING(--with-id3tag-headers=dir,
786         [look for id3tag header files also in dir])])
787 if test -n "$with_id3tag_headers"; then
788         id3tag_cppflags="-I$with_id3tag_headers"
789         CPPFLAGS="$CPPFLAGS $id3tag_cppflags"
790 fi
791 AC_ARG_WITH(id3tag_libs, [AS_HELP_STRING(--with-id3tag-libs=dir,
792         [look for id3tag libs also in dir])])
793 if test -n "$with_id3tag_libs"; then
794         id3tag_libs="-L$with_id3tag_libs"
795         LDFLAGS="$LDFLAGS $id3tag_libs"
796 fi
797
798 AC_MSG_CHECKING(for libid3tag)
799 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
800         #include <id3tag.h>
801 ]], [[
802         struct id3_tag t = {.flags = 0};
803 ]])],[],[have_libid3tag=no])
804 AC_MSG_RESULT($have_libid3tag)
805
806 if test ${have_libid3tag} = yes; then
807         AC_DEFINE(HAVE_LIBID3TAG, 1, define to 1 you have libid3tag)
808         server_ldflags="$server_ldflags $id3tag_libs -lid3tag -lz"
809         afh_ldflags="$afh_ldflags $id3tag_libs -lid3tag -lz"
810         play_ldflags="$play_ldflags -lz"
811         recv_ldflags="$recv_ldflags $id3tag_libs -lid3tag"
812         play_ldflags="$play_ldflags $id3tag_libs -lid3tag"
813         AC_SUBST(id3tag_cppflags)
814 else
815         AC_MSG_WARN([no support for id3v2 tags])
816 fi
817 CPPFLAGS="$OLD_CPPFLAGS"
818 LDFLAGS="$OLD_LDFLAGS"
819 LIBS="$OLD_LIBS"
820 ########################################################################### flac
821 OLD_CPPFLAGS="$CPPFLAGS"
822 OLD_LD_FLAGS="$LDFLAGS"
823 OLD_LIBS="$LIBS"
824
825 have_flac="yes"
826 AC_ARG_WITH(flac_headers, [AS_HELP_STRING(--with-flac-headers=dir,
827         [look for flac headers also in dir])])
828 if test -n "$with_flac_headers"; then
829         flac_cppflags="-I$with_flac_headers"
830         CPPFLAGS="$CPPFLAGS $flac_cppflags"
831 fi
832 AC_ARG_WITH(flac_libs, [AS_HELP_STRING(--with-flac-libs=dir,
833         [look for flac libs also in dir])])
834 if test -n "$with_flac_libs"; then
835         flac_libs="-L$with_flac_libs"
836         LDFLAGS="$LDFLAGS $flac_libs"
837 fi
838 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], have_flac=no)
839 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], have_flac=no, -logg -lm)
840 if test "$have_flac" = "yes"; then
841         AC_DEFINE(HAVE_FLAC, 1, define to 1 if you want to build the flacdec filter)
842         all_errlist_objs="$all_errlist_objs flacdec_filter flac_afh"
843         filter_errlist_objs="$filter_errlist_objs flacdec_filter"
844         audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
845         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
846         afh_errlist_objs="$afh_errlist_objs flac_afh"
847         server_errlist_objs="$server_errlist_objs flac_afh"
848         recv_errlist_objs="$recv_errlist_objs flac_afh"
849         filter_ldflags="$filter_ldflags $flac_libs -lFLAC"
850         audiod_ldflags="$audiod_ldflags $flac_libs -lFLAC"
851         play_ldflags="$play_ldflags $flac_libs -lFLAC"
852         server_ldflags="$server_ldflags $flac_libs -lFLAC"
853         afh_ldflags="$afh_ldflags $flac_libs -lFLAC"
854         recv_ldflags="$afh_ldflags $flac_libs -lFLAC"
855         filters="$filters flacdec"
856         audio_format_handlers="$audio_format_handlers flac"
857         audiod_audio_formats="$audiod_audio_formats flac"
858         AC_SUBST(flac_cppflags)
859 else
860         AC_MSG_WARN([no flac support in para_audiod/para_filter/para_afh/para_server])
861 fi
862 CPPFLAGS="$OLD_CPPFLAGS"
863 LDFLAGS="$OLD_LDFLAGS"
864 LIBS="$OLD_LIBS"
865 ########################################################################### oss
866 OLD_CPPFLAGS="$CPPFLAGS"
867 OLD_LD_FLAGS="$LDFLAGS"
868 OLD_LIBS="$LIBS"
869
870 have_oss="yes"
871 msg="=> will not build oss writer"
872
873 AC_CHECK_HEADER(sys/soundcard.h, [
874         audiod_errlist_objs="$audiod_errlist_objs oss_write"
875         play_errlist_objs="$play_errlist_objs oss_write"
876         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oss_write)"
877         play_cmdline_objs="$play_cmdline_objs add_cmdline(oss_write)"
878
879         write_errlist_objs="$write_errlist_objs oss_write"
880         write_cmdline_objs="$write_cmdline_objs add_cmdline(oss_write)"
881         fade_errlist_objs="$fade_errlist_objs oss_mix"
882         all_errlist_objs="$all_errlist_objs oss_write oss_mix"
883
884         writers="$writers oss"
885         default_writer="OSS_WRITE"
886         mixers="${mixers}oss "
887         default_mixer="OSS_MIX"
888
889         AC_CHECK_LIB(ossaudio, _oss_ioctl, [
890                         audiod_ldflags="$audiod_ldflags -lossaudio"
891                         play_ldflags="$play_ldflags -lossaudio"
892                         write_ldflags="$write_ldflags -lossaudio"
893                         fade_ldflags="$fade_ldflags -lossaudio"
894                 ]
895         )
896         ],
897         [
898                 have_oss="no"
899                 AC_MSG_WARN([no sys/soundcard.h $msg])
900         ]
901 )
902 CPPFLAGS="$OLD_CPPFLAGS"
903 LDFLAGS="$OLD_LDFLAGS"
904 LIBS="$OLD_LIBS"
905
906 ########################################################################### alsa
907 OLD_CPPFLAGS="$CPPFLAGS"
908 OLD_LD_FLAGS="$LDFLAGS"
909 OLD_LIBS="$LIBS"
910
911 msg="=> no alsa support for para_audiod/para_write"
912 if test "$OSTYPE" != "Linux"; then
913         have_alsa="no"
914 else
915         have_alsa="yes"
916 fi
917 if test "$have_alsa" = "yes"; then
918         AC_CHECK_HEADERS([alsa/asoundlib.h], [], [
919                 have_alsa="no"
920                 AC_MSG_WARN([no alsa/asoundlib $msg])
921         ])
922 fi
923
924 if test "$have_alsa" = "yes"; then
925         AC_CHECK_LIB([asound], [snd_pcm_open], [], [
926                 have_alsa="no"
927                 AC_MSG_WARN([no libasound $msg])
928         ])
929 fi
930
931 if test "$have_alsa" = "yes"; then
932         audiod_errlist_objs="$audiod_errlist_objs alsa_write"
933         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(alsa_write)"
934         audiod_ldflags="$audiod_ldflags -lasound"
935         play_errlist_objs="$play_errlist_objs alsa_write"
936         play_cmdline_objs="$play_cmdline_objs add_cmdline(alsa_write)"
937         play_ldflags="$play_ldflags -lasound"
938
939         write_errlist_objs="$write_errlist_objs alsa_write"
940         write_cmdline_objs="$write_cmdline_objs add_cmdline(alsa_write)"
941         write_ldflags="$write_ldflags -lasound"
942         fade_errlist_objs="$fade_errlist_objs alsa_mix"
943         fade_ldflags="$fade_ldflags -lasound"
944         all_errlist_objs="$all_errlist_objs alsa_write alsa_mix"
945
946         writers="$writers alsa"
947         default_writer="ALSA_WRITE"
948         mixers="${mixers}alsa "
949         default_mixer="ALSA_MIX"
950 fi
951
952 CPPFLAGS="$OLD_CPPFLAGS"
953 LDFLAGS="$OLD_LDFLAGS"
954 LIBS="$OLD_LIBS"
955 ########################################################################### fade
956 if test -n "$mixers"; then
957         extras="$extras fade"
958         executables="$executables fade"
959         all_errlist_objs="$all_errlist_objs fade"
960         fade_errlist_objs="$fade_errlist_objs fade exec string fd"
961         fade_cmdline_objs="add_cmdline(fade)"
962         fade_objs="$fade_cmdline_objs $fade_errlist_objs"
963         AC_SUBST(fade_objs, add_dot_o($fade_objs))
964         AC_SUBST(fade_ldflags, $fade_ldflags)
965         AC_DEFINE_UNQUOTED(INIT_FADE_ERRLISTS,
966                 objlist_to_errlist($fade_errlist_objs),
967                 errors used by para_fade)
968         enum="$(
969                 for i in $mixers; do
970                         printf "${i}_MIX, " | tr '[a-z]' '[A-Z]'
971                 done
972         )"
973         AC_DEFINE_UNQUOTED(MIXER_ENUM, $enum NUM_SUPPORTED_MIXERS,
974                 enum of supported mixers)
975         AC_DEFINE_UNQUOTED(DEFAULT_MIXER, $default_mixer,
976                 use this mixer if none was specified)
977         names="$(for i in $mixers; do printf \"$i\",' ' ; done)"
978         AC_DEFINE_UNQUOTED(MIXER_NAMES, $names, supported mixer names)
979         inits="$(
980                 for i in $mixers; do
981                         printf 'extern void '$i'_mix_init(struct mixer *); '
982                 done
983         )"
984         AC_DEFINE_UNQUOTED(DECLARE_MIXER_INITS, $inits,
985                 init functions of the supported mixers)
986         array="$(for i in $mixers; do printf '{.init = '$i'_mix_init},'; done)"
987         AC_DEFINE_UNQUOTED(MIXER_ARRAY, $array, array of supported mixers)
988         mixer_summary="supported mixers:: $mixers, default: $default_mixer"
989 else
990         AC_MSG_WARN([no mixer support])
991         mixer_summary="para_fade: no"
992 fi
993 ########################################################################### libao
994 OLD_CPPFLAGS="$CPPFLAGS"
995 OLD_LD_FLAGS="$LDFLAGS"
996 OLD_LIBS="$LIBS"
997
998 have_ao="yes"
999 AC_ARG_WITH(ao_headers, [AS_HELP_STRING(--with-ao-headers=dir,
1000         [look for ao/ao.h also in dir])])
1001 if test -n "$with_ao_headers"; then
1002         ao_cppflags="-I$with_ao_headers"
1003         CPPFLAGS="$CPPFLAGS $ao_cppflags"
1004 fi
1005 AC_ARG_WITH(ao_libs, [AS_HELP_STRING(--with-ao-libs=dir,
1006         [look for libao also in dir])])
1007 if test -n "$with_ao_libs"; then
1008         ao_libs="-L$with_ao_libs"
1009         LDFLAGS="$LDFLAGS $ao_libs"
1010 fi
1011 msg="no libao support for para_audiod/para_write"
1012 AC_CHECK_HEADERS([ao/ao.h], [
1013         ], [
1014         have_ao="no"
1015         AC_MSG_WARN([ao.h not found, $msg])
1016 ])
1017 if test "$have_ao" = "yes"; then
1018         AC_CHECK_LIB([ao], [ao_initialize], [], [
1019                 have_ao="no"
1020                 AC_MSG_WARN([ao lib not found or not working, $msg])
1021         ])
1022 fi
1023 if test "$have_ao" = "yes"; then
1024         AC_CHECK_HEADERS([pthread.h], [
1025                 ], [
1026                 have_ao="no"
1027                 AC_MSG_WARN([pthread.h not found, $msg])
1028         ])
1029 fi
1030 if test "$have_ao" = "yes"; then
1031         AC_CHECK_LIB([pthread], [pthread_create], [], [
1032                 have_ao="no"
1033                 AC_MSG_WARN([pthread lib not found or not working, $msg])
1034         ])
1035 fi
1036 if test "$have_ao" = "yes"; then
1037         all_errlist_objs="$all_errlist_objs ao_write"
1038         audiod_errlist_objs="$audiod_errlist_objs ao_write"
1039         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(ao_write)"
1040         audiod_ldflags="$audiod_ldflags -lao -lpthread"
1041
1042         play_errlist_objs="$play_errlist_objs ao_write"
1043         play_cmdline_objs="$play_cmdline_objs add_cmdline(ao_write)"
1044         play_ldflags="$play_ldflags -lao -lpthread"
1045
1046         write_errlist_objs="$write_errlist_objs ao_write"
1047         write_cmdline_objs="$write_cmdline_objs add_cmdline(ao_write)"
1048         write_ldflags="$write_ldflags $ao_libs -lao -lpthread"
1049         writers="$writers ao"
1050         AC_SUBST(ao_cppflags)
1051 fi
1052
1053 CPPFLAGS="$OLD_CPPFLAGS"
1054 LDFLAGS="$OLD_LDFLAGS"
1055 LIBS="$OLD_LIBS"
1056 ############################################################# readline
1057 OLD_CPPFLAGS="$CPPFLAGS"
1058 OLD_LD_FLAGS="$LDFLAGS"
1059 OLD_LIBS="$LIBS"
1060
1061 have_readline="yes"
1062 AC_ARG_WITH(readline_headers, [AS_HELP_STRING(--with-readline-headers=dir,
1063         [look for libreadline header files also in dir])])
1064 if test -n "$with_readline_headers"; then
1065         readline_cppflags="-I$with_readline_headers"
1066         CPPFLAGS="$CPPFLAGS $readline_cppflags"
1067 fi
1068
1069 AC_ARG_WITH(readline_libs, [AS_HELP_STRING(--with-readline-libs=dir,
1070         [look for readline library also in dir])])
1071 if test -n "$with_readline_libs"; then
1072         readline_libs="-L$with_readline_libs"
1073         LDFLAGS="$LDFLAGS $readline_libs"
1074 fi
1075 msg="no interactive cli support"
1076 AC_CHECK_HEADERS([readline/readline.h], [
1077         ], [
1078         have_readline="no"
1079         AC_MSG_WARN([readline/readline.h not found, $msg])
1080 ])
1081
1082 if test "$have_curses" != "yes"; then
1083         have_readline="no"
1084         AC_MSG_WARN([interactive cli support depends on curses,])
1085         AC_MSG_WARN([but no curses lib was detected, $msg])
1086 fi
1087
1088 if test "$have_readline" = "yes"; then
1089         readline_libs="$readline_libs -lreadline"
1090         AC_SEARCH_LIBS([rl_free_keymap], [readline], [], [have_readline="no"])
1091         if test "$have_readline" = "no"; then # try with -lcurses
1092                 # clear cache
1093                 AC_MSG_NOTICE([trying again with -lcurses])
1094                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1095                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1096                         have_readline=yes
1097                         readline_libs="$readline_libs -lcurses"
1098                 ], [], [-lcurses])
1099         fi
1100         if test "$have_readline" = "no"; then # try with -ltermcap
1101                 # clear cache
1102                 AC_MSG_NOTICE([trying again with -ltermcap])
1103                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1104                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1105                         have_readline=yes
1106                         readline_libs="$readline_libs -ltermcap"
1107                 ], [], [-ltermcap])
1108         fi
1109 fi
1110
1111 if test "$have_readline" = "yes"; then
1112         all_errlist_objs="$all_errlist_objs interactive"
1113         client_errlist_objs="$client_errlist_objs interactive"
1114         client_ldflags="$client_ldflags $readline_libs"
1115         audioc_errlist_objs="$audioc_errlist_objs buffer_tree interactive sched time"
1116         audioc_ldflags="$audioc_ldflags $readline_libs"
1117         play_errlist_objs="$play_errlist_objs interactive"
1118         play_ldflags="$play_ldflags $readline_libs"
1119         AC_SUBST(readline_cppflags)
1120         AC_DEFINE(HAVE_READLINE, 1, define to 1 to turn on readline support)
1121 else
1122         AC_MSG_WARN([libreadline not found or unusable])
1123 fi
1124 CPPFLAGS="$OLD_CPPFLAGS"
1125 LDFLAGS="$OLD_LDFLAGS"
1126 LIBS="$OLD_LIBS"
1127 ############################################################# libsamplerate
1128 OLD_CPPFLAGS="$CPPFLAGS"
1129 OLD_LD_FLAGS="$LDFLAGS"
1130 OLD_LIBS="$LIBS"
1131
1132 have_samplerate="yes"
1133 AC_ARG_WITH(samplerate_headers, [AS_HELP_STRING(--with-samplerate-headers=dir,
1134         [look for samplerate headers also in dir])])
1135 if test -n "$with_samplerate_headers"; then
1136         samplerate_cppflags="-I$with_samplerate_headers"
1137         CPPFLAGS="$CPPFLAGS $samplerate_cppflags"
1138 fi
1139 AC_ARG_WITH(samplerate_libs, [AS_HELP_STRING(--with-samplerate-libs=dir,
1140         [look for samplerate libs also in dir])])
1141 if test -n "$with_samplerate_libs"; then
1142         samplerate_libs="-L$with_samplerate_libs"
1143         LDFLAGS="$LDFLAGS $samplerate_libs"
1144 fi
1145
1146 AC_CHECK_HEADER(samplerate.h, [], have_samplerate=no)
1147 AC_CHECK_LIB([samplerate], [src_process], [], have_samplerate=no, [])
1148
1149 if test "$have_samplerate" = "yes"; then
1150         all_errlist_objs="$all_errlist_objs resample_filter"
1151         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
1152         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(resample_filter)"
1153         audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
1154         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(resample_filter)"
1155         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
1156         play_cmdline_objs="$play_cmdline_objs add_cmdline(resample_filter)"
1157         filter_ldflags="$filter_ldflags $samplerate_libs -lsamplerate"
1158         audiod_ldflags="$audiod_ldflags $samplerate_libs -lsamplerate"
1159         play_ldflags="$play_ldflags $samplerate_libs -lsamplerate"
1160         filters="$filters resample"
1161         AC_SUBST(samplerate_cppflags)
1162 else
1163         AC_MSG_WARN([no resample support in para_audiod/para_filter])
1164 fi
1165 CPPFLAGS="$OLD_CPPFLAGS"
1166 LDFLAGS="$OLD_LDFLAGS"
1167 LIBS="$OLD_LIBS"
1168 ############################################################# error2.h
1169 AC_MSG_NOTICE(creating error2.h)
1170 for i in $executables; do
1171         echo "$i: "
1172         eval echo \$${i}_errlist_objs
1173 done | ./error2.pl > error2.h
1174 for obj in $all_errlist_objs; do
1175         SS="$SS SS_$(echo $obj | tr 'a-z' 'A-Z'),"
1176 done
1177 AC_DEFINE_UNQUOTED(DEFINE_ERRLIST_OBJECT_ENUM,
1178         [enum {$SS NUM_SS}],
1179         [list of all objects that use the paraslash error facility]
1180 )
1181
1182 ################################################################## status items
1183
1184 status_items="basename status num_played mtime bitrate frequency file_size
1185 status_flags format score techinfo afs_mode
1186 attributes_txt decoder_flags audiod_status play_time attributes_bitmap
1187 offset seconds_total stream_start current_time audiod_uptime image_id
1188 lyrics_id duration directory lyrics_name image_name path hash channels
1189 last_played num_chunks chunk_time amplification artist title year album
1190 comment"
1191
1192 result=
1193 for i in $status_items; do
1194         result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), "
1195 done
1196 AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result],
1197         [enum of all status items])
1198
1199 result=
1200 for i in $status_items; do
1201         result="$result \"$i\", "
1202 done
1203 AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result],
1204         [char * array of all status items])
1205
1206 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
1207         [formats supported by para_server and para_afh])
1208
1209 AC_SUBST(executables, add_para($executables))
1210
1211 recv_objs="$recv_cmdline_objs $recv_errlist_objs"
1212 filter_objs="$filter_cmdline_objs $filter_errlist_objs"
1213 audiod_objs="$audiod_cmdline_objs $audiod_errlist_objs"
1214 server_objs="$server_cmdline_objs $server_errlist_objs"
1215 write_objs="$write_cmdline_objs $write_errlist_objs"
1216 client_objs="$client_cmdline_objs $client_errlist_objs"
1217 audioc_objs="$audioc_cmdline_objs $audioc_errlist_objs"
1218 afh_objs="$afh_cmdline_objs $afh_errlist_objs"
1219 play_objs="$play_cmdline_objs $play_errlist_objs"
1220
1221
1222 AC_SUBST(recv_objs, add_dot_o($recv_objs))
1223 AC_SUBST(recv_ldflags, $recv_ldflags)
1224 AC_DEFINE_UNQUOTED(INIT_RECV_ERRLISTS, objlist_to_errlist($recv_errlist_objs),
1225         errors used by para_recv)
1226
1227 AC_SUBST(filter_objs, add_dot_o($filter_objs))
1228 AC_SUBST(filter_ldflags, $filter_ldflags)
1229 AC_DEFINE_UNQUOTED(INIT_FILTER_ERRLISTS,
1230         objlist_to_errlist($filter_errlist_objs), errors used by para_filter)
1231
1232 AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
1233 AC_SUBST(audiod_ldflags, $audiod_ldflags)
1234 AC_DEFINE_UNQUOTED(INIT_AUDIOD_ERRLISTS, objlist_to_errlist($audiod_errlist_objs),
1235         errors used by para_audiod)
1236
1237 AC_SUBST(server_objs, add_dot_o($server_objs))
1238 AC_SUBST(server_ldflags, $server_ldflags)
1239 AC_DEFINE_UNQUOTED(INIT_SERVER_ERRLISTS,
1240         objlist_to_errlist($server_errlist_objs), errors used by para_server)
1241
1242 AC_SUBST(afh_objs, add_dot_o($afh_objs))
1243 AC_SUBST(afh_ldflags, $afh_ldflags)
1244 AC_DEFINE_UNQUOTED(INIT_AFH_ERRLISTS,
1245         objlist_to_errlist($afh_errlist_objs), errors used by para_afh)
1246
1247 AC_SUBST(write_objs, add_dot_o($write_objs))
1248 AC_SUBST(write_ldflags, $write_ldflags)
1249 AC_DEFINE_UNQUOTED(INIT_WRITE_ERRLISTS,
1250         objlist_to_errlist($write_errlist_objs), errors used by para_write)
1251
1252 AC_SUBST(client_objs, add_dot_o($client_objs))
1253 AC_SUBST(client_ldflags, $client_ldflags)
1254 AC_DEFINE_UNQUOTED(INIT_CLIENT_ERRLISTS,
1255         objlist_to_errlist($client_errlist_objs), errors used by para_client)
1256
1257 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
1258 AC_SUBST(audioc_ldflags, $audioc_ldflags)
1259 AC_DEFINE_UNQUOTED(INIT_AUDIOC_ERRLISTS,
1260         objlist_to_errlist($audioc_errlist_objs), errors used by para_audioc)
1261
1262 AC_SUBST(gui_objs, add_dot_o($gui_objs))
1263 AC_SUBST(gui_ldflags, $gui_ldflags)
1264 AC_DEFINE_UNQUOTED(INIT_GUI_ERRLISTS,
1265         objlist_to_errlist($gui_errlist_objs), errors used by para_gui)
1266
1267 AC_SUBST(play_objs, add_dot_o($play_objs))
1268 AC_SUBST(play_ldflags, $play_ldflags)
1269 AC_DEFINE_UNQUOTED(INIT_PLAY_ERRLISTS,
1270         objlist_to_errlist($play_errlist_objs), errors used by para_play)
1271
1272 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
1273 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
1274         enum of supported filters)
1275 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
1276 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
1277 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
1278 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
1279
1280 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
1281 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
1282         enum of supported writers)
1283 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
1284 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
1285 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
1286 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
1287 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
1288 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
1289 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
1290
1291 enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
1292 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
1293         enum of audio formats supported by audiod)
1294 names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
1295 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
1296
1297 AC_OUTPUT
1298 AC_MSG_NOTICE([
1299 paraslash configuration:
1300 ~~~~~~~~~~~~~~~~~~~~~~~~
1301 unix socket credentials: $have_ucred
1302 readline (interactive CLIs): $have_readline
1303 audio formats handlers: $audio_format_handlers
1304 id3 version2 support: $have_libid3tag
1305 filters: $filters
1306 writers: $writers
1307 optional executables: $extras
1308 $mixer_summary
1309 ])