aacdec: Kill pointless label.
[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 ######################################################################### server
383 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
384         build_server="yes"
385         executables="$executables server"
386         server_cmdline_objs="server"
387         server_errlist_objs="
388                 server
389                 afh_common
390                 mp3_afh
391                 vss
392                 command
393                 net
394                 string
395                 signal
396                 time
397                 daemon
398                 http_send
399                 close_on_fork
400                 mm
401                 crypt_common
402                 base64
403                 ipc
404                 dccp_send
405                 fd
406                 user_list
407                 chunk_queue
408                 afs
409                 aft
410                 mood
411                 score
412                 attribute
413                 blob
414                 playlist
415                 sched
416                 acl
417                 send_common
418                 udp_send
419                 color
420                 fec
421                 wma_afh
422                 wma_common
423                 sideband
424                 version
425                 ggo
426         "
427         if test "$CRYPTOLIB" = openssl; then
428                 server_errlist_objs="$server_errlist_objs crypt"
429         else
430                 server_errlist_objs="$server_errlist_objs gcrypt"
431         fi
432         NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
433         NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
434         NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
435         NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
436         NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
437         if test $HAVE_FAAD = yes; then
438                 server_errlist_objs="$server_errlist_objs aac_afh"
439         fi
440         server_objs="add_cmdline($server_cmdline_objs) $server_errlist_objs"
441         AC_SUBST(server_objs, add_dot_o($server_objs))
442 else
443         build_server="no"
444 fi
445 ############################################################# client
446 if test -n "$CRYPTOLIB"; then
447         build_client="yes"
448         executables="$executables client"
449         client_cmdline_objs="client"
450         client_errlist_objs="
451                 client
452                 net
453                 string
454                 fd
455                 sched
456                 stdin
457                 stdout
458                 time
459                 sideband
460                 client_common
461                 buffer_tree
462                 crypt_common
463                 base64
464                 version
465                 ggo
466         "
467         if test "$CRYPTOLIB" = openssl; then
468                 client_errlist_objs="$client_errlist_objs crypt"
469         else
470                 client_errlist_objs="$client_errlist_objs gcrypt"
471         fi
472         if test $HAVE_READLINE = yes; then
473                 client_errlist_objs="$client_errlist_objs interactive"
474         fi
475         client_objs="add_cmdline($client_cmdline_objs) $client_errlist_objs"
476         AC_SUBST(client_objs, add_dot_o($client_objs))
477 else
478         build_client="no"
479 fi
480 ############################################################# audiod
481 if test -n "$CRYPTOLIB"; then
482         build_audiod="yes"
483         executables="$executables audiod"
484         audiod_audio_formats="wma"
485         audiod_cmdline_objs="$audiod_cmdline_objs
486                 audiod
487                 compress_filter
488                 http_recv
489                 dccp_recv
490                 file_write
491                 client
492                 amp_filter
493                 udp_recv
494                 prebuffer_filter
495                 sync_filter
496         "
497         audiod_errlist_objs="$audiod_errlist_objs
498                 audiod
499                 signal
500                 string
501                 daemon
502                 stat
503                 net
504                 crypt_common
505                 base64
506                 sideband
507                 time
508                 grab_client
509                 filter_common
510                 wav_filter
511                 compress_filter
512                 amp_filter
513                 http_recv
514                 dccp_recv
515                 recv_common
516                 fd
517                 sched
518                 write_common
519                 file_write
520                 audiod_command
521                 fecdec_filter
522                 client_common
523                 ggo
524                 udp_recv
525                 color
526                 fec
527                 prebuffer_filter
528                 version
529                 bitstream
530                 imdct
531                 wma_common
532                 wmadec_filter
533                 buffer_tree
534                 sync_filter
535         "
536         if test "$CRYPTOLIB" = openssl; then
537                 audiod_errlist_objs="$audiod_errlist_objs crypt"
538         else
539                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
540         fi
541         if test "$have_core_audio" = "yes"; then
542                 audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
543                 audiod_cmdline_objs="$audiod_cmdline_objs osx_write"
544         fi
545         NEED_VORBIS_OBJECTS && {
546                 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
547                 audiod_audio_formats="$audiod_audio_formats ogg"
548         }
549         NEED_SPEEX_OBJECTS && {
550                 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
551                 audiod_audio_formats="$audiod_audio_formats spx"
552         }
553         NEED_OPUS_OBJECTS && {
554                 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
555                 audiod_audio_formats="$audiod_audio_formats opus"
556         }
557         NEED_FLAC_OBJECTS && {
558                 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
559                 audiod_audio_formats="$audiod_audio_formats flac"
560         }
561         if test $HAVE_FAAD = yes; then
562                 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter"
563                 audiod_audio_formats="$audiod_audio_formats aac"
564         fi
565         if test $HAVE_MAD = yes; then
566                 audiod_audio_formats="$audiod_audio_formats mp3"
567                 audiod_cmdline_objs="$audiod_cmdline_objs mp3dec_filter"
568                 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
569         fi
570         if test $HAVE_OSS = yes; then
571                 audiod_errlist_objs="$audiod_errlist_objs oss_write"
572                 audiod_cmdline_objs="$audiod_cmdline_objs oss_write"
573         fi
574         if test $HAVE_ALSA = yes; then
575                 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
576                 audiod_cmdline_objs="$audiod_cmdline_objs alsa_write"
577         fi
578         NEED_AO_OBJECTS && {
579                 audiod_errlist_objs="$audiod_errlist_objs ao_write"
580                 audiod_cmdline_objs="$audiod_cmdline_objs ao_write"
581         }
582         if test $HAVE_SAMPLERATE = yes; then
583                 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
584                 audiod_cmdline_objs="$audiod_cmdline_objs resample_filter"
585         fi
586         audiod_objs="add_cmdline($audiod_cmdline_objs) $audiod_errlist_objs"
587         AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
588
589         enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
590         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
591                 enum of audio formats supported by audiod)
592         names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
593         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
594 else
595         build_audiod="no"
596 fi
597 ########################################################################### fade
598 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
599         build_fade="yes"
600         executables="$executables fade"
601         fade_cmdline_objs="fade"
602         fade_errlist_objs="fade exec string fd version ggo"
603         if test $HAVE_OSS = yes; then
604                 fade_errlist_objs="$fade_errlist_objs oss_mix"
605                 mixers="${mixers}oss "
606                 default_mixer="OSS_MIX"
607         fi
608         if test $HAVE_ALSA = yes; then
609                 fade_errlist_objs="$fade_errlist_objs alsa_mix"
610                 mixers="${mixers}alsa "
611                 default_mixer="ALSA_MIX"
612         fi
613         fade_objs="add_cmdline($fade_cmdline_objs) $fade_errlist_objs"
614         AC_SUBST(fade_objs, add_dot_o($fade_objs))
615         enum="$(
616                 for i in $mixers; do
617                         printf "${i}_MIX, " | tr '[a-z]' '[A-Z]'
618                 done
619         )"
620         AC_DEFINE_UNQUOTED(MIXER_ENUM, $enum NUM_SUPPORTED_MIXERS,
621                 enum of supported mixers)
622         AC_DEFINE_UNQUOTED(DEFAULT_MIXER, $default_mixer,
623                 use this mixer if none was specified)
624         names="$(for i in $mixers; do printf \"$i\",' ' ; done)"
625         AC_DEFINE_UNQUOTED(MIXER_NAMES, $names, supported mixer names)
626         inits="$(
627                 for i in $mixers; do
628                         printf 'extern void '$i'_mix_init(struct mixer *); '
629                 done
630         )"
631         AC_DEFINE_UNQUOTED(DECLARE_MIXER_INITS, $inits,
632                 init functions of the supported mixers)
633         array="$(for i in $mixers; do printf '{.init = '$i'_mix_init},'; done)"
634         AC_DEFINE_UNQUOTED(MIXER_ARRAY, $array, array of supported mixers)
635 else
636         build_fade="no"
637         AC_MSG_WARN([no mixer support])
638 fi
639 ########################################################################### gui
640 if test $HAVE_CURSES = yes; then
641         build_gui="yes"
642         executables="$executables gui"
643         gui_cmdline_objs="gui"
644         gui_errlist_objs="
645                 exec
646                 signal
647                 string
648                 stat
649                 ringbuffer
650                 fd
651                 gui
652                 gui_theme
653                 time
654                 sched
655                 version
656                 ggo
657         "
658         gui_objs="add_cmdline($gui_cmdline_objs) $gui_errlist_objs"
659         AC_SUBST(gui_objs, add_dot_o($gui_objs))
660 else
661         build_gui="no"
662         AC_MSG_WARN([no curses lib, cannot build para_gui])
663 fi
664 ######################################################################## filter
665 filters="
666         compress
667         wav
668         amp
669         fecdec
670         wmadec
671         prebuffer
672         sync
673 "
674 filter_errlist_objs="
675         filter_common
676         wav_filter
677         compress_filter
678         filter
679         string
680         stdin
681         stdout
682         sched
683         fd
684         amp_filter
685         ggo
686         fecdec_filter
687         fec
688         version
689         prebuffer_filter
690         time
691         bitstream
692         imdct
693         wma_common
694         wmadec_filter
695         buffer_tree
696         net
697         sync_filter
698 "
699 filter_cmdline_objs="
700         filter
701         compress_filter
702         amp_filter
703         prebuffer_filter
704         sync_filter
705 "
706 NEED_VORBIS_OBJECTS && {
707         filters="$filters oggdec"
708         filter_errlist_objs="$filter_errlist_objs oggdec_filter"
709 }
710 NEED_SPEEX_OBJECTS && {
711         filters="$filters spxdec"
712         filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
713 }
714 NEED_OPUS_OBJECTS && {
715         filters="$filters opusdec"
716         filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
717 }
718 NEED_FLAC_OBJECTS && {
719         filter_errlist_objs="$filter_errlist_objs flacdec_filter"
720         filters="$filters flacdec"
721 }
722 if test $HAVE_FAAD = yes; then
723         filter_errlist_objs="$filter_errlist_objs aacdec_filter"
724         filters="$filters aacdec"
725 fi
726 if test $HAVE_MAD = yes; then
727         filter_cmdline_objs="$filter_cmdline_objs mp3dec_filter"
728         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
729         filters="$filters mp3dec"
730 fi
731 if test $HAVE_SAMPLERATE = yes; then
732         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
733         filter_cmdline_objs="$filter_cmdline_objs resample_filter"
734         filters="$filters resample"
735 fi
736 filters="$(echo $filters)"
737 AC_SUBST(filters)
738 filter_objs="add_cmdline($filter_cmdline_objs) $filter_errlist_objs"
739
740 AC_SUBST(filter_objs, add_dot_o($filter_objs))
741
742 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
743 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
744         enum of supported filters)
745 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
746 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
747 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
748 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
749 ########################################################################## recv
750 recv_cmdline_objs="
751         recv
752         http_recv
753         dccp_recv
754         udp_recv
755         afh_recv
756 "
757
758 recv_errlist_objs="
759         http_recv
760         recv_common
761         recv
762         time
763         string
764         net
765         dccp_recv
766         fd
767         sched
768         stdout
769         ggo
770         udp_recv
771         buffer_tree
772         afh_recv
773         afh_common
774         wma_afh
775         wma_common
776         mp3_afh
777         version
778 "
779 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
780 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
781 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
782 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
783 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
784
785 if test $HAVE_FAAD = yes; then
786         recv_errlist_objs="$recv_errlist_objs aac_afh"
787 fi
788 recv_objs="add_cmdline($recv_cmdline_objs) $recv_errlist_objs"
789 AC_SUBST(receivers, "http dccp udp afh")
790 AC_SUBST(recv_objs, add_dot_o($recv_objs))
791 ########################################################################### afh
792 audio_format_handlers="mp3 wma"
793 afh_cmdline_objs="afh"
794 afh_errlist_objs="
795         afh
796         string
797         fd
798         mp3_afh
799         afh_common
800         time
801         wma_afh
802         wma_common
803         version
804         ggo
805 "
806 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
807 NEED_VORBIS_OBJECTS && {
808         afh_errlist_objs="$afh_errlist_objs ogg_afh"
809         audio_format_handlers="$audio_format_handlers ogg"
810 }
811 NEED_SPEEX_OBJECTS && {
812         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
813         audio_format_handlers="$audio_format_handlers spx"
814 }
815 NEED_OPUS_OBJECTS && {
816         afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
817         audio_format_handlers="$audio_format_handlers opus"
818 }
819 NEED_FLAC_OBJECTS && {
820         afh_errlist_objs="$afh_errlist_objs flac_afh"
821         audio_format_handlers="$audio_format_handlers flac"
822 }
823 if test $HAVE_FAAD = yes; then
824         afh_errlist_objs="$afh_errlist_objs aac_afh"
825         audio_format_handlers="$audio_format_handlers aac"
826 fi
827
828 afh_objs="add_cmdline($afh_cmdline_objs) $afh_errlist_objs"
829
830 AC_SUBST(afh_objs, add_dot_o($afh_objs))
831 ########################################################################## play
832 play_errlist_objs="
833         play
834         fd
835         sched
836         ggo
837         buffer_tree
838         time
839         string
840         net
841         afh_recv
842         afh_common
843         wma_afh
844         wma_common
845         mp3_afh
846         recv_common
847         udp_recv
848         http_recv
849         dccp_recv
850         filter_common
851         fec
852         bitstream
853         imdct
854         wav_filter
855         compress_filter
856         amp_filter
857         prebuffer_filter
858         fecdec_filter
859         wmadec_filter
860         write_common
861         file_write
862         version
863         sync_filter
864 "
865 play_cmdline_objs="
866         http_recv
867         dccp_recv
868         udp_recv
869         afh_recv
870         compress_filter
871         amp_filter
872         prebuffer_filter
873         file_write
874         play
875         sync_filter
876 "
877 if test "$have_core_audio" = "yes"; then
878         play_errlist_objs="$play_errlist_objs osx_write ipc"
879         play_cmdline_objs="$play_cmdline_objs osx_write"
880 fi
881 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
882 NEED_VORBIS_OBJECTS && {
883         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
884 }
885 NEED_SPEEX_OBJECTS && {
886         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
887 }
888 NEED_OPUS_OBJECTS &&
889         play_errlist_objs="$play_errlist_objs
890                 opusdec_filter
891                 opus_afh
892                 opus_common
893         "
894 NEED_FLAC_OBJECTS && {
895         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
896 }
897 if test $HAVE_FAAD = yes; then
898         play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter"
899 fi
900 if test $HAVE_MAD = yes; then
901         play_cmdline_objs="$play_cmdline_objs mp3dec_filter"
902         play_errlist_objs="$play_errlist_objs mp3dec_filter"
903 fi
904 if test $HAVE_OSS = yes; then
905         play_errlist_objs="$play_errlist_objs oss_write"
906         play_cmdline_objs="$play_cmdline_objs oss_write"
907 fi
908 if test $HAVE_ALSA = yes; then
909         play_errlist_objs="$play_errlist_objs alsa_write"
910         play_cmdline_objs="$play_cmdline_objs alsa_write"
911 fi
912 NEED_AO_OBJECTS && {
913         play_errlist_objs="$play_errlist_objs ao_write"
914         play_cmdline_objs="$play_cmdline_objs ao_write"
915 }
916 if test $HAVE_READLINE = yes; then
917         play_errlist_objs="$play_errlist_objs interactive"
918 fi
919 if test $HAVE_SAMPLERATE = yes; then
920         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
921         play_cmdline_objs="$play_cmdline_objs resample_filter"
922 fi
923
924 play_objs="add_cmdline($play_cmdline_objs) $play_errlist_objs"
925 AC_SUBST(play_objs, add_dot_o($play_objs))
926 ######################################################################### write
927 write_cmdline_objs="
928         write
929         file_write
930 "
931 write_errlist_objs="
932         write
933         write_common
934         file_write
935         time
936         fd
937         string
938         sched
939         stdin
940         buffer_tree
941         ggo
942         check_wav
943         version
944 "
945 writers="file"
946 default_writer="FILE_WRITE"
947
948 if test "$have_core_audio" = "yes"; then
949         write_errlist_objs="$write_errlist_objs osx_write ipc"
950         write_cmdline_objs="$write_cmdline_objs osx_write"
951         writers="$writers osx"
952         default_writer="OSX_WRITE"
953 fi
954 NEED_AO_OBJECTS && {
955         write_errlist_objs="$write_errlist_objs ao_write"
956         write_cmdline_objs="$write_cmdline_objs ao_write"
957         writers="$writers ao"
958         default_writer="AO_WRITE"
959 }
960 if test $HAVE_OSS = yes; then
961         write_errlist_objs="$write_errlist_objs oss_write"
962         write_cmdline_objs="$write_cmdline_objs oss_write"
963         writers="$writers oss"
964         default_writer="OSS_WRITE"
965 fi
966 if test $HAVE_ALSA = yes; then
967         write_errlist_objs="$write_errlist_objs alsa_write"
968         write_cmdline_objs="$write_cmdline_objs alsa_write"
969         writers="$writers alsa"
970         default_writer="ALSA_WRITE"
971 fi
972 AC_SUBST(writers)
973 write_objs="add_cmdline($write_cmdline_objs) $write_errlist_objs"
974 AC_SUBST(write_objs, add_dot_o($write_objs))
975 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
976 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
977         enum of supported writers)
978 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
979 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
980 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
981 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
982 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
983 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
984 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
985 ######################################################################## audioc
986 audioc_cmdline_objs="audioc"
987 audioc_errlist_objs="
988         audioc
989         string
990         net
991         fd
992         version
993         ggo
994 "
995 if test $HAVE_READLINE = yes; then
996         audioc_errlist_objs="$audioc_errlist_objs
997                 buffer_tree
998                 interactive
999                 sched
1000                 time
1001         "
1002 fi
1003 audioc_objs="add_cmdline($audioc_cmdline_objs) $audioc_errlist_objs"
1004 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
1005 ################################################################## status items
1006
1007 status_items="basename status num_played mtime bitrate frequency file_size
1008 status_flags format score techinfo afs_mode
1009 attributes_txt decoder_flags audiod_status play_time attributes_bitmap
1010 offset seconds_total stream_start current_time audiod_uptime image_id
1011 lyrics_id duration directory lyrics_name image_name path hash channels
1012 last_played num_chunks chunk_time amplification artist title year album
1013 comment max_chunk_size"
1014
1015 result=
1016 for i in $status_items; do
1017         result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), "
1018 done
1019 AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result],
1020         [enum of all status items])
1021
1022 result=
1023 for i in $status_items; do
1024         result="$result \"$i\", "
1025 done
1026 AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result],
1027         [char * array of all status items])
1028
1029 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
1030         [formats supported by para_server and para_afh])
1031
1032 AC_SUBST(executables)
1033
1034 AC_OUTPUT
1035 AC_MSG_NOTICE([
1036 paraslash configuration:
1037 ~~~~~~~~~~~~~~~~~~~~~~~~
1038 crypto lib: ${CRYPTOLIB:-[none]}
1039 unix socket credentials: $have_ucred
1040 readline (interactive CLIs): $HAVE_READLINE
1041 id3 version 2 support: $HAVE_ID3TAG
1042 faad: $HAVE_FAAD
1043
1044 audio format handlers: $audio_format_handlers
1045 filters: $(echo $filters)
1046 writers: $writers
1047
1048 para_server: $build_server
1049 para_gui: $build_gui
1050 para_fade: $build_fade
1051 para_client: $build_client
1052 para_audiod: $build_audiod
1053 ])