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