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_OPENSSL_THREAD_STOP=yes
113 AC_CHECK_DECL([OPENSSL_thread_stop], [],
114 [HAVE_OPENSSL_THREAD_STOP=no],
115 [#include <openssl/crypto.h>])
116 AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
117 [HAVE_OPENSSL_THREAD_STOP=no])
118 test $HAVE_OPENSSL_THREAD_STOP = yes &&
119 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
120 [not available on openssl-1.0])
123 ######################################################################### gcrypt
126 LIB_ARG_WITH([gcrypt], [-lgcrypt])
127 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
128 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
129 LIB_SUBST_FLAGS(gcrypt)
131 ######################################################################### crypto
132 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
133 Force using crypto library "lib". This package requires either
134 openssl or libgcrypt being installed. Possible values for "lib"
135 are thus "openssl" and "gcrypt". If this option is not given,
136 openssl is tried first. If openssl was not found, gcrypt is
139 CRYPTOLIB="$enable_cryptolib"
140 case "$enable_cryptolib" in
142 test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
143 crypto_ldflags="$openssl_ldflags"
146 test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
147 crypto_ldflags="$gcrypt_ldflags"
151 if test $HAVE_GCRYPT = yes; then
153 crypto_ldflags="$gcrypt_ldflags"
155 if test $HAVE_OPENSSL = yes; then
157 crypto_ldflags="$openssl_ldflags"
161 AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
164 AC_SUBST(crypto_ldflags)
166 ########################################################################## iconv
169 AC_SEARCH_LIBS([libiconv_open], [iconv],
170 [iconv_ldflags="$LIBS"],
173 AC_SUBST(iconv_ldflags)
174 AC_MSG_CHECKING([whether iconv needs const char ** cast])
179 size_t iconv(iconv_t cd, const char **inbuf,
180 size_t *inbytesleft, char **outbuf,
181 size_t *outbytesleft);
184 [cast='(const char **)'; msg=yes],
187 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
190 ########################################################################### ucred
191 AC_CHECK_TYPE([struct ucred], [
192 AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
194 #include <sys/types.h>
195 #include <sys/socket.h>
197 ################################################################### FNM_EXTMATCH
198 AC_MSG_CHECKING(for extended wildcard pattern matching)
199 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
202 unsigned n = FNM_EXTMATCH;
203 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
204 AC_MSG_RESULT($have_fnm_extmatch)
205 if test $have_fnm_extmatch = yes; then
206 AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
208 ########################################################################### curses
210 LIB_ARG_WITH([curses], [])
212 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
213 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
214 curses_ldflags="$curses_ldflags $LIBS"
215 LIB_SUBST_FLAGS(curses)
217 ########################################################################### ip_mreqn
218 AC_CHECK_TYPE([struct ip_mreqn], [
219 AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
224 ########################################################################### ogg
226 LIB_ARG_WITH([ogg], [-logg])
228 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
229 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
230 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
231 AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
234 ######################################################################### vorbis
236 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
238 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
239 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
240 LIB_SUBST_FLAGS(vorbis)
242 ######################################################################### speex
244 LIB_ARG_WITH([speex], [-lspeex])
246 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
247 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
248 LIB_SUBST_FLAGS(speex)
250 ######################################################################### opus
252 LIB_ARG_WITH([opus], [-lopus])
254 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
255 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
256 LIB_SUBST_FLAGS(opus)
258 ########################################################################### flac
260 LIB_ARG_WITH([flac], [-lFLAC -lm])
262 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
263 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
264 LIB_SUBST_FLAGS(flac)
267 # some helpers for the ogg container format
268 AS_IF([test "$HAVE_OGG" = 'yes' -a \( \
269 "$HAVE_VORBIS" = 'yes' \
270 -o "$HAVE_SPEEX" = 'yes' \
271 -o "$HAVE_OPUS" = 'yes' \
272 -o "$HAVE_FLAC" = 'yes' \
273 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
274 AC_SUBST([NEED_OGG_OBJECTS])
275 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
276 [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
277 AC_SUBST([NEED_VORBIS_OBJECTS])
278 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
279 [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
280 AC_SUBST([NEED_SPEEX_OBJECTS])
281 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
282 [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
283 AC_SUBST([NEED_OPUS_OBJECTS])
284 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
285 [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
286 AC_SUBST([NEED_FLAC_OBJECTS])
287 ########################################################################### faad
289 LIB_ARG_WITH([faad], [-lfaad])
291 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
292 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
293 LIB_SUBST_FLAGS(faad)
295 ########################################################################### mad
297 LIB_ARG_WITH([mad], [-lmad])
299 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
300 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
303 ###################################################################### libid3tag
305 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
307 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
308 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
309 LIB_SUBST_FLAGS(id3tag)
311 ########################################################################### oss
313 LIB_ARG_WITH([oss], [])
314 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
315 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
318 ########################################################################### alsa
320 LIB_ARG_WITH([alsa], [-lasound])
322 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
323 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
324 LIB_SUBST_FLAGS(alsa)
326 ######################################################################### pthread
328 LIB_ARG_WITH([pthread], [-lpthread])
330 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
331 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
332 LIB_SUBST_FLAGS(pthread)
334 ########################################################################### libao
336 LIB_ARG_WITH([ao], [-lao])
338 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
339 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
342 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
343 [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
344 AC_SUBST([NEED_AO_OBJECTS])
345 ######################################################################## readline
347 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
348 LIB_ARG_WITH([readline], [-lreadline $LIBS])
350 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
351 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
354 [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
358 #include <readline/readline.h>
361 LIB_SUBST_FLAGS(readline)
363 ############################################################# libsamplerate
365 LIB_ARG_WITH([samplerate], [-lsamplerate])
367 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
368 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
369 LIB_SUBST_FLAGS(samplerate)
371 ######################################################################### ubsan
372 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
373 [Detect and report undefined behaviour.])],
374 [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
375 AC_SUBST(ENABLE_UBSAN)