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