]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - configure.ac
Return from filter_setup() so callers can reset the terminal.
[paraslash.git] / configure.ac
index 83375559516396cf3a052fbc4f90871a344f732b..bd8fbd53ba433a1981c3caf8e2cf809f23015400 100644 (file)
@@ -46,18 +46,22 @@ AC_DEFUN([LIB_SUBST_FLAGS], [
        AC_SUBST($1_cppflags)
        AC_SUBST($1_ldflags)
 ])
+AC_DEFUN([REQUIRE_EXECUTABLE], [
+        AC_PATH_PROG(m4_toupper([$1]), [$1])
+        test -z "$m4_toupper([$1])" && AC_MSG_ERROR(
+               [$1 is required to build this package])
+])
 
 AC_USE_SYSTEM_EXTENSIONS
 AC_C_BIGENDIAN()
-
-AC_PATH_PROG([M4], [m4])
-test -z "$M4" && AC_MSG_ERROR(
-       [The m4 macro processor is required to build this package])
-
 AC_PROG_CC
 AC_PROG_CPP
 
-executables="recv filter audioc write afh play"
+REQUIRE_EXECUTABLE([bison])
+REQUIRE_EXECUTABLE([flex])
+REQUIRE_EXECUTABLE([m4])
+
+executables="recv filter audioc write afh"
 ########################################################################### osl
 STASH_FLAGS
 LIB_ARG_WITH([osl], [-losl])
@@ -92,8 +96,38 @@ AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
 AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
 LIB_SUBST_FLAGS(openssl)
 if test $HAVE_OPENSSL = yes; then
-       AC_CHECK_LIB([crypto], [RSA_set0_key],
-               AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl-1.1]))
+       HAVE_RSA_SET0_KEY=yes
+       AC_CHECK_DECL([RSA_set0_key], [], [], [#include <openssl/rsa.h>])
+       AC_CHECK_LIB([crypto], [RSA_set0_key], [], [])
+       if test "$ac_cv_have_decl_RSA_set0_key" != "$ac_cv_lib_crypto_RSA_set0_key"; then
+               AC_MSG_ERROR([openssl header/library mismatch])
+       fi
+       if test "$ac_cv_have_decl_RSA_set0_key" = yes; then
+               AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
+       else
+               AC_MSG_WARN([
+       Old openssl library detected. Support for openssl-1.0 and earlier
+       will be removed in the next major paraslash release. Please upgrade
+       your openssl installation.])
+       fi
+       HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
+       AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
+               [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
+               [#include <openssl/rsa.h>])
+       AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
+               [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
+       test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
+               AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
+                       [not available on FreeBSD 12])
+       HAVE_OPENSSL_THREAD_STOP=yes
+       AC_CHECK_DECL([OPENSSL_thread_stop], [],
+               [HAVE_OPENSSL_THREAD_STOP=no],
+               [#include <openssl/crypto.h>])
+       AC_CHECK_LIB([crypto], [OPENSSL_thread_stop], [],
+               [HAVE_OPENSSL_THREAD_STOP=no])
+       test $HAVE_OPENSSL_THREAD_STOP = yes &&
+               AC_DEFINE([HAVE_OPENSSL_THREAD_STOP], [1],
+                       [not available on openssl-1.0])
 fi
 UNSTASH_FLAGS
 ######################################################################### gcrypt
@@ -169,6 +203,17 @@ AC_CHECK_TYPE([struct ucred], [
        #include <sys/types.h>
        #include <sys/socket.h>
 ])
+################################################################### FNM_EXTMATCH
+AC_MSG_CHECKING(for extended wildcard pattern matching)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+       #include <fnmatch.h>
+]], [[
+       unsigned n = FNM_EXTMATCH;
+]])], [have_fnm_extmatch=yes], [have_fnm_extmatch=no])
+AC_MSG_RESULT($have_fnm_extmatch)
+if test $have_fnm_extmatch = yes; then
+       AC_DEFINE(HAVE_FNM_EXTMATCH, 1, define to 1 if FNM_EXTMATCH is defined)
+fi
 ########################################################################### curses
 STASH_FLAGS
 LIB_ARG_WITH([curses], [])
@@ -251,12 +296,10 @@ AC_DEFUN([NEED_FLAC_OBJECTS], [{
 }])
 ########################################################################### faad
 STASH_FLAGS
-LIB_ARG_WITH([faad], [-lfaad -lmp4ff])
+LIB_ARG_WITH([faad], [-lfaad])
 HAVE_FAAD=yes
 AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no)
