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