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