]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
4f9f4b54a0fadbd33fe0cc7b8d138a9c216fa999
[paraslash.git] / configure.ac
1 AC_PREREQ([2.61])
2
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])
6
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"
16         fi
17         if test -n "$with_$1_libs"; then
18                 $1_ldflags="-L$with_$1_libs $2"
19         else
20                 $1_ldflags="$2"
21         fi
22         LDFLAGS="$LDFLAGS $$1_ldflags"
23 ])
24
25 AC_DEFUN([STASH_FLAGS], [
26         OLD_CPPFLAGS="$CPPFLAGS"
27         OLD_LDFLAGS="$LDFLAGS"
28         OLD_LIBS="$LIBS"
29 ])
30
31 AC_DEFUN([UNSTASH_FLAGS], [
32         CPPFLAGS="$OLD_CPPFLAGS"
33         LDFLAGS="$OLD_LDFLAGS"
34         LIBS="$OLD_LIBS"
35 ])
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]))
41         else
42                 $1_cppflags=
43                 $1_ldflags=
44         fi
45         AC_SUBST(HAVE_[]m4_toupper([$1]))
46         AC_SUBST($1_cppflags)
47         AC_SUBST($1_ldflags)
48 ])
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])
53 ])
54
55 AC_USE_SYSTEM_EXTENSIONS
56 AC_C_BIGENDIAN()
57 AC_PROG_CC
58 AC_PROG_CPP
59
60 REQUIRE_EXECUTABLE([bison])
61 REQUIRE_EXECUTABLE([flex])
62 REQUIRE_EXECUTABLE([m4])
63
64 ########################################################################### osl
65 STASH_FLAGS
66 LIB_ARG_WITH([osl], [-losl])
67 HAVE_OSL=yes
68 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
69 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
70 LIB_SUBST_FLAGS(osl)
71 UNSTASH_FLAGS
72 ######################################################################## lopsub
73 HAVE_LOPSUB=yes
74 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
75 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
76 STASH_FLAGS
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.
86 ])
87 fi
88 LIB_SUBST_FLAGS([lopsub])
89 UNSTASH_FLAGS
90 ######################################################################## openssl
91 STASH_FLAGS
92 HAVE_OPENSSL=yes
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
98         HAVE_RSA_SET0_KEY=yes
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])
103         fi
104         if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
105                 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
106         else
107                 AC_MSG_WARN([
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.])
111         fi
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])
130 fi
131 UNSTASH_FLAGS
132 ######################################################################### gcrypt
133 STASH_FLAGS
134 HAVE_GCRYPT=yes
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)
139 UNSTASH_FLAGS
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
146         tried next.])])
147
148 CRYPTOLIB="$enable_cryptolib"
149 case "$enable_cryptolib" in
150 "openssl")
151         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
152         crypto_ldflags="$openssl_ldflags"
153         ;;
154 "gcrypt")
155         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
156         crypto_ldflags="$gcrypt_ldflags"
157         ;;
158 "")
159         crypto_ldflags=
160         if test $HAVE_GCRYPT = yes; then
161                 CRYPTOLIB=gcrypt
162                 crypto_ldflags="$gcrypt_ldflags"
163         fi
164         if test $HAVE_OPENSSL = yes; then
165                 CRYPTOLIB=openssl
166                 crypto_ldflags="$openssl_ldflags"
167         fi
168         ;;
169 *)
170         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
171         ;;
172 esac
173 AC_SUBST(crypto_ldflags)
174 AC_SUBST(CRYPTOLIB)
175 ########################################################################## iconv
176 STASH_FLAGS
177 LIBS=
178 AC_SEARCH_LIBS([libiconv_open], [iconv],
179         [iconv_ldflags="$LIBS"],
180         []
181 )
182 AC_SUBST(iconv_ldflags)
183 AC_MSG_CHECKING([whether iconv needs const char ** cast])
184 AC_COMPILE_IFELSE([
185         AC_LANG_PROGRAM([
186                 #include <iconv.h>
187         ],[
188                 size_t iconv(iconv_t cd, const char **inbuf,
189                         size_t *inbytesleft, char **outbuf,
190                         size_t *outbytesleft);
191         ])
192 ],
193         [cast='(const char **)'; msg=yes],
194         [cast=; msg=no]
195 )
196 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
197 AC_MSG_RESULT($msg)
198 UNSTASH_FLAGS
199 ########################################################################### ucred
200 AC_CHECK_TYPE([struct ucred], [
201         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
202 ], [], [
203         #include <sys/types.h>
204         #include <sys/socket.h>
205 ])
206 ################################################################### FNM_EXTMATCH
207 AC_MSG_CHECKING(for extended wildcard pattern matching)
208 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
209         #include <fnmatch.h>
210 ]], [[
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)
216 fi
217 ########################################################################### curses
218 STASH_FLAGS
219 LIB_ARG_WITH([curses], [])
220 HAVE_CURSES=yes
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)
225 UNSTASH_FLAGS
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)
229 ], [], [
230         #include <netdb.h>
231         #include <net/if.h>
232 ])
233 ########################################################################### ogg
234 STASH_FLAGS
235 LIB_ARG_WITH([ogg], [-logg])
236 HAVE_OGG=yes
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])])
241 LIB_SUBST_FLAGS(ogg)
242 UNSTASH_FLAGS
243 ######################################################################### vorbis
244 STASH_FLAGS
245 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
246 HAVE_VORBIS=yes
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)
250 UNSTASH_FLAGS
251 ######################################################################### speex
252 STASH_FLAGS
253 LIB_ARG_WITH([speex], [-lspeex])
254 HAVE_SPEEX=yes
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)
258 UNSTASH_FLAGS
259 ######################################################################### opus
260 STASH_FLAGS
261 LIB_ARG_WITH([opus], [-lopus])
262 HAVE_OPUS=yes
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)
266 UNSTASH_FLAGS
267 ########################################################################### flac
268 STASH_FLAGS
269 LIB_ARG_WITH([flac], [-lFLAC -lm])
270 HAVE_FLAC=yes
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)
274 UNSTASH_FLAGS
275
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
297 STASH_FLAGS
298 LIB_ARG_WITH([faad], [-lfaad])
299 HAVE_FAAD=yes
300 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
301 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
302 LIB_SUBST_FLAGS(faad)
303 UNSTASH_FLAGS
304 ########################################################################### mad
305 STASH_FLAGS
306 LIB_ARG_WITH([mad], [-lmad])
307 HAVE_MAD=yes
308 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
309 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
310 LIB_SUBST_FLAGS(mad)
311 UNSTASH_FLAGS
312 ###################################################################### libid3tag
313 STASH_FLAGS
314 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
315 HAVE_ID3TAG=yes
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)
319 UNSTASH_FLAGS
320 ########################################################################### oss
321 STASH_FLAGS
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"], [])
325 LIB_SUBST_FLAGS(oss)
326 UNSTASH_FLAGS
327 ########################################################################### alsa
328 STASH_FLAGS
329 LIB_ARG_WITH([alsa], [-lasound])
330 HAVE_ALSA=yes
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)
334 UNSTASH_FLAGS
335 ######################################################################### pthread
336 STASH_FLAGS
337 LIB_ARG_WITH([pthread], [-lpthread])
338 HAVE_PTHREAD=yes
339 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
340 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
341 LIB_SUBST_FLAGS(pthread)
342 UNSTASH_FLAGS
343 ########################################################################### libao
344 STASH_FLAGS
345 LIB_ARG_WITH([ao], [-lao])
346 HAVE_AO=yes
347 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
348 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
349 LIB_SUBST_FLAGS(ao)
350 UNSTASH_FLAGS
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
355 STASH_FLAGS
356 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
357 LIB_ARG_WITH([readline], [-lreadline $LIBS])
358 HAVE_READLINE=yes
359 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
360 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
361 AC_CHECK_DECL(
362         [rl_free_keymap],
363         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
364         [],
365         [
366                 #include <stdio.h>
367                 #include <readline/readline.h>
368         ]
369 )
370 LIB_SUBST_FLAGS(readline)
371 UNSTASH_FLAGS
372 ############################################################# libsamplerate
373 STASH_FLAGS
374 LIB_ARG_WITH([samplerate], [-lsamplerate])
375 HAVE_SAMPLERATE=yes
376 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
377 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
378 LIB_SUBST_FLAGS(samplerate)
379 UNSTASH_FLAGS
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)
385
386 AC_OUTPUT