chiark / gitweb /
Make tests/play.py more reliable.
[disorder] / configure.ac
index 2082670d8492aec5a7fcd4014bd21226f47b4d84..22c47f6dd50aaeead06ef4ec6fa5b8c74a47a058 100644 (file)
@@ -2,6 +2,7 @@
 #
 # This file is part of DisOrder.
 # Copyright (C) 2004, 2005, 2006, 2007 Richard Kettlewell
+# Portions copyright (C) 2007 Ross Younger
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -19,9 +20,9 @@
 # USA
 #
 
-AC_INIT(disorder, 1.5.99+, richard+disorder@sfere.greenend.org.uk)
+AC_INIT([disorder], [2.0+], [richard+disorder@sfere.greenend.org.uk])
 AC_CONFIG_AUX_DIR([config.aux])
-AM_INIT_AUTOMAKE(disorder, 1.5.99+)
+AM_INIT_AUTOMAKE(disorder, [2.0+])
 AC_CONFIG_SRCDIR([server/disorderd.c])
 AM_CONFIG_HEADER([config.h])
 
@@ -29,18 +30,13 @@ AM_CONFIG_HEADER([config.h])
 AC_CANONICAL_HOST
 
 # What we want to build
-want_server=yes
 want_gtk=yes
 want_python=yes
 
-case "$host" in
-*linux* | *Linux* )
-  want_alsa=yes
-  ;;
-* )
-  want_alsa=no
-  ;;
-esac
+# APIs we want
+want_alsa=yes
+want_oss=yes
+want_coreaudio=yes
 
 # Checks for programs.
 AC_PROG_CC
@@ -51,6 +47,78 @@ else
   gcc_werror=""
 fi
 
+AC_ARG_WITH([alsa],
+           [AS_HELP_STRING([--without-alsa],
+                           [do not build with ALSA support])],
+           [want_alsa=$withval])
+AC_ARG_WITH([oss],
+           [AS_HELP_STRING([--without-oss],
+                           [do not build with OSS support])],
+           [want_oss=$withval])
+AC_ARG_WITH([coreaudio],
+           [AS_HELP_STRING([--without-coreaudio],
+                           [do not build with Core Audio support])],
+           [want_coreaudio=$withval])
+
+AC_MSG_CHECKING([for a known target platform])
+case "$host" in
+*empeg* )
+  AC_MSG_RESULT([empeg car stereo])
+  AC_DEFINE([EMPEG_HOST],[1],[define if host is an empeg car stereo])
+  # work around broken toolchain
+  AC_CHECK_LIB([gpg-error], [gpg_strerror])
+  AC_CHECK_LIB([pthread], [pthread_create])
+  want_server=no
+ ;;
+*linux* | *Linux* )
+  AC_MSG_RESULT([Linux])
+  want_server=yes
+  ;;
+*-apple-darwin* )
+  AC_MSG_RESULT([Mac OS X])
+  want_server=yes
+  if test $want_coreaudio = yes; then
+    COREAUDIO="-framework CoreAudio"
+  fi
+  browser=open
+  ;;
+*-freebsd* )
+  AC_MSG_RESULT([FreeBSD])
+  want_server=yes
+  # Ports install to /usr/local but the compiler stupidly doesn't look
+  # there by default
+  LDFLAGS="${LDFLAGS} -L/usr/local/lib"
+  CPPFLAGS="${CPPFLAGS} -isystem /usr/local/include"
+  # libdb installs elsewhere again
+  LDFLAGS="${LDFLAGS} -L/usr/local/lib/db44"
+  CPPFLAGS="${CPPFLAGS} -isystem /usr/local/include/db44"
+  ;;
+* )
+  AC_MSG_RESULT([unknown, winging it])
+  want_server=no
+  ;;
+esac
+AC_SUBST([COREAUDIO])
+
+AC_ARG_WITH([browser],
+            [AS_HELP_STRING([--with-browser=BROWSER],
+                           [use BROWSER to display HTML])],
+            [browser=$withval])
+
+AC_CACHE_CHECK([default HTML viewer],[rjk_cv_browser],[
+  rjk_cv_browser=UNKNOWN
+  for candidate in x-www-browser firefox mozilla konqueror netscape; do
+    if type $candidate >/dev/null 2>&1; then
+      rjk_cv_browser="$candidate"
+      break
+    fi
+  done
+])
+if test -z "$browser"; then
+  browser="$rjk_cv_browser"
+fi
+AC_DEFINE_UNQUOTED([BROWSER],["$browser"],[HTML viewer])
+
 AC_ARG_WITH([server],
            [AS_HELP_STRING([--without-server],
                            [do not build server])],
@@ -64,21 +132,21 @@ AC_ARG_WITH([python],
                            [do not build Python support])],
            [want_python=$withval])
 
