499571a70318f2d3bfe753e8a9be95307e7fc378
[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         "
396         if test "$CRYPTOLIB" = openssl; then
397                 server_errlist_objs="$server_errlist_objs crypt"
398         else
399                 server_errlist_objs="$server_errlist_objs gcrypt"
400         fi
401         NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
402         NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
403         NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
404         NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
405         NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
406         if test $HAVE_FAAD = yes; then
407                 server_errlist_objs="$server_errlist_objs aac_afh"
408         fi
409         server_objs="$server_errlist_objs"
410         AC_SUBST(server_objs, add_dot_o($server_objs))
411 else
412         build_server="no"
413 fi
414 ############################################################# client
415 if test -n "$CRYPTOLIB"; then
416         build_client="yes"
417         executables="$executables client"
418         client_errlist_objs="
419                 client
420                 net
421                 string
422                 fd
423                 sched
424                 stdin
425                 stdout
426                 time
427                 sideband
428                 client_common
429                 buffer_tree
430                 crypt_common
431                 base64
432                 version
433         "
434         if test "$CRYPTOLIB" = openssl; then
435                 client_errlist_objs="$client_errlist_objs crypt"
436         else
437                 client_errlist_objs="$client_errlist_objs gcrypt"
438         fi
439         if test $HAVE_READLINE = yes; then
440                 client_errlist_objs="$client_errlist_objs interactive"
441         fi
442         client_objs="$client_errlist_objs"
443         AC_SUBST(client_objs, add_dot_o($client_errlist_objs))
444 else
445         build_client="no"
446 fi
447 ############################################################# audiod
448 if test -n "$CRYPTOLIB"; then
449         build_audiod="yes"
450         executables="$executables audiod"
451         audiod_audio_formats="wma"
452         audiod_errlist_objs="$audiod_errlist_objs
453                 audiod
454                 signal
455                 string
456                 daemon
457                 stat
458                 net
459                 crypt_common
460                 base64
461                 sideband
462                 time
463                 grab_client
464                 filter_common
465                 wav_filter
466                 compress_filter
467                 amp_filter
468                 http_recv
469                 dccp_recv
470                 recv_common
471                 fd
472                 sched
473                 write_common
474                 file_write
475                 audiod_command
476                 fecdec_filter
477                 client_common
478                 udp_recv
479                 color
480                 fec
481                 prebuffer_filter
482                 version
483                 bitstream
484                 imdct
485                 wma_common
486                 wmadec_filter
487                 buffer_tree
488                 sync_filter
489         "
490         if test "$CRYPTOLIB" = openssl; then
491                 audiod_errlist_objs="$audiod_errlist_objs crypt"
492         else
493                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
494         fi
495         NEED_VORBIS_OBJECTS && {
496                 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
497                 audiod_audio_formats="$audiod_audio_formats ogg"
498         }
499         NEED_SPEEX_OBJECTS && {
500                 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
501                 audiod_audio_formats="$audiod_audio_formats spx"
502         }
503         NEED_OPUS_OBJECTS && {
504                 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
505                 audiod_audio_formats="$audiod_audio_formats opus"
506         }
507         NEED_FLAC_OBJECTS && {
508                 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
509                 audiod_audio_formats="$audiod_audio_formats flac"
510         }
511         if test $HAVE_FAAD = yes; then
512                 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter"
513                 audiod_audio_formats="$audiod_audio_formats aac"
514         fi
515         if test $HAVE_MAD = yes; then
516                 audiod_audio_formats="$audiod_audio_formats mp3"
517                 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
518         fi
519         if test $HAVE_OSS = yes; then
520                 audiod_errlist_objs="$audiod_errlist_objs oss_write"
521         fi
522         if test $HAVE_ALSA = yes; then
523                 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
524         fi
525         NEED_AO_OBJECTS && {
526                 audiod_errlist_objs="$audiod_errlist_objs ao_write"
527         }
528         if test $HAVE_SAMPLERATE = yes; then
529                 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
530         fi
531         audiod_objs="$audiod_errlist_objs"
532         AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
533
534         enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
535         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
536                 enum of audio formats supported by audiod)
537         names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
538         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
539 else
540         build_audiod="no"
541 fi
542 ########################################################################### mixer
543 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
544         build_mixer="yes"
545         executables="$executables mixer"
546         mixer_errlist_objs="mixer exec string fd version"
547         if test $HAVE_OSS = yes; then
548                 mixer_errlist_objs="$mixer_errlist_objs oss_mix"
549         fi
550         if test $HAVE_ALSA = yes; then
551                 mixer_errlist_objs="$mixer_errlist_objs alsa_mix"
552         fi
553         mixer_objs="$mixer_errlist_objs"
554         AC_SUBST(mixer_objs, add_dot_o($mixer_objs))
555 else
556         build_mixer="no"
557         AC_MSG_WARN([no mixer support])
558 fi
559 ########################################################################### gui
560 if test $HAVE_CURSES = yes; then
561         build_gui="yes"
562         executables="$executables gui"
563         gui_errlist_objs="
564                 exec
565                 signal
566                 string
567                 stat
568                 ringbuffer
569                 fd
570                 gui
571                 gui_theme
572                 time
573                 sched
574                 version
575         "
576         gui_objs="$gui_errlist_objs"
577         AC_SUBST(gui_objs, add_dot_o($gui_objs))
578 else
579         build_gui="no"
580         AC_MSG_WARN([no curses lib, cannot build para_gui])
581 fi
582 ######################################################################## filter
583 filter_errlist_objs="
584         filter_common
585         wav_filter
586         compress_filter
587         filter
588         string
589         stdin
590         stdout
591         sched
592         fd
593         amp_filter
594         fecdec_filter
595         fec
596         version
597         prebuffer_filter
598         time
599         bitstream
600         imdct
601         wma_common
602         wmadec_filter
603         buffer_tree
604         net
605         sync_filter
606 "
607 NEED_VORBIS_OBJECTS && filter_errlist_objs="$filter_errlist_objs oggdec_filter"
608 NEED_SPEEX_OBJECTS && filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
609 NEED_OPUS_OBJECTS && filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
610 NEED_FLAC_OBJECTS && filter_errlist_objs="$filter_errlist_objs flacdec_filter"
611 if test $HAVE_FAAD = yes; then
612         filter_errlist_objs="$filter_errlist_objs aacdec_filter"
613 fi
614 if test $HAVE_MAD = yes; then
615         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
616 fi
617 if test $HAVE_SAMPLERATE = yes; then
618         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
619 fi
620 filter_objs="$filter_errlist_objs"
621
622 AC_SUBST(filter_objs, add_dot_o($filter_objs))
623 ########################################################################## recv
624 recv_errlist_objs="
625         http_recv
626         recv_common
627         recv
628         time
629         string
630         net
631         dccp_recv
632         fd
633         sched
634         stdout
635         udp_recv
636         buffer_tree
637         afh_recv
638         afh_common
639         wma_afh
640         wma_common
641         mp3_afh
642         version
643 "
644 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
645 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
646 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
647 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
648 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
649
650 if test $HAVE_FAAD = yes; then
651         recv_errlist_objs="$recv_errlist_objs aac_afh"
652 fi
653 recv_objs="$recv_errlist_objs"
654 AC_SUBST(recv_objs, add_dot_o($recv_objs))
655 ########################################################################### afh
656 audio_format_handlers="mp3 wma"
657 afh_errlist_objs="
658         afh
659         string
660         fd
661         mp3_afh
662         afh_common
663         time
664         wma_afh
665         wma_common
666         version
667 "
668 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
669 NEED_VORBIS_OBJECTS && {
670         afh_errlist_objs="$afh_errlist_objs ogg_afh"
671         audio_format_handlers="$audio_format_handlers ogg"
672 }
673 NEED_SPEEX_OBJECTS && {
674         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
675         audio_format_handlers="$audio_format_handlers spx"
676 }
677 NEED_OPUS_OBJECTS && {
678         afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
679         audio_format_handlers="$audio_format_handlers opus"
680 }
681 NEED_FLAC_OBJECTS && {
682         afh_errlist_objs="$afh_errlist_objs flac_afh"
683         audio_format_handlers="$audio_format_handlers flac"
684 }
685 if test $HAVE_FAAD = yes; then
686         afh_errlist_objs="$afh_errlist_objs aac_afh"
687         audio_format_handlers="$audio_format_handlers aac"
688 fi
689
690 afh_objs="$afh_errlist_objs"
691
692 AC_SUBST(afh_objs, add_dot_o($afh_objs))
693 ########################################################################## play
694 play_errlist_objs="
695         play
696         fd
697         sched
698         buffer_tree
699         time
700         string
701         net
702         afh_recv
703         afh_common
704         wma_afh
705         wma_common
706         mp3_afh
707         recv_common
708         udp_recv
709         http_recv
710         dccp_recv
711         filter_common
712         fec
713         bitstream
714         imdct
715         wav_filter
716         compress_filter
717         amp_filter
718         prebuffer_filter
719         fecdec_filter
720         wmadec_filter
721         write_common
722         file_write
723         version
724         sync_filter
725 "
726 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
727 NEED_VORBIS_OBJECTS && {
728         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
729 }
730 NEED_SPEEX_OBJECTS && {
731         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
732 }
733 NEED_OPUS_OBJECTS &&
734         play_errlist_objs="$play_errlist_objs
735                 opusdec_filter
736                 opus_afh
737                 opus_common
738         "
739 NEED_FLAC_OBJECTS && {
740         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
741 }
742 if test $HAVE_FAAD = yes; then
743         play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter"
744 fi
745 if test $HAVE_MAD = yes; then
746         play_errlist_objs="$play_errlist_objs mp3dec_filter"
747 fi
748 if test $HAVE_OSS = yes; then
749         play_errlist_objs="$play_errlist_objs oss_write"
750 fi
751 if test $HAVE_ALSA = yes; then
752         play_errlist_objs="$play_errlist_objs alsa_write"
753 fi
754 NEED_AO_OBJECTS && {
755         play_errlist_objs="$play_errlist_objs ao_write"
756 }
757 if test $HAVE_READLINE = yes; then
758         play_errlist_objs="$play_errlist_objs interactive"
759 fi
760 if test $HAVE_SAMPLERATE = yes; then
761         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
762 fi
763
764 play_objs="$play_errlist_objs"
765 AC_SUBST(play_objs, add_dot_o($play_objs))
766 ######################################################################### write
767 write_errlist_objs="
768         write
769         write_common
770         file_write
771         time
772         fd
773         string
774         sched
775         stdin
776         buffer_tree
777         check_wav
778         version
779 "
780
781 NEED_AO_OBJECTS && {
782         write_errlist_objs="$write_errlist_objs ao_write"
783 }
784 if test $HAVE_OSS = yes; then
785         write_errlist_objs="$write_errlist_objs oss_write"
786 fi
787 if test $HAVE_ALSA = yes; then
788         write_errlist_objs="$write_errlist_objs alsa_write"
789 fi
790 write_objs="$write_errlist_objs"
791 AC_SUBST(write_objs, add_dot_o($write_objs))
792 ######################################################################## audioc
793 audioc_errlist_objs="
794         audioc
795         string
796         net
797         fd
798         version
799 "
800 if test $HAVE_READLINE = yes; then
801         audioc_errlist_objs="$audioc_errlist_objs
802                 buffer_tree
803                 interactive
804                 sched
805                 time
806         "
807 fi
808 audioc_objs="$audioc_errlist_objs"
809 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
810
811 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
812         [formats supported by para_server and para_afh])
813 AC_SUBST(executables)
814
815 AC_OUTPUT
816 AC_MSG_NOTICE([
817 paraslash configuration:
818 ~~~~~~~~~~~~~~~~~~~~~~~~
819 crypto lib: ${CRYPTOLIB:-[none]}
820 unix socket credentials: $have_ucred
821 readline (interactive CLIs): $HAVE_READLINE
822 id3 version 2 support: $HAVE_ID3TAG
823 faad: $HAVE_FAAD
824 audio format handlers: $audio_format_handlers
825
826 para_server: $build_server
827 para_gui: $build_gui
828 para_mixer: $build_mixer
829 para_client: $build_client
830 para_audiod: $build_audiod
831 ])