butt/configure.ac
audioprog 031ca812ad init
2025-08-13 22:05:17 +02:00

278 lines
8.8 KiB
Text

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
AC_INIT([butt], [1.45.0], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE([subdir-objects foreign])
AC_CANONICAL_HOST
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
#predefined CXXFLAGS so AC_PROG_CXX does not add the -g flag
CXXFLAGS="$CXXFLAGS -O2"
# Compile with address sanitizer
# CXXFLAGS="$CXXFLAGS -O2 -g -fsanitize=address"
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_OBJC
LDFLAGS="$LDFLAGS -L/usr/local/lib"
# Compile with address sanitizer
#LDFLAGS="$LDFLAGS -L/usr/local/lib -fsanitize=address"
AC_ARG_WITH([radioco],
AS_HELP_STRING([--with-radioco], [Include support for Radio.co]))
AC_ARG_WITH([client],
AS_HELP_STRING([--with-client], [Build butt and butt-client]),
[with_client=yes],
[]
)
AC_ARG_WITH([butt],
AS_HELP_STRING([--without-butt], [Build only butt-client]),
[client_only=yes],
[],
)
AC_ARG_ENABLE([aac],
AS_HELP_STRING([--disable-aac], [Disable aac support]))
AS_IF([test "x$with_radioco" = "xyes"],
[
AC_DEFINE([WITH_RADIOCO], [1], [Enable support for Radio.co authentification])
])
AS_IF([test "x$client_only" = "xyes"],
[
AC_DEFINE([CLIENT_ONLY], [1], [build only butt-client])
])
AS_IF([test "x$with_client" = "xyes"],
[
AC_DEFINE([WITH_CLIENT], [1], [build butt and butt-client])
])
AS_IF([test "x$client_only" != "xyes"],
[
# Checks for libraries.
AC_CHECK_LIB([ogg], [ogg_stream_init], [],
[AC_MSG_ERROR([**** Could not find libogg ****])]
)
AC_CHECK_LIB([vorbis], [vorbis_info_init], [],
[AC_MSG_ERROR([**** Could not find libvorbis ****])]
)
AC_CHECK_LIB([vorbisenc], [vorbis_encode_init], [],
[AC_MSG_ERROR([**** Could not find libvorbisenc ****])]
)
AC_CHECK_LIB([opus], [opus_encoder_create], [],
[AC_MSG_ERROR([**** Could not find libopus ****])]
)
AC_CHECK_LIB([mp3lame], [lame_init], [],
[AC_MSG_ERROR([**** Could not find libmp3lame ****])]
)
AC_CHECK_LIB([FLAC], [FLAC__stream_encoder_new], [],
[AC_MSG_ERROR([**** Could not find libFLAC ****])]
)
AC_CHECK_LIB([portaudio], [Pa_Initialize], [],
[AC_MSG_ERROR([**** Could not find libportaudio ****])]
)
AC_CHECK_LIB([portmidi], [Pm_Initialize], [],
[AC_MSG_ERROR([**** Could not find libportmidi ****])]
)
AC_CHECK_LIB([samplerate], [src_new], [],
[AC_MSG_ERROR([**** Could not find samplerate ****])]
)
AC_CHECK_LIB([pthread], [pthread_create], [],
[AC_MSG_ERROR([**** Could not find libpthread ****])]
)
AC_CHECK_LIB([curl], [curl_global_init], [],
[AC_MSG_ERROR([**** Could not find libcurl ****])]
)
AC_CHECK_LIB([ssl], [SSL_CTX_new], [],
[AC_MSG_ERROR([**** Could not find libssl ****])]
)
AC_CHECK_LIB([crypto], [EVP_EncryptInit], [],
[AC_MSG_ERROR([**** Could not find libcrypto ****])]
)
])
AC_CHECK_HEADER([winsock2.h],
[
LIBS="$LIBS -lws2_32"
host_os="windows"
],
)
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.19])
AM_CONDITIONAL(WINDOWS, test "$host_os" = "windows")
build_linux=no
build_windows=no
build_mac=no
build_freebsd=no
# Detect the target system
case "${host_os}" in
linux*)
build_linux=yes
AC_MSG_NOTICE([Linux detected])
AS_IF([test "x$enable_aac" != "xno" -a "x$client_only" != "xyes"],
[
AC_CHECK_LIB([fdk-aac], [aacEncOpen],
[
CPPFLAGS="$CPPFLAGS -DHAVE_LIBFDK_AAC"
LIBS="$LIBS -ldl"
],
[AC_MSG_ERROR([**** Could not find libfdk-aac - run ./configure --disable-aac to build without aac support ****])]
)
])
AC_ARG_ENABLE([webrtc],
AS_HELP_STRING([--enable-webrtc], [Enable WebRTC support]),
[
AS_IF([test "x$client_only" != "xyes"],
[
AC_CHECK_LIB([datachannel], [rtcCreatePeerConnection], [],
[AC_MSG_ERROR([**** Could not find datachannel ****])])
])
])
;;
cygwin*|mingw*|windows)
build_windows=yes
AC_MSG_NOTICE([Windows detected])
# Do NOT check for aac lib here because butt must not depend on libfdk-aac dll.
# Instead define HAVE_LIBFDK_AAC manually, so butt runs with and without the dll
CPPFLAGS="$CPPFLAGS -DHAVE_LIBFDK_AAC"
AS_IF([test "x$client_only" != "xyes"],
[
AC_CHECK_LIB([datachannel], [rtcCreatePeerConnection], [],
[AC_MSG_ERROR([**** Could not find datachannel ****])])
])
;;
darwin*)
build_mac=yes
AC_MSG_NOTICE([MacOS detected])
CPPFLAGS="$CPPFLAGS -x objective-c++"
LIBS="$LIBS -framework AVFoundation -lintl -framework ScriptingBridge"
LDFLAGS="$LDFLAGS -rpath /usr/local/lib"
AS_IF([test "x$client_only" != "xyes"],
[
AC_CHECK_LIB([datachannel], [rtcCreatePeerConnection], [],
[AC_MSG_ERROR([**** Could not find datachannel ****])])
])
;;
freebsd*)
build_freebsd=yes
AC_MSG_NOTICE([FreeBSD detected])
AS_IF([test "x$enable_aac" != "xno" -a "x$client_only" != "xyes"],
[
# By default AC_CHECK_LIB adds -lfdk-aac to the linker flags if the check succeeds. But as the library is loaded with dlopen() during runtime
# the linker flag is not needed. So we only define HAVE_LIBFDK_AAC in case the library was found
AC_CHECK_LIB([fdk-aac], [aacEncOpen], [CPPFLAGS="$CPPFLAGS -DHAVE_LIBFDK_AAC"],
[AC_MSG_ERROR([**** Could not find libfdk-aac - run ./configure --disable-aac to build without aac support ****])]
)
])
AC_ARG_ENABLE([webrtc],
AS_HELP_STRING([--enable-webrtc], [Enable WebRTC support]),
[
AS_IF([test "x$client_only" != "xyes"],
[
AC_CHECK_LIB([datachannel], [rtcCreatePeerConnection], [],
[AC_MSG_ERROR([**** Could not find datachannel ****])])
])
])
;;
*)
AC_MSG_ERROR(["OS $host_os is not supported"])
;;
esac
# Pass the conditionals to automake
AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"])
AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"])
AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"])
AM_CONDITIONAL([FREEBSD], [test "$build_freebsd" = "yes"])
AM_CONDITIONAL([WITH_RADIOCO], [test "x$with_radioco" = "xyes"])
AM_CONDITIONAL([WITH_CLIENT], [test "x$with_client" = "xyes" -o "x$client_only" = "xyes"])
AM_CONDITIONAL([CLIENT_ONLY], [test "x$client_only" = "xyes"])
AC_CHECK_PROG([FLTKCONFIG],[fltk-config], [fltk-config])
if test "x$client_only" != "xyes"; then
if test "$FLTKCONFIG" = "fltk-config"; then
AC_CHECK_LIB([fltk], [main],
[
LIBS="$LIBS `fltk-config --ldflags --use-images`"
CXXFLAGS="$CXXFLAGS `fltk-config --cxxflags`"
],
[AC_MSG_ERROR([**** Could not find libfltk ****])]
)
else
AC_MSG_ERROR([**** Could not find fltk-config ****])
fi
fi
#Add dbus library for Linux
if test "$build_linux" = "yes" -a "x$client_only" != "xyes"; then
AC_MSG_NOTICE([])
PKG_CHECK_MODULES([DBUS], [dbus-1], [
AC_DEFINE([HAVE_DBUS], [1], [Use dbus to get current tracks])
LIBS="$LIBS $DBUS_LIBS"
CFLAGS="$CFLAGS $LIBS $DBUS_CFLAGS"
CXXFLAGS="$CXXFLAGS $DBUS_CFLAGS"
], [
AC_DEFINE([HAVE_DBUS], [0], [Use dbus to get current tracks])
AC_MSG_ERROR([**** Coud not find dbus dev files])
])
# Explicitly add X11 library because it is not added by fltk-config on OpenSUSE
LIBS="$LIBS -lX11"
fi
#Add dbus library for FreeBSD
if test "$build_freebsd" = "yes" -a "x$client_only" != "xyes"; then
AC_MSG_NOTICE([])
PKG_CHECK_MODULES([DBUS], [dbus-1], [
AC_DEFINE([HAVE_DBUS], [1], [Use dbus to get current tracks])
LIBS="$LIBS $DBUS_LIBS"
CFLAGS="$CFLAGS $LIBS $DBUS_CFLAGS"
CXXFLAGS="$CXXFLAGS $DBUS_CFLAGS"
], [
AC_DEFINE([HAVE_DBUS], [0], [Use dbus to get current tracks])
AC_MSG_ERROR([**** Coud not find dbus dev files])
])
fi
# Checks for header files.
AC_PATH_X
AC_CHECK_HEADERS([fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
# Checks for library functions.
#AC_FUNC_MALLOC
#AC_FUNC_REALLOC
AC_CHECK_FUNCS([gethostbyaddr gethostbyname memset pow select socket strchr strdup strpbrk strrchr strstr X509_check_host])
AC_CONFIG_FILES([Makefile po/Makefile.in src/Makefile])
AC_OUTPUT