]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
Merge topic branch t/sf_float 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         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])
125 fi
126 UNSTASH_FLAGS
127 ######################################################################### gcrypt
128 STASH_FLAGS
129 HAVE_GCRYPT=yes
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)
134 UNSTASH_FLAGS
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
141         tried next.])])
142
143 CRYPTOLIB="$enable_cryptolib"
144 case "$enable_cryptolib" in
145 "openssl")
146         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
147         crypto_ldflags="$openssl_ldflags"
148         ;;
149 "gcrypt")
150         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
151         crypto_ldflags="$gcrypt_ldflags"
152         ;;
153 "")
154         crypto_ldflags=
155         if test $HAVE_GCRYPT = yes; then
156                 CRYPTOLIB=gcrypt
157                 crypto_ldflags="$gcrypt_ldflags"
158         fi
159         if test $HAVE_OPENSSL = yes; then
160                 CRYPTOLIB=openssl
161                 crypto_ldflags="$openssl_ldflags"
162         fi
163         ;;
164 *)
165         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
166         ;;
167 esac
168 AC_SUBST(crypto_ldflags)
169 AC_SUBST(CRYPTOLIB)
170 ########################################################################## iconv
171 STASH_FLAGS
172 LIBS=
173 AC_SEARCH_LIBS([libiconv_open], [iconv],
174         [iconv_ldflags="$LIBS"],
175         []
176 )
177 AC_SUBST(iconv_ldflags)
178 AC_MSG_CHECKING([whether iconv needs const char ** cast])
179 AC_COMPILE_IFELSE([
180         AC_LANG_PROGRAM([
181                 #include <iconv.h>
182         ],[
183                 size_t iconv(iconv_t cd, const char **inbuf,
184                         size_t *inbytesleft, char **outbuf,
185                         size_t *outbytesleft);
186         ])
187 ],
188         [cast='(const char **)'; msg=yes],
189         [cast=; msg=no]
190 )
191 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
192 AC_MSG_RESULT($msg)
193 UNSTASH_FLAGS
194 ########################################################################### ucred
195 AC_CHECK_TYPE([struct ucred], [
196         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
197 ], [], [
198         #include <sys/types.h>
199         #include <sys/socket.h>
200 ])
201 ################################################################### FNM_EXTMATCH
202 AC_MSG_CHECKING(for extended wildcard pattern matching)
203 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
204         #include <fnmatch.h>
205 ]], [[
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)
211 fi
212 ########################################################################### curses
213 STASH_FLAGS
214 LIB_ARG_WITH([curses], [])
215 HAVE_CURSES=yes
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)
220 UNSTASH_FLAGS
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)
224 ], [], [
225         #include <netdb.h>
226         #include <net/if.h>
227 ])
228 ########################################################################### ogg
229 STASH_FLAGS
230 LIB_ARG_WITH([ogg], [-logg])
231 HAVE_OGG=yes
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])])
236 LIB_SUBST_FLAGS(ogg)
237 UNSTASH_FLAGS
238 ######################################################################### vorbis
239 STASH_FLAGS
240 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
241 HAVE_VORBIS=yes
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)
245 UNSTASH_FLAGS
246 ######################################################################### speex
247 STASH_FLAGS
248 LIB_ARG_WITH([speex], [-lspeex])
249 HAVE_SPEEX=yes
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)
253 UNSTASH_FLAGS
254 ######################################################################### opus
255 STASH_FLAGS
256 LIB_ARG_WITH([opus], [-lopus])
257 HAVE_OPUS=yes
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)
261 UNSTASH_FLAGS
262 ########################################################################### flac
263 STASH_FLAGS
264 LIB_ARG_WITH([flac], [-lFLAC -lm])
265 HAVE_FLAC=yes
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)
269 UNSTASH_FLAGS
270
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
292 STASH_FLAGS
293 LIB_ARG_WITH([faad], [-lfaad])
294 HAVE_FAAD=yes
295 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
296 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
297 LIB_SUBST_FLAGS(faad)
298 UNSTASH_FLAGS
299 ########################################################################### mad
300 STASH_FLAGS
301 LIB_ARG_WITH([mad], [-lmad])
302 HAVE_MAD=yes
303 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
304 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
305 LIB_SUBST_FLAGS(mad)
306 UNSTASH_FLAGS
307 ###################################################################### libid3tag
308 STASH_FLAGS
309 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
310 HAVE_ID3TAG=yes
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)
314 UNSTASH_FLAGS
315 ########################################################################### oss
316 STASH_FLAGS
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"], [])
320 LIB_SUBST_FLAGS(oss)
321 UNSTASH_FLAGS
322 ########################################################################### alsa
323 STASH_FLAGS
324 LIB_ARG_WITH([alsa], [-lasound])
325 HAVE_ALSA=yes
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)
329 UNSTASH_FLAGS
330 ######################################################################### pthread
331 STASH_FLAGS
332 LIB_ARG_WITH([pthread], [-lpthread])
333 HAVE_PTHREAD=yes
334 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
335 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
336 LIB_SUBST_FLAGS(pthread)
337 UNSTASH_FLAGS
338 ########################################################################### libao
339 STASH_FLAGS
340 LIB_ARG_WITH([ao], [-lao])
341 HAVE_AO=yes
342 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
343 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
344 LIB_SUBST_FLAGS(ao)
345 UNSTASH_FLAGS
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
350 STASH_FLAGS
351 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
352 LIB_ARG_WITH([readline], [-lreadline $LIBS])
353 HAVE_READLINE=yes
354 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
355 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
356 AC_CHECK_DECL(
357         [rl_free_keymap],
358         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
359         [],
360         [
361                 #include <stdio.h>
362                 #include <readline/readline.h>
363         ]
364 )
365 LIB_SUBST_FLAGS(readline)
366 UNSTASH_FLAGS
367 ############################################################# libsamplerate
368 STASH_FLAGS
369 LIB_ARG_WITH([samplerate], [-lsamplerate])
370 HAVE_SAMPLERATE=yes
371 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
372 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
373 LIB_SUBST_FLAGS(samplerate)
374 UNSTASH_FLAGS
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)
380
381 AC_OUTPUT