AC_PREREQ([2.61]) AC_INIT([paraslash], [m4_esyscmd_s(./version-gen.sh paraslash)], [maan@tuebingen.mpg.de], [], [https://people.tuebingen.mpg.de/maan/paraslash/]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_DEFUN([LIB_ARG_WITH], [ AC_ARG_WITH($1-headers, [AS_HELP_STRING(--with-$1-headers=dir, [look for $1 headers in dir])]) AC_ARG_WITH($1-libs, [AS_HELP_STRING(--with-$1-libs=dir, [look for $1 libraries in dir])]) if test -n "$with_$1_headers"; then $1_cppflags="-I$with_$1_headers" CPPFLAGS="$CPPFLAGS $$1_cppflags" fi if test -n "$with_$1_libs"; then $1_ldflags="-L$with_$1_libs $2" else $1_ldflags="$2" fi LDFLAGS="$LDFLAGS $$1_ldflags" ]) AC_DEFUN([LIB_SUBST_FLAGS], [ if test "$HAVE_[]m4_toupper([$1])" = 'yes'; then AC_DEFINE(HAVE_[]m4_toupper([$1]), 1, define to 1 to turn on $1 support) AC_SUBST(HAVE_[]m4_toupper([$1])) else $1_cppflags= $1_ldflags= fi AC_SUBST(HAVE_[]m4_toupper([$1])) 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]) ]) OLD_CPPFLAGS="$CPPFLAGS" OLD_LDFLAGS="$LDFLAGS" OLD_LIBS="$LIBS" AC_DEFUN([RESTORE_FLAGS], [ CPPFLAGS="$OLD_CPPFLAGS" LDFLAGS="$OLD_LDFLAGS" LIBS="$OLD_LIBS" ]) AC_USE_SYSTEM_EXTENSIONS AC_C_BIGENDIAN() AC_PROG_CC REQUIRE_EXECUTABLE([bison]) REQUIRE_EXECUTABLE([flex]) REQUIRE_EXECUTABLE([m4]) REQUIRE_EXECUTABLE([lopsubgen]) ########################################################################### osl RESTORE_FLAGS LIB_ARG_WITH([osl], [-losl]) HAVE_OSL=yes AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no]) AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no]) LIB_SUBST_FLAGS(osl) ######################################################################## lopsub RESTORE_FLAGS HAVE_LOPSUB=yes LIB_ARG_WITH([lopsub], [-llopsub]) AC_CHECK_HEADER(lopsub.h, [], [HAVE_LOPSUB=no]) AC_CHECK_LIB([lopsub], [lls_merge], [], [HAVE_LOPSUB=no]) if test $HAVE_LOPSUB = no; then AC_MSG_ERROR([ The lopsub library is required to build this software, but the above checks indicate it is not installed on your system. Run the following command to download the lopsub library. git clone https://git.tuebingen.mpg.de/lopsub.git Install the library, then run this configure script again. ]) fi LIB_SUBST_FLAGS([lopsub]) ######################################################################## openssl RESTORE_FLAGS HAVE_OPENSSL=yes LIB_ARG_WITH([openssl], [-lssl -lcrypto]) 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], [OSSL_PARAM_construct_BN], [HAVE_OSSL_PARAM=yes], [HAVE_OSSL_PARAM=no]) test $HAVE_OSSL_PARAM = yes && AC_DEFINE([HAVE_OSSL_PARAM], [1], [openssl >= 3.0]) fi ######################################################################### gcrypt RESTORE_FLAGS HAVE_GCRYPT=yes LIB_ARG_WITH([gcrypt], [-lgcrypt]) AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no]) AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no]) LIB_SUBST_FLAGS(gcrypt) ######################################################################### crypto AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [ Use crypto library "lib". Possible values are "openssl" and "gcrypt". If this option is not given, the configure script checks which library is installed. If both are installed, openssl is used.])]) CRYPTOLIB="$enable_cryptolib" case "$enable_cryptolib" in "openssl") test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found) crypto_ldflags="$openssl_ldflags" ;; "gcrypt") test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found) crypto_ldflags="$gcrypt_ldflags" ;; "") crypto_ldflags= if test $HAVE_GCRYPT = yes; then CRYPTOLIB=gcrypt crypto_ldflags="$gcrypt_ldflags" fi if test $HAVE_OPENSSL = yes; then CRYPTOLIB=openssl crypto_ldflags="$openssl_ldflags" fi ;; *) AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib]) ;; esac AC_SUBST(crypto_ldflags) AC_SUBST(CRYPTOLIB) ########################################################################## iconv RESTORE_FLAGS LIBS= AC_SEARCH_LIBS([libiconv_open], [iconv], [iconv_ldflags="$LIBS"], [] ) AC_SUBST(iconv_ldflags) ########################################################################### ucred RESTORE_FLAGS AC_CHECK_TYPE([struct ucred], [ AC_DEFINE(HAVE_UCRED, 1, define to 1 you have struct ucred) ], [], [ #include #include ]) ################################################################### FNM_EXTMATCH RESTORE_FLAGS AC_MSG_CHECKING(for extended wildcard pattern matching) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ 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 RESTORE_FLAGS LIB_ARG_WITH([curses], []) HAVE_CURSES=yes AC_CHECK_HEADER(curses.h, [], [HAVE_CURSES=no]) AC_SEARCH_LIBS([initscr], [ncursesw curses], [], [HAVE_CURSES=no]) curses_ldflags="$curses_ldflags $LIBS" LIB_SUBST_FLAGS(curses) ########################################################################### ip_mreqn RESTORE_FLAGS AC_CHECK_TYPE([struct ip_mreqn], [ AC_DEFINE(HAVE_IP_MREQN, 1, define to 1 if you have struct ip_mreqn) ], [], [ #include #include ]) ########################################################################### ogg RESTORE_FLAGS LIB_ARG_WITH([ogg], [-logg]) HAVE_OGG=yes AC_CHECK_HEADERS([ogg/ogg.h], [], [HAVE_OGG=no]) AC_CHECK_LIB([ogg], [ogg_stream_init], [], [HAVE_OGG=no]) AC_CHECK_LIB([ogg], [ogg_stream_flush_fill], [ AC_DEFINE(HAVE_OGG_STREAM_FLUSH_FILL, 1, [libogg >= 1.3.0])]) LIB_SUBST_FLAGS(ogg) ######################################################################### vorbis RESTORE_FLAGS LIB_ARG_WITH([vorbis], [-lvorbis -lvorbisfile]) HAVE_VORBIS=yes AC_CHECK_HEADERS([vorbis/codec.h], [], [HAVE_VORBIS=no]) AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [HAVE_VORBIS=no]) LIB_SUBST_FLAGS(vorbis) ######################################################################### speex RESTORE_FLAGS LIB_ARG_WITH([speex], [-lspeex]) HAVE_SPEEX=yes AC_CHECK_HEADERS([speex/speex.h], [], [HAVE_SPEEX=no]) AC_CHECK_LIB([speex], [speex_decoder_init], [], [HAVE_SPEEX=no]) LIB_SUBST_FLAGS(speex) ######################################################################### opus RESTORE_FLAGS LIB_ARG_WITH([opus], [-lopus]) HAVE_OPUS=yes AC_CHECK_HEADERS([opus/opus.h], [], [HAVE_OPUS=no]) AC_CHECK_LIB([opus], [opus_multistream_decode], [], [HAVE_OPUS=no]) LIB_SUBST_FLAGS(opus) ########################################################################### flac RESTORE_FLAGS LIB_ARG_WITH([flac], [-lFLAC -lm]) HAVE_FLAC=yes AC_CHECK_HEADER(FLAC/stream_decoder.h, [], HAVE_FLAC=no) AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_init_file], [], HAVE_FLAC=no) LIB_SUBST_FLAGS(flac) # some helpers for the ogg container format AS_IF([test "$HAVE_OGG" = 'yes' -a \( \ "$HAVE_VORBIS" = 'yes' \ -o "$HAVE_SPEEX" = 'yes' \ -o "$HAVE_OPUS" = 'yes' \ -o "$HAVE_FLAC" = 'yes' \ \)], [NEED_OGG_OBJECTS=yes], [NEED_OGG_OBJECTS=no]) AC_SUBST([NEED_OGG_OBJECTS]) AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_VORBIS" = 'yes'], [NEED_VORBIS_OBJECTS=yes], [NEED_VORBIS_OBJECTS=no]) AC_SUBST([NEED_VORBIS_OBJECTS]) AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_SPEEX" = 'yes'], [NEED_SPEEX_OBJECTS=yes], [NEED_SPEEX_OBJECTS=no]) AC_SUBST([NEED_SPEEX_OBJECTS]) AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_OPUS" = 'yes'], [NEED_OPUS_OBJECTS=yes], [NEED_OPUS_OBJECTS=no]) AC_SUBST([NEED_OPUS_OBJECTS]) AS_IF([test "$HAVE_OGG" = 'yes' -a "$HAVE_FLAC" = 'yes'], [NEED_FLAC_OBJECTS=yes], [NEED_FLAC_OBJECTS=no]) AC_SUBST([NEED_FLAC_OBJECTS]) ########################################################################### faad RESTORE_FLAGS LIB_ARG_WITH([faad], [-lfaad]) HAVE_FAAD=yes AC_CHECK_HEADER(neaacdec.h, [], HAVE_FAAD=no) AC_CHECK_LIB([faad], [NeAACDecOpen], [], HAVE_FAAD=no) LIB_SUBST_FLAGS(faad) ########################################################################### mad RESTORE_FLAGS LIB_ARG_WITH([mad], [-lmad]) HAVE_MAD=yes AC_CHECK_HEADER(mad.h, [], HAVE_MAD=no) AC_CHECK_LIB([mad], [mad_stream_init], [], HAVE_MAD=no) LIB_SUBST_FLAGS(mad) ###################################################################### libid3tag RESTORE_FLAGS LIB_ARG_WITH([id3tag], [-lid3tag -lz]) HAVE_ID3TAG=yes AC_CHECK_HEADER(id3tag.h, [], HAVE_ID3TAG=no) AC_CHECK_LIB([id3tag], [id3_file_fdopen], [], HAVE_ID3TAG=no) LIB_SUBST_FLAGS(id3tag) ########################################################################### oss RESTORE_FLAGS LIB_ARG_WITH([oss], []) AC_CHECK_HEADER(sys/soundcard.h, [HAVE_OSS=yes], [HAVE_OSS=no]) AC_CHECK_LIB(ossaudio, _oss_ioctl, [oss_ldflags="$oss_ldflags -lossaudio"], []) LIB_SUBST_FLAGS(oss) ########################################################################### alsa RESTORE_FLAGS LIB_ARG_WITH([alsa], [-lasound]) HAVE_ALSA=yes AC_CHECK_HEADER(alsa/asoundlib.h, [], HAVE_ALSA=no) AC_CHECK_LIB([asound], [snd_pcm_open], [], HAVE_ALSA=no) LIB_SUBST_FLAGS(alsa) ######################################################################### pthread RESTORE_FLAGS LIB_ARG_WITH([pthread], [-lpthread]) HAVE_PTHREAD=yes AC_CHECK_HEADER(pthread.h, [], HAVE_PTHREAD=no) AC_CHECK_LIB([pthread], [pthread_create], [], HAVE_PTHREAD=no) LIB_SUBST_FLAGS(pthread) ########################################################################### libao RESTORE_FLAGS LIB_ARG_WITH([ao], [-lao]) HAVE_AO=yes AC_CHECK_HEADER(ao/ao.h, [], HAVE_AO=no) AC_CHECK_LIB([ao], [ao_initialize], [], HAVE_AO=no) LIB_SUBST_FLAGS(ao) AS_IF([test $HAVE_AO = yes -a $HAVE_PTHREAD = yes], [NEED_AO_OBJECTS]=yes, [NEED_AO_OBJECTS=no]) AC_SUBST([NEED_AO_OBJECTS]) ######################################################################## readline RESTORE_FLAGS AC_SEARCH_LIBS([tgetent], [tinfo curses terminfo termcap]) LIB_ARG_WITH([readline], [-lreadline $LIBS]) HAVE_READLINE=yes AC_CHECK_HEADER([readline/readline.h], [], [HAVE_READLINE=no]) AC_CHECK_LIB([readline], [rl_free_keymap], [], HAVE_READLINE=no) AC_CHECK_DECL( [rl_free_keymap], [AC_DEFINE(RL_FREE_KEYMAP_DECLARED, 1, readline >= 6.3)], [], [ #include #include ] ) LIB_SUBST_FLAGS(readline) ######################################################################### 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) AC_OUTPUT