afh: Dynamic chunks.
[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([add_cmdline],[$(for i in $@; do printf "${i}.cmdline "; done)])
10 AC_DEFUN([LIB_ARG_WITH], [
11 AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir,
12 [look for $1 headers in dir])])
13 AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir,
14 [look for $1 libraries in dir])])
15 if test -n "$with_$1_headers"; then
16 $1_cppflags="-I$with_$1_headers"
17 CPPFLAGS="$CPPFLAGS $$1_cppflags"
18 fi
19 if test -n "$with_$1_libs"; then
20 $1_ldflags="-L$with_$1_libs $2"
21 else
22 $1_ldflags="$2"
23 fi
24 LDFLAGS="$LDFLAGS $$1_ldflags"
25 ])
26
27 AC_DEFUN([STASH_FLAGS], [
28 OLD_CPPFLAGS="$CPPFLAGS"
29 OLD_LDFLAGS="$LDFLAGS"
30 OLD_LIBS="$LIBS"
31 ])
32
33 AC_DEFUN([UNSTASH_FLAGS], [
34 CPPFLAGS="$OLD_CPPFLAGS"
35 LDFLAGS="$OLD_LDFLAGS"
36 LIBS="$OLD_LIBS"
37 ])
38 AC_DEFUN([LIB_SUBST_FLAGS], [
39 if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then
40 AC_DEFINE(HAVE_[]m4_toupper([$1]), 1,
41 define to 1 to turn on $1 support)
42 else
43 $1_cppflags=
44 $1_ldflags=
45 fi
46 AC_SUBST(HAVE_[]m4_toupper([$1]))
47 AC_SUBST($1_cppflags)
48 AC_SUBST($1_ldflags)
49 ])
50
51 AC_USE_SYSTEM_EXTENSIONS
52 AC_C_BIGENDIAN()
53
54 AC_PATH_PROG([GENGETOPT], [gengetopt])
55 test -z "$GENGETOPT" && AC_MSG_ERROR(
56 [gengetopt is required to build this package])
57
58 AC_PATH_PROG([M4], [m4])
59 test -z "$M4" && AC_MSG_ERROR(
60 [The m4 macro processor is required to build this package])
61
62 AC_PATH_PROG([HELP2MAN], [help2man])
63 test -z "$HELP2MAN" && AC_MSG_ERROR(
64 [help2man is required to build this package])
65
66 AC_PATH_PROG([INSTALL], [install])
67 test -z "$INSTALL" && AC_MSG_ERROR(
68 [The install program is required to build this package])
69
70 AC_PROG_CC
71 AC_PROG_CPP
72
73 executables="recv filter audioc write afh play"
74 ################################################################## clock_gettime
75 clock_gettime_lib=
76 AC_CHECK_LIB([c], [clock_gettime], [clock_gettime_lib=c], [
77 AC_CHECK_LIB([rt], [clock_gettime], [clock_gettime_lib=rt], [], [])
78 ])
79 if test -n "$clock_gettime_lib"; then
80 AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [
81 define to 1 if clock_gettime() is supported])
82 fi
83 if test "$clock_gettime_lib" = "rt"; then
84 AC_SUBST(clock_gettime_ldflags, -lrt)
85 fi
86
87 ########################################################################### osl
88 STASH_FLAGS
89 LIB_ARG_WITH([osl], [-losl])
90 HAVE_OSL=yes
91 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
92 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
93 LIB_SUBST_FLAGS(osl)
94 UNSTASH_FLAGS
95 ######################################################################## openssl
96 STASH_FLAGS
97 HAVE_OPENSSL=yes
98 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
99 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
100 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
101 LIB_SUBST_FLAGS(openssl)
102 if test $HAVE_OPENSSL = yes; then
103 AC_CHECK_LIB([crypto], [RSA_set0_key],
104 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl-1.1]))
105 fi
106 UNSTASH_FLAGS
107 ######################################################################### gcrypt
108 STASH_FLAGS
109 HAVE_GCRYPT=yes
110 LIB_ARG_WITH([gcrypt], [-lgcrypt])
111 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
112 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
113 LIB_SUBST_FLAGS(gcrypt)
114 UNSTASH_FLAGS
115 ######################################################################### crypto
116 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
117 Force using crypto library "lib". This package requires either
118 openssl or libgcrypt being installed. Possible values for "lib"
119 are thus "openssl" and "gcrypt". If this option is not given,
120 openssl is tried first. If openssl was not found, gcrypt is
121 tried next.])])
122
123 CRYPTOLIB="$enable_cryptolib"
124 case "$enable_cryptolib" in
125 "openssl")
126 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
127 crypto_ldflags="$openssl_ldflags"
128 ;;
129 "gcrypt")
130 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
131 crypto_ldflags="$gcrypt_ldflags"
132 ;;
133 "")
134 crypto_ldflags=
135 if test $HAVE_GCRYPT = yes; then
136 CRYPTOLIB=gcrypt
137 crypto_ldflags="$gcrypt_ldflags"
138 fi
139 if test $HAVE_OPENSSL = yes; then
140 CRYPTOLIB=openssl
141 crypto_ldflags="$openssl_ldflags"
142 fi
143 ;;
144 *)
145 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
146 ;;
147 esac
148 AC_SUBST(crypto_ldflags)
149 ########################################################################## iconv
150 STASH_FLAGS
151 LIBS=
152 AC_SEARCH_LIBS([libiconv_open], [iconv],
153 [iconv_ldflags="$LIBS"],
154 []
155 )
156 AC_SUBST(iconv_ldflags)
157 AC_MSG_CHECKING([whether iconv needs const char ** cast])
158 AC_COMPILE_IFELSE([
159 AC_LANG_PROGRAM([
160 #include <iconv.h>
161 ],[
162 size_t iconv(iconv_t cd, const char **inbuf,
163 size_t *inbytesleft, char **outbuf,
164 size_t *outbytesleft);
165 ])
166 ],
167 [cast='(const char **)'; msg=yes],
168 [cast=; msg=no]
169 )
170 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
171 AC_MSG_RESULT($msg)
172 UNSTASH_FLAGS
173 ########################################################################### ucred
174 AC_MSG_CHECKING(for struct ucred)
175 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
176 #include <sys/types.h>
177 #include <sys/socket.h>
178 ]], [[
179 struct ucred sucred; sucred.pid=0;
180 ]])],[have_ucred=yes],[have_ucred=no])
181 AC_MSG_RESULT($have_ucred)
182 if test ${have_ucred} = yes; then
183 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
184 fi
185 ########################################################################### gengetopt
186 echo 'option "z" z "" flag off' | $GENGETOPT --file-name conftest-ggo &&
187 AC_CHECK_DECL(
188 [gengetopt_args_info_description],
189 [ggo_descriptions_declared=yes],
190 [ggo_descriptions_declared=no],
191 [#include "conftest-ggo.h"]
192 )
193 AC_SUBST(ggo_descriptions_declared)
194 ########################################################################### curses
195 STASH_FLAGS
196 LIB_ARG_WITH([curses], [])
197 HAVE_CURSES=yes
198 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
199 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
200 curses_ldflags="$curses_ldflags $LIBS"
201 LIB_SUBST_FLAGS(curses)
202 UNSTASH_FLAGS
203 ########################################################################### ip_mreqn
204 AC_MSG_CHECKING(for struct ip_mreqn (UDPv4 multicast))
205 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
206 #include <netdb.h>
207 #include <net/if.h>
208 ]], [[
209 struct ip_mreqn mn;
210 mn.imr_ifindex = 0;
211 ]])],[have_ip_mreqn=yes],[have_ip_mreqn=no])
212 AC_MSG_RESULT($have_ip_mreqn)
213 if test ${have_ip_mreqn} = yes; then
214 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 you have struct ip_mreqn)
215 fi
216 ########################################################################### osx
217
218 AC_MSG_CHECKING(for CoreAudio (MacOs))
219 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
220 #include <CoreAudio/CoreAudio.h>
221 ]], [[
222 AudioDeviceID id;
223 ]])],[have_core_audio=yes],[have_core_audio=no])
224 AC_MSG_RESULT($have_core_audio)
225 if test ${have_core_audio} = yes; then
226 f1="-framework CoreAudio"
227 f2="-framework AudioToolbox"
228 f3="-framework AudioUnit"
229 f4="-framework CoreServices"
230 core_audio_ldflags="$f1 $f2 $f3 $f4"
231 AC_SUBST(core_audio_ldflags)
232 AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X)
233 fi
234 ########################################################################### ogg
235 STASH_FLAGS
236 LIB_ARG_WITH([ogg], [-logg])
237 HAVE_OGG=yes
238 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
240 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
241 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
242 LIB_SUBST_FLAGS(ogg)
243 UNSTASH_FLAGS
244 ######################################################################### vorbis
245 STASH_FLAGS
246 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
247 HAVE_VORBIS=yes
248 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
249 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
250 LIB_SUBST_FLAGS(vorbis)
251 UNSTASH_FLAGS
252 ######################################################################### speex
253 STASH_FLAGS
254 LIB_ARG_WITH([speex], [-lspeex])
255 HAVE_SPEEX=yes
256 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
257 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
258 LIB_SUBST_FLAGS(speex)
259 UNSTASH_FLAGS
260 ######################################################################### opus
261 STASH_FLAGS
262 LIB_ARG_WITH([opus], [-lopus])
263 HAVE_OPUS=yes
264 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
265 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
266 LIB_SUBST_FLAGS(opus)
267 UNSTASH_FLAGS
268 ########################################################################### flac
269 STASH_FLAGS
270 LIB_ARG_WITH([flac], [-lFLAC -lm])
271 HAVE_FLAC=yes
272 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
273 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
274 LIB_SUBST_FLAGS(flac)
275 UNSTASH_FLAGS
276
277 # some helper functions for codecs which use the ogg container format
278 AC_DEFUN([NEED_OGG_OBJECTS], [{
279 test "$HAVE_OGG" = 'yes' -a \( \
280 "$HAVE_VORBIS" = 'yes' \
281 -o "$HAVE_SPEEX" = 'yes' \
282 -o "$HAVE_OPUS" = 'yes' \
283 -o "$HAVE_FLAC" = 'yes' \
284 \)
285 }])
286 AC_DEFUN([NEED_VORBIS_OBJECTS], [{
287 test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'
288 }])
289 AC_DEFUN([NEED_SPEEX_OBJECTS], [{
290 test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'
291 }])
292 AC_DEFUN([NEED_OPUS_OBJECTS], [{
293 test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'
294 }])
295 AC_DEFUN([NEED_FLAC_OBJECTS], [{
296 test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'
297 }])
298 ########################################################################### faad
299 STASH_FLAGS
300 LIB_ARG_WITH([faad], [-lfaad -lmp4ff])
301 HAVE_FAAD=yes
302 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
303 AC_CHECK_HEADER(mp4ff.h, [], HAVE_FAAD=no)
304 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
305 AC_CHECK_LIB([mp4ff], [mp4ff_meta_get_artist], [], HAVE_FAAD=no)
306 LIB_SUBST_FLAGS(faad)
307 UNSTASH_FLAGS
308 ########################################################################### mad
309 STASH_FLAGS
310 LIB_ARG_WITH([mad], [-lmad])
311 HAVE_MAD=yes
312 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
313 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
314 LIB_SUBST_FLAGS(mad)
315 UNSTASH_FLAGS
316 ###################################################################### libid3tag
317 STASH_FLAGS
318 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
319 HAVE_ID3TAG=yes
320 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
321 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
322 LIB_SUBST_FLAGS(id3tag)
323 UNSTASH_FLAGS
324 ########################################################################### oss
325 STASH_FLAGS
326 LIB_ARG_WITH([oss], [])
327 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
328 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
329 LIB_SUBST_FLAGS(oss)
330 UNSTASH_FLAGS
331 ########################################################################### alsa
332 STASH_FLAGS
333 LIB_ARG_WITH([alsa], [-lasound])
334 HAVE_ALSA=yes
335 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
336 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
337 LIB_SUBST_FLAGS(alsa)
338 UNSTASH_FLAGS
339 ######################################################################### pthread
340 STASH_FLAGS
341 LIB_ARG_WITH([pthread], [-lpthread])
342 HAVE_PTHREAD=yes
343 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
344 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
345 LIB_SUBST_FLAGS(pthread)
346 UNSTASH_FLAGS
347 ########################################################################### libao
348 STASH_FLAGS
349 LIB_ARG_WITH([ao], [-lao])
350 HAVE_AO=yes
351 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
352 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
353 LIB_SUBST_FLAGS(ao)
354 UNSTASH_FLAGS
355 AC_DEFUN([NEED_AO_OBJECTS], [{ test $HAVE_AO = yes -a $HAVE_PTHREAD = yes; }])
356 ######################################################################## readline
357 STASH_FLAGS
358 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
359 LIB_ARG_WITH([readline], [-lreadline $LIBS])
360 HAVE_READLINE=yes
361 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
362 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
363 AC_CHECK_DECL(
364 [rl_free_keymap],
365 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
366 [],
367 [
368 #include <stdio.h>
369 #include <readline/readline.h>
370 ]
371 )
372 LIB_SUBST_FLAGS(readline)
373 UNSTASH_FLAGS
374 ############################################################# libsamplerate
375 STASH_FLAGS
376 LIB_ARG_WITH([samplerate], [-lsamplerate])
377 HAVE_SAMPLERATE=yes
378 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
379 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
380 LIB_SUBST_FLAGS(samplerate)
381 UNSTASH_FLAGS
382 ########################################################################## mp4v2
383 STASH_FLAGS
384 LIB_ARG_WITH([mp4v2], [-lmp4v2])
385 HAVE_MP4V2=yes
386 AC_CHECK_HEADER([mp4v2/mp4v2.h], [], [HAVE_MP4V2=no])
387 AC_CHECK_LIB([mp4v2], [MP4Read], [], [HAVE_MP4V2=no])
388 LIB_SUBST_FLAGS(mp4v2)
389 UNSTASH_FLAGS
390 ######################################################################### server
391 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
392 build_server="yes"
393 executables="$executables server"
394 server_cmdline_objs="server"
395 server_errlist_objs="
396 server
397 afh_common
398 mp3_afh
399 vss
400 command
401 net
402 string
403 signal
404 time
405 daemon
406 http_send
407 close_on_fork
408 mm
409 crypt_common
410 base64
411 ipc
412 dccp_send
413 fd
414 user_list
415 chunk_queue
416 afs
417 aft
418 mood
419 score
420 attribute
421 blob
422 playlist
423 sched
424 acl
425 send_common
426 udp_send
427 color
428 fec
429 wma_afh
430 wma_common
431 sideband
432 version
433 ggo
434 "
435 if test "$CRYPTOLIB" = openssl; then
436 server_errlist_objs="$server_errlist_objs crypt"
437 else
438 server_errlist_objs="$server_errlist_objs gcrypt"
439 fi
440 NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
441 NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
442 NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
443 NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
444 NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
445 if test $HAVE_FAAD = yes && test $HAVE_MP4V2 = yes; then
446 server_errlist_objs="$server_errlist_objs aac_afh aac_common"
447 fi
448 server_objs="add_cmdline($server_cmdline_objs) $server_errlist_objs"
449 AC_SUBST(server_objs, add_dot_o($server_objs))
450 else
451 build_server="no"
452 fi
453 ############################################################# client
454 if test -n "$CRYPTOLIB"; then
455 build_client="yes"
456 executables="$executables client"
457 client_cmdline_objs="client"
458 client_errlist_objs="
459 client
460 net
461 string
462 fd
463 sched
464 stdin
465 stdout
466 time
467 sideband
468 client_common
469 buffer_tree
470 crypt_common
471 base64
472 version
473 ggo
474 "
475 if test "$CRYPTOLIB" = openssl; then
476 client_errlist_objs="$client_errlist_objs crypt"
477 else
478 client_errlist_objs="$client_errlist_objs gcrypt"
479 fi
480 if test $HAVE_READLINE = yes; then
481 client_errlist_objs="$client_errlist_objs interactive"
482 fi
483 client_objs="add_cmdline($client_cmdline_objs) $client_errlist_objs"
484 AC_SUBST(client_objs, add_dot_o($client_objs))
485 else
486 build_client="no"
487 fi
488 ############################################################# audiod
489 if test -n "$CRYPTOLIB"; then
490 build_audiod="yes"
491 executables="$executables audiod"
492 audiod_audio_formats="wma"
493 audiod_cmdline_objs="$audiod_cmdline_objs
494 audiod
495 compress_filter
496 http_recv
497 dccp_recv
498 file_write
499 client
500 amp_filter
501 udp_recv
502 prebuffer_filter
503 sync_filter
504 "
505 audiod_errlist_objs="$audiod_errlist_objs
506 audiod
507 signal
508 string
509 daemon
510 stat
511 net
512 crypt_common
513 base64
514 sideband
515 time
516 grab_client
517 filter_common
518 wav_filter
519 compress_filter
520 amp_filter
521 http_recv
522 dccp_recv
523 recv_common
524 fd
525 sched
526 write_common
527 file_write
528 audiod_command
529 fecdec_filter
530 client_common
531 ggo
532 udp_recv
533 color
534 fec
535 prebuffer_filter
536 version
537 bitstream
538 imdct
539 wma_common
540 wmadec_filter
541 buffer_tree
542 sync_filter
543 "
544 if test "$CRYPTOLIB" = openssl; then
545 audiod_errlist_objs="$audiod_errlist_objs crypt"
546 else
547 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
548 fi
549 if test "$have_core_audio" = "yes"; then
550 audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
551 audiod_cmdline_objs="$audiod_cmdline_objs osx_write"
552 fi
553 NEED_VORBIS_OBJECTS && {
554 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
555 audiod_audio_formats="$audiod_audio_formats ogg"
556 }
557 NEED_SPEEX_OBJECTS && {
558 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
559 audiod_audio_formats="$audiod_audio_formats spx"
560 }
561 NEED_OPUS_OBJECTS && {
562 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
563 audiod_audio_formats="$audiod_audio_formats opus"
564 }
565 NEED_FLAC_OBJECTS && {
566 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
567 audiod_audio_formats="$audiod_audio_formats flac"
568 }
569 if test $HAVE_FAAD = yes; then
570 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter aac_common"
571 audiod_audio_formats="$audiod_audio_formats aac"
572 fi
573 if test $HAVE_MAD = yes; then
574 audiod_audio_formats="$audiod_audio_formats mp3"
575 audiod_cmdline_objs="$audiod_cmdline_objs mp3dec_filter"
576 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
577 fi
578 if test $HAVE_OSS = yes; then
579 audiod_errlist_objs="$audiod_errlist_objs oss_write"
580 audiod_cmdline_objs="$audiod_cmdline_objs oss_write"
581 fi
582 if test $HAVE_ALSA = yes; then
583 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
584 audiod_cmdline_objs="$audiod_cmdline_objs alsa_write"
585 fi
586 NEED_AO_OBJECTS && {
587 audiod_errlist_objs="$audiod_errlist_objs ao_write"
588 audiod_cmdline_objs="$audiod_cmdline_objs ao_write"
589 }
590 if test $HAVE_SAMPLERATE = yes; then
591 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
592 audiod_cmdline_objs="$audiod_cmdline_objs resample_filter"
593 fi
594 audiod_objs="add_cmdline($audiod_cmdline_objs) $audiod_errlist_objs"
595 AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
596
597 enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
598 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
599 enum of audio formats supported by audiod)
600 names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
601 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
602 else
603 build_audiod="no"
604 fi
605 ########################################################################### fade
606 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
607 build_fade="yes"
608 executables="$executables fade"
609 fade_cmdline_objs="fade"
610 fade_errlist_objs="fade exec string fd version ggo"
611 if test $HAVE_OSS = yes; then
612 fade_errlist_objs="$fade_errlist_objs oss_mix"
613 mixers="${mixers}oss "
614 default_mixer="OSS_MIX"
615 fi
616 if test $HAVE_ALSA = yes; then
617 fade_errlist_objs="$fade_errlist_objs alsa_mix"
618 mixers="${mixers}alsa "
619 default_mixer="ALSA_MIX"
620 fi
621 fade_objs="add_cmdline($fade_cmdline_objs) $fade_errlist_objs"
622 AC_SUBST(fade_objs, add_dot_o($fade_objs))
623 enum="$(
624 for i in $mixers; do
625 printf "${i}_MIX, " | tr '[a-z]' '[A-Z]'
626 done
627 )"
628 AC_DEFINE_UNQUOTED(MIXER_ENUM, $enum NUM_SUPPORTED_MIXERS,
629 enum of supported mixers)
630 AC_DEFINE_UNQUOTED(DEFAULT_MIXER, $default_mixer,
631 use this mixer if none was specified)
632 names="$(for i in $mixers; do printf \"$i\",' ' ; done)"
633 AC_DEFINE_UNQUOTED(MIXER_NAMES, $names, supported mixer names)
634 inits="$(
635 for i in $mixers; do
636 printf 'extern void '$i'_mix_init(struct mixer *); '
637 done
638 )"
639 AC_DEFINE_UNQUOTED(DECLARE_MIXER_INITS, $inits,
640 init functions of the supported mixers)
641 array="$(for i in $mixers; do printf '{.init = '$i'_mix_init},'; done)"
642 AC_DEFINE_UNQUOTED(MIXER_ARRAY, $array, array of supported mixers)
643 else
644 build_fade="no"
645 AC_MSG_WARN([no mixer support])
646 fi
647 ########################################################################### gui
648 if test $HAVE_CURSES = yes; then
649 build_gui="yes"
650 executables="$executables gui"
651 gui_cmdline_objs="gui"
652 gui_errlist_objs="
653 exec
654 signal
655 string
656 stat
657 ringbuffer
658 fd
659 gui
660 gui_theme
661 time
662 sched
663 version
664 ggo
665 "
666 gui_objs="add_cmdline($gui_cmdline_objs) $gui_errlist_objs"
667 AC_SUBST(gui_objs, add_dot_o($gui_objs))
668 else
669 build_gui="no"
670 AC_MSG_WARN([no curses lib, cannot build para_gui])
671 fi
672 ######################################################################## filter
673 filters="
674 compress
675 wav
676 amp
677 fecdec
678 wmadec
679 prebuffer
680 sync
681 "
682 filter_errlist_objs="
683 filter_common
684 wav_filter
685 compress_filter
686 filter
687 string
688 stdin
689 stdout
690 sched
691 fd
692 amp_filter
693 ggo
694 fecdec_filter
695 fec
696 version
697 prebuffer_filter
698 time
699 bitstream
700 imdct
701 wma_common
702 wmadec_filter
703 buffer_tree
704 net
705 sync_filter
706 "
707 filter_cmdline_objs="
708 filter
709 compress_filter
710 amp_filter
711 prebuffer_filter
712 sync_filter
713 "
714 NEED_VORBIS_OBJECTS && {
715 filters="$filters oggdec"
716 filter_errlist_objs="$filter_errlist_objs oggdec_filter"
717 }
718 NEED_SPEEX_OBJECTS && {
719 filters="$filters spxdec"
720 filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
721 }
722 NEED_OPUS_OBJECTS && {
723 filters="$filters opusdec"
724 filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
725 }
726 NEED_FLAC_OBJECTS && {
727 filter_errlist_objs="$filter_errlist_objs flacdec_filter"
728 filters="$filters flacdec"
729 }
730 if test $HAVE_FAAD = yes; then
731 filter_errlist_objs="$filter_errlist_objs aacdec_filter aac_common"
732 filters="$filters aacdec"
733 fi
734 if test $HAVE_MAD = yes; then
735 filter_cmdline_objs="$filter_cmdline_objs mp3dec_filter"
736 filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
737 filters="$filters mp3dec"
738 fi
739 if test $HAVE_SAMPLERATE = yes; then
740 filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
741 filter_cmdline_objs="$filter_cmdline_objs resample_filter"
742 filters="$filters resample"
743 fi
744 filters="$(echo $filters)"
745 AC_SUBST(filters)
746 filter_objs="add_cmdline($filter_cmdline_objs) $filter_errlist_objs"
747
748 AC_SUBST(filter_objs, add_dot_o($filter_objs))
749
750 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
751 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
752 enum of supported filters)
753 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
754 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
755 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
756 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
757 ########################################################################## recv
758 recv_cmdline_objs="
759 recv
760 http_recv
761 dccp_recv
762 udp_recv
763 afh_recv
764 "
765
766 recv_errlist_objs="
767 http_recv
768 recv_common
769 recv
770 time
771 string
772 net
773 dccp_recv
774 fd
775 sched
776 stdout
777 ggo
778 udp_recv
779 buffer_tree
780 afh_recv
781 afh_common
782 wma_afh
783 wma_common
784 mp3_afh
785 version
786 "
787 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
788 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
789 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
790 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
791 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
792
793 if test $HAVE_FAAD = yes -a $HAVE_MP4V2 = yes; then
794 recv_errlist_objs="$recv_errlist_objs aac_afh aac_common"
795 fi
796 recv_objs="add_cmdline($recv_cmdline_objs) $recv_errlist_objs"
797 AC_SUBST(receivers, "http dccp udp afh")
798 AC_SUBST(recv_objs, add_dot_o($recv_objs))
799 ########################################################################### afh
800 audio_format_handlers="mp3 wma"
801 afh_cmdline_objs="afh"
802 afh_errlist_objs="
803 afh
804 string
805 fd
806 mp3_afh
807 afh_common
808 time
809 wma_afh
810 wma_common
811 version
812 ggo
813 "
814 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
815 NEED_VORBIS_OBJECTS && {
816 afh_errlist_objs="$afh_errlist_objs ogg_afh"
817 audio_format_handlers="$audio_format_handlers ogg"
818 }
819 NEED_SPEEX_OBJECTS && {
820 afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
821 audio_format_handlers="$audio_format_handlers spx"
822 }
823 NEED_OPUS_OBJECTS && {
824 afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
825 audio_format_handlers="$audio_format_handlers opus"
826 }
827 NEED_FLAC_OBJECTS && {
828 afh_errlist_objs="$afh_errlist_objs flac_afh"
829 audio_format_handlers="$audio_format_handlers flac"
830 }
831 if test $HAVE_FAAD = yes -a $HAVE_MP4V2 = yes; then
832 afh_errlist_objs="$afh_errlist_objs aac_afh aac_common"
833 audio_format_handlers="$audio_format_handlers aac"
834 fi
835
836 afh_objs="add_cmdline($afh_cmdline_objs) $afh_errlist_objs"
837
838 AC_SUBST(afh_objs, add_dot_o($afh_objs))
839 ########################################################################## play
840 play_errlist_objs="
841 play
842 fd
843 sched
844 ggo
845 buffer_tree
846 time
847 string
848 net
849 afh_recv
850 afh_common
851 wma_afh
852 wma_common
853 mp3_afh
854 recv_common
855 udp_recv
856 http_recv
857 dccp_recv
858 filter_common
859 fec
860 bitstream
861 imdct
862 wav_filter
863 compress_filter
864 amp_filter
865 prebuffer_filter
866 fecdec_filter
867 wmadec_filter
868 write_common
869 file_write
870 version
871 sync_filter
872 "
873 play_cmdline_objs="
874 http_recv
875 dccp_recv
876 udp_recv
877 afh_recv
878 compress_filter
879 amp_filter
880 prebuffer_filter
881 file_write
882 play
883 sync_filter
884 "
885 if test "$have_core_audio" = "yes"; then
886 play_errlist_objs="$play_errlist_objs osx_write ipc"
887 play_cmdline_objs="$play_cmdline_objs osx_write"
888 fi
889 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
890 NEED_VORBIS_OBJECTS && {
891 play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
892 }
893 NEED_SPEEX_OBJECTS && {
894 play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
895 }
896 NEED_OPUS_OBJECTS &&
897 play_errlist_objs="$play_errlist_objs
898 opusdec_filter
899 opus_afh
900 opus_common
901 "
902 NEED_FLAC_OBJECTS && {
903 play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
904 }
905 if test $HAVE_FAAD = yes; then
906 play_errlist_objs="$play_errlist_objs aacdec_filter"
907 fi
908 if test $HAVE_MP4V2 = yes; then
909 play_errlist_objs="$play_errlist_objs aac_afh"
910 fi
911 if test $HAVE_MP4V2 = yes || test $HAVE_FAAD = yes; then
912 play_errlist_objs="$play_errlist_objs aac_common"
913 fi
914 if test $HAVE_MAD = yes; then
915 play_cmdline_objs="$play_cmdline_objs mp3dec_filter"
916 play_errlist_objs="$play_errlist_objs mp3dec_filter"
917 fi
918 if test $HAVE_OSS = yes; then
919 play_errlist_objs="$play_errlist_objs oss_write"
920 play_cmdline_objs="$play_cmdline_objs oss_write"
921 fi
922 if test $HAVE_ALSA = yes; then
923 play_errlist_objs="$play_errlist_objs alsa_write"
924 play_cmdline_objs="$play_cmdline_objs alsa_write"
925 fi
926 NEED_AO_OBJECTS && {
927 play_errlist_objs="$play_errlist_objs ao_write"
928 play_cmdline_objs="$play_cmdline_objs ao_write"
929 }
930 if test $HAVE_READLINE = yes; then
931 play_errlist_objs="$play_errlist_objs interactive"
932 fi
933 if test $HAVE_SAMPLERATE = yes; then
934 play_errlist_objs="$play_errlist_objs resample_filter check_wav"
935 play_cmdline_objs="$play_cmdline_objs resample_filter"
936 fi
937
938 play_objs="add_cmdline($play_cmdline_objs) $play_errlist_objs"
939 AC_SUBST(play_objs, add_dot_o($play_objs))
940 ######################################################################### write
941 write_cmdline_objs="
942 write
943 file_write
944 "
945 write_errlist_objs="
946 write
947 write_common
948 file_write
949 time
950 fd
951 string
952 sched
953 stdin
954 buffer_tree
955 ggo
956 check_wav
957 version
958 "
959 writers="file"
960 default_writer="FILE_WRITE"
961
962 if test "$have_core_audio" = "yes"; then
963 write_errlist_objs="$write_errlist_objs osx_write ipc"
964 write_cmdline_objs="$write_cmdline_objs osx_write"
965 writers="$writers osx"
966 default_writer="OSX_WRITE"
967 fi
968 NEED_AO_OBJECTS && {
969 write_errlist_objs="$write_errlist_objs ao_write"
970 write_cmdline_objs="$write_cmdline_objs ao_write"
971 writers="$writers ao"
972 default_writer="AO_WRITE"
973 }
974 if test $HAVE_OSS = yes; then
975 write_errlist_objs="$write_errlist_objs oss_write"
976 write_cmdline_objs="$write_cmdline_objs oss_write"
977 writers="$writers oss"
978 default_writer="OSS_WRITE"
979 fi
980 if test $HAVE_ALSA = yes; then
981 write_errlist_objs="$write_errlist_objs alsa_write"
982 write_cmdline_objs="$write_cmdline_objs alsa_write"
983 writers="$writers alsa"
984 default_writer="ALSA_WRITE"
985 fi
986 AC_SUBST(writers)
987 write_objs="add_cmdline($write_cmdline_objs) $write_errlist_objs"
988 AC_SUBST(write_objs, add_dot_o($write_objs))
989 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
990 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
991 enum of supported writers)
992 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
993 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
994 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
995 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
996 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
997 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
998 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
999 ######################################################################## audioc
1000 audioc_cmdline_objs="audioc"
1001 audioc_errlist_objs="
1002 audioc
1003 string
1004 net
1005 fd
1006 version
1007 ggo
1008 "
1009 if test $HAVE_READLINE = yes; then
1010 audioc_errlist_objs="$audioc_errlist_objs
1011 buffer_tree
1012 interactive
1013 sched
1014 time
1015 "
1016 fi
1017 audioc_objs="add_cmdline($audioc_cmdline_objs) $audioc_errlist_objs"
1018 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
1019 ################################################################## status items
1020
1021 status_items="basename status num_played mtime bitrate frequency file_size
1022 status_flags format score techinfo afs_mode
1023 attributes_txt decoder_flags audiod_status play_time attributes_bitmap
1024 offset seconds_total stream_start current_time audiod_uptime image_id
1025 lyrics_id duration directory lyrics_name image_name path hash channels
1026 last_played num_chunks chunk_time amplification artist title year album
1027 comment max_chunk_size"
1028
1029 result=
1030 for i in $status_items; do
1031 result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), "
1032 done
1033 AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result],
1034 [enum of all status items])
1035
1036 result=
1037 for i in $status_items; do
1038 result="$result \"$i\", "
1039 done
1040 AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result],
1041 [char * array of all status items])
1042
1043 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
1044 [formats supported by para_server and para_afh])
1045
1046 AC_SUBST(executables)
1047
1048 AC_OUTPUT
1049 AC_MSG_NOTICE([
1050 paraslash configuration:
1051 ~~~~~~~~~~~~~~~~~~~~~~~~
1052 crypto lib: ${CRYPTOLIB:-[none]}
1053 unix socket credentials: $have_ucred
1054 readline (interactive CLIs): $HAVE_READLINE
1055 id3 version 2 support: $HAVE_ID3TAG
1056 faad: $HAVE_FAAD
1057 mp4v2: $HAVE_MP4V2
1058
1059 audio format handlers: $audio_format_handlers
1060 filters: $(echo $filters)
1061 writers: $writers
1062
1063 para_server: $build_server
1064 para_gui: $build_gui
1065 para_fade: $build_fade
1066 para_client: $build_client
1067 para_audiod: $build_audiod
1068 ])