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