-AC_CHECK_HEADER(mp4ff.h, [], HAVE_FAAD=no)
 AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no)
-AC_CHECK_LIB([mp4ff], [mp4ff_meta_get_artist], [], HAVE_FAAD=no)
 LIB_SUBST_FLAGS(faad)
 UNSTASH_FLAGS
 ########################################################################### mad
@@ -333,10 +376,16 @@ AC_CHECK_HEADER(samplerate.h, [], HAVE_SAMPLERATE=no)
 AC_CHECK_LIB([samplerate], [src_process], [], HAVE_SAMPLERATE=no)
 LIB_SUBST_FLAGS(samplerate)
 UNSTASH_FLAGS
+######################################################################### ubsan
+AC_ARG_ENABLE([ubsan], [AS_HELP_STRING(--enable-ubsan,
+       [Detect and report undefined behaviour.])],
+       [ENABLE_UBSAN=yes], [ENABLE_UBSAN=no])
+AC_SUBST(ENABLE_UBSAN)
 ######################################################################### server
-if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
+if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes && test -n "$BISON" && \
+               test -n "$FLEX"; then
        build_server="yes"
-       executables="$executables server"
+       executables="$executables server upgrade_db"
        server_errlist_objs="
                server
                afh_common
@@ -350,7 +399,6 @@ if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
                daemon
                http_send
                close_on_fork
-               mm
                crypt_common
                base64
                ipc
@@ -361,6 +409,7 @@ if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
                afs
                aft
                mood
+               mp
                score
                attribute
                blob
@@ -375,9 +424,10 @@ if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
                wma_common
                sideband
                version
+               lsu
        "
        if test "$CRYPTOLIB" = openssl; then
-               server_errlist_objs="$server_errlist_objs crypt"
+               server_errlist_objs="$server_errlist_objs openssl"
        else
                server_errlist_objs="$server_errlist_objs gcrypt"
        fi
@@ -387,13 +437,24 @@ if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
        NEED_OPUS_OBJECTS() && server_errlist_objs="$server_errlist_objs opus_afh opus_common"
        NEED_FLAC_OBJECTS && server_errlist_objs="$server_errlist_objs flac_afh"
        if test $HAVE_FAAD = yes; then
-               server_errlist_objs="$server_errlist_objs aac_afh"
+               server_errlist_objs="$server_errlist_objs aac_afh mp4"
        fi
        server_objs="$server_errlist_objs"
        AC_SUBST(server_objs, add_dot_o($server_objs))
 else
        build_server="no"
 fi
+############################################################# upgrade_db
+upgrade_db_objs='
+       crypt_common
+       exec
+       fd
+       string
+       upgrade_db
+       version
+       base64
+'
+AC_SUBST(upgrade_db_objs, add_dot_o($upgrade_db_objs))
 ############################################################# client
 if test -n "$CRYPTOLIB"; then
        build_client="yes"
@@ -403,6 +464,7 @@ if test -n "$CRYPTOLIB"; then
                net
                string
                fd
+               lsu
                sched
                stdin
                stdout
@@ -415,7 +477,7 @@ if test -n "$CRYPTOLIB"; then
                version
        "
        if test "$CRYPTOLIB" = openssl; then
