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([LIB_ARG_WITH], [
9 AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir,
10 [look for $1 headers in dir])])
11 AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir,
12 [look for $1 libraries in dir])])
13 if test -n "$with_$1_headers"; then
14 $1_cppflags="-I$with_$1_headers"
15 CPPFLAGS="$CPPFLAGS $$1_cppflags"
17 if test -n "$with_$1_libs"; then
18 $1_ldflags="-L$with_$1_libs $2"
22 LDFLAGS="$LDFLAGS $$1_ldflags"
25 AC_DEFUN([STASH_FLAGS], [
26 OLD_CPPFLAGS="$CPPFLAGS"
27 OLD_LDFLAGS="$LDFLAGS"
31 AC_DEFUN([UNSTASH_FLAGS], [
32 CPPFLAGS="$OLD_CPPFLAGS"
33 LDFLAGS="$OLD_LDFLAGS"
36 AC_DEFUN([LIB_SUBST_FLAGS], [
37 if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then
38 AC_DEFINE(HAVE_[]m4_toupper([$1]), 1,
39 define to 1 to turn on $1 support)
40 AC_SUBST(HAVE_[]m4_toupper([$1]))
45 AC_SUBST(HAVE_[]m4_toupper([$1]))
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])
55 AC_USE_SYSTEM_EXTENSIONS
60 REQUIRE_EXECUTABLE([bison])
61 REQUIRE_EXECUTABLE([flex])
62 REQUIRE_EXECUTABLE([m4])
64 executables="recv filter audioc write afh play"
65 ########################################################################### osl
67 LIB_ARG_WITH([osl], [-losl])
69 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
70 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
73 ######################################################################## lopsub
75 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
76 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
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.
89 LIB_SUBST_FLAGS([lopsub])
91 ######################################################################## openssl
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
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])
105 if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
106 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
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.])
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])
133 ######################################################################### gcrypt
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)
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
149 CRYPTOLIB="$enable_cryptolib"
150 case "$enable_cryptolib" in
152 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
153 crypto_ldflags="$openssl_ldflags"
156 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
157 crypto_ldflags="$gcrypt_ldflags"
161 if test $HAVE_GCRYPT = yes; then
163 crypto_ldflags="$gcrypt_ldflags"
165 if test $HAVE_OPENSSL = yes; then
167 crypto_ldflags="$openssl_ldflags"
171 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
174 AC_SUBST(crypto_ldflags)
176 ########################################################################## iconv
179 AC_SEARCH_LIBS([libiconv_open], [iconv],
180 [iconv_ldflags="$LIBS"],
183 AC_SUBST(iconv_ldflags)
184 AC_MSG_CHECKING([whether iconv needs const char ** cast])
189 size_t iconv(iconv_t cd, const char **inbuf,
190 size_t *inbytesleft, char **outbuf,
191 size_t *outbytesleft);
194 [cast='(const char **)'; msg=yes],
197 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
200 ########################################################################### ucred
201 AC_CHECK_TYPE([struct ucred], [
202 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
204 #include <sys/types.h>
205 #include <sys/socket.h>
207 ################################################################### FNM_EXTMATCH
208 AC_MSG_CHECKING(for extended wildcard pattern matching)
209 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
212 unsigned n = FNM_EXTMATCH;
213 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
214 AC_MSG_RESULT($have_fnm_extmatch)
215 if test $have_fnm_extmatch = yes; then
216 AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
218 ########################################################################### curses
220 LIB_ARG_WITH([curses], [])
222 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
223 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
224 curses_ldflags="$curses_ldflags $LIBS"
225 LIB_SUBST_FLAGS(curses)
227 ########################################################################### ip_mreqn
228 AC_CHECK_TYPE([struct ip_mreqn], [
229 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
234 ########################################################################### ogg
236 LIB_ARG_WITH([ogg], [-logg])
238 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
240 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
241 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
244 ######################################################################### vorbis
246 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
248 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
249 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
250 LIB_SUBST_FLAGS(vorbis)
252 ######################################################################### speex
254 LIB_ARG_WITH([speex], [-lspeex])
256 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
257 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
258 LIB_SUBST_FLAGS(speex)
260 ######################################################################### opus
262 LIB_ARG_WITH([opus], [-lopus])
264 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
265 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
266 LIB_SUBST_FLAGS(opus)
268 ########################################################################### flac
270 LIB_ARG_WITH([flac], [-lFLAC -lm])
272 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
273 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
274 LIB_SUBST_FLAGS(flac)
277 # some helpers for the ogg container format
278 AS_IF([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 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
284 AC_SUBST([NEED_OGG_OBJECTS])
285 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
286 [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
287 AC_SUBST([NEED_VORBIS_OBJECTS])
288 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
289 [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
290 AC_SUBST([NEED_SPEEX_OBJECTS])
291 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
292 [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
293 AC_SUBST([NEED_OPUS_OBJECTS])
294 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
295 [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
296 AC_SUBST([NEED_FLAC_OBJECTS])
297 ########################################################################### faad
299 LIB_ARG_WITH([faad], [-lfaad])
301 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
302 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
303 LIB_SUBST_FLAGS(faad)
305 ########################################################################### mad
307 LIB_ARG_WITH([mad], [-lmad])
309 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
310 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
313 ###################################################################### libid3tag
315 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
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)
321 ########################################################################### oss
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"], [])
328 ########################################################################### alsa
330 LIB_ARG_WITH([alsa], [-lasound])
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)
336 ######################################################################### pthread
338 LIB_ARG_WITH([pthread], [-lpthread])
340 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
341 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
342 LIB_SUBST_FLAGS(pthread)
344 ########################################################################### libao
346 LIB_ARG_WITH([ao], [-lao])
348 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
349 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
352 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
353 [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
354 AC_SUBST([NEED_AO_OBJECTS])
355 ######################################################################## readline
357 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
358 LIB_ARG_WITH([readline], [-lreadline $LIBS])
360 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
361 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
364 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
368 #include <readline/readline.h>
371 LIB_SUBST_FLAGS(readline)
373 ############################################################# libsamplerate
375 LIB_ARG_WITH([samplerate], [-lsamplerate])
377 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
378 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
379 LIB_SUBST_FLAGS(samplerate)
381 ######################################################################### ubsan
382 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
383 [Detect and report undefined behaviour.])],
384 [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
385 AC_SUBST(ENABLE_UBSAN)
386 ######################################################### server and upgrade_db
387 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
389 executables="$executables server upgrade_db"
393 ############################################################# client
394 if test -n "$CRYPTOLIB"; then
396 executables="$executables client"
400 ############################################################# audiod
401 if test -n "$CRYPTOLIB"; then
403 executables="$executables audiod"
407 ########################################################################### mixer
408 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
410 executables="$executables mixer"
412 ########################################################################### gui
413 if test $HAVE_CURSES = yes; then
415 executables="$executables gui"
417 ######################################################################## audioc
418 AC_SUBST(executables)
422 paraslash configuration:
423 ~~~~~~~~~~~~~~~~~~~~~~~~
424 crypto lib: ${CRYPTOLIB:-[none]}
425 readline (interactive CLIs): $HAVE_READLINE
426 id3 version 2 support: $HAVE_ID3TAG
430 para_server: $build_server
432 para_mixer: $build_mixer
433 para_client: $build_client
434 para_audiod: $build_audiod