]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
760a52a700040442b8722e9cbc5f82980e8f1507
[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 ########################################################################### osl
251 have_osl=yes
252 OLD_CPPFLAGS="$CPPFLAGS"
253 OLD_LD_FLAGS="$LDFLAGS"
254 OLD_LIBS="$LIBS"
255 AC_ARG_WITH(osl_headers, [AS_HELP_STRING(--with-osl-headers=dir,
256         [look for osl.h also in dir])])
257 if test -n "$with_osl_headers"; then
258         osl_cppflags="-I$with_osl_headers"
259         CPPFLAGS="$CPPFLAGS $osl_cppflags"
260 fi
261 AC_ARG_WITH(osl_libs, [AS_HELP_STRING(--with-osl-libs=dir,
262         [look for libosl also in dir])])
263 if test -n "$with_osl_libs"; then
264         osl_libs="-L$with_osl_libs"
265         LDFLAGS="$LDFLAGS $osl_libs"
266 fi
267
268 AC_CHECK_HEADER(osl.h, [], have_osl=no)
269 AC_CHECK_LIB([osl], [osl_open_table], [], have_osl=no)
270 if test "$have_osl" = "no"; then
271         AC_MSG_WARN([libosl not found, can not build para_server.
272 Download libosl at
273         http://systemlinux.org/~maan/osl
274 or execute
275         git clone git://git.tuebingen.mpg.de/osl
276         ])
277 else
278         extras="$extras server"
279         executables="$executables server"
280         server_cmdline_objs="add_cmdline(server)"
281         server_errlist_objs="server afh_common mp3_afh vss command net
282                 string signal time daemon http_send close_on_fork mm
283                 crypt_common ipc dccp_send fd user_list chunk_queue
284                 afs aft mood score attribute blob playlist sched acl
285                 send_common udp_send color fec wma_afh wma_common sideband"
286         all_errlist_objs="$all_errlist_objs server vss command
287                 http_send close_on_fork mm ipc dccp_send user_list
288                 chunk_queue afs aft mood score attribute blob playlist
289                 acl udp_send"
290
291         server_ldflags=""
292         server_audio_formats="mp3 wma"
293         AC_SUBST(osl_cppflags)
294         server_ldflags="$server_ldflags $osl_libs -losl"
295 fi
296 CPPFLAGS="$OLD_CPPFLAGS"
297 LDFLAGS="$OLD_LDFLAGS"
298 LIBS="$OLD_LIBS"
299 ########################################################################### crypto
300 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
301         Force using crypto library "lib". This package requires either
302         openssl or libgcrypt being installed. Possible values for "lib"
303         are thus "openssl" and "gcrypt". If this option is not given,
304         openssl is tried first. If openssl was not found, gcrypt is
305         tried next.])])
306
307 case "$enable_cryptolib" in
308         "openssl") check_openssl="yes"; check_gcrypt="no";;
309         "gcrypt") check_openssl="no"; check_gcrypt="yes";;
310         "") check_openssl="yes"; check_gcrypt="yes";;
311         *) AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib]);;
312 esac
313 ###################################################################### openssl
314 if test "$check_openssl" = "yes"; then
315         OLD_CPPFLAGS="$CPPFLAGS"
316         OLD_LD_FLAGS="$LDFLAGS"
317         OLD_LIBS="$LIBS"
318         have_openssl="yes"
319         AC_ARG_WITH(openssl_headers, [AS_HELP_STRING(--with-openssl-headers=dir,
320                 [look for openssl headers also in dir])])
321         if test -n "$with_openssl_headers"; then
322                 openssl_cppflags="-I$with_openssl_headers"
323                 CPPFLAGS="$CPPFLAGS $openssl_cppflags"
324         fi
325         AC_ARG_WITH(openssl_libs, [AS_HELP_STRING(--with-openssl-libs=dir,
326                 [look for openssl libraries also in dir])])
327         if test -n "$with_openssl_libs"; then
328                 openssl_libs="-L$with_openssl_libs"
329                 LDFLAGS="$LDFLAGS $openssl_libs"
330         fi
331         AC_CHECK_HEADER(openssl/ssl.h, [], [have_openssl="no"])
332         AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
333         if test "$have_openssl" = "no" -a -z "$with_openssl_headers$with_openssl_libs"; then
334                 # try harder: openssl is sometimes installed in /usr/local/ssl
335                 openssl_cppflags="-I/usr/local/ssl/include"
336                 CPPFLAGS="$CPPFLAGS $openssl_cppflags"
337                 openssl_libs="-L/usr/local/ssl/lib"
338                 LDFLAGS="$LDFLAGS $openssl_libs"
339                 # clear cache
340                 unset ac_cv_header_openssl_ssl_h 2> /dev/null
341                 unset ac_cv_lib_crypto_RAND_bytes 2> /dev/null
342                 AC_CHECK_HEADER(openssl/ssl.h, [have_openssl="yes"], [])
343                 if test "$have_openssl" = "yes"; then
344                         AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
345                 fi
346         fi
347         if test "$have_openssl" = "yes"; then
348                 AC_DEFINE(HAVE_OPENSSL, 1, [define to 1 to turn on openssl support])
349                 AC_SUBST(openssl_cppflags)
350                 openssl_libs="$openssl_libs -lssl -lcrypto"
351                 server_ldflags="$server_ldflags $openssl_libs"
352                 client_ldflags="$client_ldflags $openssl_libs"
353                 audiod_ldflags="$audiod_ldflags $openssl_libs"
354
355                 all_errlist_objs="$all_errlist_objs crypt"
356                 server_errlist_objs="$server_errlist_objs crypt"
357                 client_errlist_objs="$client_errlist_objs crypt"
358                 audiod_errlist_objs="$audiod_errlist_objs crypt"
359
360                 check_gcrypt="no"
361         else
362                 AC_MSG_WARN([openssl libraries not found])
363         fi
364         CPPFLAGS="$OLD_CPPFLAGS"
365         LDFLAGS="$OLD_LDFLAGS"
366         LIBS="$OLD_LIBS"
367 else
368         have_openssl="no"
369 fi
370 ########################################################################### gcrypt
371 if test "$check_gcrypt" = "yes"; then
372         OLD_CPPFLAGS="$CPPFLAGS"
373         OLD_LD_FLAGS="$LDFLAGS"
374         OLD_LIBS="$LIBS"
375         have_gcrypt="yes"
376         AC_ARG_WITH(gcrypt_headers, [AS_HELP_STRING(--with-gcrypt-headers=dir,
377                 [look for gcrypt headers also in dir])])
378         if test -n "$with_gcrypt_headers"; then
379                 gcrypt_cppflags="-I$with_gcrypt_headers"
380                 CPPFLAGS="$CPPFLAGS $gcrypt_cppflags"
381         fi
382         AC_ARG_WITH(gcrypt_libs, [AS_HELP_STRING(--with-gcrypt-libs=dir,
383                 [look for libgcrypt also in dir])])
384         if test -n "$with_gcrypt_libs"; then
385                 gcrypt_libs="-L$with_gcrypt_libs"
386                 LDFLAGS="$LDFLAGS $gcrypt_libs"
387         fi
388         AC_CHECK_HEADER(gcrypt.h, [], [have_gcrypt="no"])
389         AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [have_gcrypt="no"])
390         if test "$have_gcrypt" = "yes"; then
391                 AC_DEFINE(HAVE_GCRYPT, 1, [define to 1 to turn on gcrypt support])
392                 AC_SUBST(gcrypt_cppflags)
393                 gcrypt_libs="$gcrypt_libs -lgcrypt"
394                 server_ldflags="$server_ldflags $gcrypt_libs"
395                 client_ldflags="$client_ldflags $gcrypt_libs"
396                 audiod_ldflags="$audiod_ldflags $gcrypt_libs"
397
398                 all_errlist_objs="$all_errlist_objs gcrypt"
399                 server_errlist_objs="$server_errlist_objs gcrypt"
400                 client_errlist_objs="$client_errlist_objs gcrypt"
401                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
402         else
403                 AC_MSG_WARN([gcrypt library not found])
404         fi
405         CPPFLAGS="$OLD_CPPFLAGS"
406         LDFLAGS="$OLD_LDFLAGS"
407         LIBS="$OLD_LIBS"
408 else
409         have_gcrypt="no"
410 fi
411 ###########################################################################
412 if test "$have_openssl" = "no" -a "$have_gcrypt" = "no"; then
413         AC_MSG_ERROR([neither openssl nor gcrypt usable])
414 fi
415 ########################################################################### libsocket
416 AC_CHECK_LIB([c], [socket],
417         [socket_lib=],
418         [socket_lib="-lsocket"]
419 )
420 server_ldflags="$server_ldflags $socket_lib"
421 client_ldflags="$client_ldflags $socket_lib"
422 audioc_ldflags="$audioc_ldflags $socket_lib"
423 audiod_ldflags="$audiod_ldflags $socket_lib"
424 recv_ldflags="$recv_ldflags $socket_lib"
425 AC_SEARCH_LIBS([connect],[socket],[],[
426         AC_MSG_ERROR([Fatal: Did not find connect().])
427 ],[])
428 ########################################################################### libnsl
429 AC_CHECK_LIB([c], [gethostbyname],
430         [nsl_lib=],
431         [nsl_lib="-lnsl"]
432 )
433 server_ldflags="$server_ldflags $nsl_lib"
434 client_ldflags="$client_ldflags $nsl_lib"
435 audioc_ldflags="$audioc_ldflags $nsl_lib"
436 recv_ldflags="$recv_ldflags $nsl_lib"
437 AC_SEARCH_LIBS([inet_ntoa],[nsl],[],[
438         AC_MSG_ERROR([Fatal: Did not find inet_ntoa().])
439 ],[])
440 ########################################################################### ucred
441 AC_MSG_CHECKING(for struct ucred)
442 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
443         #define _GNU_SOURCE
444         #include <sys/types.h>
445         #include <sys/socket.h>
446 ]], [[
447         struct ucred sucred; sucred.pid=0;
448 ]])],[have_ucred=yes],[have_ucred=no])
449 AC_MSG_RESULT($have_ucred)
450 if test ${have_ucred} = yes; then
451         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
452 fi
453
454 ########################################################################### curses
455 have_curses="yes"
456 OLD_CPPFLAGS="$CPPFLAGS"
457 OLD_LD_FLAGS="$LDFLAGS"
458 OLD_LIBS="$LIBS"
459 AC_ARG_WITH(curses_headers, [AS_HELP_STRING(--with-curses-headers=dir,
460         [look for curses.h also in dir])])
461 if test -n "$with_curses_headers"; then
462         curses_cppflags="-I$with_curses_headers"
463         CPPFLAGS="$CPPFLAGS $curses_cppflags"
464 fi
465 AC_ARG_WITH(curses_libs, [AS_HELP_STRING(--with-curses-libs=dir,
466         [look for libcurses also in dir])])
467 if test -n "$with_curses_libs"; then
468         curses_libs="-L$with_curses_libs"
469         LDFLAGS="$LDFLAGS $curses_libs"
470 fi
471 AC_CHECK_HEADER(curses.h, [], [
472         have_curses="no"
473 ])
474 AC_CHECK_LIB([curses], [initscr], [], [
475         have_curses="no"
476 ])
477 if test "$have_curses" = "yes"; then
478         gui_ldflags="$curses_libs -lcurses"
479         AC_SUBST(curses_cppflags)
480         AC_DEFINE(HAVE_NCURSES, 1, [define to 1 to turn on curses support])
481         extras="$extras gui"
482         executables="$executables gui"
483 else
484         AC_MSG_WARN([no curses lib, cannot build para_gui])
485 fi
486 CPPFLAGS="$OLD_CPPFLAGS"
487 LDFLAGS="$OLD_LDFLAGS"
488 LIBS="$OLD_LIBS"
489
490 ########################################################################### ip_mreqn
491 AC_MSG_CHECKING(for struct ip_mreqn (UDPv4 multicast))
492 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
493         #include <netdb.h>
494         #include <net/if.h>
495 ]], [[
496         struct ip_mreqn mn;
497         mn.imr_ifindex = 0;
498 ]])],[have_ip_mreqn=yes],[have_ip_mreqn=no])
499 AC_MSG_RESULT($have_ip_mreqn)
500 if test ${have_ip_mreqn} = yes; then
501         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 you have struct ip_mreqn)
502 fi
503 ########################################################################### osx
504
505 AC_MSG_CHECKING(for CoreAudio (MacOs))
506 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
507         #include <CoreAudio/CoreAudio.h>
508 ]], [[
509         AudioDeviceID id;
510 ]])],[have_core_audio=yes],[have_core_audio=no])
511 AC_MSG_RESULT($have_core_audio)
512 if test ${have_core_audio} = yes; then
513         f1="-framework CoreAudio"
514         f2="-framework AudioToolbox"
515         f3="-framework AudioUnit"
516         f4="-framework CoreServices"
517         f="$f1 $f2 $f3 $f4"
518
519         all_errlist_objs="$all_errlist_objs osx_write"
520         # ipc is linked into para_server server and into the osx writer. If osl
521         # was not found, para_server will not be built and ipc has not yet been
522         # added to the list of all objects, so we must add it here.
523         if test "$have_osl" = "no"; then
524                 all_errlist_objs="$all_errlist_objs ipc"
525         fi
526         audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
527         audiod_cmdline_objs="$audiod_cmdline_objs osx_write.cmdline"
528         audiod_ldflags="$audiod_ldflags $f"
529
530         play_errlist_objs="$play_errlist_objs osx_write ipc"
531         play_cmdline_objs="$play_cmdline_objs osx_write.cmdline"
532         play_ldflags="$play_ldflags $f"
533
534         write_errlist_objs="$write_errlist_objs osx_write ipc"
535         write_cmdline_objs="$write_cmdline_objs osx_write.cmdline"
536         write_ldflags="$write_ldflags $f"
537         writers="$writers osx"
538         default_writer="OSX_WRITE"
539         AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X)
540 fi
541 ########################################################### ogg/vorbis/speex
542 have_ogg="yes"
543 OLD_CPPFLAGS="$CPPFLAGS"
544 OLD_LD_FLAGS="$LDFLAGS"
545 OLD_LIBS="$LIBS"
546 AC_ARG_WITH(ogg_headers, [AS_HELP_STRING(--with-ogg-headers=dir,
547         [look for ogg headers also in dir])])
548 AC_ARG_WITH(ogg_libs, [AS_HELP_STRING(--with-ogg-libs=dir,
549         [look for ogg libs also in dir])])
550 AC_ARG_WITH(vorbis_headers, [AS_HELP_STRING(--with-vorbis-headers=dir,
551         [look for vorbis headers also in dir])])
552 AC_ARG_WITH(vorbis_libs, [AS_HELP_STRING(--with-vorbis-libs=dir,
553         [look for vorbis libs also in dir])])
554 AC_ARG_WITH(speex_headers, [AS_HELP_STRING(--with-speex-headers=dir,
555         [look for speex headers also in dir])])
556 AC_ARG_WITH(speex_libs, [AS_HELP_STRING(--with-speex-libs=dir,
557         [look for speex libs also in dir])])
558
559 if test -n "$with_ogg_headers"; then
560         ogg_cppflags="-I$with_ogg_headers"
561         CPPFLAGS="$CPPFLAGS $ogg_cppflags"
562 fi
563 if test -n "$with_ogg_libs"; then
564         ogg_libs="-L$with_ogg_libs"
565         LDFLAGS="$LDFLAGS $ogg_libs"
566 fi
567 AC_CHECK_HEADERS([ogg/ogg.h], [], [ have_ogg="no"; ])
568 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [ have_ogg="no" ])
569
570 have_vorbis="yes"
571 have_speex="yes"
572 if test "$have_ogg" = "yes"; then
573         # vorbis
574         if test -n "$with_vorbis_headers"; then
575                 vorbis_cppflags="-I$with_vorbis_headers"
576                 CPPFLAGS="$CPPFLAGS $vorbis_cppflags"
577         fi
578         if test -n "$with_vorbis_libs"; then
579                 vorbis_libs="-L$with_vorbis_libs"
580                 LDFLAGS="$LDFLAGS $vorbis_libs"
581         fi
582         AC_CHECK_HEADERS([vorbis/codec.h], [], [ have_vorbis="no" ])
583         AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [ have_vorbis="no" ])
584
585         # speex
586         if test -n "$with_speex_headers"; then
587                 speex_cppflags="-I$with_speex_headers"
588                 CPPFLAGS="$CPPFLAGS $speex_cppflags"
589         fi
590         if test -n "$with_speex_libs"; then
591                 speex_libs="-L$with_speex_libs"
592                 LDFLAGS="$LDFLAGS $speex_libs"
593         fi
594         AC_CHECK_LIB([speex], [speex_decoder_init], [], [ have_speex="no" ])
595         AC_CHECK_HEADERS([speex/speex.h], [], [ have_speex="no" ])
596 else
597         AC_MSG_WARN([vorbis/speex depend on libogg, which was not detected])
598         have_vorbis="no"
599         have_speex="no"
600 fi
601
602 msg="support in para_server/para_filter/para_afh"
603 if test "$have_vorbis" = "yes" || test "$have_speex" = "yes"; then
604         AC_SUBST(ogg_cppflags)
605         ogg_libs="$ogg_libs -logg"
606         if test "$OSTYPE" = "Darwin"; then
607                 ogg_libs="-Wl,-bind_at_load $ogg_libs"
608         fi
609         server_ldflags="$server_ldflags $ogg_libs"
610         filter_ldflags="$filter_ldflags $ogg_libs"
611         audiod_ldflags="$audiod_ldflags $ogg_libs"
612         play_ldflags="$play_ldflags $ogg_libs"
613         afh_ldflags="$afh_ldflags $ogg_libs"
614         recv_ldflags="$recv_ldflags $ogg_libs"
615         all_errlist_objs="$all_errlist_objs ogg_afh_common"
616         afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
617         recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
618         server_errlist_objs="$server_errlist_objs ogg_afh_common"
619         play_errlist_objs="$play_errlist_objs ogg_afh_common"
620 fi
621 if test "$have_vorbis" = "yes"; then
622         all_errlist_objs="$all_errlist_objs oggdec_filter ogg_afh"
623         AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg/vorbis support)
624         filters="$filters oggdec"
625         vorbis_libs="-lvorbis -lvorbisfile"
626         server_ldflags="$server_ldflags $vorbis_libs"
627         filter_ldflags="$filter_ldflags $vorbis_libs"
628         audiod_ldflags="$audiod_ldflags $vorbis_libs"
629         play_ldflags="$play_ldflags $vorbis_libs"
630         afh_ldflags="$afh_ldflags $vorbis_libs"
631         recv_ldflags="$recv_ldflags $vorbis_libs"
632
633         server_errlist_objs="$server_errlist_objs ogg_afh"
634         filter_errlist_objs="$filter_errlist_objs oggdec_filter"
635         audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
636         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
637         afh_errlist_objs="$afh_errlist_objs ogg_afh"
638         recv_errlist_objs="$recv_errlist_objs ogg_afh"
639
640         audiod_audio_formats="$audiod_audio_formats ogg"
641         server_audio_formats="$server_audio_formats ogg"
642 else
643         AC_MSG_WARN([no ogg/vorbis $msg])
644 fi
645 if test "$have_speex" = "yes"; then
646         all_errlist_objs="$all_errlist_objs spxdec_filter spx_afh spx_common"
647         AC_DEFINE(HAVE_SPEEX, 1, define to 1 to turn on ogg/speex support)
648         filters="$filters spxdec"
649         speex_libs="-lspeex"
650         server_ldflags="$server_ldflags $speex_libs"
651         filter_ldflags="$filter_ldflags $speex_libs"
652         audiod_ldflags="$audiod_ldflags $speex_libs"
653         play_ldflags="$play_ldflags $speex_libs"
654         afh_ldflags="$afh_ldflags $speex_libs"
655         recv_ldflags="$recv_ldflags $speex_libs"
656
657         server_errlist_objs="$server_errlist_objs spx_afh spx_common"
658         filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
659         audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
660         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
661         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
662         recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
663
664         audiod_audio_formats="$audiod_audio_formats spx"
665         server_audio_formats="$server_audio_formats spx"
666 else
667         AC_MSG_WARN([no ogg/speex $msg])
668 fi
669 CPPFLAGS="$OLD_CPPFLAGS"
670 LDFLAGS="$OLD_LDFLAGS"
671 LIBS="$OLD_LIBS"
672 ########################################################################### faad
673 have_faad=yes
674 OLD_CPPFLAGS="$CPPFLAGS"
675 OLD_LD_FLAGS="$LDFLAGS"
676 OLD_LIBS="$LIBS"
677 AC_ARG_WITH(faad_headers, [AS_HELP_STRING(--with-faad-headers=dir,
678         [look for neaacdec.h also in dir])])
679 if test -n "$with_faad_headers"; then
680         faad_cppflags="-I$with_faad_headers"
681         CPPFLAGS="$CPPFLAGS $faad_cppflags"
682 fi
683 AC_ARG_WITH(faad_libs, [AS_HELP_STRING(--with-faad-libs=dir,
684         [look for libfaad also in dir])])
685 if test -n "$with_faad_libs"; then
686         faad_libs="-L$with_faad_libs"
687         LDFLAGS="$LDFLAGS $faad_libs"
688 fi
689 AC_CHECK_HEADER(neaacdec.h, [], have_faad=no)
690 AC_CHECK_LIB([faad], [NeAACDecOpen], [], have_faad=no)
691 if test "$have_faad" = "yes"; then
692         AC_DEFINE(HAVE_FAAD, 1, define to 1 if you want to build the aacdec filter)
693         all_errlist_objs="$all_errlist_objs aac_common aacdec_filter aac_afh"
694         filter_errlist_objs="$filter_errlist_objs aacdec_filter aac_common"
695         afh_errlist_objs="$afh_errlist_objs aac_common aac_afh"
696         audiod_errlist_objs="$audiod_errlist_objs aacdec_filter aac_common"
697         play_errlist_objs="$play_errlist_objs aacdec_filter aac_afh aac_common"
698         server_errlist_objs="$server_errlist_objs aac_afh aac_common"
699         recv_errlist_objs="$recv_errlist_objs aac_afh aac_common"
700
701         server_ldflags="$server_ldflags $faad_libs -lfaad"
702         filter_ldflags="$filter_ldflags $faad_libs -lfaad"
703         audiod_ldflags="$audiod_ldflags $faad_libs -lfaad"
704         play_ldflags="$play_ldflags $faad_libs -lfaad"
705         afh_ldflags="$afh_ldflags $faad_libs -lfaad"
706         recv_ldflags="$afh_ldflags $faad_libs -lfaad"
707
708         audiod_audio_formats="$audiod_audio_formats aac"
709         server_audio_formats="$server_audio_formats aac"
710         filters="$filters aacdec"
711         AC_SUBST(faad_cppflags)
712 else
713         AC_MSG_WARN([no aac support in para_audiod/para_filter])
714 fi
715 CPPFLAGS="$OLD_CPPFLAGS"
716 LDFLAGS="$OLD_LDFLAGS"
717 LIBS="$OLD_LIBS"
718 ########################################################################### mad
719 have_mad="yes"
720 OLD_CPPFLAGS="$CPPFLAGS"
721 OLD_LD_FLAGS="$LDFLAGS"
722 OLD_LIBS="$LIBS"
723
724 AC_ARG_WITH(mad_headers, [AS_HELP_STRING(--with-mad-headers=dir,
725         [look for mad.h also in dir])])
726 if test -n "$with_mad_headers"; then
727         mad_cppflags="-I$with_mad_headers"
728         CPPFLAGS="$CPPFLAGS $mad_cppflags"
729 fi
730 AC_ARG_WITH(mad_libs, [AS_HELP_STRING(--with-mad-libs=dir,
731         [look for libmad also in dir])])
732 if test -n "$with_mad_libs"; then
733         mad_libs="-L$with_mad_libs"
734         LDFLAGS="$LDFLAGS $mad_libs"
735 fi
736 AC_CHECK_HEADERS([mad.h], [], [
737         have_mad="no"
738 ])
739 AC_CHECK_LIB([mad], [mad_stream_init], [], [
740         have_mad="no"
741 ])
742 if test "$have_mad" = "yes"; then
743         AC_DEFINE(HAVE_MAD, 1, define to 1 if you want to build the mp3dec filter)
744         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(mp3dec_filter)"
745         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(mp3dec_filter)"
746         play_cmdline_objs="$play_cmdline_objs add_cmdline(mp3dec_filter)"
747         all_errlist_objs="$all_errlist_objs mp3dec_filter"
748         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
749         audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
750         play_errlist_objs="$play_errlist_objs mp3dec_filter"
751         filter_ldflags="$filter_ldflags $mad_libs -lmad"
752         audiod_ldflags="$audiod_ldflags $mad_libs -lmad"
753         play_ldflags="$play_ldflags $mad_libs -lmad"
754         audiod_audio_formats="$audiod_audio_formats mp3"
755         filters="$filters mp3dec"
756         AC_SUBST(mad_cppflags)
757 else
758         AC_MSG_WARN([no mp3dec support in para_audiod/para_filter])
759 fi
760 CPPFLAGS="$OLD_CPPFLAGS"
761 LDFLAGS="$OLD_LDFLAGS"
762 LIBS="$OLD_LIBS"
763 ###################################################################### libid3tag
764 OLD_CPPFLAGS="$CPPFLAGS"
765 OLD_LD_FLAGS="$LDFLAGS"
766 OLD_LIBS="$LIBS"
767
768 have_libid3tag="yes"
769 AC_ARG_WITH(id3tag_headers, [AS_HELP_STRING(--with-id3tag-headers=dir,
770         [look for id3tag header files also in dir])])
771 if test -n "$with_id3tag_headers"; then
772         id3tag_cppflags="-I$with_id3tag_headers"
773         CPPFLAGS="$CPPFLAGS $id3tag_cppflags"
774 fi
775 AC_ARG_WITH(id3tag_libs, [AS_HELP_STRING(--with-id3tag-libs=dir,
776         [look for id3tag libs also in dir])])
777 if test -n "$with_id3tag_libs"; then
778         id3tag_libs="-L$with_id3tag_libs"
779         LDFLAGS="$LDFLAGS $id3tag_libs"
780 fi
781
782 AC_MSG_CHECKING(for libid3tag)
783 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
784         #include <id3tag.h>
785 ]], [[
786         struct id3_tag t = {.flags = 0};
787 ]])],[],[have_libid3tag=no])
788 AC_MSG_RESULT($have_libid3tag)
789
790 if test ${have_libid3tag} = yes; then
791         AC_DEFINE(HAVE_LIBID3TAG, 1, define to 1 you have libid3tag)
792         server_ldflags="$server_ldflags $id3tag_libs -lid3tag -lz"
793         afh_ldflags="$afh_ldflags $id3tag_libs -lid3tag -lz"
794         play_ldflags="$play_ldflags -lz"
795         recv_ldflags="$recv_ldflags $id3tag_libs -lid3tag"
796         play_ldflags="$play_ldflags $id3tag_libs -lid3tag"
797         AC_SUBST(id3tag_cppflags)
798 else
799         AC_MSG_WARN([no support for id3v2 tags])
800 fi
801 CPPFLAGS="$OLD_CPPFLAGS"
802 LDFLAGS="$OLD_LDFLAGS"
803 LIBS="$OLD_LIBS"
804 ########################################################################### flac
805 OLD_CPPFLAGS="$CPPFLAGS"
806 OLD_LD_FLAGS="$LDFLAGS"
807 OLD_LIBS="$LIBS"
808
809 have_flac="yes"
810 AC_ARG_WITH(flac_headers, [AS_HELP_STRING(--with-flac-headers=dir,
811         [look for flac headers also in dir])])
812 if test -n "$with_flac_headers"; then
813         flac_cppflags="-I$with_flac_headers"
814         CPPFLAGS="$CPPFLAGS $flac_cppflags"
815 fi
816 AC_ARG_WITH(flac_libs, [AS_HELP_STRING(--with-flac-libs=dir,
817         [look for flac libs also in dir])])
818 if test -n "$with_flac_libs"; then
819         flac_libs="-L$with_flac_libs"
820         LDFLAGS="$LDFLAGS $flac_libs"
821 fi
822 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], have_flac=no)
823 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], have_flac=no, -logg -lm)
824 if test "$have_flac" = "yes"; then
825         AC_DEFINE(HAVE_FLAC, 1, define to 1 if you want to build the flacdec filter)
826         all_errlist_objs="$all_errlist_objs flacdec_filter flac_afh"
827         filter_errlist_objs="$filter_errlist_objs flacdec_filter"
828         audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
829         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
830         afh_errlist_objs="$afh_errlist_objs flac_afh"
831         server_errlist_objs="$server_errlist_objs flac_afh"
832         recv_errlist_objs="$recv_errlist_objs flac_afh"
833         filter_ldflags="$filter_ldflags $flac_libs -lFLAC"
834         audiod_ldflags="$audiod_ldflags $flac_libs -lFLAC"
835         play_ldflags="$play_ldflags $flac_libs -lFLAC"
836         server_ldflags="$server_ldflags $flac_libs -lFLAC"
837         afh_ldflags="$afh_ldflags $flac_libs -lFLAC"
838         recv_ldflags="$afh_ldflags $flac_libs -lFLAC"
839         filters="$filters flacdec"
840         server_audio_formats="$server_audio_formats flac"
841         audiod_audio_formats="$audiod_audio_formats flac"
842         AC_SUBST(flac_cppflags)
843 else
844         AC_MSG_WARN([no flac support in para_audiod/para_filter/para_afh/para_server])
845 fi
846 CPPFLAGS="$OLD_CPPFLAGS"
847 LDFLAGS="$OLD_LDFLAGS"
848 LIBS="$OLD_LIBS"
849 ########################################################################### oss
850 OLD_CPPFLAGS="$CPPFLAGS"
851 OLD_LD_FLAGS="$LDFLAGS"
852 OLD_LIBS="$LIBS"
853
854 have_oss="yes"
855 msg="=> will not build oss writer"
856
857 AC_CHECK_HEADER(sys/soundcard.h, [
858         audiod_errlist_objs="$audiod_errlist_objs oss_write"
859         play_errlist_objs="$play_errlist_objs oss_write"
860         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oss_write)"
861         play_cmdline_objs="$play_cmdline_objs add_cmdline(oss_write)"
862
863         write_errlist_objs="$write_errlist_objs oss_write"
864         write_cmdline_objs="$write_cmdline_objs add_cmdline(oss_write)"
865         fade_errlist_objs="$fade_errlist_objs oss_mix"
866         all_errlist_objs="$all_errlist_objs oss_write oss_mix"
867
868         writers="$writers oss"
869         default_writer="OSS_WRITE"
870         mixers="${mixers}oss "
871         default_mixer="OSS_MIX"
872
873         AC_CHECK_LIB(ossaudio, _oss_ioctl, [
874                         audiod_ldflags="$audiod_ldflags -lossaudio"
875                         play_ldflags="$play_ldflags -lossaudio"
876                         write_ldflags="$write_ldflags -lossaudio"
877                         fade_ldflags="$fade_ldflags -lossaudio"
878                 ]
879         )
880         ],
881         [
882                 have_oss="no"
883                 AC_MSG_WARN([no sys/soundcard.h $msg])
884         ]
885 )
886 CPPFLAGS="$OLD_CPPFLAGS"
887 LDFLAGS="$OLD_LDFLAGS"
888 LIBS="$OLD_LIBS"
889
890 ########################################################################### alsa
891 OLD_CPPFLAGS="$CPPFLAGS"
892 OLD_LD_FLAGS="$LDFLAGS"
893 OLD_LIBS="$LIBS"
894
895 msg="=> no alsa support for para_audiod/para_write"
896 if test "$OSTYPE" != "Linux"; then
897         have_alsa="no"
898 else
899         have_alsa="yes"
900 fi
901 if test "$have_alsa" = "yes"; then
902         AC_CHECK_HEADERS([alsa/asoundlib.h], [], [
903                 have_alsa="no"
904                 AC_MSG_WARN([no alsa/asoundlib $msg])
905         ])
906 fi
907
908 if test "$have_alsa" = "yes"; then
909         AC_CHECK_LIB([asound], [snd_pcm_open], [], [
910                 have_alsa="no"
911                 AC_MSG_WARN([no libasound $msg])
912         ])
913 fi
914
915 if test "$have_alsa" = "yes"; then
916         audiod_errlist_objs="$audiod_errlist_objs alsa_write"
917         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(alsa_write)"
918         audiod_ldflags="$audiod_ldflags -lasound"
919         play_errlist_objs="$play_errlist_objs alsa_write"
920         play_cmdline_objs="$play_cmdline_objs add_cmdline(alsa_write)"
921         play_ldflags="$play_ldflags -lasound"
922
923         write_errlist_objs="$write_errlist_objs alsa_write"
924         write_cmdline_objs="$write_cmdline_objs add_cmdline(alsa_write)"
925         write_ldflags="$write_ldflags -lasound"
926         fade_errlist_objs="$fade_errlist_objs alsa_mix"
927         fade_ldflags="$fade_ldflags -lasound"
928         all_errlist_objs="$all_errlist_objs alsa_write alsa_mix"
929
930         writers="$writers alsa"
931         default_writer="ALSA_WRITE"
932         mixers="${mixers}alsa "
933         default_mixer="ALSA_MIX"
934 fi
935
936 CPPFLAGS="$OLD_CPPFLAGS"
937 LDFLAGS="$OLD_LDFLAGS"
938 LIBS="$OLD_LIBS"
939 ########################################################################### fade
940 if test -n "$mixers"; then
941         extras="$extras fade"
942         executables="$executables fade"
943         all_errlist_objs="$all_errlist_objs fade"
944         fade_errlist_objs="$fade_errlist_objs fade exec string fd"
945         fade_cmdline_objs="add_cmdline(fade)"
946         fade_objs="$fade_cmdline_objs $fade_errlist_objs"
947         AC_SUBST(fade_objs, add_dot_o($fade_objs))
948         AC_SUBST(fade_ldflags, $fade_ldflags)
949         AC_DEFINE_UNQUOTED(INIT_FADE_ERRLISTS,
950                 objlist_to_errlist($fade_errlist_objs),
951                 errors used by para_fade)
952         enum="$(
953                 for i in $mixers; do
954                         printf "${i}_MIX, " | tr '[a-z]' '[A-Z]'
955                 done
956         )"
957         AC_DEFINE_UNQUOTED(MIXER_ENUM, $enum NUM_SUPPORTED_MIXERS,
958                 enum of supported mixers)
959         AC_DEFINE_UNQUOTED(DEFAULT_MIXER, $default_mixer,
960                 use this mixer if none was specified)
961         names="$(for i in $mixers; do printf \"$i\",' ' ; done)"
962         AC_DEFINE_UNQUOTED(MIXER_NAMES, $names, supported mixer names)
963         inits="$(
964                 for i in $mixers; do
965                         printf 'extern void '$i'_mix_init(struct mixer *); '
966                 done
967         )"
968         AC_DEFINE_UNQUOTED(DECLARE_MIXER_INITS, $inits,
969                 init functions of the supported mixers)
970         array="$(for i in $mixers; do printf '{.init = '$i'_mix_init},'; done)"
971         AC_DEFINE_UNQUOTED(MIXER_ARRAY, $array, array of supported mixers)
972         mixer_summary="supported mixers:: $mixers, default: $default_mixer"
973 else
974         AC_MSG_WARN([no mixer support])
975         mixer_summary="para_fade: no"
976 fi
977 ########################################################################### libao
978 OLD_CPPFLAGS="$CPPFLAGS"
979 OLD_LD_FLAGS="$LDFLAGS"
980 OLD_LIBS="$LIBS"
981
982 have_ao="yes"
983 AC_ARG_WITH(ao_headers, [AS_HELP_STRING(--with-ao-headers=dir,
984         [look for ao/ao.h also in dir])])
985 if test -n "$with_ao_headers"; then
986         ao_cppflags="-I$with_ao_headers"
987         CPPFLAGS="$CPPFLAGS $ao_cppflags"
988 fi
989 AC_ARG_WITH(ao_libs, [AS_HELP_STRING(--with-ao-libs=dir,
990         [look for libao also in dir])])
991 if test -n "$with_ao_libs"; then
992         ao_libs="-L$with_ao_libs"
993         LDFLAGS="$LDFLAGS $ao_libs"
994 fi
995 msg="no libao support for para_audiod/para_write"
996 AC_CHECK_HEADERS([ao/ao.h], [
997         ], [
998         have_ao="no"
999         AC_MSG_WARN([ao.h not found, $msg])
1000 ])
1001 if test "$have_ao" = "yes"; then
1002         AC_CHECK_LIB([ao], [ao_initialize], [], [
1003                 have_ao="no"
1004                 AC_MSG_WARN([ao lib not found or not working, $msg])
1005         ])
1006 fi
1007 if test "$have_ao" = "yes"; then
1008         AC_CHECK_HEADERS([pthread.h], [
1009                 ], [
1010                 have_ao="no"
1011                 AC_MSG_WARN([pthread.h not found, $msg])
1012         ])
1013 fi
1014 if test "$have_ao" = "yes"; then
1015         AC_CHECK_LIB([pthread], [pthread_create], [], [
1016                 have_ao="no"
1017                 AC_MSG_WARN([pthread lib not found or not working, $msg])
1018         ])
1019 fi
1020 if test "$have_ao" = "yes"; then
1021         all_errlist_objs="$all_errlist_objs ao_write"
1022         audiod_errlist_objs="$audiod_errlist_objs ao_write"
1023         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(ao_write)"
1024         audiod_ldflags="$audiod_ldflags -lao -lpthread"
1025
1026         play_errlist_objs="$play_errlist_objs ao_write"
1027         play_cmdline_objs="$play_cmdline_objs add_cmdline(ao_write)"
1028         play_ldflags="$play_ldflags -lao -lpthread"
1029
1030         write_errlist_objs="$write_errlist_objs ao_write"
1031         write_cmdline_objs="$write_cmdline_objs add_cmdline(ao_write)"
1032         write_ldflags="$write_ldflags $ao_libs -lao -lpthread"
1033         writers="$writers ao"
1034         AC_SUBST(ao_cppflags)
1035 fi
1036
1037 CPPFLAGS="$OLD_CPPFLAGS"
1038 LDFLAGS="$OLD_LDFLAGS"
1039 LIBS="$OLD_LIBS"
1040 ############################################################# readline
1041 OLD_CPPFLAGS="$CPPFLAGS"
1042 OLD_LD_FLAGS="$LDFLAGS"
1043 OLD_LIBS="$LIBS"
1044
1045 have_readline="yes"
1046 AC_ARG_WITH(readline_headers, [AS_HELP_STRING(--with-readline-headers=dir,
1047         [look for libreadline header files also in dir])])
1048 if test -n "$with_readline_headers"; then
1049         readline_cppflags="-I$with_readline_headers"
1050         CPPFLAGS="$CPPFLAGS $readline_cppflags"
1051 fi
1052
1053 AC_ARG_WITH(readline_libs, [AS_HELP_STRING(--with-readline-libs=dir,
1054         [look for readline library also in dir])])
1055 if test -n "$with_readline_libs"; then
1056         readline_libs="-L$with_readline_libs"
1057         LDFLAGS="$LDFLAGS $readline_libs"
1058 fi
1059 msg="no interactive cli support"
1060 AC_CHECK_HEADERS([readline/readline.h], [
1061         ], [
1062         have_readline="no"
1063         AC_MSG_WARN([readline/readline.h not found, $msg])
1064 ])
1065
1066 if test "$have_curses" != "yes"; then
1067         have_readline="no"
1068         AC_MSG_WARN([interactive cli support depends on curses,])
1069         AC_MSG_WARN([but no curses lib was detected, $msg])
1070 fi
1071
1072 if test "$have_readline" = "yes"; then
1073         readline_libs="$readline_libs -lreadline"
1074         AC_SEARCH_LIBS([rl_free_keymap], [readline], [], [have_readline="no"])
1075         if test "$have_readline" = "no"; then # try with -lcurses
1076                 # clear cache
1077                 AC_MSG_NOTICE([trying again with -lcurses])
1078                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1079                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1080                         have_readline=yes
1081                         readline_libs="$readline_libs -lcurses"
1082                 ], [], [-lcurses])
1083         fi
1084         if test "$have_readline" = "no"; then # try with -ltermcap
1085                 # clear cache
1086                 AC_MSG_NOTICE([trying again with -ltermcap])
1087                 unset ac_cv_search_rl_free_keymap 2> /dev/null
1088                 AC_SEARCH_LIBS([rl_free_keymap], [readline], [
1089                         have_readline=yes
1090                         readline_libs="$readline_libs -ltermcap"
1091                 ], [], [-ltermcap])
1092         fi
1093 fi
1094
1095 if test "$have_readline" = "yes"; then
1096         all_errlist_objs="$all_errlist_objs interactive"
1097         client_errlist_objs="$client_errlist_objs interactive"
1098         client_ldflags="$client_ldflags $readline_libs"
1099         audioc_errlist_objs="$audioc_errlist_objs buffer_tree interactive sched time"
1100         audioc_ldflags="$audioc_ldflags $readline_libs"
1101         play_errlist_objs="$play_errlist_objs interactive"
1102         play_ldflags="$play_ldflags $readline_libs"
1103         AC_SUBST(readline_cppflags)
1104         AC_DEFINE(HAVE_READLINE, 1, define to 1 to turn on readline support)
1105 else
1106         AC_MSG_WARN([libreadline not found or unusable])
1107 fi
1108 CPPFLAGS="$OLD_CPPFLAGS"
1109 LDFLAGS="$OLD_LDFLAGS"
1110 LIBS="$OLD_LIBS"
1111 ############################################################# libsamplerate
1112 OLD_CPPFLAGS="$CPPFLAGS"
1113 OLD_LD_FLAGS="$LDFLAGS"
1114 OLD_LIBS="$LIBS"
1115
1116 have_samplerate="yes"
1117 AC_ARG_WITH(samplerate_headers, [AS_HELP_STRING(--with-samplerate-headers=dir,
1118         [look for samplerate headers also in dir])])
1119 if test -n "$with_samplerate_headers"; then
1120         samplerate_cppflags="-I$with_samplerate_headers"
1121         CPPFLAGS="$CPPFLAGS $samplerate_cppflags"
1122 fi
1123 AC_ARG_WITH(samplerate_libs, [AS_HELP_STRING(--with-samplerate-libs=dir,
1124         [look for samplerate libs also in dir])])
1125 if test -n "$with_samplerate_libs"; then
1126         samplerate_libs="-L$with_samplerate_libs"
1127         LDFLAGS="$LDFLAGS $samplerate_libs"
1128 fi
1129
1130 AC_CHECK_HEADER(samplerate.h, [], have_samplerate=no)
1131 AC_CHECK_LIB([samplerate], [src_process], [], have_samplerate=no, [])
1132
1133 if test "$have_samplerate" = "yes"; then
1134         all_errlist_objs="$all_errlist_objs resample_filter"
1135         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
1136         filter_cmdline_objs="$filter_cmdline_objs add_cmdline(resample_filter)"
1137         audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
1138         audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(resample_filter)"
1139         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
1140         play_cmdline_objs="$play_cmdline_objs add_cmdline(resample_filter)"
1141         filter_ldflags="$filter_ldflags $samplerate_libs -lsamplerate"
1142         audiod_ldflags="$audiod_ldflags $samplerate_libs -lsamplerate"
1143         play_ldflags="$play_ldflags $samplerate_libs -lsamplerate"
1144         filters="$filters resample"
1145         AC_SUBST(samplerate_cppflags)
1146 else
1147         AC_MSG_WARN([no resample support in para_audiod/para_filter])
1148 fi
1149 CPPFLAGS="$OLD_CPPFLAGS"
1150 LDFLAGS="$OLD_LDFLAGS"
1151 LIBS="$OLD_LIBS"
1152 ############################################################# error2.h
1153 AC_MSG_NOTICE(creating error2.h)
1154 for i in $executables; do
1155         echo "$i: "
1156         eval echo \$${i}_errlist_objs
1157 done | ./error2.pl > error2.h
1158 for obj in $all_errlist_objs; do
1159         SS="$SS SS_$(echo $obj | tr 'a-z' 'A-Z'),"
1160 done
1161 AC_DEFINE_UNQUOTED(DEFINE_ERRLIST_OBJECT_ENUM,
1162         [enum {$SS NUM_SS}],
1163         [list of all objects that use the paraslash error facility]
1164 )
1165
1166 ################################################################## status items
1167
1168 status_items="basename status num_played mtime bitrate frequency file_size
1169 status_flags format score techinfo afs_mode
1170 attributes_txt decoder_flags audiod_status play_time attributes_bitmap
1171 offset seconds_total stream_start current_time audiod_uptime image_id
1172 lyrics_id duration directory lyrics_name image_name path hash channels
1173 last_played num_chunks chunk_time amplification artist title year album
1174 comment"
1175
1176 result=
1177 for i in $status_items; do
1178         result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), "
1179 done
1180 AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result],
1181         [enum of all status items])
1182
1183 result=
1184 for i in $status_items; do
1185         result="$result \"$i\", "
1186 done
1187 AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result],
1188         [char * array of all status items])
1189
1190 AC_DEFINE_UNQUOTED(SERVER_AUDIO_FORMATS, "$server_audio_formats",
1191         [formats supported by para_server and para_afh])
1192
1193 AC_SUBST(executables, add_para($executables))
1194
1195 recv_objs="$recv_cmdline_objs $recv_errlist_objs"
1196 filter_objs="$filter_cmdline_objs $filter_errlist_objs"
1197 audiod_objs="$audiod_cmdline_objs $audiod_errlist_objs"
1198 server_objs="$server_cmdline_objs $server_errlist_objs"
1199 write_objs="$write_cmdline_objs $write_errlist_objs"
1200 client_objs="$client_cmdline_objs $client_errlist_objs"
1201 audioc_objs="$audioc_cmdline_objs $audioc_errlist_objs"
1202 afh_objs="$afh_cmdline_objs $afh_errlist_objs"
1203 play_objs="$play_cmdline_objs $play_errlist_objs"
1204
1205
1206 AC_SUBST(recv_objs, add_dot_o($recv_objs))
1207 AC_SUBST(recv_ldflags, $recv_ldflags)
1208 AC_DEFINE_UNQUOTED(INIT_RECV_ERRLISTS, objlist_to_errlist($recv_errlist_objs),
1209         errors used by para_recv)
1210
1211 AC_SUBST(filter_objs, add_dot_o($filter_objs))
1212 AC_SUBST(filter_ldflags, $filter_ldflags)
1213 AC_DEFINE_UNQUOTED(INIT_FILTER_ERRLISTS,
1214         objlist_to_errlist($filter_errlist_objs), errors used by para_filter)
1215
1216 AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
1217 AC_SUBST(audiod_ldflags, $audiod_ldflags)
1218 AC_DEFINE_UNQUOTED(INIT_AUDIOD_ERRLISTS, objlist_to_errlist($audiod_errlist_objs),
1219         errors used by para_audiod)
1220
1221 AC_SUBST(server_objs, add_dot_o($server_objs))
1222 AC_SUBST(server_ldflags, $server_ldflags)
1223 AC_DEFINE_UNQUOTED(INIT_SERVER_ERRLISTS,
1224         objlist_to_errlist($server_errlist_objs), errors used by para_server)
1225
1226 AC_SUBST(afh_objs, add_dot_o($afh_objs))
1227 AC_SUBST(afh_ldflags, $afh_ldflags)
1228 AC_DEFINE_UNQUOTED(INIT_AFH_ERRLISTS,
1229         objlist_to_errlist($afh_errlist_objs), errors used by para_afh)
1230
1231 AC_SUBST(write_objs, add_dot_o($write_objs))
1232 AC_SUBST(write_ldflags, $write_ldflags)
1233 AC_DEFINE_UNQUOTED(INIT_WRITE_ERRLISTS,
1234         objlist_to_errlist($write_errlist_objs), errors used by para_write)
1235
1236 AC_SUBST(client_objs, add_dot_o($client_objs))
1237 AC_SUBST(client_ldflags, $client_ldflags)
1238 AC_DEFINE_UNQUOTED(INIT_CLIENT_ERRLISTS,
1239         objlist_to_errlist($client_errlist_objs), errors used by para_client)
1240
1241 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
1242 AC_SUBST(audioc_ldflags, $audioc_ldflags)
1243 AC_DEFINE_UNQUOTED(INIT_AUDIOC_ERRLISTS,
1244         objlist_to_errlist($audioc_errlist_objs), errors used by para_audioc)
1245
1246 AC_SUBST(gui_objs, add_dot_o($gui_objs))
1247 AC_SUBST(gui_ldflags, $gui_ldflags)
1248 AC_DEFINE_UNQUOTED(INIT_GUI_ERRLISTS,
1249         objlist_to_errlist($gui_errlist_objs), errors used by para_gui)
1250
1251 AC_SUBST(play_objs, add_dot_o($play_objs))
1252 AC_SUBST(play_ldflags, $play_ldflags)
1253 AC_DEFINE_UNQUOTED(INIT_PLAY_ERRLISTS,
1254         objlist_to_errlist($play_errlist_objs), errors used by para_play)
1255
1256 AC_MSG_NOTICE(play objs: $play_objs)
1257
1258 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
1259 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
1260         enum of supported filters)
1261 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
1262 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
1263 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
1264 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
1265
1266 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
1267 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
1268         enum of supported writers)
1269 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
1270 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
1271 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
1272 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
1273 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
1274 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
1275 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
1276
1277 enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
1278 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
1279         enum of audio formats supported by audiod)
1280 names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
1281 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
1282
1283 AC_OUTPUT
1284 AC_MSG_NOTICE([
1285 paraslash configuration:
1286 ~~~~~~~~~~~~~~~~~~~~~~~~
1287 unix socket credentials: $have_ucred
1288 readline (interactive CLIs): $have_readline
1289 audio formats supported by para_server/para_afh: $server_audio_formats
1290 id3 version2 support: $have_libid3tag
1291 filters supported by para_audiod/para_filter: $filters
1292 writers supported by para_audiod/para_write: $writers
1293 optional executables: $extras
1294 $mixer_summary
1295 ])