2003-06-22 Havoc Pennington <hp@pobox.com>
[platform/upstream/dbus.git] / configure.in
1 dnl -*- mode: m4 -*-
2 AC_PREREQ(2.52)
3
4 AC_INIT(dbus/dbus.h)
5
6 AM_INIT_AUTOMAKE(dbus, 0.11)
7
8 AM_CONFIG_HEADER(config.h)
9
10 # Honor aclocal flags
11 ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
12
13 GETTEXT_PACKAGE=dbus-1
14 AC_SUBST(GETTEXT_PACKAGE)
15 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
16
17  ## must come before we use the $USE_MAINTAINER_MODE variable later
18 AM_MAINTAINER_MODE
19
20 AC_PROG_CC
21 AC_PROG_CXX
22 AC_ISC_POSIX
23 AC_HEADER_STDC
24 AM_PROG_LIBTOOL
25
26 AC_ARG_ENABLE(qt,               [  --enable-qt           enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto)
27 AC_ARG_ENABLE(glib,             [  --enable-glib         enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
28 AC_ARG_ENABLE(tests,            [  --enable-tests        enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
29 AC_ARG_ENABLE(ansi,             [  --enable-ansi         enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
30 AC_ARG_ENABLE(verbose-mode,     [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
31 AC_ARG_ENABLE(asserts,          [  --enable-asserts      include assertion checks],enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
32 AC_ARG_ENABLE(checks,           [  --enable-checks       include sanity checks on public API],enable_checks=$enableval,enable_checks=yes)
33 AC_ARG_ENABLE(docs,             [  --enable-docs         build documentation (requires Doxygen and jade)],enable_docs=$enableval,enable_docs=auto)
34 AC_ARG_ENABLE(gcov,             [  --enable-gcov         compile with coverage profiling instrumentation (gcc only)],enable_gcov=$enableval,enable_gcov=no)
35 AC_ARG_ENABLE(abstract-sockets, [  --enable-abstract-sockets  use abstract socket namespace (linux only)],enable_abstract_sockets=$enableval,enable_abstract_sockets=auto)
36 AC_ARG_ENABLE(gcj,              [  --enable-gcj          build gcj bindings],enable_gcj=$enableval,enable_gcj=no)
37 AC_ARG_ENABLE(mono,             [  --enable-mono         build mono bindings],enable_mono=$enableval,enable_mono=no)
38
39 AC_ARG_WITH(xml,                [  --with-xml=[libxml/expat]           XML library to use])
40 AC_ARG_WITH(init-scripts,       [  --with-init-scripts=[redhat]        Style of init scripts to install])
41 AC_ARG_WITH(session-socket-dir, [  --with-session-socket-dir=[dirname] Where to put sockets for the per-login-session message bus])
42 AC_ARG_WITH(test-socket-dir,    [  --with-test-socket-dir=[dirname]    Where to put sockets for make check])
43 AC_ARG_WITH(system-pid-file,    [  --with-system-pid-file=[pidfile]    PID file for systemwide daemon])
44 AC_ARG_WITH(system-socket,      [  --with-system-socket=[filename]     UNIX domain socket for systemwide daemon])
45
46 dnl DBUS_BUILD_TESTS controls unit tests built in to .c files 
47 dnl and also some stuff in the test/ subdir
48 AM_CONDITIONAL(DBUS_BUILD_TESTS, test x$enable_tests = xyes)
49 if test x$enable_tests = xyes; then
50     AC_DEFINE(DBUS_BUILD_TESTS,1,[Build test code])
51 fi
52
53 if test x$enable_verbose_mode = xyes; then
54     AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
55 fi
56 if test x$enable_asserts = xno; then
57     AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
58 fi
59 if test x$enable_checks = xno; then
60     AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
61 fi
62
63 #### gcc warning flags
64
65 if test "x$GCC" = "xyes"; then
66   changequote(,)dnl
67   case " $CFLAGS " in
68   *[\ \ ]-Wall[\ \      ]*) ;;
69   *) CFLAGS="$CFLAGS -Wall" ;;
70   esac
71
72   case " $CFLAGS " in
73   *[\ \ ]-Wchar-subscripts[\ \  ]*) ;;
74   *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
75   esac
76
77   case " $CFLAGS " in
78   *[\ \ ]-Wmissing-declarations[\ \     ]*) ;;
79   *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
80   esac
81
82   case " $CFLAGS " in
83   *[\ \ ]-Wmissing-prototypes[\ \       ]*) ;;
84   *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
85   esac
86
87   case " $CFLAGS " in
88   *[\ \ ]-Wnested-externs[\ \   ]*) ;;
89   *) CFLAGS="$CFLAGS -Wnested-externs" ;;
90   esac
91
92   case " $CFLAGS " in
93   *[\ \ ]-Wpointer-arith[\ \    ]*) ;;
94   *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
95   esac
96
97   case " $CFLAGS " in
98   *[\ \ ]-Wcast-align[\ \       ]*) ;;
99   *) CFLAGS="$CFLAGS -Wcast-align" ;;
100   esac
101
102   case " $CFLAGS " in
103   *[\ \ ]-Wsign-compare[\ \     ]*) ;;
104   *) CFLAGS="$CFLAGS -Wsign-compare" ;;
105   esac
106
107   if test "x$enable_ansi" = "xyes"; then
108     case " $CFLAGS " in
109     *[\ \       ]-ansi[\ \      ]*) ;;
110     *) CFLAGS="$CFLAGS -ansi" ;;
111     esac
112
113     case " $CFLAGS " in
114     *[\ \       ]-pedantic[\ \  ]*) ;;
115     *) CFLAGS="$CFLAGS -pedantic" ;;
116     esac
117   fi
118   if test x$enable_gcov = xyes; then
119     case " $CFLAGS " in
120     *[\ \       ]-fprofile-arcs[\ \     ]*) ;;
121     *) CFLAGS="$CFLAGS -fprofile-arcs" ;;
122     esac
123     case " $CFLAGS " in
124     *[\ \       ]-ftest-coverage[\ \    ]*) ;;
125     *) CFLAGS="$CFLAGS -ftest-coverage" ;;
126     esac
127
128     ## remove optimization
129     CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'`
130   fi
131   changequote([,])dnl
132 else
133   if test x$enable_gcov = xyes; then
134     AC_MSG_ERROR([--enable-gcov can only be used with gcc])
135   fi
136 fi
137
138 #### can't use AM_PROG_GCJ since it fails fatally if no gcj found
139 AC_CHECK_PROGS(GCJ, gcj, gcj)
140 if test -z "$GCJ" ; then
141      have_gcj=no
142 else
143      have_gcj=yes
144      if test "x${GCJFLAGS-unset}" = xunset; then
145         GCJFLAGS="-g -O2 -Wall"
146      fi
147      AC_SUBST(GCJFLAGS)
148      _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(GCJ)])
149 fi
150
151 if test x$enable_gcj = xauto ; then
152     if test x$have_gcj = xno ; then
153         enable_gcj=no
154     else
155         enable_gcj=yes
156     fi
157 fi
158
159 if test x$enable_gcj = xyes; then
160     if test x$have_gcj = xno ; then
161         AC_MSG_ERROR([Building gcj explicitly required, but gcj not found])
162     fi
163 fi
164
165 AM_CONDITIONAL(DBUS_USE_GCJ, test x$enable_gcj = xyes)
166
167 #### Look for mono
168 AC_CHECK_TOOL(MCS, mcs, mcs)
169 if test -z "$MCS" ; then
170      have_mcs=no
171 else
172      have_mcs=yes
173      if test "x${MCSFLAGS-unset}" = xunset; then
174         MCSFLAGS="" ### put default MCSFLAGS here
175      fi
176      AC_SUBST(MCSFLAGS)
177 fi
178
179 if test x$enable_mono = xauto ; then
180     if test x$have_mcs = xno ; then
181         enable_mono=no
182     else
183         enable_mono=yes
184     fi
185 fi
186
187 if test x$enable_mono = xyes; then
188     if test x$have_mcs = xno ; then
189         AC_MSG_ERROR([Building Mono bindings explicitly required, but mcs compiler not found])
190     fi
191 fi
192
193 AM_CONDITIONAL(DBUS_USE_MCS, test x$enable_mono = xyes)
194
195 changequote(,)dnl
196 # let ourselves use our own unstable API
197 CPPFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE=1 $CPPFLAGS"
198 # compress spaces in flags
199 CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'`
200 CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ +/ /g'`
201 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'`
202 changequote([,])dnl
203
204 if test x$enable_gcov = xyes; then
205      ## so that config.h changes when you toggle gcov support
206      AC_DEFINE_UNQUOTED(DBUS_GCOV_ENABLED, 1, [Defined if gcov is enabled to force a rebuild due to config.h changing])
207 fi
208 AM_CONDITIONAL(DBUS_GCOV_ENABLED, test x$enable_gcov = xyes)
209
210 #### Integer sizes 
211
212 AC_CHECK_SIZEOF(char)
213 AC_CHECK_SIZEOF(short)
214 AC_CHECK_SIZEOF(long)
215 AC_CHECK_SIZEOF(int)
216 AC_CHECK_SIZEOF(void *)
217 AC_CHECK_SIZEOF(long long)
218 AC_CHECK_SIZEOF(__int64)
219
220 ### See what our 64 bit type is called
221 AC_MSG_CHECKING([64-bit integer type])
222
223 case 8 in
224 $ac_cv_sizeof_int)
225   dbusint64=int
226   dbusint64_constant='(val)'
227   dbusuint64_constant='(val)'
228   ;;
229 $ac_cv_sizeof_long)
230   dbusint64=long
231   dbusint64_constant='(val##L)'
232   dbusuint64_constant='(val##UL)'
233   ;;
234 $ac_cv_sizeof_long_long)
235   dbusint64='long long'
236   dbusint64_constant='(val##LL)'
237   dbusuint64_constant='(val##ULL)'
238   ;;
239 $ac_cv_sizeof___int64)
240   dbusint64=__int64
241   dbusint64_constant='(val##i64)'
242   dbusuint64_constant='(val##ui64)'
243   ;;
244 esac
245
246 if test -z "$dbusint64" ; then
247         DBUS_INT64_TYPE="no_int64_type_detected"
248         DBUS_HAVE_INT64=0
249         DBUS_INT64_CONSTANT=
250         DBUS_UINT64_CONSTANT=
251         AC_MSG_RESULT([none found])
252 else
253         DBUS_INT64_TYPE="$dbusint64"
254         DBUS_HAVE_INT64=1
255         DBUS_INT64_CONSTANT="$dbusint64_constant"
256         DBUS_UINT64_CONSTANT="$dbusuint64_constant"
257         AC_MSG_RESULT($DBUS_INT64_TYPE)
258 fi
259
260 AC_SUBST(DBUS_INT64_TYPE)
261 AC_SUBST(DBUS_INT64_CONSTANT)
262 AC_SUBST(DBUS_UINT64_CONSTANT)
263 AC_SUBST(DBUS_HAVE_INT64)
264
265 ## byte order
266 AC_C_BIGENDIAN
267
268 #### Atomic integers (checks by Sebastian Wilhelmi for GLib)
269 AC_MSG_CHECKING([whether to use inline assembler routines for atomic integers])
270 have_atomic_inc=no
271 if test x"$GCC" = xyes; then
272   case $host_cpu in
273     i386)
274       AC_MSG_RESULT([no])
275       ;;
276     i?86)
277       AC_MSG_RESULT([i486])
278       AC_DEFINE_UNQUOTED(DBUS_USE_ATOMIC_INT_486, 1, [Use atomic integer implementation for 486])
279       have_atomic_inc=yes
280       ;;
281     *)
282       AC_MSG_RESULT([no])
283       ;;
284   esac
285 fi
286 if test x$have_atomic_inc = xyes ; then
287   AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT, 1, [Some atomic integer implementation present])
288 fi
289
290 #### Various functions
291 AC_CHECK_LIB(socket,socket)
292 AC_CHECK_LIB(nsl,gethostbyname)
293
294 AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep poll setenv unsetenv socketpair getgrouplist)
295
296 AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
297
298 AC_CACHE_CHECK([for posix getpwnam_r],
299                 ac_cv_func_posix_getpwnam_r,
300                 [AC_TRY_RUN([
301 #include <errno.h>
302 #include <pwd.h>
303 int main () { 
304     char buffer[10000];
305     struct passwd pwd, *pwptr = &pwd;
306     int error;
307     errno = 0;
308     error = getpwnam_r ("", &pwd, buffer, 
309                         sizeof (buffer), &pwptr);
310    return (error < 0 && errno == ENOSYS) 
311            || error == ENOSYS; 
312 }               ],
313         [ac_cv_func_posix_getpwnam_r=yes],
314         [ac_cv_func_posix_getpwnam_r=no])])
315 if test "$ac_cv_func_posix_getpwnam_r" = yes; then
316         AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
317                 [Have POSIX function getpwnam_r])
318 else
319         AC_CACHE_CHECK([for nonposix getpwnam_r],
320                 ac_cv_func_nonposix_getpwnam_r,
321                 [AC_TRY_LINK([#include <pwd.h>],
322                         [char buffer[10000];
323                         struct passwd pwd;
324                         getpwnam_r ("", &pwd, buffer, 
325                                         sizeof (buffer));],
326                         [ac_cv_func_nonposix_getpwnam_r=yes],
327                         [ac_cv_func_nonposix_getpwnam_r=no])])
328                 if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
329                 AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
330                         [Have non-POSIX function getpwnam_r])
331         fi
332 fi
333
334 dnl check for socklen_t
335 AC_MSG_CHECKING(whether socklen_t is defined)
336 AC_TRY_COMPILE([
337 #include <sys/types.h>
338 #include <sys/socket.h>
339 #include <netdb.h>
340 ],[
341 socklen_t foo;
342 foo = 1;
343 ],dbus_have_socklen_t=yes,dbus_have_socklen_t=no)
344 AC_MSG_RESULT($dbus_have_socklen_t)
345
346 if test "x$dbus_have_socklen_t" = "xyes"; then
347     AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
348 fi
349
350 dnl check for writev header and writev function so we're 
351 dnl good to go if HAVE_WRITEV gets defined.
352 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
353
354 dnl check for flavours of varargs macros (test from GLib)
355 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
356 AC_TRY_COMPILE([],[
357 int a(int p1, int p2, int p3);
358 #define call_a(...) a(1,__VA_ARGS__)
359 call_a(2,3);
360 ],dbus_have_iso_c_varargs=yes,dbus_have_iso_c_varargs=no)
361 AC_MSG_RESULT($dbus_have_iso_c_varargs)
362
363 AC_MSG_CHECKING(for GNUC varargs macros)
364 AC_TRY_COMPILE([],[
365 int a(int p1, int p2, int p3);
366 #define call_a(params...) a(1,params)
367 call_a(2,3);
368 ],dbus_have_gnuc_varargs=yes,dbus_have_gnuc_varargs=no)
369 AC_MSG_RESULT($dbus_have_gnuc_varargs)
370
371 dnl Output varargs tests
372 if test x$dbus_have_iso_c_varargs = xyes; then
373     AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
374 fi
375 if test x$dbus_have_gnuc_varargs = xyes; then
376     AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
377 fi
378
379 dnl Check for various credentials.
380 AC_MSG_CHECKING(for struct cmsgcred)
381 AC_TRY_COMPILE([
382 #include <sys/types.h>
383 #include <sys/socket.h>
384 ],[
385 struct cmsgcred cred;
386
387 cred.cmcred_pid = 0;
388 ],dbus_have_struct_cmsgcred=yes,dbus_have_struct_cmsgcred=no)
389 AC_MSG_RESULT($dbus_have_struct_cmsgcred)
390
391 if test x$dbus_have_struct_cmsgcred = xyes; then
392     AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
393 fi
394
395
396 #### Abstract sockets
397
398 AC_MSG_CHECKING(abstract socket namespace)
399 AC_LANG_PUSH(C)
400 AC_RUN_IFELSE([AC_LANG_PROGRAM(
401 [[
402 #include <sys/types.h>
403 #include <stdlib.h>
404 #include <string.h>
405 #include <stdio.h>
406 #include <sys/socket.h>
407 #include <sys/un.h>
408 #include <errno.h>
409 ]],
410 [[
411   int listen_fd;
412   struct sockaddr_un addr;
413   
414   listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
415   
416   if (listen_fd < 0)
417     {
418       fprintf (stderr, "socket() failed: %s\n", strerror (errno));
419       exit (1);
420     }
421
422   memset (&addr, '\0', sizeof (addr));
423   addr.sun_family = AF_UNIX;
424   strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
425   addr.sun_path[0] = '\0'; /* this is what makes it abstract */
426   
427   if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
428     {
429        fprintf (stderr, "Abstract socket namespace bind() failed: %s\n", 
430                 strerror (errno));
431        exit (1);
432     }
433   else 
434     exit (0);
435 ]])],
436               [have_abstract_sockets=yes],
437               [have_abstract_sockets=no])
438 AC_LANG_POP(C)
439 AC_MSG_RESULT($have_abstract_sockets)
440
441 if test x$enable_abstract_sockets = xyes; then
442     if test x$have_abstract_sockets = xno; then
443         AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
444     fi
445 fi
446
447 if test x$enable_abstract_sockets = xno; then
448    have_abstract_sockets=no;
449 fi
450
451 if test x$have_abstract_sockets = xyes ; then
452    abstract_sockets=1
453    DBUS_PATH_OR_ABSTRACT=abstract
454 else
455    abstract_sockets=0
456    DBUS_PATH_OR_ABSTRACT=path
457 fi
458
459 AC_DEFINE_UNQUOTED(HAVE_ABSTRACT_SOCKETS, $abstract_sockets, [Have abstract socket namespace])
460
461 # this is used in addresses to prefer abstract, e.g. 
462 # unix:path=/foo or unix:abstract=/foo 
463 AC_SUBST(DBUS_PATH_OR_ABSTRACT)
464
465 #### Sort out XML library
466
467 # see what we have
468 AC_CHECK_LIB(expat, XML_ParserCreate_MM, 
469              [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
470              have_expat=false)
471
472 PKG_CHECK_MODULES(LIBXML, libxml-2.0, have_libxml=true, have_libxml=false)
473
474 # see what we want to use
475 dbus_use_libxml=false
476 dbus_use_expat=false
477 if test x$with_xml = xexpat; then
478         dbus_use_expat=true
479         if ! $have_expat ; then
480            AC_MSG_ERROR([Explicitly requested expat but expat not found])
481         fi
482 elif test x$with_xml = xlibxml; then
483         dbus_use_libxml=true
484         if ! $have_libxml ; then
485            AC_MSG_ERROR([Explicitly requested libxml but libxml not found])
486         fi
487 else
488         ### expat is the default because libxml can't currently survive 
489         ### our brutal OOM-handling unit test setup.
490         ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
491         if $have_expat ; then
492                 with_xml=expat
493                 dbus_use_expat=true
494         elif $have_libxml ; then
495                 with_xml=libxml
496                 dbus_use_libxml=true
497         else
498                 AC_MSG_ERROR([No XML library found, check config.log for failed attempts])
499         fi
500 fi
501
502 AM_CONDITIONAL(DBUS_USE_EXPAT, $dbus_use_expat)
503 AM_CONDITIONAL(DBUS_USE_LIBXML, $dbus_use_libxml)
504
505 if $dbus_use_expat; then
506    XML_LIBS=-lexpat
507    XML_CFLAGS=
508 fi
509 if $dbus_use_libxml; then
510    XML_LIBS=$LIBXML_LIBS
511    XML_CFLAGS=$LIBXML_CFLAGS
512 fi
513
514 #### Set up final flags
515 DBUS_CLIENT_CFLAGS=
516 DBUS_CLIENT_LIBS=
517 AC_SUBST(DBUS_CLIENT_CFLAGS)
518 AC_SUBST(DBUS_CLIENT_LIBS)
519
520 DBUS_BUS_CFLAGS=$XML_CFLAGS
521 DBUS_BUS_LIBS=$XML_LIBS
522 AC_SUBST(DBUS_BUS_CFLAGS)
523 AC_SUBST(DBUS_BUS_LIBS)
524
525 DBUS_TEST_CFLAGS=
526 DBUS_TEST_LIBS=
527 AC_SUBST(DBUS_TEST_CFLAGS)
528 AC_SUBST(DBUS_TEST_LIBS)
529
530 # Glib detection
531 PKG_CHECK_MODULES(DBUS_GLIB, glib-2.0, have_glib=yes, have_glib=no)
532 PKG_CHECK_MODULES(DBUS_GLIB_THREADS, glib-2.0 gthread-2.0, have_glib_threads=yes, have_glib_threads=no)
533
534 if test x$have_glib = xno ; then
535     AC_MSG_WARN([GLib development libraries not found])
536 fi
537
538 if test x$enable_glib = xyes; then
539     if test x$have_glib = xno; then
540         AC_MSG_ERROR([GLib explicitly required, and GLib development libraries not found])
541     fi
542 fi
543
544 if test x$enable_glib = xno; then
545    have_glib=no;
546 fi
547
548 AM_CONDITIONAL(HAVE_GLIB, test x$have_glib = xyes)
549 AM_CONDITIONAL(HAVE_GLIB_THREADS, test x$have_glib_threads = xyes)
550
551 dnl GLib flags
552 AC_SUBST(DBUS_GLIB_CFLAGS)
553 AC_SUBST(DBUS_GLIB_LIBS)
554 AC_SUBST(DBUS_GLIB_THREADS_LIBS)
555
556 # Qt detection
557 have_qt=no
558 AC_MSG_CHECKING([for qglobal.h])
559 if test -n "$QTDIR" -a -f "$QTDIR/include/qglobal.h"; then
560     have_qt=yes
561     DBUS_QT_CXXFLAGS="-I$QTDIR/include"
562 else
563     for dir in "${prefix}/include/qt" "/usr/include/qt-3.1" "/usr/include/qt3" "/usr/include/qt" "/usr/lib/qt/include"; do
564         if test -f "$dir/qglobal.h"; then
565             have_qt=yes
566             DBUS_QT_CXXFLAGS="-I$dir"
567        fi
568     done
569 fi
570 if test x"$have_qt" = x"yes"; then
571    AC_MSG_RESULT([found])
572 else
573    AC_MSG_RESULT([not found])
574 fi
575
576 dnl linking to kdecore will give us a bit of help from libtool
577 if (! kde-config >& /dev/null); then
578     have_qt=no
579 else
580     kdelibs=`kde-config --install lib --expandvars 2>/dev/null`
581     if test -z $kdelibs -o ! -f $kdelibs/libkdecore.la; then
582         have_qt=no
583     else
584         DBUS_QT_LIBS="$kdelibs/libkdecore.la"
585     fi
586 fi
587
588 if test x$have_qt = xno ; then
589     AC_MSG_WARN([Qt development libraries not found])
590 fi
591
592 if test x$enable_qt = xyes; then
593     if test x$have_qt = xno; then
594         AC_MSG_ERROR([Qt integration explicitly required, and Qt libraries not found])
595     fi
596 fi
597
598 if test x$enable_qt = xno; then
599    have_qt=no;
600 fi
601
602 AM_CONDITIONAL(HAVE_QT, test x$have_qt = xyes)
603
604 dnl Qt flags
605 AC_SUBST(DBUS_QT_CXXFLAGS)
606 AC_SUBST(DBUS_QT_LIBS)
607
608 ### X11 detection
609 AC_PATH_XTRA
610
611 ## for now enable_x11 just tracks have_x11, 
612 ## there's no --enable-x11
613 if test x$no_x = xyes ; then
614    have_x11=no
615    enable_x11=no
616 else
617    have_x11=yes
618    enable_x11=yes
619 fi
620
621 if test x$enable_x11 = xyes ; then
622    AC_DEFINE(DBUS_BUILD_X11,1,[Build X11-dependent code])
623    DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
624    DBUS_X_CFLAGS="$X_CFLAGS"
625 else
626    DBUS_X_LIBS=
627    DBUS_X_CFLAGS=
628 fi
629
630 AC_SUBST(DBUS_X_CFLAGS)
631 AC_SUBST(DBUS_X_LIBS)
632
633 ### Documentation
634
635 AC_PATH_PROG(DOXYGEN, doxygen, no)
636 AC_PATH_PROG(DB2HTML, db2html, no)
637
638 AC_MSG_CHECKING([whether to build documentation])
639
640 if test x$DOXYGEN = xno -o x$DB2HTML = xno ; then
641     have_docs_tools=no
642 else
643     have_docs_tools=yes
644 fi
645
646 if test x$enable_docs = xauto ; then
647     if test x$have_docs_tools = xno ; then
648         enable_docs=no
649     else
650         enable_docs=yes
651     fi
652 fi
653
654 if test x$enable_docs = xyes; then
655     if test x$have_docs_tools = xno; then
656         AC_MSG_ERROR([Building docs explicitly required, but Doxygen or db2html not found])
657     fi
658 fi
659
660 AM_CONDITIONAL(DBUS_DOCS_ENABLED, test x$enable_docs = xyes)
661 AC_MSG_RESULT(yes)
662
663 #### find the actual value for $prefix that we'll end up with
664 ##   (I know this is broken and should be done in the Makefile, but
665 ##    that's a major pain and almost nobody actually seems to care)
666 REAL_PREFIX=
667 if test "x$prefix" = "xNONE"; then
668   REAL_PREFIX=$ac_default_prefix
669 else
670   REAL_PREFIX=$prefix
671 fi
672
673 #### Have to go $localstatedir->$prefix/var->/usr/local/var   
674 #### someone please fix this a better way...
675 LOCALSTATEDIR_TMP="$localstatedir"
676 old_prefix=$prefix
677 prefix=$REAL_PREFIX
678 EXPANDED_LOCALSTATEDIR=`eval echo $LOCALSTATEDIR_TMP`
679 prefix=$old_prefix
680 AC_SUBST(EXPANDED_LOCALSTATEDIR)
681
682 SYSCONFDIR_TMP="$sysconfdir"
683 old_prefix=$prefix
684 prefix=$REAL_PREFIX
685 EXPANDED_SYSCONFDIR=`eval echo $SYSCONFDIR_TMP`
686 prefix=$old_prefix
687 AC_SUBST(EXPANDED_SYSCONFDIR)
688
689 BINDIR_TMP="$bindir"
690 old_prefix=$prefix
691 prefix=$REAL_PREFIX
692 EXPANDED_BINDIR=`eval echo $BINDIR_TMP`
693 prefix=$old_prefix
694 AC_SUBST(EXPANDED_BINDIR)
695
696 old_exec_prefix=${exec_prefix}
697 test "x$exec_prefix" = xNONE && eval exec_prefix=${prefix}
698 eval EXPANDED_LIBDIR=${libdir}
699 exec_prefix=${old_exec_prefix}
700 AC_SUBST(EXPANDED_LIBDIR)
701
702 #### Check our operating system
703 operating_system=unknown
704 if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
705    operating_system=redhat
706 fi
707
708 #### Sort out init scripts
709
710 if test x$with_init_scripts = x; then
711     if test xredhat = x$operating_system ; then
712         with_init_scripts=redhat
713     else
714         with_init_scripts=none
715     fi
716 fi
717
718 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_RED_HAT, test x$with_init_scripts = xredhat)
719
720
721 ##### Set up location for system bus socket
722 if ! test -z "$with_system_socket"; then
723    DBUS_SYSTEM_SOCKET=$with_system_socket
724 else
725    DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
726 fi
727
728 AC_SUBST(DBUS_SYSTEM_SOCKET)
729
730 #### Set up the pid file
731 if ! test -z "$with_system_pid_file"; then
732    DBUS_SYSTEM_PID_FILE=$with_system_pid_file
733 elif test x$operating_system = xredhat ; then
734    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
735 else
736    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
737 fi
738
739 AC_SUBST(DBUS_SYSTEM_PID_FILE)
740
741 #### Tell tests where to find certain stuff in builddir
742 ABSOLUTE_TOP_BUILDDIR=`cd ${ac_top_builddir}. && pwd`
743
744 AC_DEFUN(TEST_PATH, [
745 TEST_$1=${ABSOLUTE_TOP_BUILDDIR}/test/$2
746 AC_DEFINE_UNQUOTED(TEST_$1, "$TEST_$1",
747                    [Full path to test file test/$2 in builddir])
748 AC_SUBST(TEST_$1)
749 ])
750
751 TEST_PATH(SERVICE_DIR, data/valid-service-files)
752 TEST_PATH(SERVICE_BINARY, test-service)
753 TEST_PATH(EXIT_BINARY, test-exit)
754 TEST_PATH(SEGFAULT_BINARY, test-segfault)
755 TEST_PATH(SLEEP_FOREVER_BINARY, test-sleep-forever)
756
757 #### Find socket directories
758 if ! test -z "$TMPDIR" ; then
759    DEFAULT_SOCKET_DIR=$TMPDIR
760 elif ! test -z "$TEMP" ; then
761    DEFAULT_SOCKET_DIR=$TEMP
762 elif ! test -z "$TMP" ; then
763    DEFAULT_SOCKET_DIR=$TMP
764 else
765    DEFAULT_SOCKET_DIR=/tmp
766 fi
767
768 if ! test -z "$with_test_socket_dir" ; then
769    TEST_SOCKET_DIR="$with_test_socket_dir"
770 else
771    TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
772 fi
773 AC_SUBST(TEST_SOCKET_DIR)
774 AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
775
776 if ! test -z "$with_session_socket_dir" ; then
777    DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
778 else
779    DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
780 fi
781 AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
782 AC_SUBST(DBUS_SESSION_SOCKET_DIR)
783
784
785
786 AC_OUTPUT([
787 Doxyfile
788 dbus/dbus-arch-deps.h
789 bus/system.conf
790 bus/session.conf
791 bus/messagebus
792 bus/dbus-daemon-1.1
793 Makefile
794 dbus/Makefile
795 glib/Makefile
796 qt/Makefile
797 gcj/Makefile
798 mono/Makefile
799 bus/Makefile
800 tools/Makefile
801 test/Makefile
802 doc/Makefile
803 dbus-1.pc
804 dbus-glib-1.pc
805 test/data/valid-config-files/debug-allow-all.conf
806 test/data/valid-config-files/debug-allow-all-sha1.conf
807 test/data/valid-service-files/debug-echo.service
808 test/data/valid-service-files/debug-segfault.service
809 ])
810
811 ### FIXME it's bizarre that have_qt and have_glib are used
812 ### instead of enable_ - should fix things so that enable 
813 ### is always whether it's enabled, and have is always whether 
814 ### it was found.
815
816 dnl ==========================================================================
817 echo "
818                     D-BUS $VERSION
819                   ==============
820
821         prefix:                   ${prefix}
822         source code location:     ${srcdir}
823         compiler:                 ${CC}
824         cflags:                   ${CFLAGS}
825         cppflags:                 ${CPPFLAGS}
826         cxxflags:                 ${CXXFLAGS}
827         Doxygen:                  ${DOXYGEN}
828         db2html:                  ${DB2HTML}"
829
830 if test x$enable_gcj = xyes ; then
831 echo \
832 "        gcj:                     ${GCJ}
833         gcjflags:                 ${GCJFLAGS}"
834 else
835 echo \
836 "        gcj:                      (not enabled)"
837 fi
838
839 if test x$enable_mono = xyes ; then
840 echo \
841 "        mcs:                     ${MCS}
842         mcsflags:                 ${MCSFLAGS}
843 "
844 else
845 echo \
846 "        mcs:                      (not enabled)
847 "
848 fi
849
850 echo "
851         Maintainer mode:          ${USE_MAINTAINER_MODE}
852         gcc coverage profiling:   ${enable_gcov}
853         Building unit tests:      ${enable_tests}
854         Building verbose mode:    ${enable_verbose_mode}
855         Building assertions:      ${enable_asserts}
856         Building checks:          ${enable_checks}
857         Building Qt bindings:     ${have_qt}
858         Building GLib bindings:   ${have_glib}
859         Building X11 code:        ${enable_x11}
860         Building documentation:   ${enable_docs}
861         Using XML parser:         ${with_xml}
862         Init scripts style:       ${with_init_scripts}
863         Abstract socket names:    ${have_abstract_sockets}
864         System bus socket:        ${DBUS_SYSTEM_SOCKET}
865         System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
866         Session bus socket dir:   ${DBUS_SESSION_SOCKET_DIR}
867         'make check' socket dir:  ${TEST_SOCKET_DIR}
868 "
869
870 if test x$enable_tests = xyes; then
871         echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
872 fi
873 if test x$enable_tests = xyes -a x$enable_asserts = xno; then
874         echo "NOTE: building with unit tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)"
875 fi
876 if test x$enable_gcov = xyes; then
877         echo "NOTE: building with coverage profiling is definitely for developers only."
878 fi
879 if test x$enable_verbose_mode = xyes; then
880         echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
881 fi
882 if test x$enable_asserts = xyes; then
883         echo "NOTE: building with assertions increases library size and decreases performance."
884 fi
885 if test x$enable_checks = xno; then
886         echo "NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-BUS, but will slightly decrease D-BUS library size and _very_ slightly improve performance."
887 fi