-               client_errlist_objs="$client_errlist_objs crypt"
+               client_errlist_objs="$client_errlist_objs openssl"
        else
                client_errlist_objs="$client_errlist_objs gcrypt"
        fi
@@ -469,9 +531,10 @@ if test -n "$CRYPTOLIB"; then
                wmadec_filter
                buffer_tree
                sync_filter
+               lsu
        "
        if test "$CRYPTOLIB" = openssl; then
-               audiod_errlist_objs="$audiod_errlist_objs crypt"
+               audiod_errlist_objs="$audiod_errlist_objs openssl"
        else
                audiod_errlist_objs="$audiod_errlist_objs gcrypt"
        fi
@@ -526,7 +589,7 @@ fi
 if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then
        build_mixer="yes"
        executables="$executables mixer"
-       mixer_errlist_objs="mixer exec string fd version"
+       mixer_errlist_objs="mixer exec string fd time lsu version"
        if test $HAVE_OSS = yes; then
                mixer_errlist_objs="$mixer_errlist_objs oss_mix"
        fi
@@ -552,6 +615,7 @@ if test $HAVE_CURSES = yes; then
                fd
                gui
                gui_theme
+               lsu
                time
                sched
                version
@@ -576,6 +640,7 @@ filter_errlist_objs="
        amp_filter
        fecdec_filter
        fec
+       lsu
        version
        prebuffer_filter
        time
@@ -631,7 +696,7 @@ NEED_OPUS_OBJECTS && recv_errlist_objs="$recv_errlist_objs opus_afh opus_common"
 NEED_FLAC_OBJECTS && recv_errlist_objs="$recv_errlist_objs flac_afh"
 
 if test $HAVE_FAAD = yes; then
-       recv_errlist_objs="$recv_errlist_objs aac_afh"
+       recv_errlist_objs="$recv_errlist_objs aac_afh mp4"
 fi
 recv_objs="$recv_errlist_objs"
 AC_SUBST(recv_objs, add_dot_o($recv_objs))
@@ -666,7 +731,7 @@ NEED_FLAC_OBJECTS && {
        audio_format_handlers="$audio_format_handlers flac"
 }
 if test $HAVE_FAAD = yes; then
-       afh_errlist_objs="$afh_errlist_objs aac_afh"
+       afh_errlist_objs="$afh_errlist_objs aac_afh mp4"
        audio_format_handlers="$audio_format_handlers aac"
 fi
 
@@ -674,77 +739,84 @@ afh_objs="$afh_errlist_objs"
 
 AC_SUBST(afh_objs, add_dot_o($afh_objs))
 ########################################################################## play
-play_errlist_objs="
-       play
-       fd
-       sched
-       buffer_tree
-       time
-       string
-       net
-       afh_recv
-       afh_common
-       wma_afh
-       wma_common
-       mp3_afh
-       recv_common
-       udp_recv
-       http_recv
-       dccp_recv
-       filter_common
-       fec
-       bitstream
-       imdct
-       wav_filter
-       compress_filter
-       amp_filter
-       prebuffer_filter
-       fecdec_filter
-       wmadec_filter
-       write_common
-       file_write
-       version
-       sync_filter
-"
-NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
-NEED_VORBIS_OBJECTS && {
-       play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
-}
-NEED_SPEEX_OBJECTS && {
-       play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
-}
-NEED_OPUS_OBJECTS &&
-       play_errlist_objs="$play_errlist_objs
-               opusdec_filter
-               opus_afh
-               opus_common
-       "
-NEED_FLAC_OBJECTS && {
-       play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
-}
-if test $HAVE_FAAD = yes; then
-       play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter"
-fi
-if test $HAVE_MAD = yes; then
-       play_errlist_objs="$play_errlist_objs mp3dec_filter"
-fi
-if test $HAVE_OSS = yes; then
-       play_errlist_objs="$play_errlist_objs oss_write"
-fi
-if test $HAVE_ALSA = yes; then
-       play_errlist_objs="$play_errlist_objs alsa_write"
-fi
-NEED_AO_OBJECTS && {
-       play_errlist_objs="$play_errlist_objs ao_write"
-}
 if test $HAVE_READLINE = yes; then
