X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/9e89d26a8e1378f17a19da072c5f7308ddaf24f1..refs/heads/master:/configure.ac
diff --git a/configure.ac b/configure.ac
index ee96f21..fcec0af 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
# Process this file with autoconf to produce a configure script.
#
# This file is part of DisOrder.
-# Copyright (C) 2004-2010 Richard Kettlewell
+# Copyright (C) 2004-2014 Richard Kettlewell
# Portions copyright (C) 2007 Ross Younger
#
# This program is free software: you can redistribute it and/or modify
@@ -18,13 +18,17 @@
# along with this program. If not, see .
#
-AC_INIT([disorder], [5.0.DEV], [richard+disorder@sfere.greenend.org.uk])
+AC_INIT([disorder], [5.2], [mdw@distorted.org.uk])
AC_CONFIG_AUX_DIR([config.aux])
-AM_INIT_AUTOMAKE(disorder, [5.0.DEV])
+AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([server/disorderd.c])
AM_CONFIG_HEADER([config.h])
AC_CONFIG_MACRO_DIR([m4])
+m4_ifdef([AM_SILENT_RULES],
+ [AM_SILENT_RULES([yes])],
+ [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
+
# Find host type
AC_CANONICAL_HOST
@@ -33,12 +37,15 @@ want_gtk=yes
want_python=yes
want_tests=yes
want_server=yes
+want_gstdecode=whatever
want_cgi=yes
# APIs we want
want_alsa=yes
want_oss=yes
want_coreaudio=yes
+want_pulseaudio=yes
+want_gstreamer=yes
# By default we don't want gtk-osx. But if you ask for --with-gtk-osx...
#
@@ -47,6 +54,7 @@ want_coreaudio=yes
# - you will still need Fink (or something) for other libraries
# - if you wanted an application bundle you are out of luck
# - the menu bar is still in the main window (not at the top of the screen)
+# - drag and drop doesn't work
#
# So it's still rather rough and ready. But it does work...
#
@@ -78,6 +86,10 @@ AC_ARG_WITH([alsa],
[AS_HELP_STRING([--without-alsa],
[do not build with ALSA support])],
[want_alsa=$withval])
+AC_ARG_WITH([pulseaudio],
+ [AS_HELP_STRING([--without-pulseaudio],
+ [do not build with PulseAudio support])],
+ [want_pulseaudio=$withval])
AC_ARG_WITH([oss],
[AS_HELP_STRING([--without-oss],
[do not build with OSS support])],
@@ -94,6 +106,9 @@ AC_ARG_WITH([gtk-osx],
[AS_HELP_STRING([--with-gtk-osx],
[use native GTK+ (OS X only)])],
[want_gtkosx=$withval])
+AC_ARG_WITH([gstreamer],
+ [AS_HELP_STRING([--with-gstreamer], [select GStreamer version])],
+ [want_gstreamer=$withval])
AC_MSG_CHECKING([for a known target platform])
case "$host" in
@@ -158,7 +173,7 @@ case "$host" in
# Look for a suitable version of libdb among the versions found in FreeBSD 7.0
AC_CACHE_CHECK([looking for a libdb install],[rjk_cv_libdb],[
rjk_cv_libdb="none"
- for db in db43 db44 db45 db47; do
+ for db in db43 db44 db45 db47 db48; do
if test -e /usr/local/lib/$db; then
rjk_cv_libdb=$db
break
@@ -169,6 +184,8 @@ case "$host" in
LDFLAGS="${LDFLAGS} -L/usr/local/lib/$rjk_cv_libdb"
CPPFLAGS="${CPPFLAGS} -isystem /usr/local/include/$rjk_cv_libdb"
fi
+ # iconv needs bodging
+ AC_SUBST(LIBICONV,[-liconv])
;;
* )
AC_MSG_RESULT([unknown, winging it])
@@ -183,7 +200,7 @@ AC_ARG_WITH([browser],
AC_CACHE_CHECK([default HTML viewer],[rjk_cv_browser],[
rjk_cv_browser=UNKNOWN
- for candidate in x-www-browser sensible-browser firefox mozilla konqueror netscape; do
+ for candidate in sensible-browser x-www-browser firefox mozilla chromium google-chrome konqueror netscape; do
if type $candidate >/dev/null 2>&1; then
rjk_cv_browser="$candidate"
break
@@ -242,9 +259,14 @@ AC_ARG_WITH([python],
[AS_HELP_STRING([--without-python],
[do not build Python support])],
[want_python=$withval])
+AC_ARG_WITH([gstdecode],
+ [AS_HELP_STRING([--with-gstdecode],
+ [require GStreamer-based decoder])],
+ [want_gstdecode=$withval])
if test $want_server = no; then
want_cgi=no
+ want_gstdecode=no
fi
#
@@ -272,7 +294,7 @@ fi
if test $want_cgi = yes; then
if test -z "$httpdir"; then
AC_CACHE_CHECK([for httpd document root],[rjk_cv_httpdir],[
- rjk_cv_httpdir="not found"
+ rjk_cv_httpdir="/usr/local/apache/htdocs"
for dir in /var/www/html \
/var/www/htdocs \
/var/www/localhost/htdocs \
@@ -288,9 +310,6 @@ if test $want_cgi = yes; then
fi
done
])
- if test "$rjk_cv_httpdir" = "not found"; then
- AC_MSG_ERROR([cannot identify httpd documentroot. Set httpdir on configure command line])
- fi
httpdir="$rjk_cv_httpdir"
fi
if test ! -z "$cgidir"; then
@@ -299,7 +318,7 @@ if test $want_cgi = yes; then
fi
if test -z "$cgiexecdir"; then
AC_CACHE_CHECK([for CGI directory],[rjk_cv_cgiexecdir],[
- rjk_cv_cgiexecdir="not found"
+ rjk_cv_cgiexecdir="/usr/lib/cgi-bin"
for dir in /usr/lib/cgi-bin \
/Library/WebServer/CGI-Executables \
/srv/www/cgi-bin \
@@ -315,9 +334,6 @@ if test $want_cgi = yes; then
fi
done
])
- if test "$rjk_cv_cgiexecdir" = "not found"; then
- AC_MSG_ERROR([cannot identify CGI install directory. Set cgiexecdir on configure command line])
- fi
cgiexecdir="$rjk_cv_cgiexecdir"
fi
fi
@@ -333,7 +349,7 @@ if test -z "$dochtmldir"; then
fi
AC_SUBST([dochtmldir])
-subdirs="scripts lib"
+subdirs="scripts common lib"
if test $want_tests = yes; then
subdirs="${subdirs} libtests"
fi
@@ -430,21 +446,92 @@ fi
AC_SUBST([finkdir])
AC_SUBST([finkbindir])
+# Checks for packages.
+case $want_gstdecode,$want_gstreamer in
+ yes,no) AC_MSG_ERROR([gstdecode requires GStreamer]) ;;
+ whatever,no) want_gstdecode=no ;;
+ no,*) want_gstreamer=no ;;
+ *,yes) want_gstreamer="1.0 0.10" ;;
+esac
+
+AH_TEMPLATE([HAVE_GSTREAMER_0_10],
+ [Define if building against GStreamer 0.10])
+AH_TEMPLATE([HAVE_GSTREAMER_1_0],
+ [Define if building against GStreamer 1.0])
+
+mdw_gstreamer_version=nil
+for i in $want_gstreamer; do
+ case $i in
+ 0.10) v=0.10 V=0_10 ;;
+ 1.0) v=1.0 V=1_0 ;;
+ *) AC_MSG_ERROR([unrecognized GStreamer version]) ;;
+ esac
+ PKG_CHECK_MODULES([GSTREAMER],
+ [gstreamer-$v gstreamer-app-$v gstreamer-audio-$v gstreamer-pbutils-$v],
+ [have_gstreamer=$v], [have_gstreamer=no])
+ case $have_gstreamer in no) continue ;; esac
+ AC_DEFINE_UNQUOTED([HAVE_GSTREAMER_$V], [1])
+ mdw_gstreamer_version=$v
+ break
+done
+
+case $want_gstdecode,$have_gstreamer,$have_gst_plugins_base in
+ whatever,no,* | whatever,*,no)
+ want_gstdecode=no
+ ;;
+ yes,no,* | yes,*,no)
+ case $have_gstreamer in
+ no) missing_libraries="$missing_libraries gstreamer" ;;
+ esac
+ ;;
+ *)
+ want_gstdecode=yes
+ ;;
+esac
+
+mdw_SAVE_CFLAGS=$CFLAGS
+mdw_SAVE_LIBS=$LIBS
+CFLAGS="$CFLAGS $GSTREAMER_CFLAGS"
+LIBS="$LIBS $GSTREAMER_LIBS"
+AC_CHECK_FUNCS([gst_audio_info_from_caps])
+CFLAGS=$mdw_SAVE_CFLAGS
+LIBS=$mdw_SAVE_LIBS
+
# Checks for libraries.
# We save up a list of missing libraries that we can't do without
# and report them all at once.
AC_CHECK_LIB(gc, GC_malloc, [AC_SUBST(LIBGC,[-lgc])],
[missing_libraries="$missing_libraries libgc"])
+mdw_SAVE_LIBS=$LIBS
+LIBS="$LIBS $LIBGC"
+AC_CHECK_FUNCS(GC_get_all_interior_pointers)
+LIBS=$mdw_SAVE_LIBS
AC_CHECK_LIB(gcrypt, gcry_md_open,
[AC_SUBST(LIBGCRYPT,[-lgcrypt])],
[missing_libraries="$missing_libraries libgcrypt"])
-AC_CHECK_LIB(pcre, pcre_compile,
- [AC_SUBST(LIBPCRE,[-lpcre])],
- [missing_libraries="$missing_libraries libpcre"])
+PKG_CHECK_MODULES([PCRE2], [libpcre2-8], [have_pcre2=yes], [have_pcre2=no])
+case $have_pcre2 in
+ yes)
+ CFLAGS="$CFLAGS $PCRE2_CFLAGS" LIBPCRE=$PCRE2_LIBS
+ AC_DEFINE([HAVE_LIBPCRE2], [1], [Define if building with libpcre2.])
+ ;;
+ no)
+ AC_CHECK_LIB(pcre, pcre_compile,
+ [AC_SUBST(LIBPCRE,[-lpcre])],
+ [missing_libraries="$missing_libraries libpcre"])
+ ;;
+esac
if test $want_alsa = yes; then
AC_CHECK_LIB([asound], [snd_pcm_open],
[AC_SUBST(LIBASOUND,[-lasound])])
fi
+if test $want_pulseaudio = yes; then
+ PKG_CHECK_MODULES([PULSEAUDIO],[libpulse],
+ [AC_DEFINE([HAVE_PULSEAUDIO],[1],[define to 1 for PulseAudio support])],
+ [missing_libraries="$missing_libraries libpulse"])
+ PKG_CHECK_MODULES([PULSEAUDIO_SIMPLE],[libpulse-simple],,
+ [missing_libraries="$missing_libraries libpulse-simple"])
+fi
AC_CHECK_LIB([samplerate],[src_new],
[AC_SUBST([LIBSAMPLERATE],[-lsamplerate])])
if test $want_server = yes; then
@@ -461,9 +548,6 @@ if test $want_server = yes; then
AC_CHECK_LIB(mad, mad_stream_init,
[AC_SUBST(LIBMAD,[-lmad])],
[missing_libraries="$missing_libraries libmad"])
- AC_CHECK_LIB([ao], [ao_initialize],
- [AC_SUBST(LIBAO,[-lao])],
- [missing_libraries="$missing_libraries libao"])
AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_new],
[AC_SUBST(LIBFLAC,[-lFLAC])],
[missing_libraries="$missing_libraries libFLAC"])
@@ -516,7 +600,8 @@ fi
if test $want_coreaudio = yes; then
AC_CHECK_HEADERS([CoreAudio/AudioHardware.h])
fi
-AC_CHECK_HEADERS([inttypes.h])
+AC_CHECK_HEADERS([inttypes.h sys/time.h sys/socket.h netinet/in.h \
+ arpa/inet.h sys/un.h netdb.h pwd.h langinfo.h])
# We don't bother checking very standard stuff
# Compilation will fail if any of these headers are missing, so we
# check for them here and fail early.
@@ -527,10 +612,16 @@ if test $want_server = yes; then
fi
AC_CHECK_HEADERS([dlfcn.h gcrypt.h \
getopt.h iconv.h langinfo.h \
- pcre.h sys/ioctl.h \
+ sys/ioctl.h \
syslog.h unistd.h],[:],[
missing_headers="$missing_headers $ac_header"
])
+case $have_pcre2 in
+ no)
+ AC_CHECK_HEADERS([pcre.h], [:],
+ [missing_headers="$missing_headers $ac_header"])
+ ;;
+esac
AC_CHECK_HEADERS([samplerate.h])
if test ! -z "$missing_headers"; then
@@ -538,7 +629,10 @@ if test ! -z "$missing_headers"; then
fi
# We require that libpcre support UTF-8
-RJK_REQUIRE_PCRE_UTF8([-lpcre])
+case $have_pcre2 in
+ yes) RJK_REQUIRE_PCRE2_UTF8([$PCRE2_CFLAGS], [$PCRE2_LIBS]) ;;
+ no) RJK_REQUIRE_PCRE_UTF8([-lpcre]) ;;
+esac
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@@ -564,25 +658,7 @@ fi
old_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} $gcc_werror"
-AC_CHECK_TYPES([long long,uint32_t,uint8_t,intmax_t,uintmax_t])
-
-# Some GCC invocations warn for converting function pointers to void *.
-# This is fair enough, as it's technically forbidden, but we use dlsym()
-# which can pretty much only exist if object and function pointers are
-# interconvertable. So we disable -Werror if need be.
-if test ! -z "$gcc_werror"; then
- AC_CACHE_CHECK([whether function pointers can be converted to void * without a warning],
- [rjk_cv_function_pointer_cast],[
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
- void somefunction(void);],
- [(void *)somefunction])],
- [rjk_cv_function_pointer_cast=yes],
- [rjk_cv_function_pointer_cast=no])])
- if test $rjk_cv_function_pointer_cast = no; then
- gcc_werror=""
- fi
-fi
-
+AC_CHECK_TYPES([long long,uint32_t,uint16_t,uint8_t,intmax_t,uintmax_t])
CFLAGS="${old_CFLAGS}"
# gcrypt maintainers keep changing everything. Design your interface
@@ -650,9 +726,16 @@ AC_CHECK_FUNCS([fdatasync],[:],[
if test ! -z "$missing_functions"; then
AC_MSG_ERROR([missing functions:$missing_functions])
fi
+# dlsym will do if dlfunc not available
+AC_CHECK_FUNCS([dlfunc],[:],[
+ AC_DEFINE([dlfunc],[dlsym],[define dlfunc to dlsym if not available])
+])
+if test ! -z "$missing_functions"; then
+ AC_MSG_ERROR([missing functions:$missing_functions])
+fi
# Functions we can take or leave
-AC_CHECK_FUNCS([fls getfsstat])
+AC_CHECK_FUNCS([fls getfsstat closesocket])
if test $want_server = yes; then
# had better be version 3 or later
@@ -699,6 +782,26 @@ if test $want_gtk = yes; then
AC_DEFINE([WITH_GTK], [1], [define if using GTK+])
fi
AM_CONDITIONAL([GTK], [test x$want_gtk = xyes])
+AM_CONDITIONAL([GSTDECODE], [test x$want_gstdecode = xyes])
+
+# Some GCC invocations warn for converting function pointers to void *.
+# This is fair enough, as it's technically forbidden, but we use dlsym()
+# which can pretty much only exist if object and function pointers are
+# interconvertable. So we disable -Werror if need be.
+if test ! -z "$gcc_werror" && test "$ac_cv_func_dlfunc" != yes; then
+ CFLAGS="${CFLAGS} $gcc_werror"
+ AC_CACHE_CHECK([whether function pointers can be converted to void * without a warning],
+ [rjk_cv_function_pointer_cast],[
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+ void somefunction(void);],
+ [(void *)somefunction])],
+ [rjk_cv_function_pointer_cast=yes],
+ [rjk_cv_function_pointer_cast=no])])
+ if test $rjk_cv_function_pointer_cast = no; then
+ gcc_werror=""
+ fi
+ CFLAGS="${old_CFLAGS}"
+fi
if test "x$GCC" = xyes; then
# We need LLONG_MAX and annoyingly GCC doesn't always give it to us
@@ -729,13 +832,13 @@ if test "x$GCC" = xyes; then
if test $GCC = yes; then
CC="$CC -Wall -Werror"
fi
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
static int x(char *f) {
return *f;
}
int z(const char *g) {
return x((char *)g);
- }])],
+ }],[])],
[rjk_cv_pr29478=no],
[rjk_cv_pr29478=yes]
)
@@ -837,6 +940,7 @@ AH_BOTTOM([#ifdef __GNUC__
AC_CONFIG_FILES([Makefile
images/Makefile
scripts/Makefile
+ common/Makefile
lib/Makefile
server/Makefile
cgi/Makefile
@@ -854,6 +958,16 @@ AC_CONFIG_FILES([Makefile
tests/Makefile])
AC_OUTPUT
+# A hack: communicate our selection of GStreamer version back to the
+# Debian packaging machinery so that it can build the right dependencies.
+echo '### extra control substitutions for Debian' >debian/substvars.auto.new
+case $mdw_gstreamer_version in
+ nil) ;;
+ *) echo >>debian/substvars.auto.new \
+ "disorder:GstVersion=gstreamer$mdw_gstreamer_version" ;;
+esac
+mv debian/substvars.auto.new debian/substvars.auto
+
if test $GCC = yes && test "$gcc_werror" = ''; then
AC_MSG_WARN([building without -Werror])
fi