]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
Merge topic branch t/btr into pu
[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_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])
121 fi
122 UNSTASH_FLAGS
123 ######################################################################### gcrypt
124 STASH_FLAGS
125 HAVE_GCRYPT=yes
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)
130 UNSTASH_FLAGS
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
137         tried next.])])
138
139 CRYPTOLIB="$enable_cryptolib"
140 case "$enable_cryptolib" in
141 "openssl")
142         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
143         crypto_ldflags="$openssl_ldflags"
144         ;;
145 "gcrypt")
146         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
147         crypto_ldflags="$gcrypt_ldflags"
148         ;;
149 "")
150         crypto_ldflags=
151         if test $HAVE_GCRYPT = yes; then
152                 CRYPTOLIB=gcrypt
153                 crypto_ldflags="$gcrypt_ldflags"
154         fi
155         if test $HAVE_OPENSSL = yes; then
156                 CRYPTOLIB=openssl
157                 crypto_ldflags="$openssl_ldflags"
158         fi
159         ;;
160 *)
161         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
162         ;;
163 esac
164 AC_SUBST(crypto_ldflags)
165 AC_SUBST(CRYPTOLIB)
166 ########################################################################## iconv
167 STASH_FLAGS
168 LIBS=
169 AC_SEARCH_LIBS([libiconv_open], [iconv],
170         [iconv_ldflags="$LIBS"],
171         []
172 )
173 AC_SUBST(iconv_ldflags)
174 AC_MSG_CHECKING([whether iconv needs const char ** cast])
175 AC_COMPILE_IFELSE([
176         AC_LANG_PROGRAM([
177                 #include <iconv.h>
178         ],[
179                 size_t iconv(iconv_t cd, const char **inbuf,
180                         size_t *inbytesleft, char **outbuf,
181                         size_t *outbytesleft);
182         ])
183 ],
184         [cast='(const char **)'; msg=yes],
185         [cast=; msg=no]
186 )
187 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
188 AC_MSG_RESULT($msg)
189 UNSTASH_FLAGS
190 ########################################################################### ucred
191 AC_CHECK_TYPE([struct ucred], [
192         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
193 ], [], [
194         #include <sys/types.h>
195         #include <sys/socket.h>
196 ])
197 ################################################################### FNM_EXTMATCH
198 AC_MSG_CHECKING(for extended wildcard pattern matching)
199 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
200         #include <fnmatch.h>
201 ]], [[
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)
207 fi
208 ########################################################################### curses
209 STASH_FLAGS
210 LIB_ARG_WITH([curses], [])
211 HAVE_CURSES=yes
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)
216 UNSTASH_FLAGS
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)
220 ], [], [
221         #include <netdb.h>
222         #include <net/if.h>
223 ])
224 ########################################################################### ogg
225 STASH_FLAGS
226 LIB_ARG_WITH([ogg], [-logg])
227 HAVE_OGG=yes
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])])
232 LIB_SUBST_FLAGS(ogg)
233 UNSTASH_FLAGS
234 ######################################################################### vorbis
235 STASH_FLAGS
236 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
237 HAVE_VORBIS=yes
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)
241 UNSTASH_FLAGS
242 ######################################################################### speex
243 STASH_FLAGS
244 LIB_ARG_WITH([speex], [-lspeex])
245 HAVE_SPEEX=yes
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)
249 UNSTASH_FLAGS
250 ######################################################################### opus
251 STASH_FLAGS
252 LIB_ARG_WITH([opus], [-lopus])
253 HAVE_OPUS=yes
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)
257 UNSTASH_FLAGS
258 ########################################################################### flac
259 STASH_FLAGS
260 LIB_ARG_WITH([flac], [-lFLAC -lm])
261 HAVE_FLAC=yes
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)
265 UNSTASH_FLAGS
266
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
288 STASH_FLAGS
289 LIB_ARG_WITH([faad], [-lfaad])
290 HAVE_FAAD=yes
291 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
292 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
293 LIB_SUBST_FLAGS(faad)
294 UNSTASH_FLAGS
295 ########################################################################### mad
296 STASH_FLAGS
297 LIB_ARG_WITH([mad], [-lmad])
298 HAVE_MAD=yes
299 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
300 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
301 LIB_SUBST_FLAGS(mad)
302 UNSTASH_FLAGS
303 ###################################################################### libid3tag
304 STASH_FLAGS
305 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
306 HAVE_ID3TAG=yes
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)
310 UNSTASH_FLAGS
311 ########################################################################### oss
312 STASH_FLAGS
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"], [])
316 LIB_SUBST_FLAGS(oss)
317 UNSTASH_FLAGS
318 ########################################################################### alsa
319 STASH_FLAGS
320 LIB_ARG_WITH([alsa], [-lasound])
321 HAVE_ALSA=yes
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)
325 UNSTASH_FLAGS
326 ######################################################################### pthread
327 STASH_FLAGS
328 LIB_ARG_WITH([pthread], [-lpthread])
329 HAVE_PTHREAD=yes
330 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
331 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
332 LIB_SUBST_FLAGS(pthread)
333 UNSTASH_FLAGS
334 ########################################################################### libao
335 STASH_FLAGS
336 LIB_ARG_WITH([ao], [-lao])
337 HAVE_AO=yes
338 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
339 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
340 LIB_SUBST_FLAGS(ao)
341 UNSTASH_FLAGS
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
346 STASH_FLAGS
347 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
348 LIB_ARG_WITH([readline], [-lreadline $LIBS])
349 HAVE_READLINE=yes
350 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
351 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
352 AC_CHECK_DECL(
353         [rl_free_keymap],
354         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
355         [],
356         [
357                 #include <stdio.h>
358                 #include <readline/readline.h>
359         ]
360 )
361 LIB_SUBST_FLAGS(readline)
362 UNSTASH_FLAGS
363 ############################################################# libsamplerate
364 STASH_FLAGS
365 LIB_ARG_WITH([samplerate], [-lsamplerate])
366 HAVE_SAMPLERATE=yes
367 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
368 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
369 LIB_SUBST_FLAGS(samplerate)
370 UNSTASH_FLAGS
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)
376
377 AC_OUTPUT