3 AC_INIT([paraslash], [m4_esyscmd_s(./GIT-VERSION-GEN)],
4 [maan@tuebingen.mpg.de], [], [https://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 https://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 AC_CHECK_LIB([crypto], [OSSL_PARAM_construct_BN], [HAVE_OSSL_PARAM=yes],
113 [HAVE_OSSL_PARAM=no])
114 test $HAVE_OSSL_PARAM = yes &&
115 AC_DEFINE([HAVE_OSSL_PARAM], [1], [openssl >= 3.0])
116 HAVE_OPENSSL_THREAD_STOP=yes
117 AC_CHECK_DECL([OPENSSL_thread_stop], [],
118 [HAVE_OPENSSL_THREAD_STOP=no],
119 [#include <openssl/crypto.h>])
120 AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
121 [HAVE_OPENSSL_THREAD_STOP=no])
122 test $HAVE_OPENSSL_THREAD_STOP = yes &&
123 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
124 [not available on openssl-1.0])
127 ######################################################################### gcrypt
130 LIB_ARG_WITH([gcrypt], [-lgcrypt])
131 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
132 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
133 LIB_SUBST_FLAGS(gcrypt)
135 ######################################################################### crypto
136 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
137 Force using crypto library "lib". This package requires either
138 openssl or libgcrypt being installed. Possible values for "lib"
139 are thus "openssl" and "gcrypt". If this option is not given,
140 openssl is tried first. If openssl was not found, gcrypt is
143 CRYPTOLIB="$enable_cryptolib"
144 case "$enable_cryptolib" in
146 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
147 crypto_ldflags="$openssl_ldflags"
150 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
151 crypto_ldflags="$gcrypt_ldflags"
155 if test $HAVE_GCRYPT = yes; then
157 crypto_ldflags="$gcrypt_ldflags"
159 if test $HAVE_OPENSSL = yes; then
161 crypto_ldflags="$openssl_ldflags"
165 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
168 AC_SUBST(crypto_ldflags)
170 ########################################################################## iconv
173 AC_SEARCH_LIBS([libiconv_open], [iconv],
174 [iconv_ldflags="$LIBS"],
177 AC_SUBST(iconv_ldflags)
178 AC_MSG_CHECKING([whether iconv needs const char ** cast])
183 size_t iconv(iconv_t cd, const char **inbuf,
184 size_t *inbytesleft, char **outbuf,
185 size_t *outbytesleft);
188 [cast='(const char **)'; msg=yes],
191 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
194 ########################################################################### ucred
195 AC_CHECK_TYPE([struct ucred], [
196 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
198 #include <sys/types.h>
199 #include <sys/socket.h>
201 ################################################################### FNM_EXTMATCH
202 AC_MSG_CHECKING(for extended wildcard pattern matching)
203 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
206 unsigned n = FNM_EXTMATCH;
207 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
208 AC_MSG_RESULT($have_fnm_extmatch)
209 if test $have_fnm_extmatch = yes; then
210 AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
212 ########################################################################### curses
214 LIB_ARG_WITH([curses], [])
216 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
217 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
218 curses_ldflags="$curses_ldflags $LIBS"
219 LIB_SUBST_FLAGS(curses)
221 ########################################################################### ip_mreqn
222 AC_CHECK_TYPE([struct ip_mreqn], [
223 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
228 ########################################################################### ogg
230 LIB_ARG_WITH([ogg], [-logg])
232 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
233 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
234 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
235 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
238 ######################################################################### vorbis
240 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
242 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
243 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
244 LIB_SUBST_FLAGS(vorbis)
246 ######################################################################### speex
248 LIB_ARG_WITH([speex], [-lspeex])
250 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
251 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
252 LIB_SUBST_FLAGS(speex)
254 ######################################################################### opus
256 LIB_ARG_WITH([opus], [-lopus])
258 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
259 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
260 LIB_SUBST_FLAGS(opus)
262 ########################################################################### flac
264 LIB_ARG_WITH([flac], [-lFLAC -lm])
266 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
267 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
268 LIB_SUBST_FLAGS(flac)
271 # some helpers for the ogg container format
272 AS_IF([test "$HAVE_OGG" = 'yes' -a \( \
273 "$HAVE_VORBIS" = 'yes' \
274 -o "$HAVE_SPEEX" = 'yes' \
275 -o "$HAVE_OPUS" = 'yes' \
276 -o "$HAVE_FLAC" = 'yes' \
277 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
278 AC_SUBST([NEED_OGG_OBJECTS])
279 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
280 [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
281 AC_SUBST([NEED_VORBIS_OBJECTS])
282 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
283 [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
284 AC_SUBST([NEED_SPEEX_OBJECTS])
285 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
286 [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
287 AC_SUBST([NEED_OPUS_OBJECTS])
288 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
289 [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
290 AC_SUBST([NEED_FLAC_OBJECTS])
291 ########################################################################### faad
293 LIB_ARG_WITH([faad], [-lfaad])
295 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
296 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
297 LIB_SUBST_FLAGS(faad)
299 ########################################################################### mad
301 LIB_ARG_WITH([mad], [-lmad])
303 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
304 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
307 ###################################################################### libid3tag
309 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
311 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
312 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
313 LIB_SUBST_FLAGS(id3tag)
315 ########################################################################### oss
317 LIB_ARG_WITH([oss], [])
318 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
319 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
322 ########################################################################### alsa
324 LIB_ARG_WITH([alsa], [-lasound])
326 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
327 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
328 LIB_SUBST_FLAGS(alsa)
330 ######################################################################### pthread
332 LIB_ARG_WITH([pthread], [-lpthread])
334 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
335 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
336 LIB_SUBST_FLAGS(pthread)
338 ########################################################################### libao
340 LIB_ARG_WITH([ao], [-lao])
342 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
343 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
346 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
347 [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
348 AC_SUBST([NEED_AO_OBJECTS])
349 ######################################################################## readline
351 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
352 LIB_ARG_WITH([readline], [-lreadline $LIBS])
354 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
355 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
358 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
362 #include <readline/readline.h>
365 LIB_SUBST_FLAGS(readline)
367 ############################################################# libsamplerate
369 LIB_ARG_WITH([samplerate], [-lsamplerate])
371 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
372 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
373 LIB_SUBST_FLAGS(samplerate)
375 ######################################################################### ubsan
376 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
377 [Detect and report undefined behaviour.])],
378 [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
379 AC_SUBST(ENABLE_UBSAN)