2003-09-21 Seth Nickell <seth@gnome.org>
[platform/upstream/dbus.git] / configure.in
index 1b71774..6cf4acc 100644 (file)
@@ -3,7 +3,7 @@ AC_PREREQ(2.52)
 
 AC_INIT(dbus/dbus.h)
 
-AM_INIT_AUTOMAKE(dbus, 0.10)
+AM_INIT_AUTOMAKE(dbus, 0.11)
 
 AM_CONFIG_HEADER(config.h)
 
@@ -21,17 +21,22 @@ AC_PROG_CC
 AC_PROG_CXX
 AC_ISC_POSIX
 AC_HEADER_STDC
-AM_PROG_LIBTOOL
 
-AC_ARG_ENABLE(qt,      [  --enable-qt      enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto)
-AC_ARG_ENABLE(glib,    [  --enable-glib    enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
-AC_ARG_ENABLE(tests,   [  --enable-tests   enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
-AC_ARG_ENABLE(ansi,    [  --enable-ansi    enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
-AC_ARG_ENABLE(verbose-mode, [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
-AC_ARG_ENABLE(asserts, [  --enable-asserts include assertion checks],enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
-AC_ARG_ENABLE(checks,  [  --enable-checks  include sanity checks on public API],enable_checks=$enableval,enable_checks=yes)
-AC_ARG_ENABLE(docs,    [  --enable-docs    build documentation (requires Doxygen and jade)],enable_docs=$enableval,enable_docs=auto)
-AC_ARG_ENABLE(gcov,    [  --enable-gcov    compile with coverage profiling instrumentation (gcc only)],enable_gcov=$enableval,enable_gcov=no)
+AC_ARG_ENABLE(qt,               [  --enable-qt           enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto)
+AC_ARG_ENABLE(glib,             [  --enable-glib         enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
+AC_ARG_ENABLE(gtk,              [  --enable-gtk          enable GTK-requiring executables],enable_gtk=$enableval,enable_gtk=auto)
+AC_ARG_ENABLE(tests,            [  --enable-tests        enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(ansi,             [  --enable-ansi         enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
+AC_ARG_ENABLE(verbose-mode,     [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(asserts,          [  --enable-asserts      include assertion checks],enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(checks,           [  --enable-checks       include sanity checks on public API],enable_checks=$enableval,enable_checks=yes)
+AC_ARG_ENABLE(docs,             [  --enable-docs         build documentation (requires Doxygen and jade)],enable_docs=$enableval,enable_docs=auto)
+AC_ARG_ENABLE(gcov,             [  --enable-gcov         compile with coverage profiling instrumentation (gcc only)],enable_gcov=$enableval,enable_gcov=no)
+AC_ARG_ENABLE(abstract-sockets, [  --enable-abstract-sockets  use abstract socket namespace (linux only)],enable_abstract_sockets=$enableval,enable_abstract_sockets=auto)
+AC_ARG_ENABLE(gcj,              [  --enable-gcj          build gcj bindings],enable_gcj=$enableval,enable_gcj=no)
+AC_ARG_ENABLE(mono,             [  --enable-mono         build mono bindings],enable_mono=$enableval,enable_mono=no)
+AC_ARG_ENABLE(python,           [  --enable-python       build python bindings],enable_python=$enableval,enable_python=auto)
+
 
 AC_ARG_WITH(xml,                [  --with-xml=[libxml/expat]           XML library to use])
 AC_ARG_WITH(init-scripts,       [  --with-init-scripts=[redhat]        Style of init scripts to install])
@@ -52,9 +57,11 @@ if test x$enable_verbose_mode = xyes; then
 fi
 if test x$enable_asserts = xno; then
     AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
+    AC_DEFINE(G_DISABLE_ASSERT,1,[Disable GLib assertion macros])
 fi
 if test x$enable_checks = xno; then
     AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
+    AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
 fi
 
 #### gcc warning flags
@@ -108,6 +115,16 @@ if test "x$GCC" = "xyes"; then
     esac
 
     case " $CFLAGS " in
+    *[\ \      ]-D_POSIX_C_SOURCE*) ;;
+    *) CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=199309L" ;;
+    esac
+
+    case " $CFLAGS " in
+    *[\ \      ]-D_BSD_SOURCE[\ \      ]*) ;;
+    *) CFLAGS="$CFLAGS -D_BSD_SOURCE" ;;
+    esac
+
+    case " $CFLAGS " in
     *[\ \      ]-pedantic[\ \  ]*) ;;
     *) CFLAGS="$CFLAGS -pedantic" ;;
     esac
@@ -132,6 +149,67 @@ else
   fi
 fi
 
+#### can't use AM_PROG_GCJ since it fails fatally if no gcj found
+AC_CHECK_PROGS(GCJ, gcj, gcj)
+if test -z "$GCJ" ; then
+     have_gcj=no
+else
+     # Needs to be here so libtool wont get confused
+     AM_PROG_GCJ
+
+     have_gcj=yes
+     if test "x${GCJFLAGS-unset}" = xunset; then
+        GCJFLAGS="-g -O2 -Wall"
+     fi
+     AC_SUBST(GCJFLAGS)
+fi
+
+if test x$enable_gcj = xauto ; then
+    if test x$have_gcj = xno ; then
+        enable_gcj=no
+    else
+        enable_gcj=yes
+    fi
+fi
+
+if test x$enable_gcj = xyes; then
+    if test x$have_gcj = xno ; then
+       AC_MSG_ERROR([Building gcj explicitly required, but gcj not found])
+    fi
+fi
+
+AM_CONDITIONAL(DBUS_USE_GCJ, test x$enable_gcj = xyes)
+
+AM_PROG_LIBTOOL
+
+#### Look for mono
+AC_CHECK_TOOL(MCS, mcs, mcs)
+if test -z "$MCS" ; then
+     have_mcs=no
+else
+     have_mcs=yes
+     if test "x${MCSFLAGS-unset}" = xunset; then
+        MCSFLAGS="" ### put default MCSFLAGS here
+     fi
+     AC_SUBST(MCSFLAGS)
+fi
+
+if test x$enable_mono = xauto ; then
+    if test x$have_mcs = xno ; then
+        enable_mono=no
+    else
+        enable_mono=yes
+    fi
+fi
+
+if test x$enable_mono = xyes; then
+    if test x$have_mcs = xno ; then
+       AC_MSG_ERROR([Building Mono bindings explicitly required, but mcs compiler not found])
+    fi
+fi
+
+AM_CONDITIONAL(DBUS_USE_MCS, test x$enable_mono = xyes)
+
 changequote(,)dnl
 # let ourselves use our own unstable API
 CPPFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE=1 $CPPFLAGS"
@@ -209,19 +287,23 @@ AC_C_BIGENDIAN
 AC_MSG_CHECKING([whether to use inline assembler routines for atomic integers])
 have_atomic_inc=no
 if test x"$GCC" = xyes; then
-  case $host_cpu in
-    i386)
-      AC_MSG_RESULT([no])
-      ;;
-    i?86)
-      AC_MSG_RESULT([i486])
-      AC_DEFINE_UNQUOTED(DBUS_USE_ATOMIC_INT_486, 1, [Use atomic integer implementation for 486])
-      have_atomic_inc=yes
-      ;;
-    *)
-      AC_MSG_RESULT([no])
-      ;;
-  esac
+  if test "x$enable_ansi" = "xyes"; then
+    AC_MSG_RESULT([no])
+  else
+    case $host_cpu in
+      i386)
+        AC_MSG_RESULT([no])
+        ;;
+      i?86)
+        AC_MSG_RESULT([i486])
+        AC_DEFINE_UNQUOTED(DBUS_USE_ATOMIC_INT_486, 1, [Use atomic integer implementation for 486])
+        have_atomic_inc=yes
+        ;;
+      *)
+        AC_MSG_RESULT([no])
+        ;;
+    esac
+  fi
 fi
 if test x$have_atomic_inc = xyes ; then
   AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT, 1, [Some atomic integer implementation present])
@@ -271,6 +353,22 @@ else
        fi
 fi
 
+dnl check for socklen_t
+AC_MSG_CHECKING(whether socklen_t is defined)
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+],[
+socklen_t foo;
+foo = 1;
+],dbus_have_socklen_t=yes,dbus_have_socklen_t=no)
+AC_MSG_RESULT($dbus_have_socklen_t)
+
+if test "x$dbus_have_socklen_t" = "xyes"; then
+    AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
+fi
+
 dnl check for writev header and writev function so we're 
 dnl good to go if HAVE_WRITEV gets defined.
 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
@@ -317,6 +415,75 @@ if test x$dbus_have_struct_cmsgcred = xyes; then
 fi
 
 
+#### Abstract sockets
+
+AC_MSG_CHECKING(abstract socket namespace)
+AC_LANG_PUSH(C)
+AC_RUN_IFELSE([AC_LANG_PROGRAM(
+[[
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <errno.h>
+]],
+[[
+  int listen_fd;
+  struct sockaddr_un addr;
+  
+  listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
+  
+  if (listen_fd < 0)
+    {
+      fprintf (stderr, "socket() failed: %s\n", strerror (errno));
+      exit (1);
+    }
+
+  memset (&addr, '\0', sizeof (addr));
+  addr.sun_family = AF_UNIX;
+  strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
+  addr.sun_path[0] = '\0'; /* this is what makes it abstract */
+  
+  if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
+    {
+       fprintf (stderr, "Abstract socket namespace bind() failed: %s\n", 
+                strerror (errno));
+       exit (1);
+    }
+  else 
+    exit (0);
+]])],
+              [have_abstract_sockets=yes],
+              [have_abstract_sockets=no])
+AC_LANG_POP(C)
+AC_MSG_RESULT($have_abstract_sockets)
+
+if test x$enable_abstract_sockets = xyes; then
+    if test x$have_abstract_sockets = xno; then
+       AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
+    fi
+fi
+
+if test x$enable_abstract_sockets = xno; then
+   have_abstract_sockets=no;
+fi
+
+if test x$have_abstract_sockets = xyes ; then
+   abstract_sockets=1
+   DBUS_PATH_OR_ABSTRACT=abstract
+else
+   abstract_sockets=0
+   DBUS_PATH_OR_ABSTRACT=path
+fi
+
+AC_DEFINE_UNQUOTED(HAVE_ABSTRACT_SOCKETS, $abstract_sockets, [Have abstract socket namespace])
+
+# this is used in addresses to prefer abstract, e.g. 
+# unix:path=/foo or unix:abstract=/foo 
+AC_SUBST(DBUS_PATH_OR_ABSTRACT)
+
 #### Sort out XML library
 
 # see what we have
@@ -383,7 +550,7 @@ AC_SUBST(DBUS_TEST_CFLAGS)
 AC_SUBST(DBUS_TEST_LIBS)
 
 # Glib detection
-PKG_CHECK_MODULES(DBUS_GLIB, glib-2.0, have_glib=yes, have_glib=no)
+PKG_CHECK_MODULES(DBUS_GLIB, gobject-2.0, have_glib=yes, have_glib=no)
 PKG_CHECK_MODULES(DBUS_GLIB_THREADS, glib-2.0 gthread-2.0, have_glib_threads=yes, have_glib_threads=no)
 
 if test x$have_glib = xno ; then
@@ -408,6 +575,39 @@ AC_SUBST(DBUS_GLIB_CFLAGS)
 AC_SUBST(DBUS_GLIB_LIBS)
 AC_SUBST(DBUS_GLIB_THREADS_LIBS)
 
+DBUS_GLIB_TOOL_CFLAGS=$XML_CFLAGS
+DBUS_GLIB_TOOL_LIBS=$XML_LIBS
+AC_SUBST(DBUS_GLIB_TOOL_CFLAGS)
+AC_SUBST(DBUS_GLIB_TOOL_LIBS)
+
+# GTK detection
+if test x$have_glib = xno ; then
+    AC_MSG_WARN([Can't use GTK+ since GLib not enabled])
+    have_gtk=no
+else
+    PKG_CHECK_MODULES(DBUS_GTK, gtk+-2.0, have_gtk=yes, have_gtk=no)
+fi
+
+if test x$have_gtk = xno ; then
+    AC_MSG_WARN([GTK+ development libraries not found])
+fi
+
+if test x$enable_gtk = xyes; then
+    if test x$have_gtk = xno; then
+       AC_MSG_ERROR([GTK+ explicitly required, and GTK+ development libraries not found])
+    fi
+fi
+
+if test x$enable_gtk = xno; then
+   have_gtk=no;
+fi
+
+AM_CONDITIONAL(HAVE_GTK, test x$have_gtk = xyes)
+
+dnl Gtk flags
+AC_SUBST(DBUS_GTK_CFLAGS)
+AC_SUBST(DBUS_GTK_LIBS)
+
 # Qt detection
 have_qt=no
 AC_MSG_CHECKING([for qglobal.h])
@@ -633,8 +833,45 @@ if ! test -z "$with_session_socket_dir" ; then
 else
    DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
 fi
+AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
 AC_SUBST(DBUS_SESSION_SOCKET_DIR)
 
+# Detect if we can build Python bindings (need python, python headers, and pyrex)
+if test x$enable_python = xno; then
+    have_python=no
+else
+    AC_MSG_NOTICE([Checking to see if we can build Python bindings])
+    have_python=no
+    AM_PATH_PYTHON(2.2)
+
+    if test -z "$PYTHON" ; then
+        AC_MSG_WARN([Python not found])
+    else
+        AC_CHECK_PROGS(PYREX, pyrexc)
+
+        if test -z "$PYREX" ; then
+            have_pyrex=no
+        else
+            have_pyrex=yes
+        fi
+
+        AM_CHECK_PYTHON_HEADERS(have_python_headers=yes,have_python_headers=no)
+
+       if test x$have_pyrex = xyes -a x$have_python_headers = xyes ; then
+           have_python=yes
+        fi
+    fi
+
+    if test x$have_python = xno ; then
+        if test x$enable_python = xyes ; then
+            AC_MSG_ERROR([Building python explicitly requested, but can't build python bindings])
+        else
+            AC_MSG_WARN([Couldn't find either Pyrex or the Python headers, not building Python bindings])
+        fi
+    fi               
+fi
+
+AM_CONDITIONAL(HAVE_PYTHON, test x$have_python = xyes)
 
 
 AC_OUTPUT([
@@ -647,10 +884,17 @@ bus/dbus-daemon-1.1
 Makefile
 dbus/Makefile
 glib/Makefile
+python/Makefile
 qt/Makefile
+gcj/Makefile
+gcj/org/Makefile
+gcj/org/freedesktop/Makefile
+gcj/org/freedesktop/dbus/Makefile
+mono/Makefile
 bus/Makefile
 tools/Makefile
 test/Makefile
+test/glib/Makefile
 doc/Makefile
 dbus-1.pc
 dbus-glib-1.pc
@@ -676,9 +920,31 @@ echo "
        cflags:                   ${CFLAGS}
        cppflags:                 ${CPPFLAGS}
        cxxflags:                 ${CXXFLAGS}
+       64-bit int:               ${DBUS_INT64_TYPE}
         Doxygen:                  ${DOXYGEN}
-        db2html:                  ${DB2HTML}
+        db2html:                  ${DB2HTML}"
+
+if test x$enable_gcj = xyes ; then
+echo \
+"        gcj:                    ${GCJ}
+       gcjflags:                 ${GCJFLAGS}"
+else
+echo \
+"        gcj:                      (not enabled)"
+fi
 
+if test x$enable_mono = xyes ; then
+echo \
+"        mcs:                    ${MCS}
+       mcsflags:                 ${MCSFLAGS}
+"
+else
+echo \
+"        mcs:                      (not enabled)
+"
+fi
+
+echo "
         Maintainer mode:          ${USE_MAINTAINER_MODE}
         gcc coverage profiling:   ${enable_gcov}
         Building unit tests:      ${enable_tests}
@@ -687,10 +953,13 @@ echo "
         Building checks:          ${enable_checks}
         Building Qt bindings:     ${have_qt}
         Building GLib bindings:   ${have_glib}
+        Building Python bindings: ${have_python}
+        Building GTK+ tools:      ${have_gtk}
         Building X11 code:        ${enable_x11}
         Building documentation:   ${enable_docs}
         Using XML parser:         ${with_xml}
         Init scripts style:       ${with_init_scripts}
+        Abstract socket names:    ${have_abstract_sockets}
         System bus socket:        ${DBUS_SYSTEM_SOCKET}
         System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
         Session bus socket dir:   ${DBUS_SESSION_SOCKET_DIR}