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 ########################################################################### osl
66 LIB_ARG_WITH([osl], [-losl])
68 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
69 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
72 ######################################################################## lopsub
74 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
75 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
77 LIB_ARG_WITH([lopsub], [-llopsub])
78 AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no])
79 AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no])
80 if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([
81 The lopsub library is required to build this software, but
82 the above checks indicate it is not installed on your system.
83 Run the following command to download a copy.
84 git clone git://git.tuebingen.mpg.de/lopsub.git
85 Install the library, then run this configure script again.
88 LIB_SUBST_FLAGS([lopsub])
90 ######################################################################## openssl
93 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
94 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
95 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
96 LIB_SUBST_FLAGS(openssl)
97 if test $HAVE_OPENSSL = yes; then
99 AC_CHECK_DECL([RSA_set0_key], [], [], [#include <openssl/rsa.h>])
100 AC_CHECK_LIB([crypto], [RSA_set0_key], [], [])
101 if test "$ac_cv_have_decl_RSA_set0_key" != "$ac_cv_lib_crypto_RSA_set0_key"; then
102 AC_MSG_ERROR([openssl header/library mismatch])
104 if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
105 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
108 Old openssl library detected. Support for openssl-1.0 and earlier
109 will be removed in the next major paraslash release. Please upgrade
110 your openssl installation.])
112 HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
113 AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
114 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
115 [#include <openssl/rsa.h>])
116 AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
117 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
118 test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
119 AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
120 [not available on FreeBSD 12])
121 HAVE_OPENSSL_THREAD_STOP=yes
122 AC_CHECK_DECL([OPENSSL_thread_stop], [],
123 [HAVE_OPENSSL_THREAD_STOP=no],
124 [#include <openssl/crypto.h>])
125 AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
126 [HAVE_OPENSSL_THREAD_STOP=no])
127 test $HAVE_OPENSSL_THREAD_STOP = yes &&
128 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
129 [not available on openssl-1.0])
132 ######################################################################### gcrypt
135 LIB_ARG_WITH([gcrypt], [-lgcrypt])
136 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
137 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
138 LIB_SUBST_FLAGS(gcrypt)
140 ######################################################################### crypto
141 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
142 Force using crypto library "lib". This package requires either
143 openssl or libgcrypt being installed. Possible values for "lib"
144 are thus "openssl" and "gcrypt". If this option is not given,
145 openssl is tried first. If openssl was not found, gcrypt is
148 CRYPTOLIB="$enable_cryptolib"
149 case "$enable_cryptolib" in
151 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
152 crypto_ldflags="$openssl_ldflags"
155 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
156 crypto_ldflags="$gcrypt_ldflags"
160 if test $HAVE_GCRYPT = yes; then
162 crypto_ldflags="$gcrypt_ldflags"
164 if test $HAVE_OPENSSL = yes; then
166 crypto_ldflags="$openssl_ldflags"
170 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
173 AC_SUBST(crypto_ldflags)
175 ########################################################################## iconv
178 AC_SEARCH_LIBS([libiconv_open], [iconv],
179 [iconv_ldflags="$LIBS"],
182 AC_SUBST(iconv_ldflags)
183 AC_MSG_CHECKING([whether iconv needs const char ** cast])
188 size_t iconv(iconv_t cd, const char **inbuf,
189 size_t *inbytesleft, char **outbuf,
190 size_t *outbytesleft);
193 [cast='(const char **)'; msg=yes],
196 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
199 ########################################################################### ucred
200 AC_CHECK_TYPE([struct ucred], [
201 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
203 #include <sys/types.h>
204 #include <sys/socket.h>
206 ################################################################### FNM_EXTMATCH
207 AC_MSG_CHECKING(for extended wildcard pattern matching)
208 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
211 unsigned n = FNM_EXTMATCH;
212 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
213 AC_MSG_RESULT($have_fnm_extmatch)
214 if test $have_fnm_extmatch = yes; then
215 AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
217 ########################################################################### curses
219 LIB_ARG_WITH([curses], [])
221 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
222 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
223 curses_ldflags="$curses_ldflags $LIBS"
224 LIB_SUBST_FLAGS(curses)
226 ########################################################################### ip_mreqn
227 AC_CHECK_TYPE([struct ip_mreqn], [
228 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
233 ########################################################################### ogg
235 LIB_ARG_WITH([ogg], [-logg])
237 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
238 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
240 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
243 ######################################################################### vorbis
245 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
247 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
248 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
249 LIB_SUBST_FLAGS(vorbis)
251 ######################################################################### speex
253 LIB_ARG_WITH([speex], [-lspeex])
255 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
256 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
257 LIB_SUBST_FLAGS(speex)
259 ######################################################################### opus
261 LIB_ARG_WITH([opus], [-lopus])
263 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
264 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
265 LIB_SUBST_FLAGS(opus)
267 ########################################################################### flac
269 LIB_ARG_WITH([flac], [-lFLAC -lm])
271 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
272 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
273 LIB_SUBST_FLAGS(flac)
276 # some helpers for the ogg container format
277 AS_IF([test "$HAVE_OGG" = 'yes' -a \( \
278 "$HAVE_VORBIS" = 'yes' \
279 -o "$HAVE_SPEEX" = 'yes' \
280 -o "$HAVE_OPUS" = 'yes' \
281 -o "$HAVE_FLAC" = 'yes' \
282 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
283 AC_SUBST([NEED_OGG_OBJECTS])
284 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
285 [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
286 AC_SUBST([NEED_VORBIS_OBJECTS])
287 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
288 [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
289 AC_SUBST([NEED_SPEEX_OBJECTS])
290 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
291 [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
292 AC_SUBST([NEED_OPUS_OBJECTS])
293 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
294 [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
295 AC_SUBST([NEED_FLAC_OBJECTS])
296 ########################################################################### faad
298 LIB_ARG_WITH([faad], [-lfaad])
300 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
301 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
302 LIB_SUBST_FLAGS(faad)
304 ########################################################################### mad
306 LIB_ARG_WITH([mad], [-lmad])
308 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
309 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
312 ###################################################################### libid3tag
314 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
316 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
317 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
318 LIB_SUBST_FLAGS(id3tag)
320 ########################################################################### oss
322 LIB_ARG_WITH([oss], [])
323 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
324 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
327 ########################################################################### alsa
329 LIB_ARG_WITH([alsa], [-lasound])
331 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
332 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
333 LIB_SUBST_FLAGS(alsa)
335 ######################################################################### pthread
337 LIB_ARG_WITH([pthread], [-lpthread])
339 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
340 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
341 LIB_SUBST_FLAGS(pthread)
343 ########################################################################### libao
345 LIB_ARG_WITH([ao], [-lao])
347 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
348 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
351 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
352 [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
353 AC_SUBST([NEED_AO_OBJECTS])
354 ######################################################################## readline
356 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
357 LIB_ARG_WITH([readline], [-lreadline $LIBS])
359 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
360 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
363 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
367 #include <readline/readline.h>
370 LIB_SUBST_FLAGS(readline)
372 ############################################################# libsamplerate
374 LIB_ARG_WITH([samplerate], [-lsamplerate])
376 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
377 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
378 LIB_SUBST_FLAGS(samplerate)
380 ######################################################################### ubsan
381 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
382 [Detect and report undefined behaviour.])],
383 [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
384 AC_SUBST(ENABLE_UBSAN)