]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
dfed1e0bad32906d2d23b4518c1595865fd8c61f
[paraslash.git] / configure.ac
1 AC_PREREQ([2.61])
2
3 AC_INIT([paraslash], [m4_esyscmd_s(./GIT-VERSION-GEN)],
4         [maan@tuebingen.mpg.de], [], [http://people.tuebingen.mpg.de/maan/paraslash/])
5 AC_CONFIG_HEADERS([config.h])
6
7 AC_CONFIG_FILES([Makefile])
8 AC_DEFUN([add_dot_o],[$(for i in $@; do printf "$i.o "; done)])
9 AC_DEFUN([add_cmdline],[$(for i in $@; do printf "${i}.cmdline "; done)])
10 AC_DEFUN([LIB_ARG_WITH], [
11         AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir,
12                 [look for $1 headers in dir])])
13         AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir,
14                 [look for $1 libraries in dir])])
15         if test -n "$with_$1_headers"; then
16                 $1_cppflags="-I$with_$1_headers"
17                 CPPFLAGS="$CPPFLAGS $$1_cppflags"
18         fi
19         if test -n "$with_$1_libs"; then
20                 $1_ldflags="-L$with_$1_libs $2"
21         else
22                 $1_ldflags="$2"
23         fi
24         LDFLAGS="$LDFLAGS $$1_ldflags"
25 ])
26
27 AC_DEFUN([STASH_FLAGS], [
28         OLD_CPPFLAGS="$CPPFLAGS"
29         OLD_LDFLAGS="$LDFLAGS"
30         OLD_LIBS="$LIBS"
31 ])
32
33 AC_DEFUN([UNSTASH_FLAGS], [
34         CPPFLAGS="$OLD_CPPFLAGS"
35         LDFLAGS="$OLD_LDFLAGS"
36         LIBS="$OLD_LIBS"
37 ])
38 AC_DEFUN([LIB_SUBST_FLAGS], [
39         if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then
40                 AC_DEFINE(HAVE_[]m4_toupper([$1]), 1,
41                         define to 1 to turn on $1 support)
42         else
43                 $1_cppflags=
44                 $1_ldflags=
45         fi
46         AC_SUBST(HAVE_[]m4_toupper([$1]))
47         AC_SUBST($1_cppflags)
48         AC_SUBST($1_ldflags)
49 ])
50
51 AC_USE_SYSTEM_EXTENSIONS
52 AC_C_BIGENDIAN()
53
54 AC_PATH_PROG([GENGETOPT], [gengetopt])
55 test -z "$GENGETOPT" && AC_MSG_ERROR(
56         [gengetopt is required to build this package])
57
58 AC_PATH_PROG([M4], [m4])
59 test -z "$M4" && AC_MSG_ERROR(
60         [The m4 macro processor is required to build this package])
61
62 AC_PATH_PROG([HELP2MAN], [help2man])
63 test -z "$HELP2MAN" && AC_MSG_ERROR(
64         [help2man is required to build this package])
65
66 AC_PATH_PROG([INSTALL], [install])
67 test -z "$INSTALL" && AC_MSG_ERROR(
68         [The install program is required to build this package])
69
70 AC_PROG_CC
71 AC_PROG_CPP
72
73 executables="recv filter audioc write afh play"
74 ################################################################## clock_gettime
75 clock_gettime_lib=
76 AC_CHECK_LIB([c], [clock_gettime], [clock_gettime_lib=c], [
77         AC_CHECK_LIB([rt], [clock_gettime], [clock_gettime_lib=rt], [], [])
78 ])
79 if test -n "$clock_gettime_lib"; then
80         AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [
81                 define to 1 if clock_gettime() is supported])
82 fi
83 if test "$clock_gettime_lib" = "rt"; then
84         AC_SUBST(clock_gettime_ldflags, -lrt)
85 fi
86
87 ########################################################################### osl
88 STASH_FLAGS
89 LIB_ARG_WITH([osl], [-losl])
90 HAVE_OSL=yes
91 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
92 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
93 LIB_SUBST_FLAGS(osl)
94 UNSTASH_FLAGS
95 ######################################################################## openssl
96 STASH_FLAGS
97 HAVE_OPENSSL=yes
98 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
99 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
100 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
101 LIB_SUBST_FLAGS(openssl)
102 if test $HAVE_OPENSSL = yes; then
103         AC_CHECK_LIB([crypto], [RSA_set0_key],
104                 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl-1.1]))
105 fi
106 UNSTASH_FLAGS
107 ######################################################################### gcrypt
108 STASH_FLAGS
109 HAVE_GCRYPT=yes
110 LIB_ARG_WITH([gcrypt], [-lgcrypt])
111 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
112 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
113 LIB_SUBST_FLAGS(gcrypt)
114 UNSTASH_FLAGS
115 ######################################################################### crypto
116 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
117         Force using crypto library "lib". This package requires either
118         openssl or libgcrypt being installed. Possible values for "lib"
119         are thus "openssl" and "gcrypt". If this option is not given,
120         openssl is tried first. If openssl was not found, gcrypt is
121         tried next.])])
122
123 CRYPTOLIB="$enable_cryptolib"
124 case "$enable_cryptolib" in
125 "openssl")
126         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
127         crypto_ldflags="$openssl_ldflags"
128         ;;
129 "gcrypt")
130         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
131         crypto_ldflags="$gcrypt_ldflags"
132         ;;
133 "")
134         crypto_ldflags=
135         if test $HAVE_GCRYPT = yes; then
136                 CRYPTOLIB=gcrypt
137                 crypto_ldflags="$gcrypt_ldflags"
138         fi
139         if test $HAVE_OPENSSL = yes; then
140                 CRYPTOLIB=openssl
141                 crypto_ldflags="$openssl_ldflags"
142         fi
143         ;;
144 *)
145         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
146         ;;
147 esac
148 AC_SUBST(crypto_ldflags)
149 ########################################################################## iconv
150 STASH_FLAGS
151 LIBS=
152 AC_SEARCH_LIBS([libiconv_open], [iconv],
153         [iconv_ldflags="$LIBS"],
154         []
155 )
156 AC_SUBST(iconv_ldflags)
157 AC_MSG_CHECKING([whether iconv needs const char ** cast])
158 AC_COMPILE_IFELSE([
159         AC_LANG_PROGRAM([
160                 #include <iconv.h>
161         ],[
162                 size_t iconv(iconv_t cd, const char **inbuf,
163                         size_t *inbytesleft, char **outbuf,
164                         size_t *outbytesleft);
165         ])
166 ],
167         [cast='(const char **)'; msg=yes],
168         [cast=; msg=no]
169 )
170 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
171 AC_MSG_RESULT($msg)
172 UNSTASH_FLAGS
173 ########################################################################### ucred
174 AC_MSG_CHECKING(for struct ucred)
175 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
176         #include <sys/types.h>
177         #include <sys/socket.h>
178 ]], [[
179         struct ucred sucred; sucred.pid=0;
180 ]])],[have_ucred=yes],[have_ucred=no])
181 AC_MSG_RESULT($have_ucred)
182 if test ${have_ucred} = yes; then
183         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
184 fi
185 ########################################################################### gengetopt
186 echo 'option "z" z "" flag off' | $GENGETOPT --file-name conftest-ggo &&
187 AC_CHECK_DECL(
188         [gengetopt_args_info_description],
189         [ggo_descriptions_declared=yes],
190         [ggo_descriptions_declared=no],
191         [#include "conftest-ggo.h"]
192 )
193 AC_SUBST(ggo_descriptions_declared)
194 ########################################################################### curses
195 STASH_FLAGS
196 LIB_ARG_WITH([curses], [])
197 HAVE_CURSES=yes
198 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
199 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
200 curses_ldflags="$curses_ldflags $LIBS"
201 LIB_SUBST_FLAGS(curses)
202 UNSTASH_FLAGS
203 ########################################################################### ip_mreqn
204 AC_MSG_CHECKING(for struct ip_mreqn (UDPv4 multicast))
205 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
206         #include <netdb.h>
207         #include <net/if.h>
208 ]], [[
209         struct ip_mreqn mn;
210         mn.imr_ifindex = 0;
211 ]])],[have_ip_mreqn=yes],[have_ip_mreqn=no])
212 AC_MSG_RESULT($have_ip_mreqn)
213 if test ${have_ip_mreqn} = yes; then
214         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 you have struct ip_mreqn)
215 fi
216 ########################################################################### osx
217
218 AC_MSG_CHECKING(for CoreAudio (MacOs))
219 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
220         #include <CoreAudio/CoreAudio.h>
221 ]], [[
222         AudioDeviceID id;
223 ]])],[have_core_audio=yes],[have_core_audio=no])
224 AC_MSG_RESULT($have_core_audio)
225 if test ${have_core_audio} = yes; then
226         f1="-framework CoreAudio"
227         f2="-framework AudioToolbox"
228         f3="-framework AudioUnit"
229         f4="-framework CoreServices"
230         core_audio_ldflags="$f1 $f2 $f3 $f4"
231         AC_SUBST(core_audio_ldflags)
232         AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X)
233 fi
234 ########################################################################### ogg
235 STASH_FLAGS
236 LIB_ARG_WITH([ogg], [-logg])
237 HAVE_OGG=yes
238 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
240 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
241         AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
242 LIB_SUBST_FLAGS(ogg)
243 UNSTASH_FLAGS
244 ######################################################################### vorbis
245 STASH_FLAGS
246 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
247 HAVE_VORBIS=yes
248 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
249 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
250 LIB_SUBST_FLAGS(vorbis)
251 UNSTASH_FLAGS
252 ######################################################################### speex
253 STASH_FLAGS
254 LIB_ARG_WITH([speex], [-lspeex])
255 HAVE_SPEEX=yes
256 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
257 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
258 LIB_SUBST_FLAGS(speex)
259 UNSTASH_FLAGS
260 ######################################################################### opus
261 STASH_FLAGS
262 LIB_ARG_WITH([opus], [-lopus])
263 HAVE_OPUS=yes
264 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
265 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
266 LIB_SUBST_FLAGS(opus)
267 UNSTASH_FLAGS
268 ########################################################################### flac
269 STASH_FLAGS
270 LIB_ARG_WITH([flac], [-lFLAC -lm])
271 HAVE_FLAC=yes
272 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
273 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
274 LIB_SUBST_FLAGS(flac)
275 UNSTASH_FLAGS
276
277 # some helper functions for codecs which use the ogg container format
278 AC_DEFUN([NEED_OGG_OBJECTS], [{
279         test "$HAVE_OGG" = 'yes' -a \( \
280                  "$HAVE_VORBIS" = 'yes' \
281                 -o "$HAVE_SPEEX" = 'yes' \
282                 -o "$HAVE_OPUS" = 'yes' \
283                 -o "$HAVE_FLAC" = 'yes' \
284         \)
285 }])
286 AC_DEFUN([NEED_VORBIS_OBJECTS], [{
287         test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'
288 }])
289 AC_DEFUN([NEED_SPEEX_OBJECTS], [{
290         test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'
291 }])
292 AC_DEFUN([NEED_OPUS_OBJECTS], [{
293         test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'
294 }])
295 AC_DEFUN([NEED_FLAC_OBJECTS], [{
296         test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'
297 }])
298 ########################################################################### faad
299 STASH_FLAGS
300 LIB_ARG_WITH([faad], [-lfaad -lmp4ff])
301 HAVE_FAAD=yes
302 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
303 AC_CHECK_HEADER(mp4ff.h, [], HAVE_FAAD=no)
304 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
305 AC_CHECK_LIB([mp4ff], [mp4ff_meta_get_artist], [], HAVE_FAAD=no)
306 LIB_SUBST_FLAGS(faad)
307 UNSTASH_FLAGS
308 ########################################################################### mad
309 STASH_FLAGS
310 LIB_ARG_WITH([mad], [-lmad])
311 HAVE_MAD=yes
312 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
313 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
314 LIB_SUBST_FLAGS(mad)
315 UNSTASH_FLAGS
316 ###################################################################### libid3tag
317 STASH_FLAGS
318 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
319 HAVE_ID3TAG=yes
320 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
321 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
322 LIB_SUBST_FLAGS(id3tag)
323 UNSTASH_FLAGS
324 ########################################################################### oss
325 STASH_FLAGS
326 LIB_ARG_WITH([oss], [])
327 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
328 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
329 LIB_SUBST_FLAGS(oss)
330 UNSTASH_FLAGS
331 ########################################################################### alsa
332 STASH_FLAGS
333 LIB_ARG_WITH([alsa], [-lasound])
334 HAVE_ALSA=yes
335 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
336 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
337 LIB_SUBST_FLAGS(alsa)
338 UNSTASH_FLAGS
339 ######################################################################### pthread
340 STASH_FLAGS
341 LIB_ARG_WITH([pthread], [-lpthread])
342 HAVE_PTHREAD=yes
343 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
344 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
345 LIB_SUBST_FLAGS(pthread)
346 UNSTASH_FLAGS
347 ########################################################################### libao
348 STASH_FLAGS
349 LIB_ARG_WITH([ao], [-lao])
350 HAVE_AO=yes
351 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
352 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
353 LIB_SUBST_FLAGS(ao)
354 UNSTASH_FLAGS
355 AC_DEFUN([NEED_AO_OBJECTS], [{ test $HAVE_AO = yes -a $HAVE_PTHREAD = yes; }])
356 ######################################################################## readline
357 STASH_FLAGS
358 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
359 LIB_ARG_WITH([readline], [-lreadline $LIBS])
360 HAVE_READLINE=yes
361 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
362 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
363 AC_CHECK_DECL(
364         [rl_free_keymap],
365         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
366         [],
367         [
368                 #include <stdio.h>
369                 #include <readline/readline.h>
370         ]
371 )
372 LIB_SUBST_FLAGS(readline)
373 UNSTASH_FLAGS
374 ############################################################# libsamplerate
375 STASH_FLAGS
376 LIB_ARG_WITH([samplerate], [-lsamplerate])
377 HAVE_SAMPLERATE=yes
378 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
379 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
380 LIB_SUBST_FLAGS(samplerate)
381 UNSTASH_FLAGS
382 ########################################################################## mp4v2
383 STASH_FLAGS
384 LIB_ARG_WITH([mp4v2], [-lmp4v2])
385 HAVE_MP4V2=yes
386 AC_CHECK_HEADER([mp4v2/mp4v2.h], [], [HAVE_MP4V2=no])
387 AC_CHECK_LIB([mp4v2], [MP4Read], [], [HAVE_MP4V2=no])
388 LIB_SUBST_FLAGS(mp4v2)
389 UNSTASH_FLAGS
390 ######################################################################### server
391 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
392         build_server="yes"
393         executables="$executables server"
394         server_cmdline_objs="server"
395         server_errlist_objs="
396                 server
397                 afh_common
398                 mp3_afh
399                 vss
400                 command
401                 net
402                 string
403                 signal
404                 time
405                 daemon
406                 http_send
407                 close_on_fork
408                 mm
409                 crypt_common
410                 base64
411                 ipc
412                 dccp_send
413                 fd
414                 user_list
415                 chunk_queue
416                 afs
417                 aft
418                 mood
419                 score
420                 attribute
421                 blob
422                 playlist
423                 sched
424                 acl
425                 send_common
426                 udp_send
427                 color
428                 fec
429                 wma_afh
430                 wma_common
431                 sideband
432                 version
433                 ggo
434         "
435         if test "$CRYPTOLIB" = openssl; then
436                 server_errlist_objs="$server_errlist_objs crypt"
437         else
438                 server_errlist_objs="$server_errlist_objs gcrypt"
439         fi
440         NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
441         NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
442         NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
443         NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
444         NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
445         if test $HAVE_FAAD = yes && test $HAVE_MP4V2 = yes; then
446                 server_errlist_objs="$server_errlist_objs aac_afh aac_common"
447         fi
448         server_objs="add_cmdline($server_cmdline_objs) $server_errlist_objs"
449         AC_SUBST(server_objs, add_dot_o($server_objs))
450 else
451         build_server="no"
452 fi
453 ############################################################# client
454 if test -n "$CRYPTOLIB"; then
455         build_client="yes"
456         executables="$executables client"
457         client_cmdline_objs="client"
458         client_errlist_objs="
459                 client
460                 net
461                 string
462                 fd
463                 sched
464                 stdin
465                 stdout
466                 time
467                 sideband
468                 client_common
469                 buffer_tree
470                 crypt_common
471                 base64
472                 version
473                 ggo
474         "
475         if test "$CRYPTOLIB" = openssl; then
476                 client_errlist_objs="$client_errlist_objs crypt"
477         else
478                 client_errlist_objs="$client_errlist_objs gcrypt"
479         fi
480         if test $HAVE_READLINE = yes; then
481                 client_errlist_objs="$client_errlist_objs interactive"
482         fi
483         client_objs="add_cmdline($client_cmdline_objs) $client_errlist_objs"
484         AC_SUBST(client_objs, add_dot_o($client_objs))
485 else
486         build_client="no"
487 fi
488 ############################################################# audiod
489 if test -n "$CRYPTOLIB"; then
490         build_audiod="yes"
491         executables="$executables audiod"
492         audiod_audio_formats="wma"
493         audiod_cmdline_objs="$audiod_cmdline_objs
494                 audiod
495                 compress_filter
496                 http_recv
497                 dccp_recv
498                 file_write
499                 client
500                 amp_filter
501                 udp_recv
502                 prebuffer_filter
503                 sync_filter
504         "
505         audiod_errlist_objs="$audiod_errlist_objs
506                 audiod
507                 signal
508                 string
509                 daemon
510                 stat
511                 net
512                 crypt_common
513                 base64
514                 sideband
515                 time
516                 grab_client
517                 filter_common
518                 wav_filter
519                 compress_filter
520                 amp_filter
521                 http_recv
522                 dccp_recv
523                 recv_common
524                 fd
525                 sched
526                 write_common
527                 file_write
528                 audiod_command
529                 fecdec_filter
530                 client_common
531                 ggo
532                 udp_recv
533                 color
534                 fec
535                 prebuffer_filter
536                 version
537                 bitstream
538                 imdct
539                 wma_common
540                 wmadec_filter
541                 buffer_tree
542                 sync_filter
543         "
544         if test "$CRYPTOLIB" = openssl; then
545                 audiod_errlist_objs="$audiod_errlist_objs crypt"
546         else
547                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
548         fi
549         if test "$have_core_audio" = "yes"; then
550                 audiod_errlist_objs="$audiod_errlist_objs osx_write ipc"
551                 audiod_cmdline_objs="$audiod_cmdline_objs osx_write"
552         fi
553         NEED_VORBIS_OBJECTS && {
554                 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
555                 audiod_audio_formats="$audiod_audio_formats ogg"
556         }
557         NEED_SPEEX_OBJECTS && {
558                 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
559                 audiod_audio_formats="$audiod_audio_formats spx"
560         }
561         NEED_OPUS_OBJECTS && {
562                 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
563                 audiod_audio_formats="$audiod_audio_formats opus"
564         }
565         NEED_FLAC_OBJECTS && {
566                 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
567                 audiod_audio_formats="$audiod_audio_formats flac"
568         }
569         if test $HAVE_FAAD = yes; then
570                 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter aac_common"
571                 audiod_audio_formats="$audiod_audio_formats aac"
572         fi
573         if test $HAVE_MAD = yes; then
574                 audiod_audio_formats="$audiod_audio_formats mp3"
575                 audiod_cmdline_objs="$audiod_cmdline_objs mp3dec_filter"
576                 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
577         fi
578         if test $HAVE_OSS = yes; then
579                 audiod_errlist_objs="$audiod_errlist_objs oss_write"
580                 audiod_cmdline_objs="$audiod_cmdline_objs oss_write"
581         fi
582         if test $HAVE_ALSA = yes; then
583                 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
584                 audiod_cmdline_objs="$audiod_cmdline_objs alsa_write"
585         fi
586         NEED_AO_OBJECTS && {
587                 audiod_errlist_objs="$audiod_errlist_objs ao_write"
588                 audiod_cmdline_objs="$audiod_cmdline_objs ao_write"
589         }
590         if test $HAVE_SAMPLERATE = yes; then
591                 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
592                 audiod_cmdline_objs="$audiod_cmdline_objs resample_filter"
593         fi
594         audiod_objs="add_cmdline($audiod_cmdline_objs) $audiod_errlist_objs"
595         AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
596
597         enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
598         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
599                 enum of audio formats supported by audiod)
600         names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
601         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
602 else
603         build_audiod="no"
604 fi
605 ########################################################################### fade
606 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
607         build_fade="yes"
608         executables="$executables fade"
609         fade_cmdline_objs="fade"
610         fade_errlist_objs="fade exec string fd version ggo"
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="add_cmdline($fade_cmdline_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 filters="
674         compress
675         wav
676         amp
677         fecdec
678         wmadec
679         prebuffer
680         sync
681 "
682 filter_errlist_objs="
683         filter_common
684         wav_filter
685         compress_filter
686         filter
687         string
688         stdin
689         stdout
690         sched
691         fd
692         amp_filter
693         ggo
694         fecdec_filter
695         fec
696         version
697         prebuffer_filter
698         time
699         bitstream
700         imdct
701         wma_common
702         wmadec_filter
703         buffer_tree
704         net
705         sync_filter
706 "
707 filter_cmdline_objs="
708         filter
709         compress_filter
710         amp_filter
711         prebuffer_filter
712         sync_filter
713 "
714 NEED_VORBIS_OBJECTS && {
715         filters="$filters oggdec"
716         filter_errlist_objs="$filter_errlist_objs oggdec_filter"
717 }
718 NEED_SPEEX_OBJECTS && {
719         filters="$filters spxdec"
720         filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
721 }
722 NEED_OPUS_OBJECTS && {
723         filters="$filters opusdec"
724         filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
725 }
726 NEED_FLAC_OBJECTS && {
727         filter_errlist_objs="$filter_errlist_objs flacdec_filter"
728         filters="$filters flacdec"
729 }
730 if test $HAVE_FAAD = yes; then
731         filter_errlist_objs="$filter_errlist_objs aacdec_filter aac_common"
732         filters="$filters aacdec"
733 fi
734 if test $HAVE_MAD = yes; then
735         filter_cmdline_objs="$filter_cmdline_objs mp3dec_filter"
736         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
737         filters="$filters mp3dec"
738 fi
739 if test $HAVE_SAMPLERATE = yes; then
740         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
741         filter_cmdline_objs="$filter_cmdline_objs resample_filter"
742         filters="$filters resample"
743 fi
744 filters="$(echo $filters)"
745 AC_SUBST(filters)
746 filter_objs="add_cmdline($filter_cmdline_objs) $filter_errlist_objs"
747
748 AC_SUBST(filter_objs, add_dot_o($filter_objs))
749
750 enum="$(for i in $filters; do printf "${i}_FILTER, " | tr '[a-z]' '[A-Z]'; done)"
751 AC_DEFINE_UNQUOTED(FILTER_ENUM, $enum NUM_SUPPORTED_FILTERS,
752         enum of supported filters)
753 inits="$(for i in $filters; do printf 'extern void '$i'_filter_init(struct filter *f); '; done)"
754 AC_DEFINE_UNQUOTED(DECLARE_FILTER_INITS, $inits, init functions of the supported filters)
755 array="$(for i in $filters; do printf '{.name = "'$i'", .init = '$i'_filter_init},'; done)"
756 AC_DEFINE_UNQUOTED(FILTER_ARRAY, $array, array of supported filters)
757 ########################################################################## recv
758 recv_cmdline_objs="
759         recv
760         http_recv
761         dccp_recv
762         udp_recv
763         afh_recv
764 "
765
766 recv_errlist_objs="
767         http_recv
768         recv_common
769         recv
770         time
771         string
772         net
773         dccp_recv
774         fd
775         sched
776         stdout
777         ggo
778         udp_recv
779         buffer_tree
780         afh_recv
781         afh_common
782         wma_afh
783         wma_common
784         mp3_afh
785         version
786 "
787 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
788 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
789 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
790 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
791 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
792
793 if test $HAVE_FAAD = yes -a $HAVE_MP4V2 = yes; then
794         recv_errlist_objs="$recv_errlist_objs aac_afh aac_common"
795 fi
796 recv_objs="add_cmdline($recv_cmdline_objs) $recv_errlist_objs"
797 AC_SUBST(receivers, "http dccp udp afh")
798 AC_SUBST(recv_objs, add_dot_o($recv_objs))
799 ########################################################################### afh
800 audio_format_handlers="mp3 wma"
801 afh_cmdline_objs="afh"
802 afh_errlist_objs="
803         afh
804         string
805         fd
806         mp3_afh
807         afh_common
808         time
809         wma_afh
810         wma_common
811         version
812         ggo
813 "
814 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
815 NEED_VORBIS_OBJECTS && {
816         afh_errlist_objs="$afh_errlist_objs ogg_afh"
817         audio_format_handlers="$audio_format_handlers ogg"
818 }
819 NEED_SPEEX_OBJECTS && {
820         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
821         audio_format_handlers="$audio_format_handlers spx"
822 }
823 NEED_OPUS_OBJECTS && {
824         afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
825         audio_format_handlers="$audio_format_handlers opus"
826 }
827 NEED_FLAC_OBJECTS && {
828         afh_errlist_objs="$afh_errlist_objs flac_afh"
829         audio_format_handlers="$audio_format_handlers flac"
830 }
831 if test $HAVE_FAAD = yes -a $HAVE_MP4V2 = yes; then
832         afh_errlist_objs="$afh_errlist_objs aac_afh aac_common"
833         audio_format_handlers="$audio_format_handlers aac"
834 fi
835
836 afh_objs="add_cmdline($afh_cmdline_objs) $afh_errlist_objs"
837
838 AC_SUBST(afh_objs, add_dot_o($afh_objs))
839 ########################################################################## play
840 play_errlist_objs="
841         play
842         fd
843         sched
844         ggo
845         buffer_tree
846         time
847         string
848         net
849         afh_recv
850         afh_common
851         wma_afh
852         wma_common
853         mp3_afh
854         recv_common
855         udp_recv
856         http_recv
857         dccp_recv
858         filter_common
859         fec
860         bitstream
861         imdct
862         wav_filter
863         compress_filter
864         amp_filter
865         prebuffer_filter
866         fecdec_filter
867         wmadec_filter
868         write_common
869         file_write
870         version
871         sync_filter
872 "
873 play_cmdline_objs="
874         http_recv
875         dccp_recv
876         udp_recv
877         afh_recv
878         compress_filter
879         amp_filter
880         prebuffer_filter
881         file_write
882         play
883         sync_filter
884 "
885 if test "$have_core_audio" = "yes"; then
886         play_errlist_objs="$play_errlist_objs osx_write ipc"
887         play_cmdline_objs="$play_cmdline_objs osx_write"
888 fi
889 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
890 NEED_VORBIS_OBJECTS && {
891         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
892 }
893 NEED_SPEEX_OBJECTS && {
894         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
895 }
896 NEED_OPUS_OBJECTS &&
897         play_errlist_objs="$play_errlist_objs
898                 opusdec_filter
899                 opus_afh
900                 opus_common
901         "
902 NEED_FLAC_OBJECTS && {
903         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
904 }
905 if test $HAVE_FAAD = yes; then
906         play_errlist_objs="$play_errlist_objs aacdec_filter"
907 fi
908 if test $HAVE_MP4V2 = yes; then
909         play_errlist_objs="$play_errlist_objs aac_afh"
910 fi
911 if test $HAVE_MP4V2 = yes || test $HAVE_FAAD = yes; then
912         play_errlist_objs="$play_errlist_objs aac_common"
913 fi
914 if test $HAVE_MAD = yes; then
915         play_cmdline_objs="$play_cmdline_objs mp3dec_filter"
916         play_errlist_objs="$play_errlist_objs mp3dec_filter"
917 fi
918 if test $HAVE_OSS = yes; then
919         play_errlist_objs="$play_errlist_objs oss_write"
920         play_cmdline_objs="$play_cmdline_objs oss_write"
921 fi
922 if test $HAVE_ALSA = yes; then
923         play_errlist_objs="$play_errlist_objs alsa_write"
924         play_cmdline_objs="$play_cmdline_objs alsa_write"
925 fi
926 NEED_AO_OBJECTS && {
927         play_errlist_objs="$play_errlist_objs ao_write"
928         play_cmdline_objs="$play_cmdline_objs ao_write"
929 }
930 if test $HAVE_READLINE = yes; then
931         play_errlist_objs="$play_errlist_objs interactive"
932 fi
933 if test $HAVE_SAMPLERATE = yes; then
934         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
935         play_cmdline_objs="$play_cmdline_objs resample_filter"
936 fi
937
938 play_objs="add_cmdline($play_cmdline_objs) $play_errlist_objs"
939 AC_SUBST(play_objs, add_dot_o($play_objs))
940 ######################################################################### write
941 write_cmdline_objs="
942         write
943         file_write
944 "
945 write_errlist_objs="
946         write
947         write_common
948         file_write
949         time
950         fd
951         string
952         sched
953         stdin
954         buffer_tree
955         ggo
956         check_wav
957         version
958 "
959 writers="file"
960 default_writer="FILE_WRITE"
961
962 if test "$have_core_audio" = "yes"; then
963         write_errlist_objs="$write_errlist_objs osx_write ipc"
964         write_cmdline_objs="$write_cmdline_objs osx_write"
965         writers="$writers osx"
966         default_writer="OSX_WRITE"
967 fi
968 NEED_AO_OBJECTS && {
969         write_errlist_objs="$write_errlist_objs ao_write"
970         write_cmdline_objs="$write_cmdline_objs ao_write"
971         writers="$writers ao"
972         default_writer="AO_WRITE"
973 }
974 if test $HAVE_OSS = yes; then
975         write_errlist_objs="$write_errlist_objs oss_write"
976         write_cmdline_objs="$write_cmdline_objs oss_write"
977         writers="$writers oss"
978         default_writer="OSS_WRITE"
979 fi
980 if test $HAVE_ALSA = yes; then
981         write_errlist_objs="$write_errlist_objs alsa_write"
982         write_cmdline_objs="$write_cmdline_objs alsa_write"
983         writers="$writers alsa"
984         default_writer="ALSA_WRITE"
985 fi
986 AC_SUBST(writers)
987 write_objs="add_cmdline($write_cmdline_objs) $write_errlist_objs"
988 AC_SUBST(write_objs, add_dot_o($write_objs))
989 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
990 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
991         enum of supported writers)
992 AC_DEFINE_UNQUOTED(DEFAULT_WRITER, $default_writer, use this writer if none was specified)
993 names="$(for i in $writers; do printf \"$i\",' ' ; done)"
994 AC_DEFINE_UNQUOTED(WRITER_NAMES, $names, supported writer names)
995 inits="$(for i in $writers; do printf 'extern void '$i'_write_init(struct writer *); '; done)"
996 AC_DEFINE_UNQUOTED(DECLARE_WRITER_INITS, $inits, init functions of the supported writers)
997 array="$(for i in $writers; do printf '{.init = '$i'_write_init},'; done)"
998 AC_DEFINE_UNQUOTED(WRITER_ARRAY, $array, array of supported writers)
999 ######################################################################## audioc
1000 audioc_cmdline_objs="audioc"
1001 audioc_errlist_objs="
1002         audioc
1003         string
1004         net
1005         fd
1006         version
1007         ggo
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="add_cmdline($audioc_cmdline_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 max_chunk_size"
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 ])