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])
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"
18 if test -n "$with_$1_libs"; then
19 $1_ldflags="-L$with_$1_libs $2"
23 LDFLAGS="$LDFLAGS $$1_ldflags"
26 AC_DEFUN([STASH_FLAGS], [
27 OLD_CPPFLAGS="$CPPFLAGS"
28 OLD_LDFLAGS="$LDFLAGS"
32 AC_DEFUN([UNSTASH_FLAGS], [
33 CPPFLAGS="$OLD_CPPFLAGS"
34 LDFLAGS="$OLD_LDFLAGS"
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 AC_SUBST(HAVE_[]m4_toupper([$1]))
46 AC_SUBST(HAVE_[]m4_toupper([$1]))
50 AC_DEFUN([REQUIRE_EXECUTABLE], [
51 AC_PATH_PROG(m4_toupper([$1]), [$1])
52 test -z "$m4_toupper([$1])" && AC_MSG_ERROR(
53 [$1 is required to build this package])
56 AC_USE_SYSTEM_EXTENSIONS
61 REQUIRE_EXECUTABLE([bison])
62 REQUIRE_EXECUTABLE([flex])
63 REQUIRE_EXECUTABLE([m4])
65 executables="recv filter audioc write afh play"
66 ########################################################################### osl
68 LIB_ARG_WITH([osl], [-losl])
70 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
71 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
74 ######################################################################## lopsub
76 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
77 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
79 LIB_ARG_WITH([lopsub], [-llopsub])
80 AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no])
81 AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no])
82 if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([
83 The lopsub library is required to build this software, but
84 the above checks indicate it is not installed on your system.
85 Run the following command to download a copy.
86 git clone git://git.tuebingen.mpg.de/lopsub.git
87 Install the library, then run this configure script again.
90 LIB_SUBST_FLAGS([lopsub])
92 ######################################################################## openssl
95 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
96 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
97 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
98 LIB_SUBST_FLAGS(openssl)
99 if test $HAVE_OPENSSL = yes; then
100 HAVE_RSA_SET0_KEY=yes
101 AC_CHECK_DECL([RSA_set0_key], [], [], [#include <openssl/rsa.h>])
102 AC_CHECK_LIB([crypto], [RSA_set0_key], [], [])
103 if test "$ac_cv_have_decl_RSA_set0_key" != "$ac_cv_lib_crypto_RSA_set0_key"; then
104 AC_MSG_ERROR([openssl header/library mismatch])
106 if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
107 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
110 Old openssl library detected. Support for openssl-1.0 and earlier
111 will be removed in the next major paraslash release. Please upgrade
112 your openssl installation.])
114 HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
115 AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
116 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
117 [#include <openssl/rsa.h>])
118 AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
119 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
120 test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
121 AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
122 [not available on FreeBSD 12])
123 HAVE_OPENSSL_THREAD_STOP=yes
124 AC_CHECK_DECL([OPENSSL_thread_stop], [],
125 [HAVE_OPENSSL_THREAD_STOP=no],
126 [#include <openssl/crypto.h>])
127 AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
128 [HAVE_OPENSSL_THREAD_STOP=no])
129 test $HAVE_OPENSSL_THREAD_STOP = yes &&
130 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
131 [not available on openssl-1.0])
134 ######################################################################### gcrypt
137 LIB_ARG_WITH([gcrypt], [-lgcrypt])
138 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
139 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
140 LIB_SUBST_FLAGS(gcrypt)
142 ######################################################################### crypto
143 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
144 Force using crypto library "lib". This package requires either
145 openssl or libgcrypt being installed. Possible values for "lib"
146 are thus "openssl" and "gcrypt". If this option is not given,
147 openssl is tried first. If openssl was not found, gcrypt is
150 CRYPTOLIB="$enable_cryptolib"
151 case "$enable_cryptolib" in
153 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
154 crypto_ldflags="$openssl_ldflags"
157 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
158 crypto_ldflags="$gcrypt_ldflags"
162 if test $HAVE_GCRYPT = yes; then
164 crypto_ldflags="$gcrypt_ldflags"
166 if test $HAVE_OPENSSL = yes; then
168 crypto_ldflags="$openssl_ldflags"
172 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
175 AC_SUBST(crypto_ldflags)
177 ########################################################################## iconv
180 AC_SEARCH_LIBS([libiconv_open], [iconv],
181 [iconv_ldflags="$LIBS"],
184 AC_SUBST(iconv_ldflags)
185 AC_MSG_CHECKING([whether iconv needs const char ** cast])
190 size_t iconv(iconv_t cd, const char **inbuf,
191 size_t *inbytesleft, char **outbuf,
192 size_t *outbytesleft);
195 [cast='(const char **)'; msg=yes],
198 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
201 ########################################################################### ucred
202 AC_CHECK_TYPE([struct ucred], [
203 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
205 #include <sys/types.h>
206 #include <sys/socket.h>
208 ################################################################### FNM_EXTMATCH
209 AC_MSG_CHECKING(for extended wildcard pattern matching)
210 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
213 unsigned n = FNM_EXTMATCH;
214 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
215 AC_MSG_RESULT($have_fnm_extmatch)
216 if test $have_fnm_extmatch = yes; then
217 AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
219 ########################################################################### curses
221 LIB_ARG_WITH([curses], [])
223 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
224 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
225 curses_ldflags="$curses_ldflags $LIBS"
226 LIB_SUBST_FLAGS(curses)
228 ########################################################################### ip_mreqn
229 AC_CHECK_TYPE([struct ip_mreqn], [
230 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
235 ########################################################################### ogg
237 LIB_ARG_WITH([ogg], [-logg])
239 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
240 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
241 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
242 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
245 ######################################################################### vorbis
247 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
249 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
250 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
251 LIB_SUBST_FLAGS(vorbis)
253 ######################################################################### speex
255 LIB_ARG_WITH([speex], [-lspeex])
257 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
258 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
259 LIB_SUBST_FLAGS(speex)
261 ######################################################################### opus
263 LIB_ARG_WITH([opus], [-lopus])
265 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
266 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
267 LIB_SUBST_FLAGS(opus)
269 ########################################################################### flac
271 LIB_ARG_WITH([flac], [-lFLAC -lm])
273 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
274 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
275 LIB_SUBST_FLAGS(flac)
278 # some helpers for the ogg container format
279 AS_IF([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 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
285 AC_SUBST([NEED_OGG_OBJECTS])
286 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
287 [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
288 AC_SUBST([NEED_VORBIS_OBJECTS])
289 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
290 [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
291 AC_SUBST([NEED_SPEEX_OBJECTS])
292 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
293 [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
294 AC_SUBST([NEED_OPUS_OBJECTS])
295 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
296 [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
297 AC_SUBST([NEED_FLAC_OBJECTS])
298 ########################################################################### faad
300 LIB_ARG_WITH([faad], [-lfaad])
302 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
303 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
304 LIB_SUBST_FLAGS(faad)
306 ########################################################################### mad
308 LIB_ARG_WITH([mad], [-lmad])
310 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
311 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
314 ###################################################################### libid3tag
316 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
318 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
319 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
320 LIB_SUBST_FLAGS(id3tag)
322 ########################################################################### oss
324 LIB_ARG_WITH([oss], [])
325 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
326 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
329 ########################################################################### alsa
331 LIB_ARG_WITH([alsa], [-lasound])
333 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
334 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
335 LIB_SUBST_FLAGS(alsa)
337 ######################################################################### pthread
339 LIB_ARG_WITH([pthread], [-lpthread])
341 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
342 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
343 LIB_SUBST_FLAGS(pthread)
345 ########################################################################### libao
347 LIB_ARG_WITH([ao], [-lao])
349 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
350 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
353 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
354 [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
355 AC_SUBST([NEED_AO_OBJECTS])
356 ######################################################################## readline
358 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
359 LIB_ARG_WITH([readline], [-lreadline $LIBS])
361 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
362 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
365 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
369 #include <readline/readline.h>
372 LIB_SUBST_FLAGS(readline)
374 ############################################################# libsamplerate
376 LIB_ARG_WITH([samplerate], [-lsamplerate])
378 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
379 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
380 LIB_SUBST_FLAGS(samplerate)
382 ######################################################################### ubsan
383 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
384 [Detect and report undefined behaviour.])],
385 [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
386 AC_SUBST(ENABLE_UBSAN)
387 ######################################################### server and upgrade_db
388 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
390 executables="$executables server upgrade_db"
394 ############################################################# client
395 if test -n "$CRYPTOLIB"; then
397 executables="$executables client"
401 ############################################################# audiod
402 if test -n "$CRYPTOLIB"; then
404 executables="$executables audiod"
408 ########################################################################### mixer
409 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
411 executables="$executables mixer"
413 ########################################################################### gui
414 if test $HAVE_CURSES = yes; then
416 executables="$executables gui"
418 ######################################################################## filter
444 AS_IF([test $NEED_VORBIS_OBJECTS = yes],
445 [filter_objs="$filter_objs oggdec_filter"])
446 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
447 [filter_objs="$filter_objs spxdec_filter spx_common"])
448 AS_IF([test $NEED_OPUS_OBJECTS = yes],
449 [filter_objs="$filter_objs opusdec_filter opus_common"])
450 AS_IF([test $NEED_FLAC_OBJECTS = yes],
451 [filter_objs="$filter_objs flacdec_filter"])
452 if test $HAVE_FAAD = yes; then
453 filter_objs="$filter_objs aacdec_filter"
455 if test $HAVE_MAD = yes; then
456 filter_objs="$filter_objs mp3dec_filter"
458 if test $HAVE_SAMPLERATE = yes; then
459 filter_objs="$filter_objs resample_filter check_wav"
461 AC_SUBST(filter_objs, add_dot_o($filter_objs))
462 ########################################################################## recv
483 AS_IF([test $NEED_OGG_OBJECTS = yes], [recv_objs="$recv_objs ogg_afh_common"])
484 AS_IF([test $NEED_VORBIS_OBJECTS = yes], [recv_objs="$recv_objs ogg_afh"])
485 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
486 [recv_objs="$recv_objs spx_afh spx_common"])
487 AS_IF([test $NEED_OPUS_OBJECTS = yes],
488 [recv_objs="$recv_objs opus_afh opus_common"])
489 AS_IF([test $NEED_FLAC_OBJECTS = yes], [recv_objs="$recv_objs flac_afh"])
491 if test $HAVE_FAAD = yes; then
492 recv_objs="$recv_objs aac_afh mp4"
494 AC_SUBST(recv_objs, add_dot_o($recv_objs))
495 ########################################################################### afh
496 audio_format_handlers="mp3 wma"
508 AS_IF([test $NEED_OGG_OBJECTS = yes], [afh_objs="$afh_objs ogg_afh_common"])
509 AS_IF([test $NEED_VORBIS_OBJECTS = yes], [
510 afh_objs="$afh_objs ogg_afh"
511 audio_format_handlers="$audio_format_handlers ogg"
513 AS_IF([test $NEED_SPEEX_OBJECTS = yes], [
514 afh_objs="$afh_objs spx_afh spx_common"
515 audio_format_handlers="$audio_format_handlers spx"
517 AS_IF([test $NEED_OPUS_OBJECTS = yes], [
518 afh_objs="$afh_objs opus_afh opus_common"
519 audio_format_handlers="$audio_format_handlers opus"
521 AS_IF([test $NEED_FLAC_OBJECTS = yes], [
522 afh_objs="$afh_objs flac_afh"
523 audio_format_handlers="$audio_format_handlers flac"
525 if test $HAVE_FAAD = yes; then
526 afh_objs="$afh_objs aac_afh mp4"
527 audio_format_handlers="$audio_format_handlers aac"
529 AC_SUBST(afh_objs, add_dot_o($afh_objs))
530 ########################################################################## play
564 AS_IF([test $NEED_OGG_OBJECTS = yes], [play_objs="$play_objs ogg_afh_common"])
565 AS_IF([test $NEED_VORBIS_OBJECTS = yes],
566 [play_objs="$play_objs oggdec_filter ogg_afh"])
567 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
568 [play_objs="$play_objs spxdec_filter spx_afh spx_common"])
569 AS_IF([test $NEED_OPUS_OBJECTS = yes],
570 [play_objs="$play_objs opusdec_filter opus_afh opus_common"])
571 AS_IF([test $NEED_FLAC_OBJECTS = yes],
572 [play_objs="$play_objs flacdec_filter flac_afh"])
573 if test $HAVE_FAAD = yes; then
574 play_objs="$play_objs aac_afh aacdec_filter mp4"
576 if test $HAVE_MAD = yes; then
577 play_objs="$play_objs mp3dec_filter"
579 if test $HAVE_OSS = yes; then
580 play_objs="$play_objs oss_write"
582 if test $HAVE_ALSA = yes; then
583 play_objs="$play_objs alsa_write"
585 if test $NEED_AO_OBJECTS = yes; then
586 play_objs="$play_objs ao_write"
588 if test $HAVE_READLINE = yes; then
589 play_objs="$play_objs interactive"
591 if test $HAVE_SAMPLERATE = yes; then
592 play_objs="$play_objs resample_filter check_wav"
594 AC_SUBST(play_objs, add_dot_o($play_objs))
595 ######################################################################### write
610 if test $NEED_AO_OBJECTS = yes; then
611 write_objs="$write_objs ao_write"
613 if test $HAVE_OSS = yes; then
614 write_objs="$write_objs oss_write"
616 if test $HAVE_ALSA = yes; then
617 write_objs="$write_objs alsa_write"
619 AC_SUBST(write_objs, add_dot_o($write_objs))
620 ######################################################################## audioc
630 if test $HAVE_READLINE = yes; then
631 audioc_objs="$audioc_objs
637 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
639 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
640 [formats supported by para_server and para_afh])
641 AC_SUBST(executables)
645 paraslash configuration:
646 ~~~~~~~~~~~~~~~~~~~~~~~~
647 crypto lib: ${CRYPTOLIB:-[none]}
648 readline (interactive CLIs): $HAVE_READLINE
649 id3 version 2 support: $HAVE_ID3TAG
651 audio format handlers: $audio_format_handlers
654 para_server: $build_server
656 para_mixer: $build_mixer
657 para_client: $build_client
658 para_audiod: $build_audiod