Improve description of para_play.
[paraslash.git] / configure.ac
1 AC_PREREQ([2.61])
2
3 AC_INIT([paraslash], [m4_esyscmd_s(./GIT-VERSION-GEN)],
4         [maan@tuebingen.mpg.de], [], [http://people.tuebingen.mpg.de/maan/paraslash/])
5 AC_CONFIG_HEADERS([config.h])
6
7 AC_CONFIG_FILES([Makefile])
8 AC_DEFUN([add_dot_o],[$(for i in $@; do printf "$i.o "; done)])
9 AC_DEFUN([LIB_ARG_WITH], [
10         AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir,
11                 [look for $1 headers in dir])])
12         AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir,
13                 [look for $1 libraries in dir])])
14         if test -n "$with_$1_headers"; then
15                 $1_cppflags="-I$with_$1_headers"
16                 CPPFLAGS="$CPPFLAGS $$1_cppflags"
17         fi
18         if test -n "$with_$1_libs"; then
19                 $1_ldflags="-L$with_$1_libs $2"
20         else
21                 $1_ldflags="$2"
22         fi
23         LDFLAGS="$LDFLAGS $$1_ldflags"
24 ])
25
26 AC_DEFUN([STASH_FLAGS], [
27         OLD_CPPFLAGS="$CPPFLAGS"
28         OLD_LDFLAGS="$LDFLAGS"
29         OLD_LIBS="$LIBS"
30 ])
31
32 AC_DEFUN([UNSTASH_FLAGS], [
33         CPPFLAGS="$OLD_CPPFLAGS"
34         LDFLAGS="$OLD_LDFLAGS"
35         LIBS="$OLD_LIBS"
36 ])
37 AC_DEFUN([LIB_SUBST_FLAGS], [
38         if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then
39                 AC_DEFINE(HAVE_[]m4_toupper([$1]), 1,
40                         define to 1 to turn on $1 support)
41         else
42                 $1_cppflags=
43                 $1_ldflags=
44         fi
45         AC_SUBST(HAVE_[]m4_toupper([$1]))
46         AC_SUBST($1_cppflags)
47         AC_SUBST($1_ldflags)
48 ])
49 AC_DEFUN([REQUIRE_EXECUTABLE], [
50         AC_PATH_PROG(m4_toupper([$1]), [$1])
51         test -z "$m4_toupper([$1])" && AC_MSG_ERROR(
52                 [$1 is required to build this package])
53 ])
54
55 AC_USE_SYSTEM_EXTENSIONS
56 AC_C_BIGENDIAN()
57 AC_PROG_CC
58 AC_PROG_CPP
59
60 REQUIRE_EXECUTABLE([bison])
61 REQUIRE_EXECUTABLE([flex])
62 REQUIRE_EXECUTABLE([m4])
63
64 executables="recv filter audioc write afh play"
65 ########################################################################### osl
66 STASH_FLAGS
67 LIB_ARG_WITH([osl], [-losl])
68 HAVE_OSL=yes
69 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
70 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
71 LIB_SUBST_FLAGS(osl)
72 UNSTASH_FLAGS
73 ######################################################################## lopsub
74 HAVE_LOPSUB=yes
75 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
76 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
77 STASH_FLAGS
78 LIB_ARG_WITH([lopsub], [-llopsub])
79 AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no])
80 AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no])
81 if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([
82         The lopsub library is required to build this software, but
83         the above checks indicate it is not installed on your system.
84         Run the following command to download a copy.
85                 git clone git://git.tuebingen.mpg.de/lopsub.git
86         Install the library, then run this configure script again.
87 ])
88 fi
89 LIB_SUBST_FLAGS([lopsub])
90 UNSTASH_FLAGS
91 ######################################################################## openssl
92 STASH_FLAGS
93 HAVE_OPENSSL=yes
94 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
95 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
96 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
97 LIB_SUBST_FLAGS(openssl)
98 if test $HAVE_OPENSSL = yes; then
99         AC_CHECK_LIB([crypto], [RSA_set0_key],
100                 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl-1.1]))
101 fi
102 UNSTASH_FLAGS
103 ######################################################################### gcrypt
104 STASH_FLAGS
105 HAVE_GCRYPT=yes
106 LIB_ARG_WITH([gcrypt], [-lgcrypt])
107 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
108 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
109 LIB_SUBST_FLAGS(gcrypt)
110 UNSTASH_FLAGS
111 ######################################################################### crypto
112 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
113         Force using crypto library "lib". This package requires either
114         openssl or libgcrypt being installed. Possible values for "lib"
115         are thus "openssl" and "gcrypt". If this option is not given,
116         openssl is tried first. If openssl was not found, gcrypt is
117         tried next.])])
118
119 CRYPTOLIB="$enable_cryptolib"
120 case "$enable_cryptolib" in
121 "openssl")
122         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
123         crypto_ldflags="$openssl_ldflags"
124         ;;
125 "gcrypt")
126         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
127         crypto_ldflags="$gcrypt_ldflags"
128         ;;
129 "")
130         crypto_ldflags=
131         if test $HAVE_GCRYPT = yes; then
132                 CRYPTOLIB=gcrypt
133                 crypto_ldflags="$gcrypt_ldflags"
134         fi
135         if test $HAVE_OPENSSL = yes; then
136                 CRYPTOLIB=openssl
137                 crypto_ldflags="$openssl_ldflags"
138         fi
139         ;;
140 *)
141         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
142         ;;
143 esac
144 AC_SUBST(crypto_ldflags)
145 ########################################################################## iconv
146 STASH_FLAGS
147 LIBS=
148 AC_SEARCH_LIBS([libiconv_open], [iconv],
149         [iconv_ldflags="$LIBS"],
150         []
151 )
152 AC_SUBST(iconv_ldflags)
153 AC_MSG_CHECKING([whether iconv needs const char ** cast])
154 AC_COMPILE_IFELSE([
155         AC_LANG_PROGRAM([
156                 #include <iconv.h>
157         ],[
158                 size_t iconv(iconv_t cd, const char **inbuf,
159                         size_t *inbytesleft, char **outbuf,
160                         size_t *outbytesleft);
161         ])
162 ],
163         [cast='(const char **)'; msg=yes],
164         [cast=; msg=no]
165 )
166 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
167 AC_MSG_RESULT($msg)
168 UNSTASH_FLAGS
169 ########################################################################### ucred
170 AC_CHECK_TYPE([struct ucred], [
171         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
172 ], [], [
173         #include <sys/types.h>
174         #include <sys/socket.h>
175 ])
176 ################################################################### FNM_EXTMATCH
177 AC_MSG_CHECKING(for extended wildcard pattern matching)
178 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
179         #include <fnmatch.h>
180 ]], [[
181         unsigned n = FNM_EXTMATCH;
182 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
183 AC_MSG_RESULT($have_fnm_extmatch)
184 if test $have_fnm_extmatch = yes; then
185         AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
186 fi
187 ########################################################################### curses
188 STASH_FLAGS
189 LIB_ARG_WITH([curses], [])
190 HAVE_CURSES=yes
191 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
192 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
193 curses_ldflags="$curses_ldflags $LIBS"
194 LIB_SUBST_FLAGS(curses)
195 UNSTASH_FLAGS
196 ########################################################################### ip_mreqn
197 AC_CHECK_TYPE([struct ip_mreqn], [
198         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
199 ], [], [
200         #include <netdb.h>
201         #include <net/if.h>
202 ])
203 ########################################################################### ogg
204 STASH_FLAGS
205 LIB_ARG_WITH([ogg], [-logg])
206 HAVE_OGG=yes
207 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
208 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
209 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
210         AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
211 LIB_SUBST_FLAGS(ogg)
212 UNSTASH_FLAGS
213 ######################################################################### vorbis
214 STASH_FLAGS
215 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
216 HAVE_VORBIS=yes
217 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
218 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
219 LIB_SUBST_FLAGS(vorbis)
220 UNSTASH_FLAGS
221 ######################################################################### speex
222 STASH_FLAGS
223 LIB_ARG_WITH([speex], [-lspeex])
224 HAVE_SPEEX=yes
225 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
226 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
227 LIB_SUBST_FLAGS(speex)
228 UNSTASH_FLAGS
229 ######################################################################### opus
230 STASH_FLAGS
231 LIB_ARG_WITH([opus], [-lopus])
232 HAVE_OPUS=yes
233 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
234 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
235 LIB_SUBST_FLAGS(opus)
236 UNSTASH_FLAGS
237 ########################################################################### flac
238 STASH_FLAGS
239 LIB_ARG_WITH([flac], [-lFLAC -lm])
240 HAVE_FLAC=yes
241 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
242 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
243 LIB_SUBST_FLAGS(flac)
244 UNSTASH_FLAGS
245
246 # some helper functions for codecs which use the ogg container format
247 AC_DEFUN([NEED_OGG_OBJECTS], [{
248         test "$HAVE_OGG" = 'yes' -a \( \
249                  "$HAVE_VORBIS" = 'yes' \
250                 -o "$HAVE_SPEEX" = 'yes' \
251                 -o "$HAVE_OPUS" = 'yes' \
252                 -o "$HAVE_FLAC" = 'yes' \
253         \)
254 }])
255 AC_DEFUN([NEED_VORBIS_OBJECTS], [{
256         test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'
257 }])
258 AC_DEFUN([NEED_SPEEX_OBJECTS], [{
259         test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'
260 }])
261 AC_DEFUN([NEED_OPUS_OBJECTS], [{
262         test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'
263 }])
264 AC_DEFUN([NEED_FLAC_OBJECTS], [{
265         test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'
266 }])
267 ########################################################################### faad
268 STASH_FLAGS
269 LIB_ARG_WITH([faad], [-lfaad -lmp4ff])
270 HAVE_FAAD=yes
271 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
272 AC_CHECK_HEADER(mp4ff.h, [], HAVE_FAAD=no)
273 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
274 AC_CHECK_LIB([mp4ff], [mp4ff_meta_get_artist], [], HAVE_FAAD=no)
275 LIB_SUBST_FLAGS(faad)
276 UNSTASH_FLAGS
277 ########################################################################### mad
278 STASH_FLAGS
279 LIB_ARG_WITH([mad], [-lmad])
280 HAVE_MAD=yes
281 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
282 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
283 LIB_SUBST_FLAGS(mad)
284 UNSTASH_FLAGS
285 ###################################################################### libid3tag
286 STASH_FLAGS
287 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
288 HAVE_ID3TAG=yes
289 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
290 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
291 LIB_SUBST_FLAGS(id3tag)
292 UNSTASH_FLAGS
293 ########################################################################### oss
294 STASH_FLAGS
295 LIB_ARG_WITH([oss], [])
296 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
297 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
298 LIB_SUBST_FLAGS(oss)
299 UNSTASH_FLAGS
300 ########################################################################### alsa
301 STASH_FLAGS
302 LIB_ARG_WITH([alsa], [-lasound])
303 HAVE_ALSA=yes
304 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
305 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
306 LIB_SUBST_FLAGS(alsa)
307 UNSTASH_FLAGS
308 ######################################################################### pthread
309 STASH_FLAGS
310 LIB_ARG_WITH([pthread], [-lpthread])
311 HAVE_PTHREAD=yes
312 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
313 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
314 LIB_SUBST_FLAGS(pthread)
315 UNSTASH_FLAGS
316 ########################################################################### libao
317 STASH_FLAGS
318 LIB_ARG_WITH([ao], [-lao])
319 HAVE_AO=yes
320 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
321 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
322 LIB_SUBST_FLAGS(ao)
323 UNSTASH_FLAGS
324 AC_DEFUN([NEED_AO_OBJECTS], [{ test $HAVE_AO = yes -a $HAVE_PTHREAD = yes; }])
325 ######################################################################## readline
326 STASH_FLAGS
327 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
328 LIB_ARG_WITH([readline], [-lreadline $LIBS])
329 HAVE_READLINE=yes
330 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
331 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
332 AC_CHECK_DECL(
333         [rl_free_keymap],
334         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
335         [],
336         [
337                 #include <stdio.h>
338                 #include <readline/readline.h>
339         ]
340 )
341 LIB_SUBST_FLAGS(readline)
342 UNSTASH_FLAGS
343 ############################################################# libsamplerate
344 STASH_FLAGS
345 LIB_ARG_WITH([samplerate], [-lsamplerate])
346 HAVE_SAMPLERATE=yes
347 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
348 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
349 LIB_SUBST_FLAGS(samplerate)
350 UNSTASH_FLAGS
351 ######################################################################### server
352 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes && test -n "$BISON" && \
353                 test -n "$FLEX"; then
354         build_server="yes"
355         executables="$executables server"
356         server_errlist_objs="
357                 server
358                 afh_common
359                 mp3_afh
360                 vss
361                 command
362                 net
363                 string
364                 signal
365                 time
366                 daemon
367                 http_send
368                 close_on_fork
369                 mm
370                 crypt_common
371                 base64
372                 ipc
373                 dccp_send
374                 fd
375                 user_list
376                 chunk_queue
377                 afs
378                 aft
379                 mood
380                 mp
381                 score
382                 attribute
383                 blob
384                 playlist
385                 sched
386                 acl
387                 send_common
388                 udp_send
389                 color
390                 fec
391                 wma_afh
392                 wma_common
393                 sideband
394                 version
395                 lsu
396         "
397         if test "$CRYPTOLIB" = openssl; then
398                 server_errlist_objs="$server_errlist_objs openssl"
399         else
400                 server_errlist_objs="$server_errlist_objs gcrypt"
401         fi
402         NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
403         NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
404         NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
405         NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
406         NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
407         if test $HAVE_FAAD = yes; then
408                 server_errlist_objs="$server_errlist_objs aac_afh"
409         fi
410         server_objs="$server_errlist_objs"
411         AC_SUBST(server_objs, add_dot_o($server_objs))
412 else
413         build_server="no"
414 fi
415 ############################################################# client
416 if test -n "$CRYPTOLIB"; then
417         build_client="yes"
418         executables="$executables client"
419         client_errlist_objs="
420                 client
421                 net
422                 string
423                 fd
424                 lsu
425                 sched
426                 stdin
427                 stdout
428                 time
429                 sideband
430                 client_common
431                 buffer_tree
432                 crypt_common
433                 base64
434                 version
435         "
436         if test "$CRYPTOLIB" = openssl; then
437                 client_errlist_objs="$client_errlist_objs openssl"
438         else
439                 client_errlist_objs="$client_errlist_objs gcrypt"
440         fi
441         if test $HAVE_READLINE = yes; then
442                 client_errlist_objs="$client_errlist_objs interactive"
443         fi
444         client_objs="$client_errlist_objs"
445         AC_SUBST(client_objs, add_dot_o($client_errlist_objs))
446 else
447         build_client="no"
448 fi
449 ############################################################# audiod
450 if test -n "$CRYPTOLIB"; then
451         build_audiod="yes"
452         executables="$executables audiod"
453         audiod_audio_formats="wma"
454         audiod_errlist_objs="$audiod_errlist_objs
455                 audiod
456                 signal
457                 string
458                 daemon
459                 stat
460                 net
461                 crypt_common
462                 base64
463                 sideband
464                 time
465                 grab_client
466                 filter_common
467                 wav_filter
468                 compress_filter
469                 amp_filter
470                 http_recv
471                 dccp_recv
472                 recv_common
473                 fd
474                 sched
475                 write_common
476                 file_write
477                 audiod_command
478                 fecdec_filter
479                 client_common
480                 udp_recv
481                 color
482                 fec
483                 prebuffer_filter
484                 version
485                 bitstream
486                 imdct
487                 wma_common
488                 wmadec_filter
489                 buffer_tree
490                 sync_filter
491                 lsu
492         "
493         if test "$CRYPTOLIB" = openssl; then
494                 audiod_errlist_objs="$audiod_errlist_objs openssl"
495         else
496                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
497         fi
498         NEED_VORBIS_OBJECTS && {
499                 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
500                 audiod_audio_formats="$audiod_audio_formats ogg"
501         }
502         NEED_SPEEX_OBJECTS && {
503                 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
504                 audiod_audio_formats="$audiod_audio_formats spx"
505         }
506         NEED_OPUS_OBJECTS && {
507                 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
508                 audiod_audio_formats="$audiod_audio_formats opus"
509         }
510         NEED_FLAC_OBJECTS && {
511                 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
512                 audiod_audio_formats="$audiod_audio_formats flac"
513         }
514         if test $HAVE_FAAD = yes; then
515                 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter"
516                 audiod_audio_formats="$audiod_audio_formats aac"
517         fi
518         if test $HAVE_MAD = yes; then
519                 audiod_audio_formats="$audiod_audio_formats mp3"
520                 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
521         fi
522         if test $HAVE_OSS = yes; then
523                 audiod_errlist_objs="$audiod_errlist_objs oss_write"
524         fi
525         if test $HAVE_ALSA = yes; then
526                 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
527         fi
528         NEED_AO_OBJECTS && {
529                 audiod_errlist_objs="$audiod_errlist_objs ao_write"
530         }
531         if test $HAVE_SAMPLERATE = yes; then
532                 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
533         fi
534         audiod_objs="$audiod_errlist_objs"
535         AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
536
537         enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
538         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
539                 enum of audio formats supported by audiod)
540         names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
541         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
542 else
543         build_audiod="no"
544 fi
545 ########################################################################### mixer
546 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
547         build_mixer="yes"
548         executables="$executables mixer"
549         mixer_errlist_objs="mixer exec string fd lsu version"
550         if test $HAVE_OSS = yes; then
551                 mixer_errlist_objs="$mixer_errlist_objs oss_mix"
552         fi
553         if test $HAVE_ALSA = yes; then
554                 mixer_errlist_objs="$mixer_errlist_objs alsa_mix"
555         fi
556         mixer_objs="$mixer_errlist_objs"
557         AC_SUBST(mixer_objs, add_dot_o($mixer_objs))
558 else
559         build_mixer="no"
560         AC_MSG_WARN([no mixer support])
561 fi
562 ########################################################################### gui
563 if test $HAVE_CURSES = yes; then
564         build_gui="yes"
565         executables="$executables gui"
566         gui_errlist_objs="
567                 exec
568                 signal
569                 string
570                 stat
571                 ringbuffer
572                 fd
573                 gui
574                 gui_theme
575                 lsu
576                 time
577                 sched
578                 version
579         "
580         gui_objs="$gui_errlist_objs"
581         AC_SUBST(gui_objs, add_dot_o($gui_objs))
582 else
583         build_gui="no"
584         AC_MSG_WARN([no curses lib, cannot build para_gui])
585 fi
586 ######################################################################## filter
587 filter_errlist_objs="
588         filter_common
589         wav_filter
590         compress_filter
591         filter
592         string
593         stdin
594         stdout
595         sched
596         fd
597         amp_filter
598         fecdec_filter
599         fec
600         lsu
601         version
602         prebuffer_filter
603         time
604         bitstream
605         imdct
606         wma_common
607         wmadec_filter
608         buffer_tree
609         net
610         sync_filter
611 "
612 NEED_VORBIS_OBJECTS && filter_errlist_objs="$filter_errlist_objs oggdec_filter"
613 NEED_SPEEX_OBJECTS && filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
614 NEED_OPUS_OBJECTS && filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
615 NEED_FLAC_OBJECTS && filter_errlist_objs="$filter_errlist_objs flacdec_filter"
616 if test $HAVE_FAAD = yes; then
617         filter_errlist_objs="$filter_errlist_objs aacdec_filter"
618 fi
619 if test $HAVE_MAD = yes; then
620         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
621 fi
622 if test $HAVE_SAMPLERATE = yes; then
623         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
624 fi
625 filter_objs="$filter_errlist_objs"
626
627 AC_SUBST(filter_objs, add_dot_o($filter_objs))
628 ########################################################################## recv
629 recv_errlist_objs="
630         http_recv
631         recv_common
632         recv
633         time
634         string
635         net
636         dccp_recv
637         fd
638         sched
639         stdout
640         udp_recv
641         buffer_tree
642         afh_recv
643         afh_common
644         wma_afh
645         wma_common
646         mp3_afh
647         version
648 "
649 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
650 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
651 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
652 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
653 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
654
655 if test $HAVE_FAAD = yes; then
656         recv_errlist_objs="$recv_errlist_objs aac_afh"
657 fi
658 recv_objs="$recv_errlist_objs"
659 AC_SUBST(recv_objs, add_dot_o($recv_objs))
660 ########################################################################### afh
661 audio_format_handlers="mp3 wma"
662 afh_errlist_objs="
663         afh
664         string
665         fd
666         mp3_afh
667         afh_common
668         time
669         wma_afh
670         wma_common
671         version
672 "
673 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
674 NEED_VORBIS_OBJECTS && {
675         afh_errlist_objs="$afh_errlist_objs ogg_afh"
676         audio_format_handlers="$audio_format_handlers ogg"
677 }
678 NEED_SPEEX_OBJECTS && {
679         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
680         audio_format_handlers="$audio_format_handlers spx"
681 }
682 NEED_OPUS_OBJECTS && {
683         afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
684         audio_format_handlers="$audio_format_handlers opus"
685 }
686 NEED_FLAC_OBJECTS && {
687         afh_errlist_objs="$afh_errlist_objs flac_afh"
688         audio_format_handlers="$audio_format_handlers flac"
689 }
690 if test $HAVE_FAAD = yes; then
691         afh_errlist_objs="$afh_errlist_objs aac_afh"
692         audio_format_handlers="$audio_format_handlers aac"
693 fi
694
695 afh_objs="$afh_errlist_objs"
696
697 AC_SUBST(afh_objs, add_dot_o($afh_objs))
698 ########################################################################## play
699 play_errlist_objs="
700         play
701         fd
702         sched
703         buffer_tree
704         time
705         string
706         net
707         afh_recv
708         afh_common
709         wma_afh
710         wma_common
711         mp3_afh
712         recv_common
713         udp_recv
714         http_recv
715         dccp_recv
716         filter_common
717         fec
718         bitstream
719         imdct
720         wav_filter
721         compress_filter
722         amp_filter
723         prebuffer_filter
724         fecdec_filter
725         wmadec_filter
726         write_common
727         file_write
728         version
729         sync_filter
730         lsu
731 "
732 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
733 NEED_VORBIS_OBJECTS && {
734         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
735 }
736 NEED_SPEEX_OBJECTS && {
737         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
738 }
739 NEED_OPUS_OBJECTS &&
740         play_errlist_objs="$play_errlist_objs
741                 opusdec_filter
742                 opus_afh
743                 opus_common
744         "
745 NEED_FLAC_OBJECTS && {
746         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
747 }
748 if test $HAVE_FAAD = yes; then
749         play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter"
750 fi
751 if test $HAVE_MAD = yes; then
752         play_errlist_objs="$play_errlist_objs mp3dec_filter"
753 fi
754 if test $HAVE_OSS = yes; then
755         play_errlist_objs="$play_errlist_objs oss_write"
756 fi
757 if test $HAVE_ALSA = yes; then
758         play_errlist_objs="$play_errlist_objs alsa_write"
759 fi
760 NEED_AO_OBJECTS && {
761         play_errlist_objs="$play_errlist_objs ao_write"
762 }
763 if test $HAVE_READLINE = yes; then
764         play_errlist_objs="$play_errlist_objs interactive"
765 fi
766 if test $HAVE_SAMPLERATE = yes; then
767         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
768 fi
769
770 play_objs="$play_errlist_objs"
771 AC_SUBST(play_objs, add_dot_o($play_objs))
772 ######################################################################### write
773 write_errlist_objs="
774         write
775         write_common
776         file_write
777         time
778         fd
779         string
780         sched
781         stdin
782         buffer_tree
783         check_wav
784         version
785 "
786
787 NEED_AO_OBJECTS && {
788         write_errlist_objs="$write_errlist_objs ao_write"
789 }
790 if test $HAVE_OSS = yes; then
791         write_errlist_objs="$write_errlist_objs oss_write"
792 fi
793 if test $HAVE_ALSA = yes; then
794         write_errlist_objs="$write_errlist_objs alsa_write"
795 fi
796 write_objs="$write_errlist_objs"
797 AC_SUBST(write_objs, add_dot_o($write_objs))
798 ######################################################################## audioc
799 audioc_errlist_objs="
800         audioc
801         string
802         lsu
803         net
804         fd
805         version
806 "
807 if test $HAVE_READLINE = yes; then
808         audioc_errlist_objs="$audioc_errlist_objs
809                 buffer_tree
810                 interactive
811                 sched
812                 time
813         "
814 fi
815 audioc_objs="$audioc_errlist_objs"
816 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
817
818 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
819         [formats supported by para_server and para_afh])
820 AC_SUBST(executables)
821
822 AC_OUTPUT
823 AC_MSG_NOTICE([
824 paraslash configuration:
825 ~~~~~~~~~~~~~~~~~~~~~~~~
826 crypto lib: ${CRYPTOLIB:-[none]}
827 unix socket credentials: $have_ucred
828 readline (interactive CLIs): $HAVE_READLINE
829 id3 version 2 support: $HAVE_ID3TAG
830 faad: $HAVE_FAAD
831 audio format handlers: $audio_format_handlers
832
833 para_server: $build_server
834 para_gui: $build_gui
835 para_mixer: $build_mixer
836 para_client: $build_client
837 para_audiod: $build_audiod
838 ])