Release 1.2.22
[platform/upstream/dbus.git] / configure.in
1 dnl -*- mode: m4 -*-
2 AC_PREREQ(2.52)
3
4 m4_define([dbus_major_version], [1])
5 m4_define([dbus_minor_version], [2])
6 m4_define([dbus_micro_version], [22])
7 m4_define([dbus_version],
8           [dbus_major_version.dbus_minor_version.dbus_micro_version])
9 AC_INIT(dbus, [dbus_version])
10
11 AC_CANONICAL_HOST
12
13 AM_INIT_AUTOMAKE([1.9 tar-ustar])
14 AM_CONFIG_HEADER(config.h)
15
16 # Honor aclocal flags
17 ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
18
19 GETTEXT_PACKAGE=dbus-1
20 AC_SUBST(GETTEXT_PACKAGE)
21 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
22
23  ## must come before we use the $USE_MAINTAINER_MODE variable later
24 AM_MAINTAINER_MODE
25
26 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
27
28 # libtool versioning - this applies to libdbus
29 #
30 # See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
31 #
32
33 ## increment if the interface has additions, changes, removals.
34 LT_CURRENT=7
35
36 ## increment any time the source changes; set to
37 ##  0 if you increment CURRENT
38 LT_REVISION=0
39
40 ## increment if any interfaces have been added; set to 0
41 ## if any interfaces have been changed or removed. removal has
42 ## precedence over adding, so set to 0 if both happened.
43 LT_AGE=4
44
45 AC_SUBST(LT_CURRENT)
46 AC_SUBST(LT_REVISION)
47 AC_SUBST(LT_AGE)
48
49 DBUS_MAJOR_VERSION=dbus_major_version
50 DBUS_MINOR_VERSION=dbus_minor_version
51 DBUS_MICRO_VERSION=dbus_micro_version
52 DBUS_VERSION=dbus_major_version.dbus_minor_version.dbus_micro_version
53
54 AC_SUBST(DBUS_MAJOR_VERSION)
55 AC_SUBST(DBUS_MINOR_VERSION)
56 AC_SUBST(DBUS_MICRO_VERSION)
57 AC_SUBST(DBUS_VERSION)
58
59 AC_PROG_CC
60 AM_PROG_CC_C_O
61 AC_PROG_CXX
62 AC_ISC_POSIX
63 AC_HEADER_STDC
64 AC_C_INLINE
65 AM_PROG_LIBTOOL
66
67 AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests],[enable unit test code]),enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
68 AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no)
69 AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
70 AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
71 AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes)
72 AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto)
73 AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto)
74 AC_ARG_ENABLE(gcov, AS_HELP_STRING([--enable-gcov],[compile with coverage profiling instrumentation (gcc only)]),enable_gcov=$enableval,enable_gcov=no)
75 AC_ARG_ENABLE(abstract-sockets, AS_HELP_STRING([--enable-abstract-sockets],[use abstract socket namespace (linux only)]),enable_abstract_sockets=$enableval,enable_abstract_sockets=auto)
76 AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto)
77 AC_ARG_ENABLE(libaudit,AS_HELP_STRING([--enable-libaudit],[build audit daemon support for SELinux]),enable_libaudit=$enableval,enable_libaudit=auto)
78 AC_ARG_ENABLE(dnotify, AS_HELP_STRING([--enable-dnotify],[build with dnotify support (linux only)]),enable_dnotify=$enableval,enable_dnotify=auto)
79 AC_ARG_ENABLE(inotify, AS_HELP_STRING([--enable-inotify],[build with inotify support (linux only)]),enable_inotify=$enableval,enable_inotify=auto)
80 AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support]),enable_kqueue=$enableval,enable_kqueue=auto)
81 AC_ARG_ENABLE(console-owner-file, AS_HELP_STRING([--enable-console-owner-file],[enable console owner file]),enable_console_owner_file=$enableval,enable_console_owner_file=auto)
82 AC_ARG_ENABLE(userdb-cache, AS_HELP_STRING([--enable-userdb-cache],[build with userdb-cache support]),enable_userdb_cache=$enableval,enable_userdb_cache=yes)
83
84 AC_ARG_WITH(xml, AS_HELP_STRING([--with-xml=[libxml/expat]],[XML library to use]))
85 AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
86 AC_ARG_WITH(session-socket-dir, AS_HELP_STRING([--with-session-socket-dir=[dirname]],[Where to put sockets for the per-login-session message bus]))
87 AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check]))
88 AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon]))
89 AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon]))
90 AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip]))
91 AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
92 AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
93 AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
94
95 AC_DEFINE(DBUS_UNIX,1,[dbus on unix])
96
97 dnl DBUS_BUILD_TESTS controls unit tests built in to .c files 
98 dnl and also some stuff in the test/ subdir
99 AM_CONDITIONAL(DBUS_BUILD_TESTS, test x$enable_tests = xyes)
100 if test x$enable_tests = xyes; then
101     AC_DEFINE(DBUS_BUILD_TESTS,1,[Build test code])
102 fi
103
104 if test x$enable_verbose_mode = xyes; then
105     AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
106 fi
107
108 if test x$enable_asserts = xno; then
109     AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
110     AC_DEFINE(G_DISABLE_ASSERT,1,[Disable GLib assertion macros])
111     R_DYNAMIC_LDFLAG=""
112 else
113     # -rdynamic is needed for glibc's backtrace_symbols to work.
114     # No clue how much overhead this adds, but it's useful 
115     # to do this on any assertion failure,
116     # so for now it's enabled anytime asserts are (currently not
117     # in production builds).
118
119     # To get -rdynamic you pass -export-dynamic to libtool.
120     AC_DEFINE(DBUS_BUILT_R_DYNAMIC,1,[whether -export-dynamic was passed to libtool])
121     R_DYNAMIC_LDFLAG=-export-dynamic
122 fi
123 AC_SUBST(R_DYNAMIC_LDFLAG)
124
125 if test x$enable_checks = xno; then
126     AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
127     AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
128 fi
129
130 if test x$enable_userdb_cache = xyes; then
131     AC_DEFINE(DBUS_ENABLE_USERDB_CACHE,1,[Build with caching of user data])
132 fi
133
134 if test x$enable_gcov = xyes; then
135      ## so that config.h changes when you toggle gcov support
136      AC_DEFINE_UNQUOTED(DBUS_GCOV_ENABLED, 1, [Defined if gcov is enabled to force a rebuild due to config.h changing])
137
138      AC_MSG_CHECKING([for gcc 3.3 version of gcov file format])
139      have_gcc33_gcov=no
140      AC_RUN_IFELSE( [AC_LANG_PROGRAM( , [[ if (__GNUC__ >=3 && __GNUC_MINOR__ >= 3) exit (0); else exit (1); ]])],  
141                    have_gcc33_gcov=yes)
142      if test x$have_gcc33_gcov = xyes ; then
143          AC_DEFINE_UNQUOTED(DBUS_HAVE_GCC33_GCOV, 1, [Defined if we have gcc 3.3 and thus the new gcov format])
144      fi
145      AC_MSG_RESULT($have_gcc33_gcov)
146 fi
147 AM_CONDITIONAL(DBUS_GCOV_ENABLED, test x$enable_gcov = xyes)
148
149 #### Integer sizes 
150
151 AC_CHECK_SIZEOF(char)
152 AC_CHECK_SIZEOF(short)
153 AC_CHECK_SIZEOF(long)
154 AC_CHECK_SIZEOF(int)
155 AC_CHECK_SIZEOF(void *)
156 AC_CHECK_SIZEOF(long long)
157 AC_CHECK_SIZEOF(__int64)
158
159 ### See what our 64 bit type is called
160 AC_MSG_CHECKING([64-bit integer type])
161
162 case 8 in
163 $ac_cv_sizeof_int)
164   dbusint64=int
165   dbusint64_constant='(val)'
166   dbusuint64_constant='(val)'
167   ;;
168 $ac_cv_sizeof_long)
169   dbusint64=long
170   dbusint64_constant='(val##L)'
171   dbusuint64_constant='(val##UL)'
172   ;;
173 $ac_cv_sizeof_long_long)
174   dbusint64='long long'
175   dbusint64_constant='(val##LL)'
176   dbusuint64_constant='(val##ULL)'
177   ;;
178 $ac_cv_sizeof___int64)
179   dbusint64=__int64
180   dbusint64_constant='(val##i64)'
181   dbusuint64_constant='(val##ui64)'
182   ;;
183 esac
184
185 if test -z "$dbusint64" ; then
186         DBUS_INT64_TYPE="no_int64_type_detected"
187         DBUS_HAVE_INT64=0
188         DBUS_INT64_CONSTANT=
189         DBUS_UINT64_CONSTANT=
190         AC_MSG_RESULT([none found])
191 else
192         DBUS_INT64_TYPE="$dbusint64"
193         DBUS_HAVE_INT64=1
194         DBUS_INT64_CONSTANT="$dbusint64_constant"
195         DBUS_UINT64_CONSTANT="$dbusuint64_constant"
196         AC_MSG_RESULT($DBUS_INT64_TYPE)
197 fi
198
199 AC_SUBST(DBUS_INT64_TYPE)
200 AC_SUBST(DBUS_INT64_CONSTANT)
201 AC_SUBST(DBUS_UINT64_CONSTANT)
202 AC_SUBST(DBUS_HAVE_INT64)
203
204 ### see what 32-bit int is called
205 AC_MSG_CHECKING([32-bit integer type])
206
207 case 4 in
208 $ac_cv_sizeof_short)
209   dbusint32=int
210   ;;
211 $ac_cv_sizeof_int)
212   dbusint32=int
213   ;;
214 $ac_cv_sizeof_long)
215   dbusint32=long
216   ;;
217 esac
218
219 if test -z "$dbusint32" ; then
220         DBUS_INT32_TYPE="no_int32_type_detected"
221         AC_MSG_ERROR([No 32-bit integer type found])
222 else
223         DBUS_INT32_TYPE="$dbusint32"
224         AC_MSG_RESULT($DBUS_INT32_TYPE)
225 fi
226
227 AC_SUBST(DBUS_INT32_TYPE)
228
229 ### see what 16-bit int is called
230 AC_MSG_CHECKING([16-bit integer type])
231
232 case 2 in
233 $ac_cv_sizeof_short)
234   dbusint16=short
235   ;;
236 $ac_cv_sizeof_int)
237   dbusint16=int
238   ;;
239 esac
240
241 if test -z "$dbusint16" ; then
242         DBUS_INT16_TYPE="no_int16_type_detected"
243         AC_MSG_ERROR([No 16-bit integer type found])
244 else
245         DBUS_INT16_TYPE="$dbusint16"
246         AC_MSG_RESULT($DBUS_INT16_TYPE)
247 fi
248
249 AC_SUBST(DBUS_INT16_TYPE)
250
251 ## byte order
252 case $host_os in
253         darwin*)
254                 # check at compile-time, so that it is possible to build universal
255                 # (with multiple architectures at once on the compile line)
256                 AH_VERBATIM([WORDS_BIGENDIAN_DARWIN], [
257                         /* Use the compiler-provided endianness defines to allow universal compiling. */
258                         #if defined(__BIG_ENDIAN__)
259                         #define WORDS_BIGENDIAN 1
260                         #endif
261                 ])
262                 ;;
263         *)
264                 AC_C_BIGENDIAN
265                 ;;
266 esac
267
268 dnl **********************************
269 dnl *** va_copy checks (from GLib) ***
270 dnl **********************************
271 dnl we currently check for all three va_copy possibilities, so we get
272 dnl all results in config.log for bug reports.
273 AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[
274         AC_LINK_IFELSE([#include <stdarg.h>
275 #include <stdlib.h>
276         static void f (int i, ...) {
277         va_list args1, args2;
278         va_start (args1, i);
279         va_copy (args2, args1);
280         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
281           exit (1);
282         va_end (args1); va_end (args2);
283         }
284         int main() {
285           f (0, 42);
286           return 0;
287         }],
288         [dbus_cv_va_copy=yes],
289         [dbus_cv_va_copy=no])
290 ])
291 AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[
292         AC_LINK_IFELSE([#include <stdarg.h>
293 #include <stdlib.h>
294         static void f (int i, ...) {
295         va_list args1, args2;
296         va_start (args1, i);
297         __va_copy (args2, args1);
298         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
299           exit (1);
300         va_end (args1); va_end (args2);
301         }
302         int main() {
303           f (0, 42);
304           return 0;
305         }],
306         [dbus_cv___va_copy=yes],
307         [dbus_cv___va_copy=no])
308 ])
309
310 if test "x$dbus_cv_va_copy" = "xyes"; then
311   dbus_va_copy_func=va_copy
312 else if test "x$dbus_cv___va_copy" = "xyes"; then
313   dbus_va_copy_func=__va_copy
314 fi
315 fi
316
317 if test -n "$dbus_va_copy_func"; then
318   AC_DEFINE_UNQUOTED(DBUS_VA_COPY,$dbus_va_copy_func,[A 'va_copy' style function])
319 fi
320
321 AC_LANG_PUSH(C)
322 AC_CACHE_CHECK([whether va_lists can be copied by value],
323         dbus_cv_va_val_copy,
324         [AC_RUN_IFELSE([AC_LANG_PROGRAM(
325 [[
326         #include <stdarg.h>
327         #include <stdlib.h>
328 ]],
329 [[
330         static void f (int i, ...) {
331         va_list args1, args2;
332         va_start (args1, i);
333         args2 = args1;
334         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
335           exit (1);
336         va_end (args1); va_end (args2);
337         }
338         int main() {
339           f (0, 42);
340           return 0;
341         }
342 ]])],
343         [dbus_cv_va_val_copy=yes],
344         [dbus_cv_va_val_copy=no],
345         [dbus_cv_va_val_copy=yes])
346 ])
347 AC_LANG_POP(C)
348
349 if test "x$dbus_cv_va_val_copy" = "xno"; then
350   AC_DEFINE(DBUS_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
351 fi
352
353
354 #### Atomic integers (checks by Sebastian Wilhelmi for GLib)
355 AC_MSG_CHECKING([whether to use inline assembler routines for atomic integers])
356 have_atomic_inc_cond=0
357 if test x"$GCC" = xyes; then
358   if test "x$enable_ansi" = "xyes"; then
359     AC_MSG_RESULT([no])
360   else
361     case $host_cpu in
362       i386)
363         AC_MSG_RESULT([no])
364         ;;
365       i?86)
366         case $host_os in
367           darwin*)
368             AC_MSG_RESULT([darwin])
369             # check at compile-time, so that it is possible to build universal
370             # (with multiple architectures at once on the compile line)
371             have_atomic_inc_cond="(defined(__i386__) || defined(__x86_64__))"
372             ;;
373           *)
374             AC_MSG_RESULT([i486])
375             have_atomic_inc_cond=1
376             ;;
377         esac
378         ;;
379       *)
380         AC_MSG_RESULT([no])
381         ;;
382     esac
383   fi
384 fi
385 AC_DEFINE_UNQUOTED([DBUS_USE_ATOMIC_INT_486_COND], [$have_atomic_inc_cond],
386                    [Always defined; expands to 1 if we should use atomic integer implementation for 486, else 0])
387 AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT_COND, [$have_atomic_inc_cond],
388                    [Always defined; expands to 1 if we have an atomic integer implementation, else 0])
389
390 #### Various functions
391 AC_SEARCH_LIBS(socket,[socket network])
392 AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
393
394 AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll)
395
396 #### Check for broken poll; taken from Glib's configure
397
398 AC_MSG_CHECKING([for broken poll])
399 AC_RUN_IFELSE([AC_LANG_SOURCE([[
400     #include <stdlib.h>
401     #include <fcntl.h>
402     #include <poll.h>
403     #ifdef HAVE_SYS_POLL_H
404     #include <sys/poll.h>
405     #endif
406     int main(void) {
407       struct pollfd fds[1];
408       int fd;
409       fd = open("/dev/null", 1);
410       fds[0].fd = fd;
411       fds[0].events = POLLIN;
412       fds[0].revents = 0;
413       if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
414             exit(1);  /* Does not work for devices -- fail */
415       }
416       exit(0);
417     }]])],
418   [broken_poll=no],
419   [broken_poll=yes
420    AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
421   [broken_poll="no (cross compiling)"])
422 AC_MSG_RESULT($broken_poll)
423
424 AC_MSG_CHECKING(for dirfd)
425 AC_TRY_LINK([
426 #include <sys/types.h>
427 #include <dirent.h>
428 ],[
429 DIR *dirp;
430 dirp = opendir(".");
431 dirfd(dirp);
432 closedir(dirp);
433 ], 
434 dbus_have_dirfd=yes, dbus_have_dirfd=no)
435 AC_MSG_RESULT($dbus_have_dirfd)
436 if test "$dbus_have_dirfd" = yes; then
437         AC_DEFINE(HAVE_DIRFD,1,[Have dirfd function])
438 else
439         AC_MSG_CHECKING(for DIR *dirp->dd_fd)    
440         AC_TRY_LINK([
441 #include <sys/types.h>
442 #include <dirent.h>
443         ],[
444 DIR *dirp;
445 int fd;
446 dirp = opendir(".");
447 fd = dirp->dd_fd;
448 closedir(dirp);
449         ],
450         dbus_have_ddfd=yes, dbus_have_ddfd=no)
451         AC_MSG_RESULT($dbus_have_ddfd)
452         if test "$dbus_have_ddfd" = yes; then
453                 AC_DEFINE(HAVE_DDFD,1,[Have the ddfd member of DIR])
454         fi
455 fi
456
457 AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
458
459 AC_CHECK_HEADERS(errno.h)
460
461 AC_CHECK_HEADERS(unistd.h)
462
463 # Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
464 #
465 case $host_os in
466     solaris*)
467        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
468 esac
469     
470 # checking for a posix version of getpwnam_r
471 # if we are cross compiling and can not run the test
472 # assume getpwnam_r is the posix version
473 # it is up to the person cross compiling to change
474 # this behavior if desired
475 AC_LANG_PUSH(C)
476 AC_CACHE_CHECK([for posix getpwnam_r],
477                 ac_cv_func_posix_getpwnam_r,
478                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
479 [[
480 #include <errno.h>
481 #include <pwd.h>
482 ]],
483 [[
484     char buffer[10000];
485     struct passwd pwd, *pwptr = &pwd;
486     int error;
487     errno = 0;
488     error = getpwnam_r ("", &pwd, buffer, 
489                         sizeof (buffer), &pwptr);
490    return (error < 0 && errno == ENOSYS) 
491            || error == ENOSYS; 
492 ]])],
493         [ac_cv_func_posix_getpwnam_r=yes],
494         [ac_cv_func_posix_getpwnam_r=no],
495         [ac_cv_func_posix_getpwnam_r=yes]
496 )])
497 AC_LANG_POP(C)
498
499 if test "$ac_cv_func_posix_getpwnam_r" = yes; then
500         AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
501                 [Have POSIX function getpwnam_r])
502 else
503         AC_CACHE_CHECK([for nonposix getpwnam_r],
504                 ac_cv_func_nonposix_getpwnam_r,
505                 [AC_TRY_LINK([#include <pwd.h>],
506                         [char buffer[10000];
507                         struct passwd pwd;
508                         getpwnam_r ("", &pwd, buffer, 
509                                         sizeof (buffer));],
510                         [ac_cv_func_nonposix_getpwnam_r=yes],
511                         [ac_cv_func_nonposix_getpwnam_r=no])])
512                 if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
513                 AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
514                         [Have non-POSIX function getpwnam_r])
515         fi
516 fi
517
518 dnl check for socklen_t
519 AC_MSG_CHECKING(whether socklen_t is defined)
520 AC_TRY_COMPILE([
521 #include <sys/types.h>
522 #include <sys/socket.h>
523 #include <netdb.h>
524 ],[
525 socklen_t foo;
526 foo = 1;
527 ],dbus_have_socklen_t=yes,dbus_have_socklen_t=no)
528 AC_MSG_RESULT($dbus_have_socklen_t)
529
530 if test "x$dbus_have_socklen_t" = "xyes"; then
531     AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
532 fi
533
534 dnl check for writev header and writev function so we're 
535 dnl good to go if HAVE_WRITEV gets defined.
536 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
537
538 dnl needed on darwin for NAME_MAX
539 AC_CHECK_HEADERS(sys/syslimits.h)
540
541 dnl check for flavours of varargs macros (test from GLib)
542 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
543 AC_TRY_COMPILE([],[
544 int a(int p1, int p2, int p3);
545 #define call_a(...) a(1,__VA_ARGS__)
546 call_a(2,3);
547 ],dbus_have_iso_c_varargs=yes,dbus_have_iso_c_varargs=no)
548 AC_MSG_RESULT($dbus_have_iso_c_varargs)
549
550 AC_MSG_CHECKING(for GNUC varargs macros)
551 AC_TRY_COMPILE([],[
552 int a(int p1, int p2, int p3);
553 #define call_a(params...) a(1,params)
554 call_a(2,3);
555 ],dbus_have_gnuc_varargs=yes,dbus_have_gnuc_varargs=no)
556 AC_MSG_RESULT($dbus_have_gnuc_varargs)
557
558 dnl Output varargs tests
559 if test x$dbus_have_iso_c_varargs = xyes; then
560     AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
561 fi
562 if test x$dbus_have_gnuc_varargs = xyes; then
563     AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
564 fi
565
566 dnl Check for various credentials.
567 AC_MSG_CHECKING(for struct cmsgcred)
568 AC_TRY_COMPILE([
569 #include <sys/types.h>
570 #include <sys/socket.h>
571 ],[
572 struct cmsgcred cred;
573
574 cred.cmcred_pid = 0;
575 ],dbus_have_struct_cmsgcred=yes,dbus_have_struct_cmsgcred=no)
576 AC_MSG_RESULT($dbus_have_struct_cmsgcred)
577
578 if test x$dbus_have_struct_cmsgcred = xyes; then
579     AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
580 fi
581
582 AC_CHECK_FUNCS(getpeerucred getpeereid)
583
584 #### Abstract sockets
585
586 if test x$enable_abstract_sockets = xauto; then
587 AC_LANG_PUSH(C)
588 warn_on_xcompile=no
589 AC_CACHE_CHECK([abstract socket namespace],
590                 ac_cv_have_abstract_sockets,
591                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
592 [[
593 #include <sys/types.h>
594 #include <stdlib.h>
595 #include <string.h>
596 #include <stdio.h>
597 #include <sys/socket.h>
598 #include <sys/un.h>
599 #include <errno.h>
600 ]],
601 [[
602   int listen_fd;
603   struct sockaddr_un addr;
604   
605   listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
606   
607   if (listen_fd < 0)
608     {
609       fprintf (stderr, "socket() failed: %s\n", strerror (errno));
610       exit (1);
611     }
612
613   memset (&addr, '\0', sizeof (addr));
614   addr.sun_family = AF_UNIX;
615   strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
616   addr.sun_path[0] = '\0'; /* this is what makes it abstract */
617   
618   if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
619     {
620        fprintf (stderr, "Abstract socket namespace bind() failed: %s\n", 
621                 strerror (errno));
622        exit (1);
623     }
624   else 
625     exit (0);
626 ]])],
627               [ac_cv_have_abstract_sockets=yes],
628               [ac_cv_have_abstract_sockets=no],
629               [
630                 ac_cv_have_abstract_sockets=no
631                 warn_on_xcompile=yes
632               ]
633 )])
634 if test x$warn_on_xcompile = xyes ; then
635   AC_MSG_WARN([Cannot check for abstract sockets when cross-compiling, please use --enable-abstract-sockets])
636 fi
637 AC_LANG_POP(C)
638 fi
639
640 if test x$enable_abstract_sockets = xyes; then
641     if test x$ac_cv_have_abstract_sockets = xno; then
642         AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
643     fi
644 fi
645
646 if test x$enable_abstract_sockets = xno; then
647    ac_cv_have_abstract_sockets=no;
648 fi
649
650 if test x$ac_cv_have_abstract_sockets = xyes ; then
651    DBUS_PATH_OR_ABSTRACT=abstract
652    AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
653 else
654    DBUS_PATH_OR_ABSTRACT=path
655 fi
656
657 # this is used in addresses to prefer abstract, e.g. 
658 # unix:path=/foo or unix:abstract=/foo 
659 AC_SUBST(DBUS_PATH_OR_ABSTRACT)
660
661 #### Sort out XML library
662
663 # see what we have
664 AC_CHECK_LIB(expat, XML_ParserCreate_MM,
665              [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
666              have_expat=false)
667
668 # see what we want to use
669 dbus_use_libxml=false
670 dbus_use_expat=false
671 if test x$with_xml = xexpat; then
672         if ! $have_expat ; then
673            AC_MSG_ERROR([Explicitly requested expat but expat not found])
674         fi
675         dbus_use_expat=true
676 elif test x$with_xml = xlibxml; then
677         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.6.0, have_libxml=true, have_libxml=false)
678         if ! $have_libxml ; then
679            AC_MSG_ERROR([Explicitly requested libxml but libxml not found])
680         fi
681         dbus_use_libxml=true
682 else
683         ### expat is the default because libxml can't currently survive 
684         ### our brutal OOM-handling unit test setup.
685         ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
686         if test x$have_expat = xfalse; then
687                 AC_MSG_ERROR([Could not find expat.h, check config.log for failed attempts])
688         fi
689         ### By default, only use Expat since it's tested and known to work.  If you're a
690         ### general-purpose OS vendor, please don't enable libxml.  For embedded use
691         ### if your OS is built around libxml, that's another case.
692         dbus_use_expat=true
693 fi
694
695 AM_CONDITIONAL(DBUS_USE_EXPAT, $dbus_use_expat)
696 AM_CONDITIONAL(DBUS_USE_LIBXML, $dbus_use_libxml)
697
698 if $dbus_use_expat; then
699    XML_LIBS=-lexpat
700    XML_CFLAGS=
701 fi
702 if $dbus_use_libxml; then
703    XML_LIBS=$LIBXML_LIBS
704    XML_CFLAGS=$LIBXML_CFLAGS
705 fi
706
707 # Thread lib detection
708 AC_CHECK_FUNC(pthread_cond_timedwait,[AC_CHECK_LIB(pthread,pthread_cond_timedwait,
709                                                     [THREAD_LIBS="-lpthread"])])
710 save_libs="$LIBS"
711 LIBS="$LIBS $THREAD_LIBS"
712 AC_CHECK_FUNC(pthread_condattr_setclock,have_pthread_condattr_setclock=true,have_pthread_condattr_setclock=false)
713 if test x$have_pthread_condattr_setclock = xtrue; then
714     AC_SEARCH_LIBS([clock_getres],[rt],[THREAD_LIBS="$THREAD_LIBS -lrt"])
715     AC_MSG_CHECKING([for CLOCK_MONOTONIC])
716     AC_TRY_COMPILE([#include <time.h>
717 #include <pthread.h>
718 ], [
719 struct timespec monotonic_timer;
720 pthread_condattr_t attr;
721 pthread_condattr_init (&attr);
722 pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
723 clock_getres (CLOCK_MONOTONIC,&monotonic_timer);
724 ], have_clock_monotonic=true, have_clock_monotonic=false)
725 if test x$have_clock_monotonic = xtrue; then
726     AC_MSG_RESULT([found])
727     AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1, [Define if we have CLOCK_MONOTONIC])
728 else
729     AC_MSG_RESULT([not found])
730 fi
731 fi
732 LIBS="$save_libs"
733
734 # SELinux detection
735 if test x$enable_selinux = xno ; then
736     have_selinux=no;
737 else
738     # See if we have SELinux library
739     AC_CHECK_LIB(selinux, is_selinux_enabled, 
740                  have_selinux=yes, have_selinux=no)
741
742     # see if we have the SELinux header with the new D-Bus stuff in it
743     if test x$have_selinux = xyes ; then
744         AC_MSG_CHECKING([for DBUS Flask permissions in selinux/av_permissions.h])
745         AC_TRY_COMPILE([#include <selinux/av_permissions.h>],
746                         [#ifdef DBUS__ACQUIRE_SVC return 0;
747                          #else
748                          #error DBUS__ACQUIRE_SVC not defined
749                          #endif],
750                         have_selinux=yes, have_selinux=no)
751         AC_MSG_RESULT($have_selinux)
752     fi
753
754     if test x$enable_selinux = xauto ; then
755         if test x$have_selinux = xno ; then
756                 AC_MSG_WARN([Sufficiently new SELinux library not found])
757         fi
758     else 
759         if test x$have_selinux = xno ; then
760                 AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
761         fi
762     fi
763 fi
764
765 AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)
766
767 if test x$have_selinux = xyes ; then
768     # the selinux code creates threads
769     # which requires libpthread even on linux
770     AC_CHECK_FUNC(pthread_create,,[AC_CHECK_LIB(pthread,pthread_create,
771                                                 [SELINUX_THREAD_LIBS="-lpthread"])])
772
773     SELINUX_LIBS="-lselinux $SELINUX_THREAD_LIBS"
774     AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
775 else
776     SELINUX_LIBS=
777 fi
778
779 # inotify checks
780 if test x$enable_inotify = xno ; then
781     have_inotify=no;
782 else
783     AC_CHECK_HEADERS(sys/inotify.h, have_inotify=yes, have_inotify=no)
784 fi
785
786 dnl check if inotify backend is enabled
787 if test x$have_inotify = xyes; then
788    AC_DEFINE(DBUS_BUS_ENABLE_INOTIFY,1,[Use inotify])
789    AC_CHECK_FUNCS(inotify_init1)
790 fi
791
792 AM_CONDITIONAL(DBUS_BUS_ENABLE_INOTIFY, test x$have_inotify = xyes)
793
794 # dnotify checks
795 if test x$enable_dnotify = xno ; then
796     have_dnotify=no;
797 else
798     if test x$have_inotify = xno -a x$host_os = xlinux-gnu -o x$host_os = xlinux; then
799         have_dnotify=yes;       
800     else
801         have_dnotify=no;
802     fi
803 fi
804
805 dnl check if dnotify backend is enabled
806 if test x$have_dnotify = xyes; then
807    AC_DEFINE(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX,1,[Use dnotify on Linux])
808 fi
809
810 AM_CONDITIONAL(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX, test x$have_dnotify = xyes)
811
812 # kqueue checks
813 if test x$enable_kqueue = xno ; then
814     have_kqueue=no
815 else
816     have_kqueue=yes
817     AC_CHECK_HEADER(sys/event.h, , have_kqueue=no)
818     AC_CHECK_FUNC(kqueue, , have_kqueue=no)
819
820     if test x$enable_kqueue = xyes -a x$have_kqueue = xno; then
821         AC_MSG_ERROR(kqueue support explicitly enabled but not available)
822     fi
823 fi
824
825 dnl check if kqueue backend is enabled
826 if test x$have_kqueue = xyes; then
827    AC_DEFINE(DBUS_BUS_ENABLE_KQUEUE,1,[Use kqueue])
828 fi
829
830 AM_CONDITIONAL(DBUS_BUS_ENABLE_KQUEUE, test x$have_kqueue = xyes) 
831
832 dnl console owner file
833 if test x$enable_console_owner_file = xno ; then
834     have_console_owner_file=no;
835 else
836     case $host_os in
837     solaris*)
838         have_console_owner_file=yes;
839         AC_DEFINE(HAVE_CONSOLE_OWNER_FILE,1,[Have console owner file])
840         ;;
841     *)
842         have_console_owner_file=no;;
843     esac
844 fi
845
846 AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
847
848 # libaudit detection
849 if test x$enable_libaudit = xno ; then
850     have_libaudit=no;
851 else
852     # See if we have audit daemon & capabilities library
853     AC_CHECK_LIB(audit, audit_log_user_avc_message, 
854                  have_libaudit=yes, have_libaudit=no)
855     if test x$have_libaudit = xyes ; then
856         AC_CHECK_LIB(cap-ng, capng_clear,
857                  have_libaudit=yes, have_libaudit=no)
858     fi
859 fi
860
861 AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes)
862
863 if test x$have_libaudit = xyes ; then
864     SELINUX_LIBS="$SELINUX_LIBS -laudit -lcap-ng"
865     AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
866 fi
867
868 # Check for ADT API
869 AC_MSG_CHECKING(for ADT API)
870 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
871 #include <bsm/adt.h>
872 adt_user_context = ADT_USER;
873 ]], [[]])], [ check_adt_audit=yes ], [ check_adt_audit=no ])
874
875 if test ${check_adt_audit} = yes
876 then
877    AC_DEFINE([HAVE_ADT], [], [Adt audit API])
878    ADT_LIBS="-lbsm"
879    LIBS="-lbsm $LIBS"
880    AC_MSG_RESULT(yes)
881 else
882    AC_MSG_RESULT(no)
883 fi
884
885
886 #### Set up final flags
887 DBUS_CLIENT_CFLAGS=
888 DBUS_CLIENT_LIBS="$THREAD_LIBS"
889 AC_SUBST(DBUS_CLIENT_CFLAGS)
890 AC_SUBST(DBUS_CLIENT_LIBS)
891
892 DBUS_BUS_CFLAGS="$XML_CFLAGS"
893 DBUS_BUS_LIBS="$XML_LIBS $SELINUX_LIBS $INTLLIBS $THREAD_LIBS $ADT_LIBS"
894 AC_SUBST(DBUS_BUS_CFLAGS)
895 AC_SUBST(DBUS_BUS_LIBS)
896
897 DBUS_LAUNCHER_CFLAGS="$XML_CFLAGS"
898 DBUS_LAUNCHER_LIBS="$XML_LIBS $THREAD_LIBS"
899 AC_SUBST(DBUS_LAUNCHER_CFLAGS)
900 AC_SUBST(DBUS_LAUNCHER_LIBS)
901
902 DBUS_TEST_CFLAGS=
903 DBUS_TEST_LIBS="$THREAD_LIBS"
904 AC_SUBST(DBUS_TEST_CFLAGS)
905 AC_SUBST(DBUS_TEST_LIBS)
906
907 ### X11 detection
908 AC_PATH_XTRA
909
910 ## for now enable_x11 just tracks have_x11, 
911 ## there's no --enable-x11
912 if test x$no_x = xyes ; then
913    have_x11=no
914    enable_x11=no
915 else
916    have_x11=yes
917    enable_x11=yes
918 fi
919
920 if test x$enable_x11 = xyes ; then
921    AC_DEFINE(DBUS_BUILD_X11,1,[Build X11-dependent code])
922    DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
923    DBUS_X_CFLAGS="$X_CFLAGS"
924 else
925    DBUS_X_LIBS=
926    DBUS_X_CFLAGS=
927 fi
928
929 AC_SUBST(DBUS_X_CFLAGS)
930 AC_SUBST(DBUS_X_LIBS)
931
932
933 #### gcc warning flags
934
935 cc_supports_flag() {
936   AC_MSG_CHECKING(whether $CC supports "$@")
937   Cfile=/tmp/foo${$}
938   touch ${Cfile}.c
939   $CC -c "$@" ${Cfile}.c -o ${Cfile}.o >/dev/null 2>&1
940   rc=$?
941   rm -f ${Cfile}.c ${Cfile}.o
942   case $rc in
943     0) AC_MSG_RESULT(yes);;
944     *) AC_MSG_RESULT(no);;
945   esac
946   return $rc
947 }
948
949 ld_supports_flag() {
950   AC_MSG_CHECKING([whether $LD supports "$@"])
951   AC_TRY_LINK([
952     int one(void) { return 1; }
953     int two(void) { return 2; }
954   ], [ two(); ] , [_ac_ld_flag_supported=yes], [_ac_ld_flag_supported=no])
955
956   if test "$_ac_ld_flag_supported" = "yes"; then
957     rm -f conftest.c
958     touch conftest.c
959     if $CC -c conftest.c; then
960       ld_out=`$LD $@ -o conftest conftest.o 2>&1`
961       ld_ret=$?
962       if test $ld_ret -ne 0 ; then
963         _ac_ld_flag_supported=no
964       elif echo "$ld_out" | egrep 'option ignored|^usage:|unrecognized option|illegal option' >/dev/null ; then
965         _ac_ld_flag_supported=no
966       fi
967     fi
968     rm -f conftest.c conftest.o conftest
969   fi
970
971   AC_MSG_RESULT($_ac_ld_flag_supported)
972   if test "$_ac_ld_flag_supported" = "yes" ; then
973     return 0
974   else
975     return 1
976   fi
977 }
978
979 if test x$USE_MAINTAINER_MODE = xyes; then
980   if cc_supports_flag "-Werror"; then
981     CFLAGS="$CFLAGS -Werror"
982   fi
983 fi
984
985 if test "x$GCC" = "xyes"; then
986   changequote(,)dnl
987   case " $CFLAGS " in
988   *[\ \ ]-Wall[\ \      ]*) ;;
989   *) CFLAGS="$CFLAGS -Wall" ;;
990   esac
991
992   case " $CFLAGS " in
993   *[\ \ ]-Wchar-subscripts[\ \  ]*) ;;
994   *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
995   esac
996
997   case " $CFLAGS " in
998   *[\ \ ]-Wmissing-declarations[\ \     ]*) ;;
999   *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
1000   esac
1001
1002   case " $CFLAGS " in
1003   *[\ \ ]-Wmissing-prototypes[\ \       ]*) ;;
1004   *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
1005   esac
1006
1007   case " $CFLAGS " in
1008   *[\ \ ]-Wnested-externs[\ \   ]*) ;;
1009   *) CFLAGS="$CFLAGS -Wnested-externs" ;;
1010   esac
1011
1012   case " $CFLAGS " in
1013   *[\ \ ]-Wpointer-arith[\ \    ]*) ;;
1014   *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
1015   esac
1016
1017   case " $CFLAGS " in
1018   *[\ \ ]-Wcast-align[\ \       ]*) ;;
1019   *) CFLAGS="$CFLAGS -Wcast-align" ;;
1020   esac
1021
1022   case " $CFLAGS " in
1023   *[\ \ ]-Wfloat-equal[\ \      ]*) ;;
1024   *) if cc_supports_flag -Wfloat-equals; then
1025         CFLAGS="$CFLAGS -Wfloat-equal" 
1026      fi
1027      ;;
1028   esac
1029
1030   case " $CFLAGS " in
1031   *[\ \ ]-Wdeclaration-after-statement[\ \      ]*) ;;
1032   *) if cc_supports_flag -Wdeclaration-after-statement; then
1033         CFLAGS="$CFLAGS -Wdeclaration-after-statement"
1034      fi
1035      ;;
1036   esac
1037
1038   case " $CFLAGS " in
1039   *[\ \ ]-fno-common[\ \        ]*) ;;
1040   *) if cc_supports_flag -fno-common; then
1041         CFLAGS="$CFLAGS -fno-common"
1042      fi
1043      ;;
1044   esac
1045
1046   case " $CFLAGS " in
1047   *[\ \ ]-fPIC[\ \      ]*) ;;
1048   *) if cc_supports_flag -fPIC; then
1049         PIC_CFLAGS="-fPIC"
1050         if ld_supports_flag -z,relro; then
1051            PIC_LDFLAGS="-Wl,-z,relro"
1052         fi
1053      fi
1054      ;;
1055   esac
1056
1057   case " $CFLAGS " in
1058   *[\ \ ]-fPIE[\ \      ]*) ;;
1059   *) if cc_supports_flag -fPIE; then
1060         PIE_CFLAGS="-fPIE"
1061         if ld_supports_flag -z,relro; then
1062            PIE_LDFLAGS="-pie -Wl,-z,relro"
1063         else
1064            PIE_LDFLAGS="-pie"
1065         fi
1066      fi
1067      ;;
1068   esac
1069   
1070   ### Disabled warnings, and compiler flag overrides
1071   
1072   # Let's just ignore unused for now
1073   case " $CFLAGS " in
1074   *[\ \ ]-Wno-unused[\ \        ]*) ;;
1075   *) CFLAGS="$CFLAGS -Wno-unused" ;;
1076   esac  
1077   
1078   # This group is for warnings we currently don't pass.
1079   # We would like to, however.  Please fix.
1080   
1081   # http://bugs.freedesktop.org/show_bug.cgi?id=17433
1082   case " $CFLAGS " in
1083   *[\ \ ]-Wno-sign-compare[\ \  ]*) ;;
1084   *) CFLAGS="$CFLAGS -Wno-sign-compare" ;;
1085   esac
1086   case " $CFLAGS " in
1087   *[\ \ ]-Wno-pointer-sign[\ \  ]*) ;;
1088   *) if cc_supports_flag -Wno-pointer-sign; then
1089         CFLAGS="$CFLAGS -Wno-pointer-sign"
1090      fi
1091      ;;
1092   esac  
1093   
1094   # http://bugs.freedesktop.org/show_bug.cgi?id=19195
1095   case " $CFLAGS " in
1096   *[\ \ ]-Wno-format[\ \        ]*) ;;
1097   *) CFLAGS="$CFLAGS -Wno-format" ;;
1098   esac
1099   
1100   # This one is special - it's not a warning override.
1101   # http://bugs.freedesktop.org/show_bug.cgi?id=10599
1102   case " $CFLAGS " in
1103   *[\ \ ]-fno-strict-aliasing[\ \       ]*) ;;
1104   *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
1105   esac
1106   ### End disabled warnings
1107
1108   if test "x$enable_ansi" = "xyes"; then
1109     case " $CFLAGS " in
1110     *[\ \       ]-ansi[\ \      ]*) ;;
1111     *) CFLAGS="$CFLAGS -ansi" ;;
1112     esac
1113
1114     case " $CFLAGS " in
1115     *[\ \       ]-D_POSIX_C_SOURCE*) ;;
1116     *) CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=199309L" ;;
1117     esac
1118
1119     case " $CFLAGS " in
1120     *[\ \       ]-D_BSD_SOURCE[\ \      ]*) ;;
1121     *) CFLAGS="$CFLAGS -D_BSD_SOURCE" ;;
1122     esac
1123
1124     case " $CFLAGS " in
1125     *[\ \       ]-pedantic[\ \  ]*) ;;
1126     *) CFLAGS="$CFLAGS -pedantic" ;;
1127     esac    
1128   fi
1129   if test x$enable_gcov = xyes; then
1130     case " $CFLAGS " in
1131     *[\ \       ]-fprofile-arcs[\ \     ]*) ;;
1132     *) CFLAGS="$CFLAGS -fprofile-arcs" ;;
1133     esac
1134     case " $CFLAGS " in
1135     *[\ \       ]-ftest-coverage[\ \    ]*) ;;
1136     *) CFLAGS="$CFLAGS -ftest-coverage" ;;
1137     esac
1138
1139     ## remove optimization
1140     CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'`
1141   fi
1142   changequote([,])dnl
1143 else
1144   if test x$enable_gcov = xyes; then
1145     AC_MSG_ERROR([--enable-gcov can only be used with gcc])
1146   fi
1147 fi
1148
1149 AC_SUBST(PIC_CFLAGS)
1150 AC_SUBST(PIC_LDFLAGS)  
1151 AC_SUBST(PIE_CFLAGS)
1152 AC_SUBST(PIE_LDFLAGS)  
1153
1154 if ld_supports_flag --gc-sections; then
1155   SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
1156   CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
1157 fi
1158 AC_SUBST(SECTION_FLAGS)
1159 AC_SUBST(SECTION_LDFLAGS)
1160 AC_MSG_RESULT($ac_gcsections)
1161
1162 changequote(,)dnl
1163 # compress spaces in flags
1164 CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'`
1165 CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ +/ /g'`
1166 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'`
1167 changequote([,])dnl
1168
1169 ### Doxygen Documentation
1170
1171 AC_PATH_PROG(DOXYGEN, doxygen, no)
1172
1173 AC_MSG_CHECKING([whether to build Doxygen documentation])
1174
1175 if test x$DOXYGEN = xno ; then
1176     have_doxygen=no
1177 else
1178     have_doxygen=yes
1179 fi
1180
1181 if test x$enable_doxygen_docs = xauto ; then
1182     if test x$have_doxygen = xno ; then
1183         enable_doxygen_docs=no
1184     else
1185         enable_doxygen_docs=yes
1186     fi
1187 fi
1188
1189 if test x$enable_doxygen_docs = xyes; then
1190     if test x$have_doxygen = xno; then
1191         AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
1192     fi
1193 fi
1194
1195 AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
1196 AC_MSG_RESULT(yes)
1197
1198 ### XML Documentation
1199
1200 AC_PATH_PROG(XMLTO, xmlto, no)
1201
1202 AC_MSG_CHECKING([whether to build XML documentation])
1203
1204 if test x$XMLTO = xno ; then
1205     have_xmlto=no
1206 else
1207     have_xmlto=yes
1208 fi
1209
1210 if test x$enable_xml_docs = xauto ; then
1211     if test x$have_xmlto = xno ; then
1212         enable_xml_docs=no
1213     else
1214         enable_xml_docs=yes
1215     fi
1216 fi
1217
1218 if test x$enable_xml_docs = xyes; then
1219     if test x$have_xmlto = xno; then
1220         AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
1221     fi
1222 fi
1223
1224 AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
1225 AC_MSG_RESULT(yes)
1226
1227 #### Have to go $localstatedir->$prefix/var->/usr/local/var
1228
1229 #### find the actual value for $prefix that we'll end up with
1230 ##   (I know this is broken and should be done in the Makefile, but
1231 ##    that's a major pain and almost nobody actually seems to care)
1232 AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
1233 AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
1234 AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
1235 AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
1236 AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
1237 AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
1238
1239 #### Check our operating system
1240 operating_system=unknown
1241 if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
1242    operating_system=redhat
1243 fi
1244
1245 if test -f /etc/slackware-version || test -f $EXPANDED_SYSCONFDIR/slackware-version ; then
1246    operating_system=slackware
1247 fi
1248
1249 #### Sort out init scripts
1250
1251 if test x$with_init_scripts = x; then
1252     if test xredhat = x$operating_system ; then
1253         with_init_scripts=redhat
1254     else
1255         if test xslackware = x$operating_system ; then
1256                 with_init_scripts=slackware
1257             else
1258                 with_init_scripts=none
1259         fi
1260     fi
1261 fi
1262
1263 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_RED_HAT, test x$with_init_scripts = xredhat)
1264
1265 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_SLACKWARE, test x$with_init_scripts = xslackware)
1266
1267 ##### Set up location for system bus socket
1268 if ! test -z "$with_system_socket"; then
1269    DBUS_SYSTEM_SOCKET=$with_system_socket
1270 else
1271    DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
1272 fi
1273
1274 AC_SUBST(DBUS_SYSTEM_SOCKET)
1275 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_SOCKET,"$DBUS_SYSTEM_SOCKET",[The name of the socket the system bus listens on by default])
1276
1277 ## system bus only listens on local domain sockets, and never 
1278 ## on an abstract socket (so only root can create the socket)
1279 DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
1280 AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
1281 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS, "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS",[The default D-Bus address of the system bus])
1282
1283 #### Set up the pid file
1284 if ! test -z "$with_system_pid_file"; then
1285    DBUS_SYSTEM_PID_FILE=$with_system_pid_file
1286 elif test x$with_init_scripts = xredhat ; then
1287    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
1288 else
1289    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
1290 fi
1291
1292 AC_SUBST(DBUS_SYSTEM_PID_FILE)
1293
1294 #### Directory to check for console ownership
1295 if ! test -z "$with_console_auth_dir"; then
1296    DBUS_CONSOLE_AUTH_DIR=$with_console_auth_dir
1297 else
1298    DBUS_CONSOLE_AUTH_DIR=/var/run/console/
1299 fi
1300
1301 AC_SUBST(DBUS_CONSOLE_AUTH_DIR)
1302 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_AUTH_DIR, "$DBUS_CONSOLE_AUTH_DIR", [Directory to check for console ownerhip])
1303
1304 #### File to check for console ownership
1305 if test x$have_console_owner_file = xyes; then
1306    if ! test -z "$with_console_owner_file"; then
1307       DBUS_CONSOLE_OWNER_FILE=$with_console_owner_file
1308    else
1309       DBUS_CONSOLE_OWNER_FILE=/dev/console
1310    fi
1311 else
1312   DBUS_CONSOLE_OWNER_FILE=
1313 fi
1314
1315 AC_SUBST(DBUS_CONSOLE_OWNER_FILE)
1316 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_OWNER_FILE, "$DBUS_CONSOLE_OWNER_FILE", [File to check for console ownerhip])
1317
1318 #### User to start the system bus as
1319 if test -z "$with_dbus_user" ; then
1320     DBUS_USER=messagebus
1321 else
1322     DBUS_USER=$with_dbus_user
1323 fi
1324 AC_SUBST(DBUS_USER)
1325 AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon])
1326
1327 #### Direcotry to install data files into
1328 DBUS_DATADIR=$EXPANDED_DATADIR
1329 AC_SUBST(DBUS_DATADIR)
1330 AC_DEFINE_UNQUOTED(DBUS_DATADIR,"$DBUS_DATADIR", [Directory for installing DBUS data files])
1331
1332 #### Directory to install dbus-daemon
1333 if test -z "$with_dbus_daemondir" ; then
1334     DBUS_DAEMONDIR=$EXPANDED_BINDIR
1335 else
1336     DBUS_DAEMONDIR=$with_dbus_daemondir
1337 fi
1338 AC_SUBST(DBUS_DAEMONDIR)
1339 AC_DEFINE_UNQUOTED(DBUS_DAEMONDIR,"$DBUS_DAEMONDIR", [Directory for installing the DBUS daemon])
1340
1341 #### Directory to install the other binaries
1342 DBUS_BINDIR="$EXPANDED_BINDIR"
1343 AC_SUBST(DBUS_BINDIR)
1344 AC_DEFINE_UNQUOTED(DBUS_BINDIR,"$DBUS_BINDIR", [Directory for installing the binaries])
1345
1346 #### Directory to install the libexec binaries
1347 DBUS_LIBEXECDIR="$EXPANDED_LIBEXECDIR"
1348 AC_SUBST(DBUS_LIBEXECDIR)
1349 AC_DEFINE_UNQUOTED(DBUS_LIBEXECDIR,"$DBUS_LIBEXECDIR", [Directory for installing the libexec binaries])
1350
1351 #### Tell tests where to find certain stuff in builddir
1352
1353 DBUS_PWD=`pwd`
1354 AC_DEFUN([TEST_PATH], [
1355 TEST_$1=${DBUS_PWD}/test/$2
1356 AC_DEFINE_UNQUOTED(TEST_$1, "$TEST_$1",
1357                    [Full path to test file test/$2 in builddir])
1358 AC_SUBST(TEST_$1)
1359 ])
1360
1361 TEST_PATH(VALID_SERVICE_DIR, data/valid-service-files)
1362 TEST_PATH(INVALID_SERVICE_DIR, data/invalid-service-files)
1363 TEST_PATH(VALID_SERVICE_SYSTEM_DIR, data/valid-service-files-system)
1364 TEST_PATH(INVALID_SERVICE_SYSTEM_DIR, data/invalid-service-files-system)
1365 TEST_PATH(SERVICE_BINARY, test-service)
1366 TEST_PATH(SHELL_SERVICE_BINARY, test-shell-service)
1367 TEST_PATH(EXIT_BINARY, test-exit)
1368 TEST_PATH(SEGFAULT_BINARY, test-segfault)
1369 TEST_PATH(SLEEP_FOREVER_BINARY, test-sleep-forever)
1370 TEST_PATH(PRIVSERVER_BINARY, name-test/test-privserver)
1371
1372 AC_DEFINE_UNQUOTED(TEST_BUS_BINARY, "$DBUS_PWD/bus/dbus-daemon",
1373                    [Full path to the daemon in the builddir])
1374 AC_SUBST(TEST_BUS_BINARY)
1375
1376 ## Export the non-setuid external helper
1377 TEST_LAUNCH_HELPER_BINARY="$DBUS_PWD/bus/dbus-daemon-launch-helper-test"
1378 AC_SUBST(TEST_LAUNCH_HELPER_BINARY)
1379 AC_DEFINE_UNQUOTED(DBUS_TEST_LAUNCH_HELPER_BINARY, "$TEST_LAUNCH_HELPER_BINARY",
1380                    [Full path to the launch helper test program in the builddir])
1381
1382 #### Find socket directories
1383 if ! test -z "$TMPDIR" ; then
1384    DEFAULT_SOCKET_DIR=$TMPDIR
1385 elif ! test -z "$TEMP" ; then
1386    DEFAULT_SOCKET_DIR=$TEMP
1387 elif ! test -z "$TMP" ; then
1388    DEFAULT_SOCKET_DIR=$TMP
1389 else
1390    DEFAULT_SOCKET_DIR=/tmp
1391 fi
1392
1393 if ! test -z "$with_test_socket_dir" ; then
1394    TEST_SOCKET_DIR="$with_test_socket_dir"
1395 else
1396    TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1397 fi
1398 AC_SUBST(TEST_SOCKET_DIR)
1399 AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
1400
1401 if ! test -z "$with_session_socket_dir" ; then
1402    DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
1403 else
1404    DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1405 fi
1406 AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
1407 AC_SUBST(DBUS_SESSION_SOCKET_DIR)
1408
1409 AC_DEFINE_UNQUOTED(DBUS_UNIX, "1", [Defined on UNIX and Linux systems and not on Windows])
1410
1411 # darwin needs this to initialize the environment
1412 AC_CHECK_HEADERS(crt_externs.h)
1413 AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
1414 AH_VERBATIM(_DARWIN_ENVIRON,
1415 [
1416 #if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
1417 # include <sys/time.h>
1418 # include <crt_externs.h>
1419 # define environ (*_NSGetEnviron())
1420 #endif
1421 ])
1422
1423 AC_OUTPUT([
1424 Doxyfile
1425 dbus/dbus-arch-deps.h
1426 bus/system.conf
1427 bus/session.conf
1428 bus/messagebus
1429 bus/rc.messagebus
1430 bus/dbus-daemon.1
1431 Makefile
1432 dbus/Makefile
1433 bus/Makefile
1434 tools/Makefile
1435 test/Makefile
1436 test/name-test/Makefile
1437 doc/Makefile
1438 dbus-1.pc
1439 test/data/valid-config-files/debug-allow-all.conf
1440 test/data/valid-config-files/debug-allow-all-sha1.conf
1441 test/data/valid-config-files-system/debug-allow-all-pass.conf
1442 test/data/valid-config-files-system/debug-allow-all-fail.conf
1443 test/data/valid-service-files/org.freedesktop.DBus.TestSuite.PrivServer.service
1444 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteEchoService.service
1445 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteForkingEchoService.service
1446 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteSegfaultService.service
1447 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service
1448 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service
1449 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteEchoService.service
1450 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteSegfaultService.service
1451 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service
1452 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service
1453 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoExec.service
1454 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoUser.service
1455 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoService.service
1456 ])
1457
1458 dnl ==========================================================================
1459 echo "
1460                     D-Bus $VERSION
1461                   ==============
1462
1463         prefix:                   ${prefix}
1464         exec_prefix:              ${exec_prefix}
1465         libdir:                   ${EXPANDED_LIBDIR}
1466         libexecdir:               ${EXPANDED_LIBEXECDIR}
1467         bindir:                   ${EXPANDED_BINDIR}
1468         sysconfdir:               ${EXPANDED_SYSCONFDIR}
1469         localstatedir:            ${EXPANDED_LOCALSTATEDIR}
1470         datadir:                  ${EXPANDED_DATADIR}
1471         source code location:     ${srcdir}
1472         compiler:                 ${CC}
1473         cflags:                   ${CFLAGS}
1474         cppflags:                 ${CPPFLAGS}
1475         cxxflags:                 ${CXXFLAGS}
1476         64-bit int:               ${DBUS_INT64_TYPE}
1477         32-bit int:               ${DBUS_INT32_TYPE}
1478         16-bit int:               ${DBUS_INT16_TYPE}
1479         Doxygen:                  ${DOXYGEN}
1480         xmlto:                    ${XMLTO}"
1481
1482 echo "
1483         Maintainer mode:          ${USE_MAINTAINER_MODE}
1484         gcc coverage profiling:   ${enable_gcov}
1485         Building unit tests:      ${enable_tests}
1486         Building verbose mode:    ${enable_verbose_mode}
1487         Building assertions:      ${enable_asserts}
1488         Building checks:          ${enable_checks}
1489         Building SELinux support: ${have_selinux}
1490         Building inotify support: ${have_inotify}
1491         Building dnotify support: ${have_dnotify}
1492         Building kqueue support:  ${have_kqueue}
1493         Building X11 code:        ${enable_x11}
1494         Building Doxygen docs:    ${enable_doxygen_docs}
1495         Building XML docs:        ${enable_xml_docs}
1496         Building cache support:   ${enable_userdb_cache}
1497         Gettext libs (empty OK):  ${INTLLIBS}
1498         Using XML parser:         ${with_xml}
1499         Init scripts style:       ${with_init_scripts}
1500         Abstract socket names:    ${ac_cv_have_abstract_sockets}
1501         System bus socket:        ${DBUS_SYSTEM_SOCKET}
1502         System bus address:       ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
1503         System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
1504         Session bus socket dir:   ${DBUS_SESSION_SOCKET_DIR}
1505         Console auth dir:         ${DBUS_CONSOLE_AUTH_DIR}
1506         Console owner file:       ${have_console_owner_file}
1507         Console owner file path:  ${DBUS_CONSOLE_OWNER_FILE}
1508         System bus user:          ${DBUS_USER}
1509         Session bus services dir: ${EXPANDED_DATADIR}/dbus-1/services
1510         'make check' socket dir:  ${TEST_SOCKET_DIR}
1511 "
1512
1513 if test x$enable_tests = xyes; then
1514         echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
1515 fi
1516 if test x$enable_tests = xyes -a x$enable_asserts = xno; then
1517         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)"
1518 fi
1519 if test x$enable_gcov = xyes; then
1520         echo "NOTE: building with coverage profiling is definitely for developers only."
1521 fi
1522 if test x$enable_verbose_mode = xyes; then
1523         echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
1524 fi
1525 if test x$enable_asserts = xyes; then
1526         echo "NOTE: building with assertions increases library size and decreases performance."
1527 fi
1528 if test x$enable_checks = xno; then
1529         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."
1530 fi
1531 if test x$dbus_use_libxml = xtrue; then
1532         echo
1533         echo "WARNING: You have chosen to use libxml as your xml parser however this code path is not maintained by the D-Bus developers and if it breaks you get to keep the pieces.  If you have selected this option in err please reconfigure with expat (e.g. --with-xml=expat)."
1534 fi