AC_INIT(dbus/dbus.h)
-AM_INIT_AUTOMAKE(dbus, 0.10)
+AM_INIT_AUTOMAKE(dbus, 0.11)
AM_CONFIG_HEADER(config.h)
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])
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
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
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"
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])
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)])
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
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
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])
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([
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
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}
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}