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