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