-subdirs="scripts lib clients doc examples debian tests"
+subdirs="scripts lib clients doc examples debian"
 
 if test $want_server = yes; then
   subdirs="${subdirs} server plugins driver templates sounds images"
 fi
-if test $want_python = yes; then
-  AM_PATH_PYTHON
-  subdirs="${subdirs} python"
-fi
 if test $want_gtk = yes; then
   subdirs="${subdirs} disobedience"
   if test $want_server = no; then
     subdirs="${subdirs} images"
   fi
 fi
+if test $want_python = yes; then
+  AM_PATH_PYTHON([2.4])
+  subdirs="${subdirs} python tests"
+fi
 AC_SUBST([subdirs])
 
 # libtool config
@@ -87,6 +155,20 @@ AC_DISABLE_STATIC
 
 AC_PROG_LIBTOOL
 
+AC_CACHE_CHECK([for GNU sed],[rjk_cv_gnused],[
+  rjk_cv_gnused="not found"
+  for candidate in sed gsed; do
+    if $candidate --version >/dev/null 2>&1; then
+      rjk_cv_gnused=$candidate 
+    fi
+  done
+])
+GNUSED="${GNUSED:-$rjk_cv_gnused}"
+if test "$GNUSED" = "not found"; then
+  AC_MSG_ERROR([GNU sed is required to build this program])
+fi
+AC_SUBST([GNUSED])
+
 missing_libraries=""
 missing_headers=""
 missing_functions=""
@@ -99,12 +181,18 @@ if test "x$FINK" != xnone; then
   AC_CACHE_CHECK([fink install directory],[rjk_cv_finkprefix],[
     rjk_cv_finkprefix="`echo "$FINK" | sed 's,/bin/fink$,,'`"
   ])
+  finkdir="${rjk_cv_finkprefix}"
+  finkbindir="${rjk_cv_finkprefix}/bin"
   CPPFLAGS="${CPPFLAGS} -I${rjk_cv_finkprefix}/include/gc -I${rjk_cv_finkprefix}/include"
   if test $want_server = yes; then
     CPPFLAGS="${CPPFLAGS} -I${rjk_cv_finkprefix}/include/db4"
   fi
   LDFLAGS="${LDFLAGS} -L${rjk_cv_finkprefix}/lib"
+else
+  finkbindir=""
 fi
+AC_SUBST([finkdir])
+AC_SUBST([finkbindir])
 
 # Checks for libraries.
 # We save up a list of missing libraries that we can't do without
