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