]> git.tuebingen.mpg.de Git - paraslash.git/blob - configure.ac
build: Construct audioc object list in Makefile.
[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 executables="recv filter audioc write afh play"
65 ########################################################################### osl
66 STASH_FLAGS
67 LIB_ARG_WITH([osl], [-losl])
68 HAVE_OSL=yes
69 AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
70 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
71 LIB_SUBST_FLAGS(osl)
72 UNSTASH_FLAGS
73 ######################################################################## lopsub
74 HAVE_LOPSUB=yes
75 AC_PATH_PROG([LOPSUBGEN], [lopsubgen])
76 test -z "$LOPSUBGEN" && HAVE_LOPSUB=no
77 STASH_FLAGS
78 LIB_ARG_WITH([lopsub], [-llopsub])
79 AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no])
80 AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no])
81 if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([
82         The lopsub library is required to build this software, but
83         the above checks indicate it is not installed on your system.
84         Run the following command to download a copy.
85                 git clone git://git.tuebingen.mpg.de/lopsub.git
86         Install the library, then run this configure script again.
87 ])
88 fi
89 LIB_SUBST_FLAGS([lopsub])
90 UNSTASH_FLAGS
91 ######################################################################## openssl
92 STASH_FLAGS
93 HAVE_OPENSSL=yes
94 LIB_ARG_WITH([openssl], [-lssl -lcrypto])
95 AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
96 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
97 LIB_SUBST_FLAGS(openssl)
98 if test $HAVE_OPENSSL = yes; then
99         HAVE_RSA_SET0_KEY=yes
100         AC_CHECK_DECL([RSA_set0_key], [], [], [#include <openssl/rsa.h>])
101         AC_CHECK_LIB([crypto], [RSA_set0_key], [], [])
102         if test "$ac_cv_have_decl_RSA_set0_key" != "$ac_cv_lib_crypto_RSA_set0_key"; then
103                 AC_MSG_ERROR([openssl header/library mismatch])
104         fi
105         if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
106                 AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
107         else
108                 AC_MSG_WARN([
109         Old openssl library detected. Support for openssl-1.0 and earlier
110         will be removed in the next major paraslash release. Please upgrade
111         your openssl installation.])
112         fi
113         HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
114         AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
115                 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
116                 [#include <openssl/rsa.h>])
117         AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
118                 [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
119         test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
120                 AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
121                         [not available on FreeBSD 12])
122         HAVE_OPENSSL_THREAD_STOP=yes
123         AC_CHECK_DECL([OPENSSL_thread_stop], [],
124                 [HAVE_OPENSSL_THREAD_STOP=no],
125                 [#include <openssl/crypto.h>])
126         AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
127                 [HAVE_OPENSSL_THREAD_STOP=no])
128         test $HAVE_OPENSSL_THREAD_STOP = yes &&
129                 AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
130                         [not available on openssl-1.0])
131 fi
132 UNSTASH_FLAGS
133 ######################################################################### gcrypt
134 STASH_FLAGS
135 HAVE_GCRYPT=yes
136 LIB_ARG_WITH([gcrypt], [-lgcrypt])
137 AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
138 AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
139 LIB_SUBST_FLAGS(gcrypt)
140 UNSTASH_FLAGS
141 ######################################################################### crypto
142 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
143         Force using crypto library "lib". This package requires either
144         openssl or libgcrypt being installed. Possible values for "lib"
145         are thus "openssl" and "gcrypt". If this option is not given,
146         openssl is tried first. If openssl was not found, gcrypt is
147         tried next.])])
148
149 CRYPTOLIB="$enable_cryptolib"
150 case "$enable_cryptolib" in
151 "openssl")
152         test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
153         crypto_ldflags="$openssl_ldflags"
154         ;;
155 "gcrypt")
156         test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
157         crypto_ldflags="$gcrypt_ldflags"
158         ;;
159 "")
160         crypto_ldflags=
161         if test $HAVE_GCRYPT = yes; then
162                 CRYPTOLIB=gcrypt
163                 crypto_ldflags="$gcrypt_ldflags"
164         fi
165         if test $HAVE_OPENSSL = yes; then
166                 CRYPTOLIB=openssl
167                 crypto_ldflags="$openssl_ldflags"
168         fi
169         ;;
170 *)
171         AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
172         ;;
173 esac
174 AC_SUBST(crypto_ldflags)
175 AC_SUBST(CRYPTOLIB)
176 ########################################################################## iconv
177 STASH_FLAGS
178 LIBS=
179 AC_SEARCH_LIBS([libiconv_open], [iconv],
180         [iconv_ldflags="$LIBS"],
181         []
182 )
183 AC_SUBST(iconv_ldflags)
184 AC_MSG_CHECKING([whether iconv needs const char ** cast])
185 AC_COMPILE_IFELSE([
186         AC_LANG_PROGRAM([
187                 #include <iconv.h>
188         ],[
189                 size_t iconv(iconv_t cd, const char **inbuf,
190                         size_t *inbytesleft, char **outbuf,
191                         size_t *outbytesleft);
192         ])
193 ],
194         [cast='(const char **)'; msg=yes],
195         [cast=; msg=no]
196 )
197 AC_DEFINE_UNQUOTED(ICONV_CAST, $cast, [cast for second arg to iconv()])
198 AC_MSG_RESULT($msg)
199 UNSTASH_FLAGS
200 ########################################################################### ucred
201 AC_CHECK_TYPE([struct ucred], [
202         AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred)
203 ], [], [
204         #include <sys/types.h>
205         #include <sys/socket.h>
206 ])
207 ################################################################### FNM_EXTMATCH
208 AC_MSG_CHECKING(for extended wildcard pattern matching)
209 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
210         #include <fnmatch.h>
211 ]], [[
212         unsigned n = FNM_EXTMATCH;
213 ]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
214 AC_MSG_RESULT($have_fnm_extmatch)
215 if test $have_fnm_extmatch = yes; then
216         AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
217 fi
218 ########################################################################### curses
219 STASH_FLAGS
220 LIB_ARG_WITH([curses], [])
221 HAVE_CURSES=yes
222 AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no])
223 AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no])
224 curses_ldflags="$curses_ldflags $LIBS"
225 LIB_SUBST_FLAGS(curses)
226 UNSTASH_FLAGS
227 ########################################################################### ip_mreqn
228 AC_CHECK_TYPE([struct ip_mreqn], [
229         AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn)
230 ], [], [
231         #include <netdb.h>
232         #include <net/if.h>
233 ])
234 ########################################################################### ogg
235 STASH_FLAGS
236 LIB_ARG_WITH([ogg], [-logg])
237 HAVE_OGG=yes
238 AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no])
239 AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no])
240 AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [
241         AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])])
242 LIB_SUBST_FLAGS(ogg)
243 UNSTASH_FLAGS
244 ######################################################################### vorbis
245 STASH_FLAGS
246 LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile])
247 HAVE_VORBIS=yes
248 AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no])
249 AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no])
250 LIB_SUBST_FLAGS(vorbis)
251 UNSTASH_FLAGS
252 ######################################################################### speex
253 STASH_FLAGS
254 LIB_ARG_WITH([speex], [-lspeex])
255 HAVE_SPEEX=yes
256 AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no])
257 AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no])
258 LIB_SUBST_FLAGS(speex)
259 UNSTASH_FLAGS
260 ######################################################################### opus
261 STASH_FLAGS
262 LIB_ARG_WITH([opus], [-lopus])
263 HAVE_OPUS=yes
264 AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no])
265 AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no])
266 LIB_SUBST_FLAGS(opus)
267 UNSTASH_FLAGS
268 ########################################################################### flac
269 STASH_FLAGS
270 LIB_ARG_WITH([flac], [-lFLAC -lm])
271 HAVE_FLAC=yes
272 AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no)
273 AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no)
274 LIB_SUBST_FLAGS(flac)
275 UNSTASH_FLAGS
276
277 # some helpers for the ogg container format
278 AS_IF([test "$HAVE_OGG" = 'yes' -a \( \
279                  "$HAVE_VORBIS" = 'yes' \
280                 -o "$HAVE_SPEEX" = 'yes' \
281                 -o "$HAVE_OPUS" = 'yes' \
282                 -o "$HAVE_FLAC" = 'yes' \
283 \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no])
284 AC_SUBST([NEED_OGG_OBJECTS])
285 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'],
286         [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no])
287 AC_SUBST([NEED_VORBIS_OBJECTS])
288 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'],
289         [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no])
290 AC_SUBST([NEED_SPEEX_OBJECTS])
291 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'],
292         [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no])
293 AC_SUBST([NEED_OPUS_OBJECTS])
294 AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'],
295         [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no])
296 AC_SUBST([NEED_FLAC_OBJECTS])
297 ########################################################################### faad
298 STASH_FLAGS
299 LIB_ARG_WITH([faad], [-lfaad])
300 HAVE_FAAD=yes
301 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
302 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
303 LIB_SUBST_FLAGS(faad)
304 UNSTASH_FLAGS
305 ########################################################################### mad
306 STASH_FLAGS
307 LIB_ARG_WITH([mad], [-lmad])
308 HAVE_MAD=yes
309 AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no)
310 AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no)
311 LIB_SUBST_FLAGS(mad)
312 UNSTASH_FLAGS
313 ###################################################################### libid3tag
314 STASH_FLAGS
315 LIB_ARG_WITH([id3tag], [-lid3tag -lz])
316 HAVE_ID3TAG=yes
317 AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no)
318 AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no)
319 LIB_SUBST_FLAGS(id3tag)
320 UNSTASH_FLAGS
321 ########################################################################### oss
322 STASH_FLAGS
323 LIB_ARG_WITH([oss], [])
324 AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no])
325 AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], [])
326 LIB_SUBST_FLAGS(oss)
327 UNSTASH_FLAGS
328 ########################################################################### alsa
329 STASH_FLAGS
330 LIB_ARG_WITH([alsa], [-lasound])
331 HAVE_ALSA=yes
332 AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no)
333 AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no)
334 LIB_SUBST_FLAGS(alsa)
335 UNSTASH_FLAGS
336 ######################################################################### pthread
337 STASH_FLAGS
338 LIB_ARG_WITH([pthread], [-lpthread])
339 HAVE_PTHREAD=yes
340 AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no)
341 AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no)
342 LIB_SUBST_FLAGS(pthread)
343 UNSTASH_FLAGS
344 ########################################################################### libao
345 STASH_FLAGS
346 LIB_ARG_WITH([ao], [-lao])
347 HAVE_AO=yes
348 AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no)
349 AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no)
350 LIB_SUBST_FLAGS(ao)
351 UNSTASH_FLAGS
352 AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes],
353         [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no])
354 AC_SUBST([NEED_AO_OBJECTS])
355 ######################################################################## readline
356 STASH_FLAGS
357 AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap])
358 LIB_ARG_WITH([readline], [-lreadline $LIBS])
359 HAVE_READLINE=yes
360 AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no])
361 AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no)
362 AC_CHECK_DECL(
363         [rl_free_keymap],
364         [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)],
365         [],
366         [
367                 #include <stdio.h>
368                 #include <readline/readline.h>
369         ]
370 )
371 LIB_SUBST_FLAGS(readline)
372 UNSTASH_FLAGS
373 ############################################################# libsamplerate
374 STASH_FLAGS
375 LIB_ARG_WITH([samplerate], [-lsamplerate])
376 HAVE_SAMPLERATE=yes
377 AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
378 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
379 LIB_SUBST_FLAGS(samplerate)
380 UNSTASH_FLAGS
381 ######################################################################### ubsan
382 AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
383         [Detect and report undefined behaviour.])],
384         [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
385 AC_SUBST(ENABLE_UBSAN)
386 ######################################################### server and upgrade_db
387 if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
388         build_server="yes"
389         executables="$executables server upgrade_db"
390 else
391         build_server="no"
392 fi
393 ############################################################# client
394 if test -n "$CRYPTOLIB"; then
395         build_client="yes"
396         executables="$executables client"
397 else
398         build_client="no"
399 fi
400 ############################################################# audiod
401 if test -n "$CRYPTOLIB"; then
402         build_audiod="yes"
403         executables="$executables audiod"
404 else
405         build_audiod="no"
406 fi
407 ########################################################################### mixer
408 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
409         build_mixer="yes"
410         executables="$executables mixer"
411 fi
412 ########################################################################### gui
413 if test $HAVE_CURSES = yes; then
414         build_gui="yes"
415         executables="$executables gui"
416 fi
417 ######################################################################## audioc
418 AC_SUBST(executables)
419
420 AC_OUTPUT
421 AC_MSG_NOTICE([
422 paraslash configuration:
423 ~~~~~~~~~~~~~~~~~~~~~~~~
424 crypto lib: ${CRYPTOLIB:-[none]}
425 readline (interactive CLIs): $HAVE_READLINE
426 id3 version 2 support: $HAVE_ID3TAG
427 faad: $HAVE_FAAD
428
429 exe: $executables
430 para_server: $build_server
431 para_gui: $build_gui
432 para_mixer: $build_mixer
433 para_client: $build_client
434 para_audiod: $build_audiod
435 ])