@@ -117,6 +205,10 @@ AC_CHECK_LIB(gcrypt, gcry_md_open,
 AC_CHECK_LIB(pcre, pcre_compile,
             [AC_SUBST(LIBPCRE,[-lpcre])],
             [missing_libraries="$missing_libraries libpcre"])
+if test $want_alsa = yes; then
+  AC_CHECK_LIB([asound], [snd_pcm_open],
+               [AC_SUBST(LIBASOUND,[-lasound])])
+fi
 if test $want_server = yes; then
   RJK_CHECK_LIB(db, db_create, [#include <db.h>],
               [AC_SUBST(LIBDB,[-ldb])],
@@ -134,13 +226,13 @@ if test $want_server = yes; then
   AC_CHECK_LIB([ao], [ao_initialize],
               [AC_SUBST(LIBAO,[-lao])],
               [missing_libraries="$missing_libraries libao"])
-  if test $want_alsa = yes; then
-    AC_CHECK_LIB([asound], [snd_pcm_open],
-                [AC_SUBST(LIBASOUND,[-lasound])],
-                [missing_libraries="$missing_libraries libasound"])
-    AC_DEFINE([API_ALSA],[1],[define to use the ALSA API])
-  fi
+  AC_CHECK_LIB([FLAC], [FLAC__stream_decoder_new],
+              [AC_SUBST(LIBFLAC,[-lFLAC])],
+              [missing_libraries="$missing_libraries libFLAC"])
 fi
+AC_CHECK_LIB([pthread], [pthread_create],
+             [AC_SUBST(LIBPTHREAD,[-lpthread])],
+            [missing_libraries="$missing_libraries libpthread"])
 
 if test $want_gtk = yes; then
   AM_PATH_GLIB_2_0([],[],[missing_libraries="$missing_libraries libglib"])
@@ -169,20 +261,26 @@ if test ! -z "$missing_libraries"; then
   AC_MSG_ERROR([missing libraries:$missing_libraries])
 fi
 
-# We require that libpcre support UTF-8
-RJK_REQUIRE_PCRE_UTF8([-lpcre])
-
 # Checks for header files.
 RJK_FIND_GC_H
+if test $want_oss = yes; then
+  AC_CHECK_HEADERS([sys/soundcard.h])
+fi
+if test $want_alsa = yes; then
+  AC_CHECK_HEADERS([alsa/asoundlib.h])
+fi
+if test $want_coreaudio = yes; then
+  AC_CHECK_HEADERS([CoreAudio/AudioHardware.h])
+fi
 AC_CHECK_HEADERS([inttypes.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.
-# We don't bother checking very standard stuff
 if test $want_server = yes; then
   AC_CHECK_HEADERS([db.h],[:],[
     missing_headers="$missing_headers $ac_header"
   ])
-  AC_CHECK_HEADERS([sys/soundcard.h]) dnl can cope without
+  AC_CHECK_HEADERS([FLAC/file_decoder.h])
 fi
 AC_CHECK_HEADERS([dlfcn.h gcrypt.h \
                 getopt.h iconv.h langinfo.h \
@@ -195,6 +293,9 @@ if test ! -z "$missing_headers"; then
   AC_MSG_ERROR([missing headers:$missing_headers])
 fi
 
+# We require that libpcre support UTF-8
+RJK_REQUIRE_PCRE_UTF8([-lpcre])
+
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_TYPE_SIZE_T
@@ -304,7 +405,7 @@ if test $want_server = yes; then
                       #if DB_VERSION_MAJOR < 4
                       # error inadequate db version
                       #endif
-                      #if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 2
+                      #if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR <= 2
                       # error inadequate db version
                       #endif
                      ],
@@ -317,6 +418,28 @@ if test $want_server = yes; then
 fi
 
 if test "x$GCC" = xyes; then
+  # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29478
+  AC_CACHE_CHECK([checking for GCC bug 29478],[rjk_cv_pr29478],[
+    old_CC="$CC"
+    if test $GCC = yes; then
+      CC="$CC -Wall -Werror"
+    fi
+    AC_COMPILE_IFELSE([
+      static int x(char *f) {
+       return *f;
+      }
+      int z(const char *g) {
+       return x((char *)g);
+      }],
+      [rjk_cv_pr29478=no],
+      [rjk_cv_pr29478=yes]
+    )
+    CC="$old_CC"
+  ])
+  if test $rjk_cv_pr29478 = yes; then
+    gcc_werror=''
+  fi
+
   # a reasonable default set of warnings
   CC="${CC} -Wall -W -Wpointer-arith -Wbad-function-cast \
        -Wwrite-strings -Wmissing-prototypes \
@@ -326,19 +449,21 @@ if test "x$GCC" = xyes; then
   GTK_CFLAGS="`echo \"$GTK_CFLAGS\"|sed 's/-I/-isystem /g'`"
   GLIB_CFLAGS="`echo \"$GLIB_CFLAGS\"|sed 's/-I/-isystem /g'`"
 
-  # GCC 2.95 doesn't know to ignore warnings from system headers
-  AC_CACHE_CHECK([whether -Werror is usable],
-                  rjk_cv_werror, [
-    save_CFLAGS="${CFLAGS}"
-    CFLAGS="${CFLAGS} ${GTK_CFLAGS} -Werror"
-    AC_TRY_COMPILE([#include <gtk/gtk.h>],
-                   [],
-                   [rjk_cv_werror=yes],
-                   [rjk_cv_werror=no])
-    CFLAGS="${save_CFLAGS}"
-  ])
-  if test $rjk_cv_werror = no; then
-    gcc_werror=''
+  if test "$gcc_werror" != ''; then
+    # GCC 2.95 doesn't know to ignore warnings from system headers
+    AC_CACHE_CHECK([whether -Werror is usable],
+                   rjk_cv_werror, [
+      save_CFLAGS="${CFLAGS}"
+      CFLAGS="${CFLAGS} ${GTK_CFLAGS} -Werror"
+      AC_TRY_COMPILE([#include <gtk/gtk.h>],
+                    [],
+                    [rjk_cv_werror=yes],
+                    [rjk_cv_werror=no])
+      CFLAGS="${save_CFLAGS}"
+    ])
+    if test $rjk_cv_werror = no; then
+      gcc_werror=''
+    fi
   fi
   CC="${CC} $gcc_werror"
 
@@ -370,10 +495,10 @@ if test "x$GCC" = xyes; then
   if test $rjk_cv_shadow = yes; then
     CC="${CC} -Wshadow"
   fi
-                  
-
 fi
 
+RJK_GCOV
+
 AH_BOTTOM([#ifdef __GNUC__
 # define attribute(x) __attribute__(x)
 #else
@@ -397,3 +522,10 @@ AC_CONFIG_FILES([Makefile
                 examples/Makefile
                 tests/Makefile])
 AC_OUTPUT
+
+if test $GCC = yes && test "$gcc_werror" = ''; then
+  AC_MSG_WARN([building without -Werror])
+fi
+if test $want_python = no; then
+  AC_MSG_WARN([cannot run the test suit without Python])
+fi