-       play_errlist_objs="$play_errlist_objs interactive"
-fi
-if test $HAVE_SAMPLERATE = yes; then
-       play_errlist_objs="$play_errlist_objs resample_filter check_wav"
-fi
+       build_play=yes
+       executables="$executables play"
+       play_errlist_objs="
+               play
+               fd
+               sched
+               buffer_tree
+               time
+               string
+               net
+               afh_recv
+               afh_common
+               wma_afh
+               wma_common
+               mp3_afh
+               recv_common
+               udp_recv
+               http_recv
+               dccp_recv
+               filter_common
+               fec
+               bitstream
+               imdct
+               wav_filter
+               compress_filter
+               amp_filter
+               prebuffer_filter
+               fecdec_filter
+               wmadec_filter
+               write_common
+               file_write
+               version
+               sync_filter
+               lsu
+       "
+       NEED_OGG_OBJECTS && play_errlist_objs="$play_errlist_objs ogg_afh_common"
+       NEED_VORBIS_OBJECTS && {
+               play_errlist_objs="$play_errlist_objs oggdec_filter ogg_afh"
+       }
+       NEED_SPEEX_OBJECTS && {
+               play_errlist_objs="$play_errlist_objs spxdec_filter spx_afh spx_common"
+       }
+       NEED_OPUS_OBJECTS &&
+               play_errlist_objs="$play_errlist_objs
+                       opusdec_filter
+                       opus_afh
+                       opus_common
+               "
+       NEED_FLAC_OBJECTS && {
+               play_errlist_objs="$play_errlist_objs flacdec_filter flac_afh"
+       }
+       if test $HAVE_FAAD = yes; then
+               play_errlist_objs="$play_errlist_objs aac_afh aacdec_filter mp4"
+       fi
+       if test $HAVE_MAD = yes; then
+               play_errlist_objs="$play_errlist_objs mp3dec_filter"
+       fi
+       if test $HAVE_OSS = yes; then
+               play_errlist_objs="$play_errlist_objs oss_write"
+       fi
+       if test $HAVE_ALSA = yes; then
+               play_errlist_objs="$play_errlist_objs alsa_write"
+       fi
+       NEED_AO_OBJECTS && {
+               play_errlist_objs="$play_errlist_objs ao_write"
+       }
+       if test $HAVE_READLINE = yes; then
+               play_errlist_objs="$play_errlist_objs interactive"
+       fi
+       if test $HAVE_SAMPLERATE = yes; then
+               play_errlist_objs="$play_errlist_objs resample_filter check_wav"
+       fi
 
-play_objs="$play_errlist_objs"
+       play_objs="$play_errlist_objs"
+else
+       build_play=no
+fi
 AC_SUBST(play_objs, add_dot_o($play_objs))
 ######################################################################### write
 write_errlist_objs="
@@ -776,8 +848,10 @@ AC_SUBST(write_objs, add_dot_o($write_objs))
 audioc_errlist_objs="
        audioc
        string
+       lsu
        net
        fd
+       time
        version
 "
 if test $HAVE_READLINE = yes; then
@@ -785,7 +859,6 @@ if test $HAVE_READLINE = yes; then
                buffer_tree
                interactive
                sched
-               time
        "
 fi
 audioc_objs="$audioc_errlist_objs"
@@ -806,7 +879,9 @@ id3 version 2 support: $HAVE_ID3TAG
 faad: $HAVE_FAAD
 audio format handlers: $audio_format_handlers
 
+exe: $executables
 para_server: $build_server
+para_play: $build_play
 para_gui: $build_gui
 para_mixer: $build_mixer
 para_client: $build_client