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"
431 AC_SUBST(gui_objs, add_dot_o($gui_objs))
434 AC_MSG_WARN([no curses lib, cannot build para_gui])
436 ######################################################################## filter
462 AS_IF([test $NEED_VORBIS_OBJECTS = yes],
463 [filter_objs="$filter_objs oggdec_filter"])
464 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
465 [filter_objs="$filter_objs spxdec_filter spx_common"])
466 AS_IF([test $NEED_OPUS_OBJECTS = yes],
467 [filter_objs="$filter_objs opusdec_filter opus_common"])
468 AS_IF([test $NEED_FLAC_OBJECTS = yes],
469 [filter_objs="$filter_objs flacdec_filter"])
470 if test $HAVE_FAAD = yes; then
471 filter_objs="$filter_objs aacdec_filter"
473 if test $HAVE_MAD = yes; then
474 filter_objs="$filter_objs mp3dec_filter"
476 if test $HAVE_SAMPLERATE = yes; then
477 filter_objs="$filter_objs resample_filter check_wav"
479 AC_SUBST(filter_objs, add_dot_o($filter_objs))
480 ########################################################################## recv
501 AS_IF([test $NEED_OGG_OBJECTS = yes], [recv_objs="$recv_objs ogg_afh_common"])
502 AS_IF([test $NEED_VORBIS_OBJECTS = yes], [recv_objs="$recv_objs ogg_afh"])
503 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
504 [recv_objs="$recv_objs spx_afh spx_common"])
505 AS_IF([test $NEED_OPUS_OBJECTS = yes],
506 [recv_objs="$recv_objs opus_afh opus_common"])
507 AS_IF([test $NEED_FLAC_OBJECTS = yes], [recv_objs="$recv_objs flac_afh"])
509 if test $HAVE_FAAD = yes; then
510 recv_objs="$recv_objs aac_afh mp4"
512 AC_SUBST(recv_objs, add_dot_o($recv_objs))
513 ########################################################################### afh
514 audio_format_handlers="mp3 wma"
526 AS_IF([test $NEED_OGG_OBJECTS = yes], [afh_objs="$afh_objs ogg_afh_common"])
527 AS_IF([test $NEED_VORBIS_OBJECTS = yes], [
528 afh_objs="$afh_objs ogg_afh"
529 audio_format_handlers="$audio_format_handlers ogg"
531 AS_IF([test $NEED_SPEEX_OBJECTS = yes], [
532 afh_objs="$afh_objs spx_afh spx_common"
533 audio_format_handlers="$audio_format_handlers spx"
535 AS_IF([test $NEED_OPUS_OBJECTS = yes], [
536 afh_objs="$afh_objs opus_afh opus_common"
537 audio_format_handlers="$audio_format_handlers opus"
539 AS_IF([test $NEED_FLAC_OBJECTS = yes], [
540 afh_objs="$afh_objs flac_afh"
541 audio_format_handlers="$audio_format_handlers flac"
543 if test $HAVE_FAAD = yes; then
544 afh_objs="$afh_objs aac_afh mp4"
545 audio_format_handlers="$audio_format_handlers aac"
547 AC_SUBST(afh_objs, add_dot_o($afh_objs))
548 ########################################################################## play
582 AS_IF([test $NEED_OGG_OBJECTS = yes], [play_objs="$play_objs ogg_afh_common"])
583 AS_IF([test $NEED_VORBIS_OBJECTS = yes],
584 [play_objs="$play_objs oggdec_filter ogg_afh"])
585 AS_IF([test $NEED_SPEEX_OBJECTS = yes],
586 [play_objs="$play_objs spxdec_filter spx_afh spx_common"])
587 AS_IF([test $NEED_OPUS_OBJECTS = yes],
588 [play_objs="$play_objs opusdec_filter opus_afh opus_common"])
589 AS_IF([test $NEED_FLAC_OBJECTS = yes],
590 [play_objs="$play_objs flacdec_filter flac_afh"])
591 if test $HAVE_FAAD = yes; then
592 play_objs="$play_objs aac_afh aacdec_filter mp4"
594 if test $HAVE_MAD = yes; then
595 play_objs="$play_objs mp3dec_filter"
597 if test $HAVE_OSS = yes; then
598 play_objs="$play_objs oss_write"
600 if test $HAVE_ALSA = yes; then
601 play_objs="$play_objs alsa_write"
603 if test $NEED_AO_OBJECTS = yes; then
604 play_objs="$play_objs ao_write"
606 if test $HAVE_READLINE = yes; then
607 play_objs="$play_objs interactive"
609 if test $HAVE_SAMPLERATE = yes; then
610 play_objs="$play_objs resample_filter check_wav"
612 AC_SUBST(play_objs, add_dot_o($play_objs))
613 ######################################################################### write
628 if test $NEED_AO_OBJECTS = yes; then
629 write_objs="$write_objs ao_write"
631 if test $HAVE_OSS = yes; then
632 write_objs="$write_objs oss_write"
634 if test $HAVE_ALSA = yes; then
635 write_objs="$write_objs alsa_write"
637 AC_SUBST(write_objs, add_dot_o($write_objs))
638 ######################################################################## audioc
648 if test $HAVE_READLINE = yes; then
649 audioc_objs="$audioc_objs
655 AC_SUBST(audioc_objs, add_dot_o($audioc_objs))
657 AC_DEFINE_UNQUOTED(AUDIO_FORMAT_HANDLERS, "$audio_format_handlers",
658 [formats supported by para_server and para_afh])
659 AC_SUBST(executables)
663 paraslash configuration:
664 ~~~~~~~~~~~~~~~~~~~~~~~~
665 crypto lib: ${CRYPTOLIB:-[none]}
666 readline (interactive CLIs): $HAVE_READLINE
667 id3 version 2 support: $HAVE_ID3TAG
669 audio format handlers: $audio_format_handlers
672 para_server: $build_server
674 para_mixer: $build_mixer
675 para_client: $build_client
676 para_audiod: $build_audiod