hide console when autostarting dbus-daemon (cherry picked from commit 27fad960837b54b...
[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], [3])
6 m4_define([dbus_micro_version], [1])
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=8
33
34 ## increment any time the source changes; set to
35 ##  0 if you increment CURRENT
36 LT_REVISION=1
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=5
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); exit(b); ]]),
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 AC_CHECK_HEADERS(wspiapi.h)
447
448 # Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
449 #
450 case $host_os in
451     solaris*)
452        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
453 esac
454     
455 # checking for a posix version of getpwnam_r
456 # if we are cross compiling and can not run the test
457 # assume getpwnam_r is the posix version
458 # it is up to the person cross compiling to change
459 # this behavior if desired
460 AC_LANG_PUSH(C)
461 AC_CACHE_CHECK([for posix getpwnam_r],
462                 ac_cv_func_posix_getpwnam_r,
463                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
464 [[
465 #include <errno.h>
466 #include <pwd.h>
467 ]],
468 [[
469     char buffer[10000];
470     struct passwd pwd, *pwptr = &pwd;
471     int error;
472     errno = 0;
473     error = getpwnam_r ("", &pwd, buffer, 
474                         sizeof (buffer), &pwptr);
475    return (error < 0 && errno == ENOSYS) 
476            || error == ENOSYS; 
477 ]])],
478         [ac_cv_func_posix_getpwnam_r=yes],
479         [ac_cv_func_posix_getpwnam_r=no],
480         [ac_cv_func_posix_getpwnam_r=yes]
481 )])
482 AC_LANG_POP(C)
483
484 if test "$ac_cv_func_posix_getpwnam_r" = yes; then
485         AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
486                 [Have POSIX function getpwnam_r])
487 else
488         AC_CACHE_CHECK([for nonposix getpwnam_r],
489                 ac_cv_func_nonposix_getpwnam_r,
490                 [AC_TRY_LINK([#include <pwd.h>],
491                         [char buffer[10000];
492                         struct passwd pwd;
493                         getpwnam_r ("", &pwd, buffer, 
494                                         sizeof (buffer));],
495                         [ac_cv_func_nonposix_getpwnam_r=yes],
496                         [ac_cv_func_nonposix_getpwnam_r=no])])
497                 if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
498                 AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
499                         [Have non-POSIX function getpwnam_r])
500         fi
501 fi
502
503 dnl check for socklen_t
504 AC_MSG_CHECKING(whether socklen_t is defined)
505 AC_TRY_COMPILE([
506 #include <sys/types.h>
507 #include <sys/socket.h>
508 #include <netdb.h>
509 ],[
510 socklen_t foo;
511 foo = 1;
512 ],dbus_have_socklen_t=yes,dbus_have_socklen_t=no)
513 AC_MSG_RESULT($dbus_have_socklen_t)
514
515 if test "x$dbus_have_socklen_t" = "xyes"; then
516     AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
517 fi
518
519 dnl check for writev header and writev function so we're 
520 dnl good to go if HAVE_WRITEV gets defined.
521 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
522
523 dnl needed on darwin for NAME_MAX
524 AC_CHECK_HEADERS(sys/syslimits.h)
525
526 dnl Make it easy to check if we have MSG_NOSIGNAL without actually having to include sys/socket.h
527 AC_CHECK_DECLS([MSG_NOSIGNAL], [], [], [[ #include <sys/socket.h> ]])
528
529 dnl check for flavours of varargs macros (test from GLib)
530 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
531 AC_TRY_COMPILE([],[
532 int a(int p1, int p2, int p3);
533 #define call_a(...) a(1,__VA_ARGS__)
534 call_a(2,3);
535 ],dbus_have_iso_c_varargs=yes,dbus_have_iso_c_varargs=no)
536 AC_MSG_RESULT($dbus_have_iso_c_varargs)
537
538 AC_MSG_CHECKING(for GNUC varargs macros)
539 AC_TRY_COMPILE([],[
540 int a(int p1, int p2, int p3);
541 #define call_a(params...) a(1,params)
542 call_a(2,3);
543 ],dbus_have_gnuc_varargs=yes,dbus_have_gnuc_varargs=no)
544 AC_MSG_RESULT($dbus_have_gnuc_varargs)
545
546 dnl Output varargs tests
547 if test x$dbus_have_iso_c_varargs = xyes; then
548     AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
549 fi
550 if test x$dbus_have_gnuc_varargs = xyes; then
551     AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
552 fi
553
554 dnl Check for various credentials.
555 AC_MSG_CHECKING(for struct cmsgcred)
556 AC_TRY_COMPILE([
557 #include <sys/types.h>
558 #include <sys/socket.h>
559 ],[
560 struct cmsgcred cred;
561
562 cred.cmcred_pid = 0;
563 ],dbus_have_struct_cmsgcred=yes,dbus_have_struct_cmsgcred=no)
564 AC_MSG_RESULT($dbus_have_struct_cmsgcred)
565
566 if test x$dbus_have_struct_cmsgcred = xyes; then
567     AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
568 fi
569
570 AC_CHECK_FUNCS(getpeerucred getpeereid)
571
572 AC_CHECK_FUNCS(pipe2 accept4)
573
574 #### Abstract sockets
575
576 if test x$enable_abstract_sockets = xauto; then
577 AC_LANG_PUSH(C)
578 warn_on_xcompile=no
579 AC_CACHE_CHECK([abstract socket namespace],
580                 ac_cv_have_abstract_sockets,
581                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
582 [[
583 #include <sys/types.h>
584 #include <stdlib.h>
585 #include <string.h>
586 #include <stdio.h>
587 #include <sys/socket.h>
588 #include <sys/un.h>
589 #include <errno.h>
590 ]],
591 [[
592   int listen_fd;
593   struct sockaddr_un addr;
594   
595   listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
596   
597   if (listen_fd < 0)
598     {
599       fprintf (stderr, "socket() failed: %s\n", strerror (errno));
600       exit (1);
601     }
602
603   memset (&addr, '\0', sizeof (addr));
604   addr.sun_family = AF_UNIX;
605   strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
606   addr.sun_path[0] = '\0'; /* this is what makes it abstract */
607   
608   if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
609     {
610        fprintf (stderr, "Abstract socket namespace bind() failed: %s\n", 
611                 strerror (errno));
612        exit (1);
613     }
614   else 
615     exit (0);
616 ]])],
617               [ac_cv_have_abstract_sockets=yes],
618               [ac_cv_have_abstract_sockets=no],
619               [
620                 ac_cv_have_abstract_sockets=no
621                 warn_on_xcompile=yes
622               ]
623 )])
624 if test x$warn_on_xcompile = xyes ; then
625   AC_MSG_WARN([Cannot check for abstract sockets when cross-compiling, please use --enable-abstract-sockets])
626 fi
627 AC_LANG_POP(C)
628 fi
629
630 if test x$enable_abstract_sockets = xyes; then
631     if test x$ac_cv_have_abstract_sockets = xno; then
632         AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
633     fi
634 fi
635
636 if test x$enable_abstract_sockets = xno; then
637    ac_cv_have_abstract_sockets=no;
638 fi
639
640 if test x$ac_cv_have_abstract_sockets = xyes ; then
641    DBUS_PATH_OR_ABSTRACT=abstract
642    AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
643 else
644    DBUS_PATH_OR_ABSTRACT=path
645 fi
646
647 # this is used in addresses to prefer abstract, e.g. 
648 # unix:path=/foo or unix:abstract=/foo 
649 AC_SUBST(DBUS_PATH_OR_ABSTRACT)
650
651 #### Sort out XML library
652
653 # see what we have
654 AC_CHECK_LIB(expat, XML_ParserCreate_MM,
655              [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
656              have_expat=false)
657
658 # see what we want to use
659 dbus_use_libxml=false
660 dbus_use_expat=false
661 if test x$with_xml = xexpat; then
662         if ! $have_expat ; then
663            AC_MSG_ERROR([Explicitly requested expat but expat not found])
664         fi
665         dbus_use_expat=true
666 elif test x$with_xml = xlibxml; then
667         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.6.0, have_libxml=true, have_libxml=false)
668         if ! $have_libxml ; then
669            AC_MSG_ERROR([Explicitly requested libxml but libxml not found])
670         fi
671         dbus_use_libxml=true
672 else
673         ### expat is the default because libxml can't currently survive 
674         ### our brutal OOM-handling unit test setup.
675         ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
676         if test x$have_expat = xfalse; then
677                 AC_MSG_ERROR([Could not find expat.h, check config.log for failed attempts])
678         fi
679         ### By default, only use Expat since it's tested and known to work.  If you're a
680         ### general-purpose OS vendor, please don't enable libxml.  For embedded use
681         ### if your OS is built around libxml, that's another case.
682         dbus_use_expat=true
683 fi
684
685 AM_CONDITIONAL(DBUS_USE_EXPAT, $dbus_use_expat)
686 AM_CONDITIONAL(DBUS_USE_LIBXML, $dbus_use_libxml)
687
688 if $dbus_use_expat; then
689    XML_LIBS=-lexpat
690    XML_CFLAGS=
691 fi
692 if $dbus_use_libxml; then
693    XML_LIBS=$LIBXML_LIBS
694    XML_CFLAGS=$LIBXML_CFLAGS
695 fi
696
697 # Thread lib detection
698 AC_CHECK_FUNC(pthread_cond_timedwait,[AC_CHECK_LIB(pthread,pthread_cond_timedwait,
699                                                     [THREAD_LIBS="-lpthread"])])
700 save_libs="$LIBS"
701 LIBS="$LIBS $THREAD_LIBS"
702 AC_CHECK_FUNC(pthread_condattr_setclock,have_pthread_condattr_setclock=true,have_pthread_condattr_setclock=false)
703 if test x$have_pthread_condattr_setclock = xtrue; then
704     AC_SEARCH_LIBS([clock_getres],[rt],[THREAD_LIBS="$THREAD_LIBS -lrt"])
705     AC_MSG_CHECKING([for CLOCK_MONOTONIC])
706     AC_TRY_COMPILE([#include <time.h>
707 #include <pthread.h>
708 ], [
709 struct timespec monotonic_timer;
710 pthread_condattr_t attr;
711 pthread_condattr_init (&attr);
712 pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
713 clock_getres (CLOCK_MONOTONIC,&monotonic_timer);
714 ], have_clock_monotonic=true, have_clock_monotonic=false)
715 if test x$have_clock_monotonic = xtrue; then
716     AC_MSG_RESULT([found])
717     AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1, [Define if we have CLOCK_MONOTONIC])
718 else
719     AC_MSG_RESULT([not found])
720 fi
721 fi
722 LIBS="$save_libs"
723
724 # SELinux detection
725 if test x$enable_selinux = xno ; then
726     have_selinux=no;
727 else
728     # See if we have SELinux library
729     AC_CHECK_LIB(selinux, is_selinux_enabled, 
730                  have_selinux=yes, have_selinux=no)
731
732     # see if we have the SELinux header with the new D-Bus stuff in it
733     if test x$have_selinux = xyes ; then
734         AC_MSG_CHECKING([for DBUS Flask permissions in selinux/av_permissions.h])
735         AC_TRY_COMPILE([#include <selinux/av_permissions.h>],
736                         [#ifdef DBUS__ACQUIRE_SVC return 0;
737                          #else
738                          #error DBUS__ACQUIRE_SVC not defined
739                          #endif],
740                         have_selinux=yes, have_selinux=no)
741         AC_MSG_RESULT($have_selinux)
742     fi
743
744     if test x$enable_selinux = xauto ; then
745         if test x$have_selinux = xno ; then
746                 AC_MSG_WARN([Sufficiently new SELinux library not found])
747         fi
748     else 
749         if test x$have_selinux = xno ; then
750                 AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
751         fi
752     fi
753 fi
754
755 AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)
756
757 if test x$have_selinux = xyes ; then
758     # the selinux code creates threads
759     # which requires libpthread even on linux
760     AC_CHECK_FUNC(pthread_create,,[AC_CHECK_LIB(pthread,pthread_create,
761                                                 [SELINUX_THREAD_LIBS="-lpthread"])])
762
763     SELINUX_LIBS="-lselinux $SELINUX_THREAD_LIBS"
764     AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
765 else
766     SELINUX_LIBS=
767 fi
768
769 # inotify checks
770 if test x$enable_inotify = xno ; then
771     have_inotify=no;
772 else
773     AC_CHECK_HEADERS(sys/inotify.h, have_inotify=yes, have_inotify=no)
774 fi
775
776 dnl check if inotify backend is enabled
777 if test x$have_inotify = xyes; then
778    AC_DEFINE(DBUS_BUS_ENABLE_INOTIFY,1,[Use inotify])
779    AC_CHECK_FUNCS(inotify_init1)
780 fi
781
782 AM_CONDITIONAL(DBUS_BUS_ENABLE_INOTIFY, test x$have_inotify = xyes)
783
784 # dnotify checks
785 if test x$enable_dnotify = xno ; then
786     have_dnotify=no;
787 else
788     if test x$have_inotify = xno -a x$host_os = xlinux-gnu -o x$host_os = xlinux; then
789         have_dnotify=yes;       
790     else
791         have_dnotify=no;
792     fi
793 fi
794
795 dnl check if dnotify backend is enabled
796 if test x$have_dnotify = xyes; then
797    AC_DEFINE(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX,1,[Use dnotify on Linux])
798 fi
799
800 AM_CONDITIONAL(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX, test x$have_dnotify = xyes)
801
802 # kqueue checks
803 if test x$enable_kqueue = xno ; then
804     have_kqueue=no
805 else
806     have_kqueue=yes
807     AC_CHECK_HEADER(sys/event.h, , have_kqueue=no)
808     AC_CHECK_FUNC(kqueue, , have_kqueue=no)
809
810     if test x$enable_kqueue = xyes -a x$have_kqueue = xno; then
811         AC_MSG_ERROR(kqueue support explicitly enabled but not available)
812     fi
813 fi
814
815 dnl check if kqueue backend is enabled
816 if test x$have_kqueue = xyes; then
817    AC_DEFINE(DBUS_BUS_ENABLE_KQUEUE,1,[Use kqueue])
818 fi
819
820 AM_CONDITIONAL(DBUS_BUS_ENABLE_KQUEUE, test x$have_kqueue = xyes) 
821
822 dnl console owner file
823 if test x$enable_console_owner_file = xno ; then
824     have_console_owner_file=no;
825 else
826     case $host_os in
827     solaris*)
828         have_console_owner_file=yes;
829         AC_DEFINE(HAVE_CONSOLE_OWNER_FILE,1,[Have console owner file])
830         ;;
831     *)
832         have_console_owner_file=no;;
833     esac
834 fi
835
836 AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
837
838 # libaudit detection
839 if test x$enable_libaudit = xno ; then
840     have_libaudit=no;
841 else
842     # See if we have audit daemon & capabilities library
843     AC_CHECK_LIB(audit, audit_log_user_avc_message, 
844                  have_libaudit=yes, have_libaudit=no)
845     if test x$have_libaudit = xyes ; then
846         AC_CHECK_LIB(cap, cap_set_proc, 
847                  have_libaudit=yes, have_libaudit=no)
848     fi
849 fi
850
851 AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes)
852
853 if test x$have_libaudit = xyes ; then
854     SELINUX_LIBS="$SELINUX_LIBS -laudit"
855     LIBS="-lcap $LIBS"
856     AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
857 fi
858
859 # Check for ADT API
860 AC_MSG_CHECKING(for ADT API)
861 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
862 #include <bsm/adt.h>
863 adt_user_context = ADT_USER;
864 ]], [[]])], [ check_adt_audit=yes ], [ check_adt_audit=no ])
865
866 if test ${check_adt_audit} = yes
867 then
868    AC_DEFINE([HAVE_ADT], [], [Adt audit API])
869    ADT_LIBS="-lbsm"
870    LIBS="-lbsm $LIBS"
871    AC_MSG_RESULT(yes)
872 else
873    AC_MSG_RESULT(no)
874 fi
875
876 # Check for SCM_RIGHTS
877 AC_MSG_CHECKING([for SCM_RIGHTS])
878 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
879 #include <sys/socket.h>
880 #include <sys/un.h>
881 static int x = SCM_RIGHTS;
882 ]], [[]])],
883 [ AC_MSG_RESULT([supported])
884   AC_DEFINE([HAVE_UNIX_FD_PASSING], [1], [Supports sending UNIX file descriptors]) ],
885 [ AC_MSG_RESULT([not supported]) ])
886
887 #### Set up final flags
888 DBUS_CLIENT_CFLAGS=
889 DBUS_CLIENT_LIBS="$THREAD_LIBS"
890 AC_SUBST(DBUS_CLIENT_CFLAGS)
891 AC_SUBST(DBUS_CLIENT_LIBS)
892
893 DBUS_BUS_CFLAGS="$XML_CFLAGS"
894 DBUS_BUS_LIBS="$XML_LIBS $SELINUX_LIBS $INTLLIBS $THREAD_LIBS $ADT_LIBS"
895 AC_SUBST(DBUS_BUS_CFLAGS)
896 AC_SUBST(DBUS_BUS_LIBS)
897
898 DBUS_LAUNCHER_CFLAGS="$XML_CFLAGS"
899 DBUS_LAUNCHER_LIBS="$XML_LIBS $THREAD_LIBS"
900 AC_SUBST(DBUS_LAUNCHER_CFLAGS)
901 AC_SUBST(DBUS_LAUNCHER_LIBS)
902
903 DBUS_TEST_CFLAGS=
904 DBUS_TEST_LIBS="$THREAD_LIBS"
905 AC_SUBST(DBUS_TEST_CFLAGS)
906 AC_SUBST(DBUS_TEST_LIBS)
907
908 ### X11 detection
909 AC_PATH_XTRA
910
911 ## for now enable_x11 just tracks have_x11, 
912 ## there's no --enable-x11
913 if test x$no_x = xyes ; then
914    have_x11=no
915    enable_x11=no
916 else
917    have_x11=yes
918    enable_x11=yes
919 fi
920
921 if test x$enable_x11 = xyes ; then
922    AC_DEFINE(DBUS_BUILD_X11,1,[Build X11-dependent code])
923    DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
924    DBUS_X_CFLAGS="$X_CFLAGS"
925 else
926    DBUS_X_LIBS=
927    DBUS_X_CFLAGS=
928 fi
929
930 AC_SUBST(DBUS_X_CFLAGS)
931 AC_SUBST(DBUS_X_LIBS)
932
933
934 #### gcc warning flags
935
936 cc_supports_flag() {
937   AC_MSG_CHECKING(whether $CC supports "$@")
938   Cfile=/tmp/foo${$}
939   touch ${Cfile}.c
940   $CC -c "$@" ${Cfile}.c -o ${Cfile}.o >/dev/null 2>&1
941   rc=$?
942   rm -f ${Cfile}.c ${Cfile}.o
943   case $rc in
944     0) AC_MSG_RESULT(yes);;
945     *) AC_MSG_RESULT(no);;
946   esac
947   return $rc
948 }
949
950 ld_supports_flag() {
951   AC_MSG_CHECKING([whether $LD supports "$@"])
952   AC_TRY_LINK([
953     int one(void) { return 1; }
954     int two(void) { return 2; }
955   ], [ two(); ] , [_ac_ld_flag_supported=yes], [_ac_ld_flag_supported=no])
956
957   if test "$_ac_ld_flag_supported" = "yes"; then
958     rm -f conftest.c
959     touch conftest.c
960     if $CC -c conftest.c; then
961       ld_out=`$LD $@ -o conftest conftest.o 2>&1`
962       ld_ret=$?
963       if test $ld_ret -ne 0 ; then
964         _ac_ld_flag_supported=no
965       elif echo "$ld_out" | egrep 'option ignored|^usage:|unrecognized option|illegal option' >/dev/null ; then
966         _ac_ld_flag_supported=no
967       fi
968     fi
969     rm -f conftest.c conftest.o conftest
970   fi
971
972   AC_MSG_RESULT($_ac_ld_flag_supported)
973   if test "$_ac_ld_flag_supported" = "yes" ; then
974     return 0
975   else
976     return 1
977   fi
978 }
979
980 if test x$USE_MAINTAINER_MODE = xyes; then
981   if cc_supports_flag "-Werror"; then
982     CFLAGS="$CFLAGS -Werror"
983   fi
984 fi
985
986 if test "x$GCC" = "xyes"; then
987   changequote(,)dnl
988   case " $CFLAGS " in
989   *[\ \ ]-Wall[\ \      ]*) ;;
990   *) CFLAGS="$CFLAGS -Wall" ;;
991   esac
992
993   case " $CFLAGS " in
994   *[\ \ ]-Wchar-subscripts[\ \  ]*) ;;
995   *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
996   esac
997
998   case " $CFLAGS " in
999   *[\ \ ]-Wmissing-declarations[\ \     ]*) ;;
1000   *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
1001   esac
1002
1003   case " $CFLAGS " in
1004   *[\ \ ]-Wmissing-prototypes[\ \       ]*) ;;
1005   *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
1006   esac
1007
1008   case " $CFLAGS " in
1009   *[\ \ ]-Wnested-externs[\ \   ]*) ;;
1010   *) CFLAGS="$CFLAGS -Wnested-externs" ;;
1011   esac
1012
1013   case " $CFLAGS " in
1014   *[\ \ ]-Wpointer-arith[\ \    ]*) ;;
1015   *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
1016   esac
1017
1018   case " $CFLAGS " in
1019   *[\ \ ]-Wcast-align[\ \       ]*) ;;
1020   *) CFLAGS="$CFLAGS -Wcast-align" ;;
1021   esac
1022
1023   case " $CFLAGS " in
1024   *[\ \ ]-Wfloat-equal[\ \      ]*) ;;
1025   *) if cc_supports_flag -Wfloat-equals; then
1026         CFLAGS="$CFLAGS -Wfloat-equal" 
1027      fi
1028      ;;
1029   esac
1030
1031   case " $CFLAGS " in
1032   *[\ \ ]-Wdeclaration-after-statement[\ \      ]*) ;;
1033   *) if cc_supports_flag -Wdeclaration-after-statement; then
1034         CFLAGS="$CFLAGS -Wdeclaration-after-statement"
1035      fi
1036      ;;
1037   esac
1038
1039   case " $CFLAGS " in
1040   *[\ \ ]-fno-common[\ \        ]*) ;;
1041   *) if cc_supports_flag -fno-common; then
1042         CFLAGS="$CFLAGS -fno-common"
1043      fi
1044      ;;
1045   esac
1046
1047   case " $CFLAGS " in
1048   *[\ \ ]-fPIC[\ \      ]*) ;;
1049   *) if cc_supports_flag -fPIC; then
1050         PIC_CFLAGS="-fPIC"
1051         if ld_supports_flag -z,relro; then
1052            PIC_LDFLAGS="-Wl,-z,relro"
1053         fi
1054      fi
1055      ;;
1056   esac
1057
1058   case " $CFLAGS " in
1059   *[\ \ ]-fPIE[\ \      ]*) ;;
1060   *) if cc_supports_flag -fPIE; then
1061         PIE_CFLAGS="-fPIE"
1062         if ld_supports_flag -z,relro; then
1063            PIE_LDFLAGS="-pie -Wl,-z,relro"
1064         else
1065            PIE_LDFLAGS="-pie"
1066         fi
1067      fi
1068      ;;
1069   esac
1070   
1071   ### Disabled warnings, and compiler flag overrides
1072   
1073   # Let's just ignore unused for now
1074   case " $CFLAGS " in
1075   *[\ \ ]-Wno-unused[\ \        ]*) ;;
1076   *) CFLAGS="$CFLAGS -Wno-unused" ;;
1077   esac  
1078   
1079   # This group is for warnings we currently don't pass.
1080   # We would like to, however.  Please fix.
1081   
1082   # http://bugs.freedesktop.org/show_bug.cgi?id=17433
1083   case " $CFLAGS " in
1084   *[\ \ ]-Wno-sign-compare[\ \  ]*) ;;
1085   *) CFLAGS="$CFLAGS -Wno-sign-compare" ;;
1086   esac
1087   case " $CFLAGS " in
1088   *[\ \ ]-Wno-pointer-sign[\ \  ]*) ;;
1089   *) if cc_supports_flag -Wno-pointer-sign; then
1090         CFLAGS="$CFLAGS -Wno-pointer-sign"
1091      fi
1092      ;;
1093   esac  
1094   
1095   # http://bugs.freedesktop.org/show_bug.cgi?id=19195
1096   case " $CFLAGS " in
1097   *[\ \ ]-Wno-format[\ \        ]*) ;;
1098   *) CFLAGS="$CFLAGS -Wno-format" ;;
1099   esac
1100   
1101   # This one is special - it's not a warning override.
1102   # http://bugs.freedesktop.org/show_bug.cgi?id=10599
1103   case " $CFLAGS " in
1104   *[\ \ ]-fno-strict-aliasing[\ \       ]*) ;;
1105   *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
1106   esac
1107   ### End disabled warnings
1108
1109   if test "x$enable_ansi" = "xyes"; then
1110     case " $CFLAGS " in
1111     *[\ \       ]-ansi[\ \      ]*) ;;
1112     *) CFLAGS="$CFLAGS -ansi" ;;
1113     esac
1114
1115     case " $CFLAGS " in
1116     *[\ \       ]-D_POSIX_C_SOURCE*) ;;
1117     *) CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=199309L" ;;
1118     esac
1119
1120     case " $CFLAGS " in
1121     *[\ \       ]-D_BSD_SOURCE[\ \      ]*) ;;
1122     *) CFLAGS="$CFLAGS -D_BSD_SOURCE" ;;
1123     esac
1124
1125     case " $CFLAGS " in
1126     *[\ \       ]-pedantic[\ \  ]*) ;;
1127     *) CFLAGS="$CFLAGS -pedantic" ;;
1128     esac    
1129   fi
1130   if test x$enable_gcov = xyes; then
1131     case " $CFLAGS " in
1132     *[\ \       ]-fprofile-arcs[\ \     ]*) ;;
1133     *) CFLAGS="$CFLAGS -fprofile-arcs" ;;
1134     esac
1135     case " $CFLAGS " in
1136     *[\ \       ]-ftest-coverage[\ \    ]*) ;;
1137     *) CFLAGS="$CFLAGS -ftest-coverage" ;;
1138     esac
1139
1140     ## remove optimization
1141     CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'`
1142   fi
1143   changequote([,])dnl
1144 else
1145   if test x$enable_gcov = xyes; then
1146     AC_MSG_ERROR([--enable-gcov can only be used with gcc])
1147   fi
1148 fi
1149
1150 AC_SUBST(PIC_CFLAGS)
1151 AC_SUBST(PIC_LDFLAGS)  
1152 AC_SUBST(PIE_CFLAGS)
1153 AC_SUBST(PIE_LDFLAGS)  
1154
1155 if ld_supports_flag --gc-sections; then
1156   SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
1157   CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
1158 fi
1159 AC_SUBST(SECTION_FLAGS)
1160 AC_SUBST(SECTION_LDFLAGS)
1161 AC_MSG_RESULT($ac_gcsections)
1162
1163 # Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
1164 #
1165 case $host_os in
1166     solaris*)
1167        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
1168 esac
1169     
1170 changequote(,)dnl
1171 # compress spaces in flags
1172 CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'`
1173 CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ +/ /g'`
1174 CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'`
1175 changequote([,])dnl
1176
1177 ### Doxygen Documentation
1178
1179 AC_PATH_PROG(DOXYGEN, doxygen, no)
1180
1181 AC_MSG_CHECKING([whether to build Doxygen documentation])
1182
1183 if test x$DOXYGEN = xno ; then
1184     have_doxygen=no
1185 else
1186     have_doxygen=yes
1187 fi
1188
1189 if test x$enable_doxygen_docs = xauto ; then
1190     if test x$have_doxygen = xno ; then
1191         enable_doxygen_docs=no
1192     else
1193         enable_doxygen_docs=yes
1194     fi
1195 fi
1196
1197 if test x$enable_doxygen_docs = xyes; then
1198     if test x$have_doxygen = xno; then
1199         AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
1200     fi
1201 fi
1202
1203 AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
1204 AC_MSG_RESULT(yes)
1205
1206 ### XML Documentation
1207
1208 AC_PATH_PROG(XMLTO, xmlto, no)
1209
1210 AC_MSG_CHECKING([whether to build XML documentation])
1211
1212 if test x$XMLTO = xno ; then
1213     have_xmlto=no
1214 else
1215     have_xmlto=yes
1216 fi
1217
1218 if test x$enable_xml_docs = xauto ; then
1219     if test x$have_xmlto = xno ; then
1220         enable_xml_docs=no
1221     else
1222         enable_xml_docs=yes
1223     fi
1224 fi
1225
1226 if test x$enable_xml_docs = xyes; then
1227     if test x$have_xmlto = xno; then
1228         AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
1229     fi
1230 fi
1231
1232 AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
1233 AC_MSG_RESULT(yes)
1234
1235 #### Have to go $localstatedir->$prefix/var->/usr/local/var
1236
1237 #### find the actual value for $prefix that we'll end up with
1238 ##   (I know this is broken and should be done in the Makefile, but
1239 ##    that's a major pain and almost nobody actually seems to care)
1240 AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
1241 AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
1242 AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
1243 AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
1244 AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
1245 AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
1246
1247 #### Check our operating system
1248 operating_system=unknown
1249 if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
1250    operating_system=redhat
1251 fi
1252
1253 if test -f /etc/slackware-version || test -f $EXPANDED_SYSCONFDIR/slackware-version ; then
1254    operating_system=slackware
1255 fi
1256
1257 #### Sort out init scripts
1258
1259 if test x$with_init_scripts = x; then
1260     if test xredhat = x$operating_system ; then
1261         with_init_scripts=redhat
1262     else
1263         if test xslackware = x$operating_system ; then
1264                 with_init_scripts=slackware
1265             else
1266                 with_init_scripts=none
1267         fi
1268     fi
1269 fi
1270
1271 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_RED_HAT, test x$with_init_scripts = xredhat)
1272
1273 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_SLACKWARE, test x$with_init_scripts = xslackware)
1274
1275 ##### Set up location for system bus socket
1276 if ! test -z "$with_system_socket"; then
1277    DBUS_SYSTEM_SOCKET=$with_system_socket
1278 else
1279    DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
1280 fi
1281
1282 AC_SUBST(DBUS_SYSTEM_SOCKET)
1283 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_SOCKET,"$DBUS_SYSTEM_SOCKET",[The name of the socket the system bus listens on by default])
1284
1285 ## system bus only listens on local domain sockets, and never 
1286 ## on an abstract socket (so only root can create the socket)
1287 DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
1288 AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
1289 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS, "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS",[The default D-Bus address of the system bus])
1290
1291 #### Set up the pid file
1292 if ! test -z "$with_system_pid_file"; then
1293    DBUS_SYSTEM_PID_FILE=$with_system_pid_file
1294 elif test x$with_init_scripts = xredhat ; then
1295    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
1296 else
1297    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
1298 fi
1299
1300 AC_SUBST(DBUS_SYSTEM_PID_FILE)
1301
1302 #### Directory to check for console ownership
1303 if ! test -z "$with_console_auth_dir"; then
1304    DBUS_CONSOLE_AUTH_DIR=$with_console_auth_dir
1305 else
1306    DBUS_CONSOLE_AUTH_DIR=/var/run/console/
1307 fi
1308
1309 AC_SUBST(DBUS_CONSOLE_AUTH_DIR)
1310 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_AUTH_DIR, "$DBUS_CONSOLE_AUTH_DIR", [Directory to check for console ownerhip])
1311
1312 #### File to check for console ownership
1313 if test x$have_console_owner_file = xyes; then
1314    if ! test -z "$with_console_owner_file"; then
1315       DBUS_CONSOLE_OWNER_FILE=$with_console_owner_file
1316    else
1317       DBUS_CONSOLE_OWNER_FILE=/dev/console
1318    fi
1319 else
1320   DBUS_CONSOLE_OWNER_FILE=
1321 fi
1322
1323 AC_SUBST(DBUS_CONSOLE_OWNER_FILE)
1324 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_OWNER_FILE, "$DBUS_CONSOLE_OWNER_FILE", [File to check for console ownerhip])
1325
1326 #### User to start the system bus as
1327 if test -z "$with_dbus_user" ; then
1328     DBUS_USER=messagebus
1329 else
1330     DBUS_USER=$with_dbus_user
1331 fi
1332 AC_SUBST(DBUS_USER)
1333 AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon])
1334
1335 #### Direcotry to install data files into
1336 DBUS_DATADIR=$EXPANDED_DATADIR
1337 AC_SUBST(DBUS_DATADIR)
1338 AC_DEFINE_UNQUOTED(DBUS_DATADIR,"$DBUS_DATADIR", [Directory for installing DBUS data files])
1339
1340 #### Directory to install dbus-daemon
1341 if test -z "$with_dbus_daemondir" ; then
1342     DBUS_DAEMONDIR=$EXPANDED_BINDIR
1343 else
1344     DBUS_DAEMONDIR=$with_dbus_daemondir
1345 fi
1346 AC_SUBST(DBUS_DAEMONDIR)
1347 AC_DEFINE_UNQUOTED(DBUS_DAEMONDIR,"$DBUS_DAEMONDIR", [Directory for installing the DBUS daemon])
1348
1349 #### Directory to install the other binaries
1350 DBUS_BINDIR="$EXPANDED_BINDIR"
1351 AC_SUBST(DBUS_BINDIR)
1352 AC_DEFINE_UNQUOTED(DBUS_BINDIR,"$DBUS_BINDIR", [Directory for installing the binaries])
1353
1354 #### Directory to install the libexec binaries
1355 DBUS_LIBEXECDIR="$EXPANDED_LIBEXECDIR"
1356 AC_SUBST(DBUS_LIBEXECDIR)
1357 AC_DEFINE_UNQUOTED(DBUS_LIBEXECDIR,"$DBUS_LIBEXECDIR", [Directory for installing the libexec binaries])
1358
1359 #### Tell tests where to find certain stuff in builddir
1360
1361 DBUS_PWD=`pwd`
1362 AC_DEFUN([TEST_PATH], [
1363 TEST_$1=${DBUS_PWD}/test/$2
1364 AC_DEFINE_UNQUOTED(TEST_$1, "$TEST_$1",
1365                    [Full path to test file test/$2 in builddir])
1366 AC_SUBST(TEST_$1)
1367 ])
1368
1369 TEST_PATH(VALID_SERVICE_DIR, data/valid-service-files)
1370 TEST_PATH(INVALID_SERVICE_DIR, data/invalid-service-files)
1371 TEST_PATH(VALID_SERVICE_SYSTEM_DIR, data/valid-service-files-system)
1372 TEST_PATH(INVALID_SERVICE_SYSTEM_DIR, data/invalid-service-files-system)
1373 TEST_PATH(SERVICE_BINARY, test-service)
1374 TEST_PATH(SHELL_SERVICE_BINARY, test-shell-service)
1375 TEST_PATH(EXIT_BINARY, test-exit)
1376 TEST_PATH(SEGFAULT_BINARY, test-segfault)
1377 TEST_PATH(SLEEP_FOREVER_BINARY, test-sleep-forever)
1378 TEST_PATH(PRIVSERVER_BINARY, name-test/test-privserver)
1379
1380 AC_DEFINE_UNQUOTED(TEST_BUS_BINARY, "$DBUS_PWD/bus/dbus-daemon",
1381                    [Full path to the daemon in the builddir])
1382 AC_SUBST(TEST_BUS_BINARY)
1383
1384 ## Export the non-setuid external helper
1385 TEST_LAUNCH_HELPER_BINARY="$DBUS_PWD/bus/dbus-daemon-launch-helper-test"
1386 AC_SUBST(TEST_LAUNCH_HELPER_BINARY)
1387 AC_DEFINE_UNQUOTED(DBUS_TEST_LAUNCH_HELPER_BINARY, "$TEST_LAUNCH_HELPER_BINARY",
1388                    [Full path to the launch helper test program in the builddir])
1389
1390 #### Find socket directories
1391 if ! test -z "$TMPDIR" ; then
1392    DEFAULT_SOCKET_DIR=$TMPDIR
1393 elif ! test -z "$TEMP" ; then
1394    DEFAULT_SOCKET_DIR=$TEMP
1395 elif ! test -z "$TMP" ; then
1396    DEFAULT_SOCKET_DIR=$TMP
1397 else
1398    DEFAULT_SOCKET_DIR=/tmp
1399 fi
1400
1401 if ! test -z "$with_test_socket_dir" ; then
1402    TEST_SOCKET_DIR="$with_test_socket_dir"
1403 else
1404    TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1405 fi
1406 AC_SUBST(TEST_SOCKET_DIR)
1407 AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
1408
1409 if ! test -z "$with_session_socket_dir" ; then
1410    DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
1411 else
1412    DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1413 fi
1414 AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
1415 AC_SUBST(DBUS_SESSION_SOCKET_DIR)
1416
1417 AC_DEFINE_UNQUOTED(DBUS_UNIX, "1", [Defined on UNIX and Linux systems and not on Windows])
1418
1419 # darwin needs this to initialize the environment
1420 AC_CHECK_HEADERS(crt_externs.h)
1421 AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
1422 AH_VERBATIM(_DARWIN_ENVIRON,
1423 [
1424 #if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
1425 # include <sys/time.h>
1426 # include <crt_externs.h>
1427 # define environ (*_NSGetEnviron())
1428 #endif
1429 ])
1430
1431 AC_OUTPUT([
1432 Doxyfile
1433 dbus/dbus-arch-deps.h
1434 bus/system.conf
1435 bus/session.conf
1436 bus/messagebus
1437 bus/rc.messagebus
1438 bus/dbus-daemon.1
1439 Makefile
1440 dbus/Makefile
1441 bus/Makefile
1442 tools/Makefile
1443 test/Makefile
1444 test/name-test/Makefile
1445 doc/Makefile
1446 dbus-1.pc
1447 test/data/valid-config-files/debug-allow-all.conf
1448 test/data/valid-config-files/debug-allow-all-sha1.conf
1449 test/data/valid-config-files-system/debug-allow-all-pass.conf
1450 test/data/valid-config-files-system/debug-allow-all-fail.conf
1451 test/data/valid-service-files/org.freedesktop.DBus.TestSuite.PrivServer.service
1452 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteEchoService.service
1453 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteSegfaultService.service
1454 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service
1455 test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service
1456 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteEchoService.service
1457 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteSegfaultService.service
1458 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service
1459 test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service
1460 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoExec.service
1461 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoUser.service
1462 test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoService.service
1463 ])
1464
1465 dnl ==========================================================================
1466 echo "
1467                     D-Bus $VERSION
1468                   ==============
1469
1470         prefix:                   ${prefix}
1471         exec_prefix:              ${exec_prefix}
1472         libdir:                   ${EXPANDED_LIBDIR}
1473         libexecdir:               ${EXPANDED_LIBEXECDIR}
1474         bindir:                   ${EXPANDED_BINDIR}
1475         sysconfdir:               ${EXPANDED_SYSCONFDIR}
1476         localstatedir:            ${EXPANDED_LOCALSTATEDIR}
1477         datadir:                  ${EXPANDED_DATADIR}
1478         source code location:     ${srcdir}
1479         compiler:                 ${CC}
1480         cflags:                   ${CFLAGS}
1481         cppflags:                 ${CPPFLAGS}
1482         cxxflags:                 ${CXXFLAGS}
1483         64-bit int:               ${DBUS_INT64_TYPE}
1484         32-bit int:               ${DBUS_INT32_TYPE}
1485         16-bit int:               ${DBUS_INT16_TYPE}
1486         Doxygen:                  ${DOXYGEN}
1487         xmlto:                    ${XMLTO}"
1488
1489 echo "
1490         Maintainer mode:          ${USE_MAINTAINER_MODE}
1491         gcc coverage profiling:   ${enable_gcov}
1492         Building unit tests:      ${enable_tests}
1493         Building verbose mode:    ${enable_verbose_mode}
1494         Building assertions:      ${enable_asserts}
1495         Building checks:          ${enable_checks}
1496         Building SELinux support: ${have_selinux}
1497         Building inotify support: ${have_inotify}
1498         Building dnotify support: ${have_dnotify}
1499         Building kqueue support:  ${have_kqueue}
1500         Building X11 code:        ${enable_x11}
1501         Building Doxygen docs:    ${enable_doxygen_docs}
1502         Building XML docs:        ${enable_xml_docs}
1503         Building cache support:   ${enable_userdb_cache}
1504         Gettext libs (empty OK):  ${INTLLIBS}
1505         Using XML parser:         ${with_xml}
1506         Init scripts style:       ${with_init_scripts}
1507         Abstract socket names:    ${ac_cv_have_abstract_sockets}
1508         System bus socket:        ${DBUS_SYSTEM_SOCKET}
1509         System bus address:       ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
1510         System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
1511         Session bus socket dir:   ${DBUS_SESSION_SOCKET_DIR}
1512         Console auth dir:         ${DBUS_CONSOLE_AUTH_DIR}
1513         Console owner file:       ${have_console_owner_file}
1514         Console owner file path:  ${DBUS_CONSOLE_OWNER_FILE}
1515         System bus user:          ${DBUS_USER}
1516         Session bus services dir: ${EXPANDED_DATADIR}/dbus-1/services
1517         'make check' socket dir:  ${TEST_SOCKET_DIR}
1518 "
1519
1520 if test x$enable_tests = xyes; then
1521         echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
1522 fi
1523 if test x$enable_tests = xyes -a x$enable_asserts = xno; then
1524         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)"
1525 fi
1526 if test x$enable_gcov = xyes; then
1527         echo "NOTE: building with coverage profiling is definitely for developers only."
1528 fi
1529 if test x$enable_verbose_mode = xyes; then
1530         echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
1531 fi
1532 if test x$enable_asserts = xyes; then
1533         echo "NOTE: building with assertions increases library size and decreases performance."
1534 fi
1535 if test x$enable_checks = xno; then
1536         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."
1537 fi
1538 if test x$dbus_use_libxml = xtrue; then
1539         echo
1540         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)."
1541 fi