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