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