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