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