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