paraslash 0.7.3
[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([LIB_ARG_WITH], [
10         AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir,
11                 [look for $1 headers in dir])])
12         AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir,
13                 [look for $1 libraries in dir])])
14         if test -n "$with_$1_headers"; then
15                 $1_cppflags="-I$with_$1_headers"
16                 CPPFLAGS="$CPPFLAGS $$1_cppflags"
17         fi
18         if test -n "$with_$1_libs"; then
19                 $1_ldflags="-L$with_$1_libs $2"
20         else
21                 $1_ldflags="$2"
22         fi
23         LDFLAGS="$LDFLAGS $$1_ldflags"
24 ])
25
26 AC_DEFUN([STASH_FLAGS], [
27         OLD_CPPFLAGS="$CPPFLAGS"
28         OLD_LDFLAGS="$LDFLAGS"
29         OLD_LIBS="$LIBS"
30 ])
31
32 AC_DEFUN([UNSTASH_FLAGS], [
33         CPPFLAGS="$OLD_CPPFLAGS"
34         LDFLAGS="$OLD_LDFLAGS"
35         LIBS="$OLD_LIBS"
36 ])
37 AC_DEFUN([LIB_SUBST_FLAGS], [
38         if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then
39                 AC_DEFINE(HAVE_[]m4_toupper([$1]), 1,
40                         define to 1 to turn on $1 support)
41         else
42                 $1_cppflags=
43                 $1_ldflags=
44         fi
45         AC_SUBST(HAVE_[]m4_toupper([$1]))
46         AC_SUBST($1_cppflags)
47         AC_SUBST($1_ldflags)
48 ])
49 AC_DEFUN([REQUIRE_EXECUTABLE], [
50         AC_PATH_PROG(m4_toupper([$1]), [$1])
51         test -z "$m4_toupper([$1])" && AC_MSG_ERROR(
52                 [$1 is required to build this package])
53 ])
54
55 AC_USE_SYSTEM_EXTENSIONS
56 AC_C_BIGENDIAN()
57 AC_PROG_CC
58 AC_PROG_CPP
59
60 REQUIRE_EXECUTABLE([bison])
61 REQUIRE_EXECUTABLE([flex])
62 REQUIRE_EXECUTABLE([m4])
63
64 executables="recv filter audioc write afh play"
65 ########################################################################### osl
66 STASH_FLAGS
67 LIB_ARG_WITH([osl], [-losl])
68 HAVE_OSL=yes
69 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
70 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
71 LIB_SUBST_FLAGS(osl)
72 UNSTASH_FLAGS
73 ######################################################################## lopsub
74 HAVE_LOPSUB=yes
75 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
76 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
77 STASH_FLAGS
78 LIB_ARG_WITH([lopsub], [-llopsub])
79 AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no])
80 AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no])
81 if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([
82         The lopsub library is required to build this software, but
83         the above checks indicate it is not installed on your system.
84         Run the following command to download a copy.
85                 git clone git://git.tuebingen.mpg.de/lopsub.git
86         Install the library, then run this configure script again.
87 ])
88 fi
89 LIB_SUBST_FLAGS([lopsub])
90 UNSTASH_FLAGS
91 ######################################################################## openssl
92 STASH_FLAGS
93 HAVE_OPENSSL=yes
94 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
95 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
96 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
97 LIB_SUBST_FLAGS(openssl)
98 if test $HAVE_OPENSSL = yes; then
99         HAVE_RSA_SET0_KEY=yes
100         AC_CHECK_DECL([RSA_set0_key], [], [], [#include <openssl/rsa.h>])
101         AC_CHECK_LIB([crypto], [RSA_set0_key], [], [])
102         if test "$ac_cv_have_decl_RSA_set0_key" != "$ac_cv_lib_crypto_RSA_set0_key"; then
103                 AC_MSG_ERROR([openssl header/library mismatch])
104         fi
105         if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
106                 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
107         else
108                 AC_MSG_WARN([
109         Old openssl library detected. Support for openssl-1.0 and earlier
110         will be removed in the next major paraslash release. Please upgrade
111         your openssl installation.])
112         fi
113         HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
114         AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
115                 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
116                 [#include <openssl/rsa.h>])
117         AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
118                 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
119         test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
120                 AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
121                         [not available on FreeBSD 12])
122         HAVE_OPENSSL_THREAD_STOP=yes
123         AC_CHECK_DECL([OPENSSL_thread_stop], [],
124                 [HAVE_OPENSSL_THREAD_STOP=no],
125                 [#include <openssl/crypto.h>])
126         AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
127                 [HAVE_OPENSSL_THREAD_STOP=no])
128         test $HAVE_OPENSSL_THREAD_STOP = yes &&
129                 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
130                         [not available on openssl-1.0])
131 fi
132 UNSTASH_FLAGS
133 ######################################################################### gcrypt
134 STASH_FLAGS
135 HAVE_GCRYPT=yes
136 LIB_ARG_WITH([gcrypt], [-lgcrypt])
137 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
138 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
139 LIB_SUBST_FLAGS(gcrypt)
140 UNSTASH_FLAGS
141 ######################################################################### crypto
142 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
143         Force using crypto library "lib". This package requires either
144         openssl or libgcrypt being installed. Possible values for "lib"
145         are thus "openssl" and "gcrypt". If this option is not given,
146         openssl is tried first. If openssl was not found, gcrypt is
147         tried next.])])
148
149 CRYPTOLIB="$enable_cryptolib"
150 case "$enable_cryptolib" in
151 "openssl")
152         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
153         crypto_ldflags="$openssl_ldflags"
154         ;;
155 "gcrypt")
156         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
157         crypto_ldflags="$gcrypt_ldflags"
158         ;;
159 "")
160         crypto_ldflags=
161         if test $HAVE_GCRYPT = yes; then
162                 CRYPTOLIB=gcrypt
163                 crypto_ldflags="$gcrypt_ldflags"
164         fi
165         if test $HAVE_OPENSSL = yes; then
166                 CRYPTOLIB=openssl
167                 crypto_ldflags="$openssl_ldflags"
168         fi
169         ;;
170 *)
171         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
172         ;;
173 esac
174 AC_SUBST(crypto_ldflags)
175 ########################################################################## iconv
176 STASH_FLAGS
177 LIBS=
178 AC_SEARCH_LIBS([libiconv_open], [iconv],
179         [iconv_ldflags="$LIBS"],
180         []
181 )
182 AC_SUBST(iconv_ldflags)
183 AC_MSG_CHECKING([whether iconv needs const char ** cast])
184 AC_COMPILE_IFELSE([
185         AC_LANG_PROGRAM([
186                 #include <iconv.h>
187         ],[
188                 size_t iconv(iconv_t cd, const char **inbuf,
189                         size_t *inbytesleft, char **outbuf,
190                         size_t *outbytesleft);
191         ])
192 ],
193         [cast='(const char **)'; msg=yes],
194         [cast=; msg=no]
195 )
196 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
197 AC_MSG_RESULT($msg)
198 UNSTASH_FLAGS
199 ########################################################################### ucred
200 AC_CHECK_TYPE([struct ucred], [
201         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
202 ], [], [
203         #include <sys/types.h>
204         #include <sys/socket.h>
205 ])
206 ################################################################### FNM_EXTMATCH
207 AC_MSG_CHECKING(for extended wildcard pattern matching)
208 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
209         #include <fnmatch.h>
210 ]], [[
211         unsigned n = FNM_EXTMATCH;
212 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
213 AC_MSG_RESULT($have_fnm_extmatch)
214 if test $have_fnm_extmatch = yes; then
215         AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
216 fi
217 ########################################################################### curses
218 STASH_FLAGS
219 LIB_ARG_WITH([curses], [])
220 HAVE_CURSES=yes
221 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
222 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
223 curses_ldflags="$curses_ldflags $LIBS"
224 LIB_SUBST_FLAGS(curses)
225 UNSTASH_FLAGS
226 ########################################################################### ip_mreqn
227 AC_CHECK_TYPE([struct ip_mreqn], [
228         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
229 ], [], [
230         #include <netdb.h>
231         #include <net/if.h>
232 ])
233 ########################################################################### ogg
234 STASH_FLAGS
235 LIB_ARG_WITH([ogg], [-logg])
236 HAVE_OGG=yes
237 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
238 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
240         AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
241 LIB_SUBST_FLAGS(ogg)
242 UNSTASH_FLAGS
243 ######################################################################### vorbis
244 STASH_FLAGS
245 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
246 HAVE_VORBIS=yes
247 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
248 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
249 LIB_SUBST_FLAGS(vorbis)
250 UNSTASH_FLAGS
251 ######################################################################### speex
252 STASH_FLAGS
253 LIB_ARG_WITH([speex], [-lspeex])
254 HAVE_SPEEX=yes
255 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
256 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
257 LIB_SUBST_FLAGS(speex)
258 UNSTASH_FLAGS
259 ######################################################################### opus
260 STASH_FLAGS
261 LIB_ARG_WITH([opus], [-lopus])
262 HAVE_OPUS=yes
263 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
264 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
265 LIB_SUBST_FLAGS(opus)
266 UNSTASH_FLAGS
267 ########################################################################### flac
268 STASH_FLAGS
269 LIB_ARG_WITH([flac], [-lFLAC -lm])
270 HAVE_FLAC=yes
271 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
272 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
273 LIB_SUBST_FLAGS(flac)
274 UNSTASH_FLAGS
275
276 # some helper functions for codecs which use the ogg container format
277 AC_DEFUN([NEED_OGG_OBJECTS], [{
278         test "$HAVE_OGG" = 'yes' -a \( \
279                  "$HAVE_VORBIS" = 'yes' \
280                 -o "$HAVE_SPEEX" = 'yes' \
281                 -o "$HAVE_OPUS" = 'yes' \
282                 -o "$HAVE_FLAC" = 'yes' \
283         \)
284 }])
285 AC_DEFUN([NEED_VORBIS_OBJECTS], [{
286         test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'
287 }])
288 AC_DEFUN([NEED_SPEEX_OBJECTS], [{
289         test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'
290 }])
291 AC_DEFUN([NEED_OPUS_OBJECTS], [{
292         test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'
293 }])
294 AC_DEFUN([NEED_FLAC_OBJECTS], [{
295         test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'
296 }])
297 ########################################################################### faad
298 STASH_FLAGS
299 LIB_ARG_WITH([faad], [-lfaad])
300 HAVE_FAAD=yes
301 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
302 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
303 LIB_SUBST_FLAGS(faad)
304 UNSTASH_FLAGS
305 ########################################################################### mad
306 STASH_FLAGS
307 LIB_ARG_WITH([mad], [-lmad])
308 HAVE_MAD=yes
309 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
310 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
311 LIB_SUBST_FLAGS(mad)
312 UNSTASH_FLAGS
313 ###################################################################### libid3tag
314 STASH_FLAGS
315 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
316 HAVE_ID3TAG=yes
317 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
318 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
319 LIB_SUBST_FLAGS(id3tag)
320 UNSTASH_FLAGS
321 ########################################################################### oss
322 STASH_FLAGS
323 LIB_ARG_WITH([oss], [])
324 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
325 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
326 LIB_SUBST_FLAGS(oss)
327 UNSTASH_FLAGS
328 ########################################################################### alsa
329 STASH_FLAGS
330 LIB_ARG_WITH([alsa], [-lasound])
331 HAVE_ALSA=yes
332 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
333 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
334 LIB_SUBST_FLAGS(alsa)
335 UNSTASH_FLAGS
336 ######################################################################### pthread
337 STASH_FLAGS
338 LIB_ARG_WITH([pthread], [-lpthread])
339 HAVE_PTHREAD=yes
340 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
341 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
342 LIB_SUBST_FLAGS(pthread)
343 UNSTASH_FLAGS
344 ########################################################################### libao
345 STASH_FLAGS
346 LIB_ARG_WITH([ao], [-lao])
347 HAVE_AO=yes
348 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
349 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
350 LIB_SUBST_FLAGS(ao)
351 UNSTASH_FLAGS
352 AC_DEFUN([NEED_AO_OBJECTS], [{ test $HAVE_AO = yes -a $HAVE_PTHREAD = yes; }])
353 ######################################################################## readline
354 STASH_FLAGS
355 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
356 LIB_ARG_WITH([readline], [-lreadline $LIBS])
357 HAVE_READLINE=yes
358 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
359 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
360 AC_CHECK_DECL(
361         [rl_free_keymap],
362         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
363         [],
364         [
365                 #include <stdio.h>
366                 #include <readline/readline.h>
367         ]
368 )
369 LIB_SUBST_FLAGS(readline)
370 UNSTASH_FLAGS
371 ############################################################# libsamplerate
372 STASH_FLAGS
373 LIB_ARG_WITH([samplerate], [-lsamplerate])
374 HAVE_SAMPLERATE=yes
375 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
376 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
377 LIB_SUBST_FLAGS(samplerate)
378 UNSTASH_FLAGS
379 ######################################################################### ubsan
380 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
381         [Detect and report undefined behaviour.])],
382         [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
383 AC_SUBST(ENABLE_UBSAN)
384 ######################################################################### server
385 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes && test -n "$BISON" && \
386                 test -n "$FLEX"; then
387         build_server="yes"
388         executables="$executables server upgrade_db"
389         server_errlist_objs="
390                 server
391                 afh_common
392                 mp3_afh
393                 vss
394                 command
395                 net
396                 string
397                 signal
398                 time
399                 daemon
400                 http_send
401                 close_on_fork
402                 crypt_common
403                 base64
404                 ipc
405                 dccp_send
406                 fd
407                 user_list
408                 chunk_queue
409                 afs
410                 aft
411                 mood
412                 mp
413                 score
414                 attribute
415                 blob
416                 playlist
417                 sched
418                 acl
419                 send_common
420                 udp_send
421                 color
422                 fec
423                 wma_afh
424                 wma_common
425                 sideband
426                 version
427                 lsu
428         "
429         if test "$CRYPTOLIB" = openssl; then
430                 server_errlist_objs="$server_errlist_objs openssl"
431         else
432                 server_errlist_objs="$server_errlist_objs gcrypt"
433         fi
434         NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
435         NEED_VORBIS_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh"
436         NEED_SPEEX_OBJECTS() && server_errlist_objs="$server_errlist_objs spx_afh spx_common"
437         NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
438         NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
439         if test $HAVE_FAAD = yes; then
440                 server_errlist_objs="$server_errlist_objs aac_afh mp4"
441         fi
442         server_objs="$server_errlist_objs"
443         AC_SUBST(server_objs, add_dot_o($server_objs))
444 else
445         build_server="no"
446 fi
447 ############################################################# upgrade_db
448 upgrade_db_objs='
449         crypt_common
450         exec
451         fd
452         string
453         upgrade_db
454         version
455         base64
456 '
457 AC_SUBST(upgrade_db_objs, add_dot_o($upgrade_db_objs))
458 ############################################################# client
459 if test -n "$CRYPTOLIB"; then
460         build_client="yes"
461         executables="$executables client"
462         client_errlist_objs="
463                 client
464                 net
465                 string
466                 fd
467                 lsu
468                 sched
469                 stdin
470                 stdout
471                 time
472                 sideband
473                 client_common
474                 buffer_tree
475                 crypt_common
476                 base64
477                 version
478         "
479         if test "$CRYPTOLIB" = openssl; then
480                 client_errlist_objs="$client_errlist_objs openssl"
481         else
482                 client_errlist_objs="$client_errlist_objs gcrypt"
483         fi
484         if test $HAVE_READLINE = yes; then
485                 client_errlist_objs="$client_errlist_objs interactive"
486         fi
487         client_objs="$client_errlist_objs"
488         AC_SUBST(client_objs, add_dot_o($client_errlist_objs))
489 else
490         build_client="no"
491 fi
492 ############################################################# audiod
493 if test -n "$CRYPTOLIB"; then
494         build_audiod="yes"
495         executables="$executables audiod"
496         audiod_audio_formats="wma"
497         audiod_errlist_objs="$audiod_errlist_objs
498                 audiod
499                 signal
500                 string
501                 daemon
502                 stat
503                 net
504                 crypt_common
505                 base64
506                 sideband
507                 time
508                 grab_client
509                 filter_common
510                 wav_filter
511                 compress_filter
512                 amp_filter
513                 http_recv
514                 dccp_recv
515                 recv_common
516                 fd
517                 sched
518                 write_common
519                 file_write
520                 audiod_command
521                 fecdec_filter
522                 client_common
523                 udp_recv
524                 color
525                 fec
526                 prebuffer_filter
527                 version
528                 bitstream
529                 imdct
530                 wma_common
531                 wmadec_filter
532                 buffer_tree
533                 sync_filter
534                 lsu
535         "
536         if test "$CRYPTOLIB" = openssl; then
537                 audiod_errlist_objs="$audiod_errlist_objs openssl"
538         else
539                 audiod_errlist_objs="$audiod_errlist_objs gcrypt"
540         fi
541         NEED_VORBIS_OBJECTS && {
542                 audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
543                 audiod_audio_formats="$audiod_audio_formats ogg"
544         }
545         NEED_SPEEX_OBJECTS && {
546                 audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common"
547                 audiod_audio_formats="$audiod_audio_formats spx"
548         }
549         NEED_OPUS_OBJECTS && {
550                 audiod_errlist_objs="$audiod_errlist_objs opusdec_filter opus_common"
551                 audiod_audio_formats="$audiod_audio_formats opus"
552         }
553         NEED_FLAC_OBJECTS && {
554                 audiod_errlist_objs="$audiod_errlist_objs flacdec_filter"
555                 audiod_audio_formats="$audiod_audio_formats flac"
556         }
557         if test $HAVE_FAAD = yes; then
558                 audiod_errlist_objs="$audiod_errlist_objs aacdec_filter"
559                 audiod_audio_formats="$audiod_audio_formats aac"
560         fi
561         if test $HAVE_MAD = yes; then
562                 audiod_audio_formats="$audiod_audio_formats mp3"
563                 audiod_errlist_objs="$audiod_errlist_objs mp3dec_filter"
564         fi
565         if test $HAVE_OSS = yes; then
566                 audiod_errlist_objs="$audiod_errlist_objs oss_write"
567         fi
568         if test $HAVE_ALSA = yes; then
569                 audiod_errlist_objs="$audiod_errlist_objs alsa_write"
570         fi
571         NEED_AO_OBJECTS && {
572                 audiod_errlist_objs="$audiod_errlist_objs ao_write"
573         }
574         if test $HAVE_SAMPLERATE = yes; then
575                 audiod_errlist_objs="$audiod_errlist_objs resample_filter check_wav"
576         fi
577         audiod_objs="$audiod_errlist_objs"
578         AC_SUBST(audiod_objs, add_dot_o($audiod_objs))
579
580         enum="$(for i in $audiod_audio_formats; do printf "AUDIO_FORMAT_${i}, " | tr '[a-z]' '[A-Z]'; done)"
581         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
582                 enum of audio formats supported by audiod)
583         names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
584         AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
585 else
586         build_audiod="no"
587 fi
588 ########################################################################### mixer
589 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
590         build_mixer="yes"
591         executables="$executables mixer"
592         mixer_errlist_objs="mixer exec string fd time lsu version"
593         if test $HAVE_OSS = yes; then
594                 mixer_errlist_objs="$mixer_errlist_objs oss_mix"
595         fi
596         if test $HAVE_ALSA = yes; then
597                 mixer_errlist_objs="$mixer_errlist_objs alsa_mix"
598         fi
599         mixer_objs="$mixer_errlist_objs"
600         AC_SUBST(mixer_objs, add_dot_o($mixer_objs))
601 else
602         build_mixer="no"
603         AC_MSG_WARN([no mixer support])
604 fi
605 ########################################################################### gui
606 if test $HAVE_CURSES = yes; then
607         build_gui="yes"
608         executables="$executables gui"
609         gui_errlist_objs="
610                 exec
611                 signal
612                 string
613                 stat
614                 ringbuffer
615                 fd
616                 gui
617                 gui_theme
618                 lsu
619                 time
620                 sched
621                 version
622         "
623         gui_objs="$gui_errlist_objs"
624         AC_SUBST(gui_objs, add_dot_o($gui_objs))
625 else
626         build_gui="no"
627         AC_MSG_WARN([no curses lib, cannot build para_gui])
628 fi
629 ######################################################################## filter
630 filter_errlist_objs="
631         filter_common
632         wav_filter
633         compress_filter
634         filter
635         string
636         stdin
637         stdout
638         sched
639         fd
640         amp_filter
641         fecdec_filter
642         fec
643         lsu
644         version
645         prebuffer_filter
646         time
647         bitstream
648         imdct
649         wma_common
650         wmadec_filter
651         buffer_tree
652         net
653         sync_filter
654 "
655 NEED_VORBIS_OBJECTS && filter_errlist_objs="$filter_errlist_objs oggdec_filter"
656 NEED_SPEEX_OBJECTS && filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common"
657 NEED_OPUS_OBJECTS && filter_errlist_objs="$filter_errlist_objs opusdec_filter opus_common"
658 NEED_FLAC_OBJECTS && filter_errlist_objs="$filter_errlist_objs flacdec_filter"
659 if test $HAVE_FAAD = yes; then
660         filter_errlist_objs="$filter_errlist_objs aacdec_filter"
661 fi
662 if test $HAVE_MAD = yes; then
663         filter_errlist_objs="$filter_errlist_objs mp3dec_filter"
664 fi
665 if test $HAVE_SAMPLERATE = yes; then
666         filter_errlist_objs="$filter_errlist_objs resample_filter check_wav"
667 fi
668 filter_objs="$filter_errlist_objs"
669
670 AC_SUBST(filter_objs, add_dot_o($filter_objs))
671 ########################################################################## recv
672 recv_errlist_objs="
673         http_recv
674         recv_common
675         recv
676         time
677         string
678         net
679         dccp_recv
680         fd
681         sched
682         stdout
683         udp_recv
684         buffer_tree
685         afh_recv
686         afh_common
687         wma_afh
688         wma_common
689         mp3_afh
690         version
691 "
692 NEED_OGG_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh_common"
693 NEED_VORBIS_OBJECTS && recv_errlist_objs="$recv_errlist_objs ogg_afh"
694 NEED_SPEEX_OBJECTS && recv_errlist_objs="$recv_errlist_objs spx_afh spx_common"
695 NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
696 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
697
698 if test $HAVE_FAAD = yes; then
699         recv_errlist_objs="$recv_errlist_objs aac_afh mp4"
700 fi
701 recv_objs="$recv_errlist_objs"
702 AC_SUBST(recv_objs, add_dot_o($recv_objs))
703 ########################################################################### afh
704 audio_format_handlers="mp3 wma"
705 afh_errlist_objs="
706         afh
707         string
708         fd
709         mp3_afh
710         afh_common
711         time
712         wma_afh
713         wma_common
714         version
715 "
716 NEED_OGG_OBJECTS && afh_errlist_objs="$afh_errlist_objs ogg_afh_common"
717 NEED_VORBIS_OBJECTS && {
718         afh_errlist_objs="$afh_errlist_objs ogg_afh"
719         audio_format_handlers="$audio_format_handlers ogg"
720 }
721 NEED_SPEEX_OBJECTS && {
722         afh_errlist_objs="$afh_errlist_objs spx_afh spx_common"
723         audio_format_handlers="$audio_format_handlers spx"
724 }
725 NEED_OPUS_OBJECTS && {
726         afh_errlist_objs="$afh_errlist_objs opus_afh opus_common"
727         audio_format_handlers="$audio_format_handlers opus"
728 }
729 NEED_FLAC_OBJECTS && {
730         afh_errlist_objs="$afh_errlist_objs flac_afh"
731         audio_format_handlers="$audio_format_handlers flac"
732 }
733 if test $HAVE_FAAD = yes; then
734         afh_errlist_objs="$afh_errlist_objs aac_afh mp4"
735         audio_format_handlers="$audio_format_handlers aac"
736 fi
737
738 afh_objs="$afh_errlist_objs"
739
740 AC_SUBST(afh_objs, add_dot_o($afh_objs))
741 ########################################################################## play
742 play_errlist_objs="
743         play
744         fd
745         sched
746         buffer_tree
747         time
748         string
749         net
750         afh_recv
751         afh_common
752         wma_afh
753         wma_common
754         mp3_afh
755         recv_common
756         udp_recv
757         http_recv
758         dccp_recv
759         filter_common
760         fec
761         bitstream
762         imdct
763         wav_filter
764         compress_filter
765         amp_filter
766         prebuffer_filter
767         fecdec_filter
768         wmadec_filter
769         write_common
770         file_write
771         version
772         sync_filter
773         lsu
774 "
775 NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
776 NEED_VORBIS_OBJECTS && {
777         play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
778 }
779 NEED_SPEEX_OBJECTS && {
780         play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
781 }
782 NEED_OPUS_OBJECTS &&
783         play_errlist_objs="$play_errlist_objs
784                 opusdec_filter
785                 opus_afh
786                 opus_common
787         "
788 NEED_FLAC_OBJECTS && {
789         play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
790 }
791 if test $HAVE_FAAD = yes; then
792         play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter mp4"
793 fi
794 if test $HAVE_MAD = yes; then
795         play_errlist_objs="$play_errlist_objs mp3dec_filter"
796 fi
797 if test $HAVE_OSS = yes; then
798         play_errlist_objs="$play_errlist_objs oss_write"
799 fi
800 if test $HAVE_ALSA = yes; then
801         play_errlist_objs="$play_errlist_objs alsa_write"
802 fi
803 NEED_AO_OBJECTS && {
804         play_errlist_objs="$play_errlist_objs ao_write"
805 }
806 if test $HAVE_READLINE = yes; then
807         play_errlist_objs="$play_errlist_objs interactive"
808 fi
809 if test $HAVE_SAMPLERATE = yes; then
810         play_errlist_objs="$play_errlist_objs resample_filter check_wav"
811 fi
812
813 play_objs="$play_errlist_objs"
814 AC_SUBST(play_objs, add_dot_o($play_objs))
815 ######################################################################### write
816 write_errlist_objs="
817         write
818         write_common
819         file_write
820         time
821         fd
822         string
823         sched
824         stdin
825         buffer_tree
826         check_wav
827         version
828 "
829
830 NEED_AO_OBJECTS && {
831         write_errlist_objs="$write_errlist_objs ao_write"
832 }
833 if test $HAVE_OSS = yes; then
834         write_errlist_objs="$write_errlist_objs oss_write"
835 fi
836 if test $HAVE_ALSA = yes; then
837         write_errlist_objs="$write_errlist_objs alsa_write"
838 fi
839 write_objs="$write_errlist_objs"
840 AC_SUBST(write_objs, add_dot_o($write_objs))
841 ######################################################################## audioc
842 audioc_errlist_objs="
843         audioc
844         string
845         lsu
846         net
847         fd
848         time
849         version
850 "
851 if test $HAVE_READLINE = yes; then
852         audioc_errlist_objs="$audioc_errlist_objs
853                 buffer_tree
854                 interactive
855                 sched
856         "
857 fi
858 audioc_objs="$audioc_errlist_objs"
859 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
860
861 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
862         [formats supported by para_server and para_afh])
863 AC_SUBST(executables)
864
865 AC_OUTPUT
866 AC_MSG_NOTICE([
867 paraslash configuration:
868 ~~~~~~~~~~~~~~~~~~~~~~~~
869 crypto lib: ${CRYPTOLIB:-[none]}
870 unix socket credentials: $have_ucred
871 readline (interactive CLIs): $HAVE_READLINE
872 id3 version 2 support: $HAVE_ID3TAG
873 faad: $HAVE_FAAD
874 audio format handlers: $audio_format_handlers
875
876 exe: $executables
877 para_server: $build_server
878 para_gui: $build_gui
879 para_mixer: $build_mixer
880 para_client: $build_client
881 para_audiod: $build_audiod
882 ])