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