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 ########################################################################### afh
463 audio_format_handlers="mp3 wma"
475 AS_IF([test $NEED_OGG_OBJECTS = yes], [afh_objs="$afh_objs ogg_afh_common"])
476 AS_IF([test $NEED_VORBIS_OBJECTS = yes], [
477 afh_objs="$afh_objs ogg_afh"
478 audio_format_handlers="$audio_format_handlers ogg"
480 AS_IF([test $NEED_SPEEX_OBJECTS = yes], [
481 afh_objs="$afh_objs spx_afh spx_common"
482 audio_format_handlers="$audio_format_handlers spx"
484 AS_IF([test $NEED_OPUS_OBJECTS = yes], [
485 afh_objs="$afh_objs opus_afh opus_common"
486 audio_format_handlers="$audio_format_handlers opus"
488 AS_IF([test $NEED_FLAC_OBJECTS = yes], [
489 afh_objs="$afh_objs flac_afh"
490 audio_format_handlers="$audio_format_handlers flac"
492 if test $HAVE_FAAD = yes; then
493 afh_objs="$afh_objs aac_afh mp4"
494 audio_format_handlers="$audio_format_handlers aac"
496 AC_SUBST(afh_objs, add_dot_o($afh_objs))
497 ########################################################################## play
531 AS_IF([test $NEED_OGG_OBJECTS = yes], [play_objs="$play_objs ogg_afh_common"])
532 AS_IF([test $NEED_VORBIS_OBJECTS = yes],
533 [play_objs="$play_objs oggdec_filter ogg_afh"])
534 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
535 [play_objs="$play_objs spxdec_filter spx_afh spx_common"])
536 AS_IF([test $NEED_OPUS_OBJECTS = yes],
537 [play_objs="$play_objs opusdec_filter opus_afh opus_common"])
538 AS_IF([test $NEED_FLAC_OBJECTS = yes],
539 [play_objs="$play_objs flacdec_filter flac_afh"])
540 if test $HAVE_FAAD = yes; then
541 play_objs="$play_objs aac_afh aacdec_filter mp4"
543 if test $HAVE_MAD = yes; then
544 play_objs="$play_objs mp3dec_filter"
546 if test $HAVE_OSS = yes; then
547 play_objs="$play_objs oss_write"
549 if test $HAVE_ALSA = yes; then
550 play_objs="$play_objs alsa_write"
552 if test $NEED_AO_OBJECTS = yes; then
553 play_objs="$play_objs ao_write"
555 if test $HAVE_READLINE = yes; then
556 play_objs="$play_objs interactive"
558 if test $HAVE_SAMPLERATE = yes; then
559 play_objs="$play_objs resample_filter check_wav"
561 AC_SUBST(play_objs, add_dot_o($play_objs))
562 ######################################################################### write
577 if test $NEED_AO_OBJECTS = yes; then
578 write_objs="$write_objs ao_write"
580 if test $HAVE_OSS = yes; then
581 write_objs="$write_objs oss_write"
583 if test $HAVE_ALSA = yes; then
584 write_objs="$write_objs alsa_write"
586 AC_SUBST(write_objs, add_dot_o($write_objs))
587 ######################################################################## audioc
597 if test $HAVE_READLINE = yes; then
598 audioc_objs="$audioc_objs
604 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
606 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
607 [formats supported by para_server and para_afh])
608 AC_SUBST(executables)
612 paraslash configuration:
613 ~~~~~~~~~~~~~~~~~~~~~~~~
614 crypto lib: ${CRYPTOLIB:-[none]}
615 readline (interactive CLIs): $HAVE_READLINE
616 id3 version 2 support: $HAVE_ID3TAG
618 audio format handlers: $audio_format_handlers
621 para_server: $build_server
623 para_mixer: $build_mixer
624 para_client: $build_client
625 para_audiod: $build_audiod