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