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