1.10.20
[platform/upstream/dbus.git] / configure.ac
1 dnl -*- mode: m4 -*-
2 AC_PREREQ([2.63])
3
4 m4_define([dbus_major_version], [1])
5 m4_define([dbus_minor_version], [10])
6 m4_define([dbus_micro_version], [20])
7 m4_define([dbus_version],
8           [dbus_major_version.dbus_minor_version.dbus_micro_version])
9 AC_INIT([dbus],[dbus_version],[https://bugs.freedesktop.org/enter_bug.cgi?product=dbus],[dbus])
10 AC_CONFIG_AUX_DIR([build-aux])
11
12 AC_CANONICAL_HOST
13
14 AC_CONFIG_HEADERS([config.h])
15 AC_CONFIG_MACRO_DIR([m4])
16
17 AM_INIT_AUTOMAKE([1.13 tar-ustar -Wno-portability subdir-objects])
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 # By default, rebuild autotools files on demand; only use ./missing if the
24 # user says --disable-maintainer-mode (some distributions like to do this)
25 AM_MAINTAINER_MODE([enable])
26
27 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
28
29 AC_DEFINE_UNQUOTED(DBUS_DAEMON_NAME,"dbus-daemon",[Name of executable])
30
31 # libtool versioning - this applies to libdbus
32 #
33 # See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
34 #
35
36 ## increment if the interface has additions, changes, removals.
37 LT_CURRENT=17
38
39 ## increment any time the source changes; set to
40 ##  0 if you increment CURRENT
41 LT_REVISION=12
42
43 ## increment if any interfaces have been added; set to 0
44 ## if any interfaces have been changed or removed. removal has
45 ## precedence over adding, so set to 0 if both happened.
46 LT_AGE=14
47
48 AC_SUBST(LT_CURRENT)
49 AC_SUBST(LT_REVISION)
50 AC_SUBST(LT_AGE)
51 SOVERSION=`expr ${LT_CURRENT} - ${LT_AGE}`
52 AC_SUBST([SOVERSION])
53
54 DBUS_MAJOR_VERSION=dbus_major_version
55 DBUS_MINOR_VERSION=dbus_minor_version
56 DBUS_MICRO_VERSION=dbus_micro_version
57 DBUS_VERSION=dbus_major_version.dbus_minor_version.dbus_micro_version
58
59 AC_SUBST(DBUS_MAJOR_VERSION)
60 AC_SUBST(DBUS_MINOR_VERSION)
61 AC_SUBST(DBUS_MICRO_VERSION)
62 AC_SUBST(DBUS_VERSION)
63
64 AC_PROG_CC
65 AM_PROG_CC_C_O
66 AC_PROG_CXX
67 AC_USE_SYSTEM_EXTENSIONS
68 AC_SYS_LARGEFILE
69 AC_ISC_POSIX
70 AC_HEADER_STDC
71 AC_C_INLINE
72 AM_PROG_LIBTOOL
73 AC_PROG_MKDIR_P
74 COMPILER_COVERAGE
75 COMPILER_OPTIMISATIONS
76 PKG_PROG_PKG_CONFIG
77
78 # TAP test driver support
79 AC_PROG_AWK
80 AC_REQUIRE_AUX_FILE([tap-driver.sh])
81
82 # This must come before we set up compiler warnings because it assumes
83 # non-use of -Werror=missing-prototypes
84 gl_VISIBILITY
85 AM_CONDITIONAL([HAVE_VISIBILITY], [test "x$HAVE_VISIBILITY" = x1])
86
87 # Initialize libtool
88 LT_INIT([win32-dll])
89 LT_LANG([Windows Resource])
90
91 # Set some internal variables depending on the platform for later use.
92 dbus_win=no
93 dbus_cygwin=no
94 dbus_unix=no
95 case "${host}" in
96     *-mingw32ce*)
97         dbus_win=yes
98         dbus_wince=yes
99         ;;
100     *-mingw32*)
101         dbus_win=yes
102         ;;
103     *-cygwin*)
104         dbus_cygwin=yes
105         dbus_unix=yes
106         ;;
107     *)
108         dbus_unix=yes
109        ;;
110 esac
111
112 # Special defines for certain platforms
113 if test "$dbus_win" = yes; then
114     AC_DEFINE(DBUS_WIN,1,[Defined if we run on a W32 API based system])
115     # Yes, on Windows it really does work like this.
116     # http://support.microsoft.com/kb/111855
117     AC_DEFINE(FD_SETSIZE,8192,[The maximum number of connections that can be handled at once])
118     BUILD_TIMESTAMP=`date --iso-8601=minutes`
119     AC_SUBST(BUILD_TIMESTAMP)
120     # Assume DBUS_VERSION is always three numbers
121     BUILD_FILEVERSION=`echo "$DBUS_VERSION" | sed -e 's/\./,/g'`,0
122     AC_SUBST(BUILD_FILEVERSION)
123     AC_CHECK_TOOL(WINDRES, windres, no)
124     if test "$WINDRES" = no; then
125       AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
126     fi
127     if test "$dbus_wince" = yes; then
128       AC_DEFINE(DBUS_WINCE,1,[Defined if we run on a W32 CE API based system])
129       AC_DEFINE(_WIN32_WCE, 0x0502, [Defined to get newer W32 CE APIs])
130     fi
131 else
132     AC_DEFINE(DBUS_UNIX,1,[Defined if we run on a Unix-based system])
133 fi
134 if test "$dbus_cygwin" = yes; then
135     AC_DEFINE(DBUS_CYGWIN,1,[Defined if we run on a cygwin API based system])
136 fi
137
138 # For best security, assume that all non-Windows platforms can do
139 # credentials-passing.
140 AS_IF([test "$dbus_win" = yes],
141     [DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL="<!--<auth>EXTERNAL</auth>-->"],
142     [DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL="<auth>EXTERNAL</auth>"])
143 AC_SUBST([DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL])
144
145 AM_CONDITIONAL(DBUS_WIN, test "$dbus_win" = yes)
146 AM_CONDITIONAL(DBUS_WINCE, test "$dbus_wince" = yes)
147 AM_CONDITIONAL(DBUS_UNIX, test "$dbus_unix" = yes)
148 AM_CONDITIONAL(DBUS_CYGWIN, test "$dbus_cygwin" = yes)
149
150 # this must come first: other options use this to set their defaults
151 AC_ARG_ENABLE([developer],
152   [AS_HELP_STRING([--enable-developer],
153     [set defaults to be appropriate for a D-Bus developer instead of a distribution/end-user])],
154   [],
155   [enable_developer=no])
156
157 DBUS_STATIC_BUILD_CPPFLAGS=
158 if test "x$enable_shared" = xno; then
159     # On Windows, linking against the static library requires special effort
160     # to turn off DLL import/export processing. We normally link some things
161     # against the dynamic library, but if we're not building that, we'll
162     # have to link everything statically.
163     DBUS_STATIC_BUILD_CPPFLAGS=-DDBUS_STATIC_BUILD
164 fi
165 AC_SUBST([DBUS_STATIC_BUILD_CPPFLAGS])
166
167 AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no)
168 AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$enable_developer)
169 AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$enable_developer)
170 AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes)
171 AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto)
172 AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto)
173 AC_ARG_ENABLE([ducktype-docs],
174               AS_HELP_STRING([--enable-ducktype-docs],
175                              [build Ducktype documentation (requires Ducktype)]),
176               [enable_ducktype_docs=$enableval], [enable_ducktype_docs=auto])
177 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)
178 AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto)
179 AC_ARG_ENABLE([apparmor],
180   [AS_HELP_STRING([--enable-apparmor], [build with AppArmor support])],
181   [enable_apparmor=$enableval],
182   [enable_apparmor=auto])
183 AC_ARG_ENABLE(libaudit,AS_HELP_STRING([--enable-libaudit],[build audit daemon support for SELinux]),enable_libaudit=$enableval,enable_libaudit=auto)
184 AC_ARG_ENABLE(inotify, AS_HELP_STRING([--enable-inotify],[build with inotify support (linux only)]),enable_inotify=$enableval,enable_inotify=auto)
185 AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support]),enable_kqueue=$enableval,enable_kqueue=auto)
186 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)
187 AC_ARG_ENABLE(launchd, AS_HELP_STRING([--enable-launchd],[build with launchd auto-launch support]),enable_launchd=$enableval,enable_launchd=auto)
188 AC_ARG_ENABLE(systemd, AS_HELP_STRING([--enable-systemd],[build with systemd at_console support]),enable_systemd=$enableval,enable_systemd=auto)
189
190 AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
191 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]))
192 AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check]))
193 AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon]))
194 AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon]))
195 AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip]))
196 AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
197 AC_ARG_WITH(launchd-agent-dir, AS_HELP_STRING([--with-launchd-agent-dir=[dirname]],[directory to put the launchd agent (default: /Library/LaunchAgents)]))
198 AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
199 AC_ARG_WITH([test_user],
200   [AS_HELP_STRING([--with-test-user=<user>],
201     [Unprivileged user for regression tests, other than root and the dbus_user (default: nobody)])])
202 AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
203
204 AC_ARG_ENABLE([embedded-tests],
205   AS_HELP_STRING([--enable-embedded-tests],
206     [enable unit test code in the library and binaries]),
207   [], [enable_embedded_tests=$enable_developer])
208 AC_ARG_ENABLE([modular-tests],
209   AS_HELP_STRING([--enable-modular-tests],
210     [enable modular regression tests (requires GLib)]),
211   [], [enable_modular_tests=auto])
212 # --enable-tests overrides both --enable-embedded-tests and
213 # --enable-modular-tests
214 AC_ARG_ENABLE([tests],
215   AS_HELP_STRING([--enable-tests],
216     [enable/disable all tests, overriding embedded-tests/modular-tests]),
217   [
218   if test "x$enableval" = xyes; then
219     AC_MSG_NOTICE([Full test coverage was requested with --enable-tests=yes])
220     AC_MSG_NOTICE([This has many dependencies (GLib, Python etc.)])
221   fi
222   enable_embedded_tests=$enableval
223   enable_modular_tests=$enableval
224   ],
225   [])
226
227 # DBUS_ENABLE_EMBEDDED_TESTS controls unit tests built in to .c files
228 # and also some stuff in the test/ subdir.
229 AM_CONDITIONAL([DBUS_ENABLE_EMBEDDED_TESTS],
230   [test "x$enable_embedded_tests" = xyes])
231 if test "x$enable_embedded_tests" = xyes; then
232     AC_DEFINE([DBUS_ENABLE_EMBEDDED_TESTS], [1],
233       [Define to build test code into the library and binaries])
234 fi
235
236 # DBUS_ENABLE_MODULAR_TESTS controls tests that work based on public API.
237 # These use GTest, from GLib, because life's too short. They're enabled by
238 # default (unless you don't have GLib), because they don't bloat the library
239 # or binaries.
240
241 AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_36], [Ignore post-2.36 deprecations])
242 AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_38], [Prevent post-2.38 APIs])
243
244 with_glib=yes
245
246 AS_IF([test "x$enable_modular_tests" != xno],
247   [
248   PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.36, gio-2.0 >= 2.36],
249     [],
250     [if test "x$enable_modular_tests" = xyes; then
251       AC_MSG_NOTICE([Full test coverage (--enable-modular-tests=yes or --enable-tests=yes) requires GLib])
252       AC_MSG_ERROR([$GLIB_ERRORS])
253     else # assumed to be "auto"
254       with_glib=no
255     fi])
256   ],
257   [with_glib=no])
258
259 if test "x$enable_modular_tests" != xno; then
260   AC_DEFINE([DBUS_ENABLE_MODULAR_TESTS], [1],
261     [Define to build independent test binaries])
262 fi
263 AM_CONDITIONAL([DBUS_ENABLE_MODULAR_TESTS],
264   [test "x$enable_modular_tests" != xno])
265
266 if test "x$with_glib" != xno; then
267   AC_DEFINE([DBUS_WITH_GLIB], [1],
268     [Define if GLib, GObject, GIO are available])
269 fi
270 AM_CONDITIONAL([DBUS_WITH_GLIB], [test "x$with_glib" != xno])
271
272 AC_ARG_ENABLE([installed-tests],
273   AS_HELP_STRING([--enable-installed-tests],
274     [enable unit test code in the library and binaries]),
275   [], [enable_installed_tests=no])
276 AM_CONDITIONAL([DBUS_ENABLE_INSTALLED_TESTS],
277   [test "x$enable_installed_tests" = xyes])
278
279 if test "x$enable_tests" = xyes; then
280   # full test coverage is required, Python is a hard dependency
281   AC_MSG_NOTICE([Full test coverage (--enable-tests=yes) requires Python, dbus-python, pygi])
282   AM_PATH_PYTHON([2.6])
283   AC_MSG_CHECKING([for Python modules for full test coverage])
284   if "$PYTHON" -c "import dbus, gi.repository.GObject, dbus.mainloop.glib"; then
285     AC_MSG_RESULT([yes])
286   else
287     AC_MSG_RESULT([no])
288     AC_MSG_ERROR([cannot import dbus, gi.repository.GObject, dbus.mainloop.glib Python modules])
289   fi
290 else
291   # --enable-tests not given: do not abort if Python is missing
292   AM_PATH_PYTHON([2.6], [], [:])
293 fi
294
295 if test x$enable_verbose_mode = xyes; then
296     AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
297 fi
298
299 if test x$enable_asserts = xno; then
300     AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
301     DISABLE_UNUSED_WARNINGS="unused-label"
302     R_DYNAMIC_LDFLAG=""
303     if test x$enable_embedded_tests = xyes; then
304         DISABLE_UNUSED_WARNINGS="$DISABLE_UNUSED_WARNINGS \
305                 unused-but-set-variable unused-variable \
306                 unused-function"
307     fi
308 else
309     # -rdynamic is needed for glibc's backtrace_symbols to work.
310     # No clue how much overhead this adds, but it's useful
311     # to do this on any assertion failure,
312     # so for now it's enabled anytime asserts are (currently not
313     # in production builds).
314
315     # To get -rdynamic you pass -export-dynamic to libtool.
316     AC_DEFINE(DBUS_BUILT_R_DYNAMIC,1,[whether -export-dynamic was passed to libtool])
317     R_DYNAMIC_LDFLAG=-export-dynamic
318 fi
319 AC_SUBST(R_DYNAMIC_LDFLAG)
320
321 if test x$enable_checks = xno; then
322     AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
323     AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
324     DISABLE_UNUSED_WARNINGS="unused-label"
325 fi
326
327 AH_BOTTOM([
328 /* explicitly define these macros to get less confusing conditions */
329 #ifndef DBUS_DISABLE_ASSERT
330 #  define DBUS_ENABLE_ASSERT 1
331 #endif
332 #ifndef DBUS_DISABLE_CHECKS
333 #  define DBUS_ENABLE_CHECKS 1
334 #endif])
335
336 if test x$enable_compiler_coverage = xyes; then
337      ## so that config.h changes when you toggle gcov support
338      AC_DEFINE_UNQUOTED(DBUS_GCOV_ENABLED, 1, [Defined if gcov is enabled to force a rebuild due to config.h changing])
339 fi
340
341 # glibc21.m4 serial 3
342 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
343 dnl This file is free software; the Free Software Foundation
344 dnl gives unlimited permission to copy and/or distribute it,
345 dnl with or without modifications, as long as this notice is preserved.
346
347 # Test for the GNU C Library, version 2.1 or newer.
348 # From Bruno Haible.
349
350 AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
351   ac_cv_gnu_library_2_1,
352   [AC_EGREP_CPP([Lucky GNU user],
353     [
354 #include <features.h>
355 #ifdef __GNU_LIBRARY__
356  #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
357   Lucky GNU user
358  #endif
359 #endif
360     ],
361     ac_cv_gnu_library_2_1=yes,
362     ac_cv_gnu_library_2_1=no)
363   ]
364 )
365
366 #### Integer sizes
367
368 AC_CHECK_SIZEOF(char)
369 AC_CHECK_SIZEOF(short)
370 AC_CHECK_SIZEOF(long)
371 AC_CHECK_SIZEOF(int)
372 AC_CHECK_SIZEOF(void *)
373 AC_CHECK_SIZEOF(long long)
374 AC_CHECK_SIZEOF(__int64)
375
376 ### See what our 64 bit type is called
377 AC_MSG_CHECKING([64-bit integer type])
378
379 case 8 in
380 $ac_cv_sizeof_int)
381   dbusint64=int
382   dbusint64_constant='(val)'
383   dbusuint64_constant='(val)'
384   dbusint64_printf_modifier='""'
385   ;;
386 $ac_cv_sizeof_long)
387   dbusint64=long
388   dbusint64_constant='(val##L)'
389   dbusuint64_constant='(val##UL)'
390   dbusint64_printf_modifier='"l"'
391   ;;
392 $ac_cv_sizeof_long_long)
393   dbusint64='long long'
394   dbusint64_constant='(val##LL)'
395   dbusuint64_constant='(val##ULL)'
396   # Ideally we discover what the format is, but this is
397   # only used in verbose mode, so eh...
398   if test x"$ac_cv_gnu_library_2_1" = xyes; then
399     dbusint64_printf_modifier='"ll"'
400   fi
401   ;;
402 $ac_cv_sizeof___int64)
403   dbusint64=__int64
404   dbusint64_constant='(val##i64)'
405   dbusuint64_constant='(val##ui64)'
406   # See above case
407   if test x"$ac_cv_gnu_library_2_1" = xyes; then
408     dbusint64_printf_modifier='"ll"'
409   fi
410   ;;
411 esac
412
413 AS_IF(
414   [test -z "$dbusint64"],
415   [AC_MSG_RESULT([not found])
416   AC_MSG_ERROR([Could not find a 64-bit integer type.
417
418 Please report a bug here with details of your platform and compiler:
419
420     http://bugs.freedesktop.org/enter_bug.cgi?product=DBus&component=core])
421   ],
422   dnl else
423   [
424         DBUS_INT64_TYPE="$dbusint64"
425         DBUS_INT64_CONSTANT="$dbusint64_constant"
426         DBUS_UINT64_CONSTANT="$dbusuint64_constant"
427         if test x"$dbusint64_printf_modifier" != x; then
428                 AC_DEFINE_UNQUOTED(DBUS_INT64_PRINTF_MODIFIER, [$dbusint64_printf_modifier], [Define to printf modifier for 64 bit integer type])
429         fi
430         AC_MSG_RESULT($DBUS_INT64_TYPE)
431   ])
432
433 AC_SUBST(DBUS_INT64_TYPE)
434 AC_SUBST(DBUS_INT64_CONSTANT)
435 AC_SUBST(DBUS_UINT64_CONSTANT)
436
437 ### see what 32-bit int is called
438 AC_MSG_CHECKING([32-bit integer type])
439
440 case 4 in
441 $ac_cv_sizeof_short)
442   dbusint32=short
443   ;;
444 $ac_cv_sizeof_int)
445   dbusint32=int
446   ;;
447 $ac_cv_sizeof_long)
448   dbusint32=long
449   ;;
450 esac
451
452 if test -z "$dbusint32" ; then
453         DBUS_INT32_TYPE="no_int32_type_detected"
454         AC_MSG_ERROR([No 32-bit integer type found])
455 else
456         DBUS_INT32_TYPE="$dbusint32"
457         AC_MSG_RESULT($DBUS_INT32_TYPE)
458 fi
459
460 AC_SUBST(DBUS_INT32_TYPE)
461
462 ### see what 16-bit int is called
463 AC_MSG_CHECKING([16-bit integer type])
464
465 case 2 in
466 $ac_cv_sizeof_short)
467   dbusint16=short
468   ;;
469 $ac_cv_sizeof_int)
470   dbusint16=int
471   ;;
472 esac
473
474 if test -z "$dbusint16" ; then
475         DBUS_INT16_TYPE="no_int16_type_detected"
476         AC_MSG_ERROR([No 16-bit integer type found])
477 else
478         DBUS_INT16_TYPE="$dbusint16"
479         AC_MSG_RESULT($DBUS_INT16_TYPE)
480 fi
481
482 AC_SUBST(DBUS_INT16_TYPE)
483
484 ## byte order
485 case $host_os in
486         darwin*)
487                 # check at compile-time, so that it is possible to build universal
488                 # (with multiple architectures at once on the compile line)
489                 AH_VERBATIM([WORDS_BIGENDIAN_DARWIN], [
490                         /* Use the compiler-provided endianness defines to allow universal compiling. */
491                         #if defined(__BIG_ENDIAN__)
492                         #define WORDS_BIGENDIAN 1
493                         #endif
494                 ])
495                 ;;
496         *)
497                 AC_C_BIGENDIAN
498                 ;;
499 esac
500
501 dnl **********************************
502 dnl *** va_copy checks (from GLib) ***
503 dnl **********************************
504 dnl we currently check for all three va_copy possibilities, so we get
505 dnl all results in config.log for bug reports.
506 AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[
507         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
508 #include <stdlib.h>
509         static void f (int i, ...) {
510         va_list args1, args2;
511         va_start (args1, i);
512         va_copy (args2, args1);
513         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
514           exit (1);
515         va_end (args1); va_end (args2);
516         }
517         int main() {
518           f (0, 42);
519           return 0;
520         }])],
521         [dbus_cv_va_copy=yes],
522         [dbus_cv_va_copy=no])
523 ])
524 AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[
525         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
526 #include <stdlib.h>
527         static void f (int i, ...) {
528         va_list args1, args2;
529         va_start (args1, i);
530         __va_copy (args2, args1);
531         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
532           exit (1);
533         va_end (args1); va_end (args2);
534         }
535         int main() {
536           f (0, 42);
537           return 0;
538         }])],
539         [dbus_cv___va_copy=yes],
540         [dbus_cv___va_copy=no])
541 ])
542
543 if test "x$dbus_cv_va_copy" = "xyes"; then
544   dbus_va_copy_func=va_copy
545 else if test "x$dbus_cv___va_copy" = "xyes"; then
546   dbus_va_copy_func=__va_copy
547 fi
548 fi
549
550 if test -n "$dbus_va_copy_func"; then
551   AC_DEFINE_UNQUOTED(DBUS_VA_COPY,$dbus_va_copy_func,[A 'va_copy' style function])
552 fi
553
554 AC_LANG_PUSH(C)
555 AC_CACHE_CHECK([whether va_lists can be copied by value],
556         dbus_cv_va_val_copy,
557         [AC_RUN_IFELSE([AC_LANG_PROGRAM(
558 [[
559         #include <stdarg.h>
560         #include <stdlib.h>
561 ]],
562 [[
563         static void f (int i, ...) {
564         va_list args1, args2;
565         va_start (args1, i);
566         args2 = args1;
567         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
568           exit (1);
569         va_end (args1); va_end (args2);
570         }
571         int main() {
572           f (0, 42);
573           return 0;
574         }
575 ]])],
576         [dbus_cv_va_val_copy=yes],
577         [dbus_cv_va_val_copy=no],
578         [dbus_cv_va_val_copy=yes])
579 ])
580 AC_LANG_POP(C)
581
582 if test "x$dbus_cv_va_val_copy" = "xno"; then
583   AC_DEFINE(DBUS_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
584 fi
585
586
587 #### Atomic integers
588
589 AC_CACHE_CHECK([whether $CC knows __sync_sub_and_fetch()],
590   dbus_cv_sync_sub_and_fetch,
591   [AC_LINK_IFELSE([
592      AC_LANG_PROGRAM([[]], [[int a = 4; int b = __sync_sub_and_fetch(&a, 4); exit(b); ]])],
593      [dbus_cv_sync_sub_and_fetch=yes],
594      [dbus_cv_sync_sub_and_fetch=no])
595   ])
596
597 if test "x$dbus_cv_sync_sub_and_fetch" = "xyes" ; then
598    have_sync=1
599 else
600    have_sync=0
601 fi
602
603 AC_DEFINE_UNQUOTED([DBUS_USE_SYNC], [$have_sync], [Use the gcc __sync extension])
604
605 #### Various functions
606 AC_SEARCH_LIBS(socket,[socket network])
607 AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
608
609 AC_CHECK_FUNCS([vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull issetugid getresuid setresuid getrlimit])
610
611 AC_CHECK_HEADERS([syslog.h])
612 if test "x$ac_cv_header_syslog_h" = "xyes"; then
613   AC_CHECK_DECLS([LOG_PERROR], [], [], [[#include <syslog.h>]])
614 fi
615
616 # For test-segfault.c
617 AC_CHECK_HEADERS_ONCE([sys/prctl.h])
618 AC_CHECK_FUNCS_ONCE([prctl raise])
619
620 #### Check for broken poll; taken from Glib's configure
621
622 AC_MSG_CHECKING([for broken poll])
623 AC_RUN_IFELSE([AC_LANG_SOURCE([[
624     #include <stdlib.h>
625     #include <fcntl.h>
626     #include <poll.h>
627     #ifdef HAVE_SYS_POLL_H
628     #include <sys/poll.h>
629     #endif
630     int main(void) {
631       struct pollfd fds[1];
632       int fd;
633       fd = open("/dev/null", 1);
634       fds[0].fd = fd;
635       fds[0].events = POLLIN;
636       fds[0].revents = 0;
637       if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
638             exit(1);  /* Does not work for devices -- fail */
639       }
640       exit(0);
641     }]])],
642   [broken_poll=no],
643   [broken_poll=yes
644    AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
645   [broken_poll="no (cross compiling)"])
646 AC_MSG_RESULT($broken_poll)
647
648 AC_MSG_CHECKING(for dirfd)
649 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
650 #include <sys/types.h>
651 #include <dirent.h>
652 ]], [[
653 DIR *dirp;
654 dirp = opendir(".");
655 dirfd(dirp);
656 closedir(dirp);
657 ]])],
658 [dbus_have_dirfd=yes],
659 [dbus_have_dirfd=no])
660 AC_MSG_RESULT($dbus_have_dirfd)
661 if test "$dbus_have_dirfd" = yes; then
662         AC_DEFINE(HAVE_DIRFD,1,[Have dirfd function])
663 else
664         AC_MSG_CHECKING(for DIR *dirp->dd_fd)
665         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
666 #include <sys/types.h>
667 #include <dirent.h>
668         ]], [[
669 DIR *dirp;
670 int fd;
671 dirp = opendir(".");
672 fd = dirp->dd_fd;
673 closedir(dirp);
674         ]])],
675         [dbus_have_ddfd=yes],
676         [dbus_have_ddfd=no])
677         AC_MSG_RESULT($dbus_have_ddfd)
678         if test "$dbus_have_ddfd" = yes; then
679                 AC_DEFINE(HAVE_DDFD,1,[Have the ddfd member of DIR])
680         fi
681 fi
682
683 AC_CHECK_HEADERS(sys/resource.h)
684
685 AC_CHECK_HEADERS(dirent.h)
686
687 AC_CHECK_HEADERS([execinfo.h],
688         [AC_SEARCH_LIBS([backtrace], [execinfo],
689                 [AC_DEFINE([HAVE_BACKTRACE], [1],
690                         [Define to 1 if you have backtrace().])])])
691
692 AC_CHECK_HEADERS(errno.h)
693
694 AC_CHECK_HEADERS(signal.h)
695
696 AC_CHECK_HEADERS(locale.h)
697
698 AC_CHECK_HEADERS(byteswap.h)
699
700 AC_CHECK_HEADERS(unistd.h)
701
702 AC_CHECK_HEADERS([stdint.h])
703
704 AC_CHECK_HEADERS(ws2tcpip.h)
705
706 AC_CHECK_HEADERS(alloca.h)
707
708 # Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
709 #
710 case $host_os in
711     solaris*)
712        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
713 esac
714
715 # checking for a posix version of getpwnam_r
716 # if we are cross compiling and can not run the test
717 # assume getpwnam_r is the posix version
718 # it is up to the person cross compiling to change
719 # this behavior if desired
720 AC_LANG_PUSH(C)
721 AC_CACHE_CHECK([for posix getpwnam_r],
722                 ac_cv_func_posix_getpwnam_r,
723                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
724 [[
725 #include <errno.h>
726 #include <pwd.h>
727 ]],
728 [[
729     char buffer[10000];
730     struct passwd pwd, *pwptr = &pwd;
731     int error;
732     errno = 0;
733     error = getpwnam_r ("", &pwd, buffer,
734                         sizeof (buffer), &pwptr);
735    return (error < 0 && errno == ENOSYS)
736            || error == ENOSYS;
737 ]])],
738         [ac_cv_func_posix_getpwnam_r=yes],
739         [ac_cv_func_posix_getpwnam_r=no],
740         [ac_cv_func_posix_getpwnam_r=yes]
741 )])
742 AC_LANG_POP(C)
743
744 if test "$ac_cv_func_posix_getpwnam_r" = yes; then
745         AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
746                 [Have POSIX function getpwnam_r])
747 else
748         AC_CACHE_CHECK([for nonposix getpwnam_r],
749                 ac_cv_func_nonposix_getpwnam_r,
750                 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pwd.h>]], [[char buffer[10000];
751                         struct passwd pwd;
752                         getpwnam_r ("", &pwd, buffer,
753                                         sizeof (buffer));]])],
754                         [ac_cv_func_nonposix_getpwnam_r=yes],
755                         [ac_cv_func_nonposix_getpwnam_r=no])])
756                 if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
757                 AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
758                         [Have non-POSIX function getpwnam_r])
759         fi
760 fi
761
762 dnl check for socklen_t
763 AC_MSG_CHECKING(whether socklen_t is defined)
764 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
765 #include <sys/types.h>
766 #include <sys/socket.h>
767 #include <netdb.h>
768 ]], [[
769 socklen_t foo;
770 foo = 1;
771 ]])],
772 [dbus_have_socklen_t=yes],
773 [dbus_have_socklen_t=no])
774 AC_MSG_RESULT($dbus_have_socklen_t)
775
776 if test "x$dbus_have_socklen_t" = "xyes"; then
777     AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
778 fi
779
780 dnl check for writev header and writev function so we're
781 dnl good to go if HAVE_WRITEV gets defined.
782 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
783
784 dnl needed on darwin for NAME_MAX
785 AC_CHECK_HEADERS(sys/syslimits.h)
786
787 dnl Make it easy to check if we have MSG_NOSIGNAL without actually having to include sys/socket.h
788 AC_CHECK_DECLS([MSG_NOSIGNAL], [], [], [[ #include <sys/types.h>
789 #include <sys/socket.h> ]])
790
791 dnl check for flavours of varargs macros (test from GLib)
792 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
793 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
794 int a(int p1, int p2, int p3);
795 #define call_a(...) a(1,__VA_ARGS__)
796 call_a(2,3);
797 ]])],
798 [dbus_have_iso_c_varargs=yes],
799 [dbus_have_iso_c_varargs=no])
800 AC_MSG_RESULT($dbus_have_iso_c_varargs)
801
802 AC_MSG_CHECKING(for GNUC varargs macros)
803 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
804 int a(int p1, int p2, int p3);
805 #define call_a(params...) a(1,params)
806 call_a(2,3);
807 ]])],
808 [dbus_have_gnuc_varargs=yes],
809 [dbus_have_gnuc_varargs=no])
810 AC_MSG_RESULT($dbus_have_gnuc_varargs)
811
812 dnl Output varargs tests
813 if test x$dbus_have_iso_c_varargs = xyes; then
814     AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
815 fi
816 if test x$dbus_have_gnuc_varargs = xyes; then
817     AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
818 fi
819
820 dnl Check for various credentials.
821 AC_MSG_CHECKING(for struct cmsgcred)
822 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
823 #include <sys/types.h>
824 #include <sys/socket.h>
825 ]], [[
826 struct cmsgcred cred;
827
828 cred.cmcred_pid = 0;
829 ]])],
830 [dbus_have_struct_cmsgcred=yes],
831 [dbus_have_struct_cmsgcred=no])
832 AC_MSG_RESULT($dbus_have_struct_cmsgcred)
833
834 if test x$dbus_have_struct_cmsgcred = xyes; then
835     AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
836 fi
837
838 AC_CHECK_MEMBER([struct unpcbid.unp_pid],
839                 [AC_DEFINE([HAVE_UNPCBID], 1, [Have unpcbid structure])],
840                 [],
841                 [[#include <sys/un.h>]])
842
843 AC_CHECK_FUNCS(getpeerucred getpeereid)
844
845 AC_CHECK_FUNCS(pipe2 accept4)
846
847 #### Abstract sockets
848
849 if test x$enable_abstract_sockets = xauto; then
850 AC_LANG_PUSH(C)
851 warn_on_xcompile=no
852 AC_CACHE_CHECK([abstract socket namespace],
853                 ac_cv_have_abstract_sockets,
854                 [AC_RUN_IFELSE([AC_LANG_PROGRAM(
855 [[
856 #include <sys/types.h>
857 #include <stdlib.h>
858 #include <string.h>
859 #include <stdio.h>
860 #include <sys/socket.h>
861 #include <sys/un.h>
862 #include <errno.h>
863 ]],
864 [[
865   size_t slen;
866   int listen_fd;
867   struct sockaddr_un addr;
868
869   listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
870
871   if (listen_fd < 0)
872     {
873       fprintf (stderr, "socket() failed: %s\n", strerror (errno));
874       exit (1);
875     }
876
877   memset (&addr, '\0', sizeof (addr));
878   addr.sun_family = AF_UNIX;
879   strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
880   /* SUN_LEN uses strlen() so need to calculate it before adding \0 at the
881    * beginning.
882    */
883   slen = SUN_LEN(&addr);
884   addr.sun_path[0] = '\0'; /* this is what makes it abstract */
885
886   if (bind (listen_fd, (struct sockaddr*) &addr, slen) < 0)
887     {
888        fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
889                 strerror (errno));
890        exit (1);
891     }
892   else
893     exit (0);
894 ]])],
895               [ac_cv_have_abstract_sockets=yes],
896               [ac_cv_have_abstract_sockets=no],
897               [
898                 ac_cv_have_abstract_sockets=no
899                 warn_on_xcompile=yes
900               ]
901 )])
902 if test x$warn_on_xcompile = xyes ; then
903   AC_MSG_WARN([Cannot check for abstract sockets when cross-compiling, please use --enable-abstract-sockets])
904 fi
905 AC_LANG_POP(C)
906 fi
907
908 if test x$enable_abstract_sockets = xyes; then
909     if test x$ac_cv_have_abstract_sockets = xno; then
910         AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
911     fi
912 fi
913
914 if test x$enable_abstract_sockets = xno; then
915    ac_cv_have_abstract_sockets=no;
916 fi
917
918 if test x$ac_cv_have_abstract_sockets = xyes ; then
919    DBUS_PATH_OR_ABSTRACT=abstract
920    AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
921 else
922    DBUS_PATH_OR_ABSTRACT=path
923 fi
924
925 # this is used in addresses to prefer abstract, e.g.
926 # unix:path=/foo or unix:abstract=/foo
927 AC_SUBST(DBUS_PATH_OR_ABSTRACT)
928
929 #### Sort out XML library
930
931 AC_CHECK_LIB(expat, XML_ParserCreate_MM,
932              [ AC_CHECK_HEADERS(expat.h, [],
933                                 [AC_MSG_ERROR([Could not find expat.h, check config.log for failed attempts])]) ],
934              [ AC_MSG_ERROR([Explicitly requested expat but expat not found]) ])
935
936 XML_LIBS=-lexpat
937 XML_CFLAGS=
938 AC_SUBST([XML_CFLAGS])
939 AC_SUBST([XML_LIBS])
940
941 # Thread lib detection
942 AC_ARG_VAR([THREAD_LIBS])
943 save_libs="$LIBS"
944 LIBS="$LIBS $THREAD_LIBS"
945
946 is_missing_pthread_function="is required when compiling D-Bus on Unix platforms, but is not in your libc or libpthread. Please open a bug on https://bugs.freedesktop.org/enter_bug.cgi?product=dbus with details of your platform."
947
948 # Don't do these automatic checks if the user set THREAD_LIBS on the
949 # configure command-line. If they did, we assume they're right.
950 #
951 # We also don't do these checks on Windows, because you don't need magical
952 # linker flags to have threading support there.
953 AS_IF([test "x$dbus_unix" = xyes && test "x$THREAD_LIBS" = x],
954   [
955     # Mandatory pthread functions. In principle, some of these could be made
956     # optional if there are platforms that don't have them.
957     #
958     # Currently, we only look in -lpthread.
959     # In principle we might need to look in -lpthreads, -lthreads, ...
960     # as well - please file a bug if your platform needs this.
961     AC_SEARCH_LIBS([pthread_cond_timedwait],
962         [pthread],
963         [THREAD_LIBS="$LIBS"],
964         [AC_MSG_ERROR([pthread_cond_timedwait $is_missing_pthread_function])],
965         [])
966     AC_SEARCH_LIBS([pthread_mutexattr_init],
967         [pthread],
968         [THREAD_LIBS="$LIBS"],
969         [AC_MSG_ERROR([pthread_mutexattr_init $is_missing_pthread_function])],
970         [])
971     AC_SEARCH_LIBS([pthread_mutexattr_settype],
972         [pthread],
973         [THREAD_LIBS="$LIBS"],
974         [AC_MSG_ERROR([pthread_mutexattr_settype $is_missing_pthread_function])],
975         [])
976
977     # Optional, for monotonic clocks. Because it's optional, this check
978     # is non-fatal if we don't find it.
979     AC_SEARCH_LIBS([pthread_condattr_setclock],
980         [pthread],
981         [THREAD_LIBS="$LIBS"])
982
983     AS_IF([test "x$ac_cv_search_pthread_condattr_setclock" != xno],
984       [
985         AC_SEARCH_LIBS([clock_getres], [rt], [THREAD_LIBS="$LIBS"])
986         AC_MSG_CHECKING([for CLOCK_MONOTONIC])
987         AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
988 [[#include <time.h>
989 #include <pthread.h>
990 ]], [[
991 struct timespec monotonic_timer;
992 pthread_condattr_t attr;
993 pthread_condattr_init (&attr);
994 pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
995 clock_getres (CLOCK_MONOTONIC,&monotonic_timer);
996 ]])],
997             [have_clock_monotonic=true],
998             [have_clock_monotonic=false])
999         AS_IF([test x$have_clock_monotonic = xtrue],
1000           [
1001             AC_MSG_RESULT([found])
1002             AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1, [Define if we have CLOCK_MONOTONIC])
1003           ],
1004           [AC_MSG_RESULT([not found])])
1005       ]) dnl have pthread_condattr_setclock
1006   ]) dnl on Unix
1007
1008 LIBS="$save_libs"
1009
1010 AC_SUBST([THREAD_LIBS])
1011
1012 # SELinux detection
1013 if test x$enable_selinux = xno ; then
1014     have_selinux=no;
1015 else
1016     # See if we have SELinux library
1017     AC_CHECK_LIB(selinux, is_selinux_enabled,
1018                  have_selinux=yes, have_selinux=no)
1019
1020     # see if we have the SELinux header with the new D-Bus stuff in it
1021     if test x$have_selinux = xyes ; then
1022         AC_MSG_CHECKING([for DBUS Flask permissions in selinux/av_permissions.h])
1023         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <selinux/av_permissions.h>]],
1024                           [[#ifdef DBUS__ACQUIRE_SVC return 0;
1025                             #else
1026                             #error DBUS__ACQUIRE_SVC not defined
1027                             #endif]])],
1028                           [have_selinux=yes],
1029                           [have_selinux=no])
1030         AC_MSG_RESULT($have_selinux)
1031     fi
1032
1033     if test x$enable_selinux = xauto ; then
1034         if test x$have_selinux = xno ; then
1035                 AC_MSG_WARN([Sufficiently new SELinux library not found])
1036         fi
1037     else
1038         if test x$have_selinux = xno ; then
1039                 AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
1040         fi
1041     fi
1042 fi
1043
1044 AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)
1045
1046 if test x$have_selinux = xyes ; then
1047     # the selinux code creates threads
1048     # which requires libpthread even on linux
1049     AC_CHECK_FUNC(pthread_create,,[AC_CHECK_LIB(pthread,pthread_create,
1050                                                 [SELINUX_THREAD_LIBS="-lpthread"])])
1051
1052     SELINUX_LIBS="-lselinux $SELINUX_THREAD_LIBS"
1053     AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
1054 else
1055     SELINUX_LIBS=
1056 fi
1057
1058 # AppArmor detection
1059 AS_IF([test x$enable_apparmor = xno],
1060   [have_apparmor=no],
1061   [
1062   PKG_CHECK_MODULES([APPARMOR], [libapparmor >= 2.8.95],
1063                     [have_apparmor=yes], [have_apparmor=no])
1064
1065   AS_IF([test x$enable_apparmor = xauto && test x$have_apparmor = xno],
1066         [AC_MSG_WARN([Sufficiently new AppArmor library not found])])
1067   AS_IF([test x$enable_apparmor != xauto && test x$have_apparmor = xno],
1068         [AC_MSG_ERROR([AppArmor explicitly required, and AppArmor library not found])])
1069   ])
1070
1071 AS_IF([test x$have_apparmor = xyes],
1072       [AC_DEFINE([HAVE_APPARMOR], [1], [AppArmor Support])])
1073
1074 # inotify checks
1075 if test x$enable_inotify = xno ; then
1076     have_inotify=no;
1077 else
1078     AC_CHECK_HEADERS(sys/inotify.h, have_inotify=yes, have_inotify=no)
1079 fi
1080
1081 dnl check if inotify backend is enabled
1082 if test x$have_inotify = xyes; then
1083    AC_DEFINE(DBUS_BUS_ENABLE_INOTIFY,1,[Use inotify])
1084    AC_CHECK_FUNCS(inotify_init1)
1085 fi
1086
1087 AM_CONDITIONAL(DBUS_BUS_ENABLE_INOTIFY, test x$have_inotify = xyes)
1088
1089 # For simplicity, we require the userland API for epoll_create1 at
1090 # compile-time (glibc 2.9), but we'll run on kernels that turn out
1091 # not to have it at runtime.
1092 AC_ARG_ENABLE([epoll],
1093               [AS_HELP_STRING([--enable-epoll],[use epoll(4) on Linux])],
1094               [enable_epoll=$enableval], [enable_epoll=auto])
1095 if test x$enable_epoll = xno; then
1096     have_linux_epoll=no
1097 else
1098     AC_MSG_CHECKING([for Linux epoll(4)])
1099     AC_LINK_IFELSE([AC_LANG_PROGRAM(
1100         [
1101         #ifndef __linux__
1102         #error This is not Linux
1103         #endif
1104         #include <sys/epoll.h>
1105         ],
1106         [epoll_create1 (EPOLL_CLOEXEC);])],
1107         [have_linux_epoll=yes],
1108         [have_linux_epoll=no])
1109     AC_MSG_RESULT([$have_linux_epoll])
1110 fi
1111 if test x$enable_epoll,$have_linux_epoll = xyes,no; then
1112     AC_MSG_ERROR([epoll support explicitly enabled but not available])
1113 fi
1114 if test x$have_linux_epoll = xyes; then
1115   AC_DEFINE([DBUS_HAVE_LINUX_EPOLL], 1, [Define to use epoll(4) on Linux])
1116 fi
1117 AM_CONDITIONAL([HAVE_LINUX_EPOLL], [test x$have_linux_epoll = xyes])
1118
1119 # kqueue checks
1120 if test x$enable_kqueue = xno ; then
1121     have_kqueue=no
1122 else
1123     have_kqueue=yes
1124     AC_CHECK_HEADER(sys/event.h, , have_kqueue=no)
1125     AC_CHECK_FUNC(kqueue, , have_kqueue=no)
1126
1127     if test x$enable_kqueue = xyes -a x$have_kqueue = xno; then
1128         AC_MSG_ERROR(kqueue support explicitly enabled but not available)
1129     fi
1130 fi
1131
1132 dnl check if kqueue backend is enabled
1133 if test x$have_kqueue = xyes; then
1134    AC_DEFINE(DBUS_BUS_ENABLE_KQUEUE,1,[Use kqueue])
1135 fi
1136
1137 AM_CONDITIONAL(DBUS_BUS_ENABLE_KQUEUE, test x$have_kqueue = xyes)
1138
1139 # launchd checks
1140 if test x$enable_launchd = xno ; then
1141     have_launchd=no
1142 else
1143     have_launchd=yes
1144     AC_CHECK_HEADER([launch.h], , have_launchd=no)
1145     AC_PATH_PROG([LAUNCHCTL], [launchctl])
1146     if test "x$LAUNCHCTL" = "x"; then
1147         have_launchd=no
1148     fi
1149
1150     if test x$enable_launchd = xyes && test x$have_launchd = xno ; then
1151         AC_MSG_ERROR([launchd support explicitly enabled but not available])
1152     fi
1153 fi
1154
1155 dnl check if launchd is enabled
1156 if test x$have_launchd = xyes; then
1157     AC_DEFINE(DBUS_ENABLE_LAUNCHD,1,[Use launchd autolaunch])
1158 fi
1159
1160 AM_CONDITIONAL(DBUS_ENABLE_LAUNCHD, test x$have_launchd = xyes)
1161
1162 #### Directory to place launchd agent file
1163 if test "x$with_launchd_agent_dir" = "x"; then
1164    LAUNCHD_AGENT_DIR="/Library/LaunchAgents"
1165 else
1166    LAUNCHD_AGENT_DIR="$with_launchd_agent_dir"
1167 fi
1168
1169 AC_SUBST(LAUNCHD_AGENT_DIR)
1170
1171 dnl console owner file
1172 if test x$enable_console_owner_file = xno ; then
1173     have_console_owner_file=no;
1174 else
1175     case $host_os in
1176     solaris*)
1177         have_console_owner_file=yes;
1178         AC_DEFINE(HAVE_CONSOLE_OWNER_FILE,1,[Have console owner file])
1179         ;;
1180     *)
1181         have_console_owner_file=no;;
1182     esac
1183 fi
1184
1185 AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
1186
1187 dnl systemd detection
1188 if test x$enable_systemd = xno ; then
1189     have_systemd=no;
1190 else
1191     PKG_CHECK_MODULES([SYSTEMD],
1192         [libsystemd >= 209],
1193         [have_systemd=yes],
1194         [PKG_CHECK_MODULES([SYSTEMD],
1195             [libsystemd-login >= 32, libsystemd-daemon >= 32, libsystemd-journal >= 32],
1196             [have_systemd=yes],
1197             [have_systemd=no])])
1198 fi
1199
1200 if test x$have_systemd = xyes; then
1201     AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
1202 fi
1203
1204 if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
1205     AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found])
1206 fi
1207
1208 # If not found in $PATH, we might still have systemd and systemctl at runtime
1209 # (perhaps dbus is being compiled in a minimal chroot with no systemd).
1210 # Assume the upstream-recommended location. Distributors with split /usr
1211 # can override this with ./configure SYSTEMCTL=/bin/systemctl
1212 AC_PATH_PROG([SYSTEMCTL], [systemctl], [/usr/bin/systemctl])
1213
1214 # libaudit detection
1215 if test x$enable_libaudit = xno ; then
1216     have_libaudit=no;
1217 else
1218     # See if we have audit daemon & capabilities library
1219     AC_CHECK_LIB(audit, audit_log_user_avc_message,
1220                  have_libaudit=yes, have_libaudit=no)
1221     if test x$have_libaudit = xyes ; then
1222         AC_CHECK_LIB(cap-ng, capng_clear,
1223                  have_libaudit=yes, have_libaudit=no)
1224     fi
1225 fi
1226
1227 AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes)
1228
1229 if test x$have_libaudit = xyes ; then
1230     SELINUX_LIBS="$SELINUX_LIBS -laudit -lcap-ng"
1231     AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
1232 fi
1233
1234 AC_SUBST([SELINUX_LIBS])
1235
1236 # Check for ADT API (Solaris Basic Security Mode auditing)
1237 AC_MSG_CHECKING(for ADT API)
1238 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1239 #include <bsm/adt.h>
1240 adt_user_context = ADT_USER;
1241 ]], [[]])], [ check_adt_audit=yes ], [ check_adt_audit=no ])
1242
1243 if test ${check_adt_audit} = yes
1244 then
1245    AC_DEFINE([HAVE_ADT], [], [Adt audit API])
1246    ADT_LIBS="-lbsm"
1247    LIBS="-lbsm $LIBS"
1248    AC_MSG_RESULT(yes)
1249 else
1250    AC_MSG_RESULT(no)
1251 fi
1252 AC_SUBST([ADT_LIBS])
1253
1254 # Check for SCM_RIGHTS
1255 AC_MSG_CHECKING([for SCM_RIGHTS])
1256 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1257 #include <sys/types.h>
1258 #include <sys/socket.h>
1259 #include <sys/un.h>
1260 static int x = SCM_RIGHTS;
1261 ]], [[]])],
1262 [ AC_MSG_RESULT([supported])
1263   AC_DEFINE([HAVE_UNIX_FD_PASSING], [1], [Supports sending UNIX file descriptors]) ],
1264 [ AC_MSG_RESULT([not supported]) ])
1265
1266 NETWORK_libs=
1267 if test x$dbus_win = xyes ; then
1268   if test x$dbus_wince = xyes ; then
1269     NETWORK_libs="-lws2"
1270   else
1271     NETWORK_libs="-lws2_32 -liphlpapi"
1272   fi
1273 fi
1274
1275 AC_SUBST([NETWORK_libs])
1276
1277 AC_ARG_WITH([valgrind],
1278   [AS_HELP_STRING([--with-valgrind],
1279      [Add instrumentation to help valgrind to understand our allocator])],
1280   [],
1281   [with_valgrind=no])
1282
1283 AS_IF([test "x$with_valgrind" = xauto],
1284   [PKG_CHECK_EXISTS([valgrind >= 3.6],
1285     [with_valgrind=yes], [with_valgrind=no])])
1286
1287 if test x$with_valgrind != xno; then
1288   PKG_CHECK_MODULES([VALGRIND], [valgrind >= 3.6])
1289   AC_DEFINE([WITH_VALGRIND], [1], [Define to add Valgrind instrumentation])
1290 fi
1291
1292 #### Set up final flags
1293 LIBDBUS_LIBS="$THREAD_LIBS $NETWORK_libs $SYSTEMD_LIBS"
1294 AC_SUBST([LIBDBUS_LIBS])
1295
1296 ### X11 detection
1297 DBUS_X_LIBS=
1298 DBUS_X_CFLAGS=
1299
1300 AC_ARG_ENABLE([x11-autolaunch],
1301   AS_HELP_STRING([--enable-x11-autolaunch], [build with X11 auto-launch support]),
1302   [], [enable_x11_autolaunch=auto])
1303
1304 if test "x$dbus_win" = xyes; then
1305     if test "x$enable_x11_autolaunch" = xyes; then
1306         AC_MSG_ERROR([X11 auto-launch is not supported on Windows])
1307     fi
1308
1309     enable_x11_autolaunch=no
1310     have_x11=no
1311 else
1312     AC_PATH_XTRA
1313
1314     if test "x$no_x" = xyes; then
1315         have_x11=no
1316     else
1317         have_x11=yes
1318         DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
1319         DBUS_X_CFLAGS="$X_CFLAGS"
1320     fi
1321 fi
1322
1323 if test "x$enable_x11_autolaunch,$have_x11" = xyes,no; then
1324     AC_MSG_ERROR([X11 auto-launch requires X headers/libraries])
1325 else
1326     # move from "auto" to "yes" or "no" if necessary
1327     if test "x$enable_x11_autolaunch" != xno; then
1328         enable_x11_autolaunch="$have_x11"
1329     fi
1330 fi
1331
1332 if test "x$have_x11" = xyes ; then
1333    AC_DEFINE([DBUS_BUILD_X11], [1], [Define to build X11 functionality])
1334 fi
1335
1336 if test "x$enable_x11_autolaunch" = xyes ; then
1337    AC_DEFINE([DBUS_ENABLE_X11_AUTOLAUNCH], [1], [Define to enable X11 auto-launch])
1338 fi
1339 AM_CONDITIONAL([DBUS_ENABLE_X11_AUTOLAUNCH],
1340   [test "x$enable_x11_autolaunch" = xyes])
1341
1342 AC_SUBST([DBUS_X_CFLAGS])
1343 AC_SUBST([DBUS_X_LIBS])
1344
1345 #### gcc warning flags
1346
1347 cc_supports_flag() {
1348   AC_MSG_CHECKING(whether $CC supports "$*")
1349   save_CFLAGS="$CFLAGS"
1350   CFLAGS="$*"
1351   AC_TRY_COMPILE([], [], [rc=yes], [rc=no])
1352   CFLAGS="$save_CFLAGS"
1353   AC_MSG_RESULT([$rc])
1354   test "x$rc" = xyes
1355 }
1356
1357 TP_COMPILER_WARNINGS([WARNING_CFLAGS],
1358   dnl Use -Werror by default if:
1359   dnl - we're not on Windows (too many warnings), and
1360   dnl - we're in developer mode (a D-Bus developer, not a distro or end-user)
1361   dnl Override with --enable-Werror or --disable-Werror
1362   [test x$dbus_win != xyes -a x$dbus_cygwin != xyes -a x$enable_developer = xyes],
1363
1364   dnl Enable these warnings if possible:
1365   [all \
1366    extra \
1367    char-subscripts \
1368    missing-declarations \
1369    missing-prototypes \
1370    nested-externs \
1371    pointer-arith \
1372    cast-align \
1373    no-address \
1374    float-equal \
1375    declaration-after-statement \
1376   ],
1377
1378   dnl Disable these warnings if possible, make them non-fatal if possible,
1379   dnl and don't enable -Werror unless we succeeded.
1380   dnl
1381   dnl Intentional:
1382   dnl - $DISABLE_UNUSED_WARNINGS disables unused-label warnings if not
1383   dnl   checking or not asserting
1384   dnl - missing field initializers being 0 is a C feature, not a bug
1385   dnl - unused-parameter is to make writing callbacks less annoying
1386   dnl - misleading-indentation is disabled for this stable branch because
1387   dnl   gcc can't cope with inconsistent tab/space indentation
1388   dnl
1389   dnl To be fixed one day:
1390   dnl - pointer-sign is a workaround for fd.o #15522
1391   dnl - type-limits is probably a bug too, but having the rest of -Wextra
1392   dnl   is better than nothing
1393   [$DISABLE_UNUSED_WARNINGS \
1394    deprecated-declarations \
1395    missing-field-initializers \
1396    misleading-indentation \
1397    unused-parameter \
1398    pointer-sign \
1399    type-limits \
1400   ])
1401
1402 if test "x$GCC" = "xyes"; then
1403   # We're treating -fno-common like a warning: it makes the linker more
1404   # strict, because on some systems the linker is *always* this strict
1405   TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-common])
1406
1407   # http://bugs.freedesktop.org/show_bug.cgi?id=10599
1408   TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-strict-aliasing])
1409
1410   if test "x$enable_ansi" = "xyes"; then
1411     TP_ADD_COMPILER_FLAG([WARNING_CFLAGS],
1412       [-ansi -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -pedantic])
1413   fi
1414 fi
1415
1416 dnl In principle we should put WARNING_CFLAGS in each Makefile.am like
1417 dnl telepathy-glib does, since CFLAGS is meant to be reserved for the user...
1418 dnl but prepending to CFLAGS (so the user can override it with later CFLAGS)
1419 dnl is the next best thing
1420 CFLAGS="$WARNING_CFLAGS $CFLAGS"
1421
1422 case $host_os in
1423     solaris*)
1424         # Solaris' C library apparently needs these runes to be threadsafe...
1425         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT"
1426         # ... this opt-in to get sockaddr_in6 and sockaddr_storage...
1427         CFLAGS="$CFLAGS -D__EXTENSIONS__"
1428         # ... and this opt-in to get file descriptor passing support
1429         CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500"
1430         ;;
1431 esac
1432
1433 ### Detect if ld supports --version-script
1434
1435 gl_LD_VERSION_SCRIPT
1436 AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT],
1437                [test "x$have_ld_version_script" = xyes])
1438 ### Doxygen Documentation
1439
1440 AC_PATH_PROG(DOXYGEN, doxygen, no)
1441
1442 AC_MSG_CHECKING([whether to build Doxygen documentation])
1443
1444 if test x$DOXYGEN = xno ; then
1445     have_doxygen=no
1446 else
1447     have_doxygen=yes
1448 fi
1449
1450 if test x$enable_doxygen_docs = xauto ; then
1451     if test x$have_doxygen = xno ; then
1452         enable_doxygen_docs=no
1453     else
1454         enable_doxygen_docs=yes
1455     fi
1456 fi
1457
1458 if test x$enable_doxygen_docs = xyes; then
1459     if test x$have_doxygen = xno; then
1460         AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
1461     fi
1462 fi
1463
1464 AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
1465 AC_MSG_RESULT($enable_doxygen_docs)
1466
1467 AC_CHECK_PROGS([XSLTPROC], [xsltproc])
1468 AM_CONDITIONAL([DBUS_HAVE_XSLTPROC], [test "x$XSLTPROC" != "x"])
1469
1470 ### Ducktype/Yelp documentation
1471
1472 AC_PATH_PROG([DUCKTYPE],[ducktype],[no])
1473 AC_PATH_PROG([YELP_BUILD],[yelp-build],[no])
1474
1475 AC_MSG_CHECKING([whether to build Ducktype documentation])
1476
1477 AS_IF([test "$DUCKTYPE" = "no"],[have_ducktype=no],[have_ducktype=yes])
1478 AS_IF([test "$YELP_BUILD" = "no"],[have_yelp_build=no],[have_yelp_build=yes])
1479
1480 AS_IF([test "$enable_ducktype_docs" = "auto"],[
1481     AS_IF([test "$have_ducktype" = "no" || test "$have_yelp_build" = "no"],[
1482         enable_ducktype_docs=no
1483     ],[
1484         enable_ducktype_docs=yes
1485     ])
1486 ])
1487
1488 AS_IF([test "$enable_ducktype_docs" = "yes"],[
1489     AS_IF([test "$have_ducktype" = "no"],[
1490         AC_MSG_ERROR([Building Ducktype docs explicitly required, but ducktype not found])
1491     ])
1492     AS_IF([test "$have_yelp_build" = "no"],[
1493         AC_MSG_ERROR([Building Ducktype docs explicitly required, but yelp-build not found])
1494     ])
1495 ])
1496
1497 AM_CONDITIONAL([DBUS_DUCKTYPE_DOCS_ENABLED],[test "$enable_ducktype_docs" = "yes"])
1498 AC_MSG_RESULT([$enable_ducktype_docs])
1499
1500 ### XML Documentation
1501
1502 AC_PATH_PROG(XMLTO, xmlto, no)
1503
1504 AC_MSG_CHECKING([whether to build XML documentation])
1505
1506 if test x$XMLTO = xno ; then
1507     have_xmlto=no
1508 else
1509     have_xmlto=yes
1510 fi
1511
1512 if test x$enable_xml_docs = xauto ; then
1513     if test x$have_xmlto = xno ; then
1514         enable_xml_docs=no
1515     else
1516         enable_xml_docs=yes
1517     fi
1518 fi
1519
1520 if test x$enable_xml_docs = xyes; then
1521     if test x$have_xmlto = xno; then
1522         AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
1523     fi
1524 fi
1525
1526 AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
1527 AC_MSG_RESULT($enable_xml_docs)
1528
1529 AM_CONDITIONAL(DBUS_CAN_UPLOAD_DOCS,
1530     [test x$enable_doxygen_docs = xyes && test x$enable_xml_docs = xyes &&
1531      test x$enable_ducktype_docs = xyes])
1532
1533 #### Have to go $localstatedir->$prefix/var->/usr/local/var
1534
1535 #### find the actual value for $prefix that we'll end up with
1536 ##   (I know this is broken and should be done in the Makefile, but
1537 ##    that's a major pain and almost nobody actually seems to care)
1538 AS_AC_EXPAND(EXPANDED_PREFIX, "$prefix")
1539 AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
1540 AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
1541 AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
1542 AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
1543 AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
1544 AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
1545
1546 #### Check our operating system
1547 operating_system=unknown
1548 if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
1549    operating_system=redhat
1550 fi
1551
1552 if test -f /etc/slackware-version || test -f $EXPANDED_SYSCONFDIR/slackware-version ; then
1553    operating_system=slackware
1554 fi
1555
1556 if test -f /usr/bin/cygwin1.dll || test -f $EXPANDED_BINDIR/cygwin1.dll ; then
1557    operating_system=cygwin
1558 fi
1559
1560 #### Sort out init scripts
1561
1562 if test x$with_init_scripts = x; then
1563     case x$operating_system in
1564         xredhat)        with_init_scripts=redhat ;;
1565         xslackware)     with_init_scripts=slackware ;;
1566         xcygwin)        with_init_scripts=cygwin ;;
1567         *)                      with_init_scripts=none ;;
1568     esac
1569 fi
1570
1571 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_RED_HAT, test x$with_init_scripts = xredhat)
1572 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_SLACKWARE, test x$with_init_scripts = xslackware)
1573 AM_CONDITIONAL(DBUS_INIT_SCRIPTS_CYGWIN, test x$with_init_scripts = xcygwin)
1574
1575 ##### systemd unit files
1576 AC_ARG_WITH([systemdsystemunitdir],
1577 AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
1578     [],
1579     [
1580     PKG_CHECK_EXISTS([systemd],
1581       [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)],
1582       [with_systemdsystemunitdir=no])
1583     ])
1584 if test "x$with_systemdsystemunitdir" != xno; then
1585    AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
1586 fi
1587 AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$have_systemd" != "xno" -a -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
1588
1589 AC_ARG_WITH([systemduserunitdir],
1590 AS_HELP_STRING([--with-systemduserunitdir=DIR], [Directory for systemd user service files]),
1591     [],
1592     [
1593     PKG_CHECK_EXISTS([systemd],
1594       [with_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd)],
1595       [with_systemduserunitdir='${libdir}/systemd/user'])
1596     ])
1597 AC_SUBST([systemduserunitdir], [$with_systemduserunitdir])
1598
1599 ##### Set up location for system bus socket
1600 if ! test -z "$with_system_socket"; then
1601    DBUS_SYSTEM_SOCKET=$with_system_socket
1602 else
1603    DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
1604 fi
1605
1606 AC_SUBST(DBUS_SYSTEM_SOCKET)
1607 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_SOCKET,"$DBUS_SYSTEM_SOCKET",[The name of the socket the system bus listens on by default])
1608
1609 ## System bus only listens on local domain sockets, and never
1610 ## on an abstract socket (so only root can create the socket).
1611 ##
1612 ## This won't work on Windows. It's not meant to - the system bus is
1613 ## meaningless on Windows anyway.
1614 ##
1615 ## This has to be suitable for hard-coding in client libraries as well as
1616 ## in the dbus-daemon's configuration, so it has to be valid to listen on
1617 ## and also to connect to. If this ever changes, it'll need to be split into
1618 ## two variables, one for the listening address and one for the connecting
1619 ## address.
1620 DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
1621 AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
1622 AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS, "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS",[The default D-Bus address of the system bus])
1623
1624 #### Set up the pid file
1625 if ! test -z "$with_system_pid_file"; then
1626    DBUS_SYSTEM_PID_FILE=$with_system_pid_file
1627 elif test x$with_init_scripts = xredhat ; then
1628    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
1629 else
1630    DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
1631 fi
1632
1633 AC_SUBST(DBUS_SYSTEM_PID_FILE)
1634
1635 #### Directory to check for console ownership
1636 if ! test -z "$with_console_auth_dir"; then
1637    DBUS_CONSOLE_AUTH_DIR=$with_console_auth_dir
1638 else
1639    DBUS_CONSOLE_AUTH_DIR=/var/run/console/
1640 fi
1641
1642 AC_SUBST(DBUS_CONSOLE_AUTH_DIR)
1643 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_AUTH_DIR, "$DBUS_CONSOLE_AUTH_DIR", [Directory to check for console ownerhip])
1644
1645 #### File to check for console ownership
1646 if test x$have_console_owner_file = xyes; then
1647    if ! test -z "$with_console_owner_file"; then
1648       DBUS_CONSOLE_OWNER_FILE=$with_console_owner_file
1649    else
1650       DBUS_CONSOLE_OWNER_FILE=/dev/console
1651    fi
1652 else
1653   DBUS_CONSOLE_OWNER_FILE=
1654 fi
1655
1656 AC_SUBST(DBUS_CONSOLE_OWNER_FILE)
1657 AC_DEFINE_UNQUOTED(DBUS_CONSOLE_OWNER_FILE, "$DBUS_CONSOLE_OWNER_FILE", [File to check for console ownerhip])
1658
1659 #### User to start the system bus as
1660 if test -z "$with_dbus_user" ; then
1661     DBUS_USER=messagebus
1662 else
1663     DBUS_USER=$with_dbus_user
1664 fi
1665 AC_SUBST(DBUS_USER)
1666 AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon])
1667
1668 #### User for regression tests
1669 AS_IF([test -z "$with_test_user"], [with_test_user=nobody])
1670 DBUS_TEST_USER="$with_test_user"
1671 AC_SUBST([DBUS_TEST_USER])
1672 AC_DEFINE_UNQUOTED([DBUS_TEST_USER], ["$DBUS_TEST_USER"],
1673   [Unprivileged user used in some regression tests])
1674
1675 #### Prefix to install into
1676 DBUS_PREFIX=$EXPANDED_PREFIX
1677 AC_SUBST(DBUS_PREFIX)
1678 AC_DEFINE_UNQUOTED(DBUS_PREFIX,"$DBUS_PREFIX", [Prefix for installing DBUS])
1679
1680 #### Direcotry to install data files into
1681 DBUS_DATADIR=$EXPANDED_DATADIR
1682 AC_SUBST(DBUS_DATADIR)
1683 AC_DEFINE_UNQUOTED(DBUS_DATADIR,"$DBUS_DATADIR", [Directory for installing DBUS data files])
1684
1685 #### Directory to install dbus-daemon
1686 if test -z "$with_dbus_daemondir" ; then
1687     DBUS_DAEMONDIR=$EXPANDED_BINDIR
1688     dbus_daemondir='$bindir'
1689 else
1690     DBUS_DAEMONDIR=$with_dbus_daemondir
1691     dbus_daemondir=$with_dbus_daemondir
1692 fi
1693 AC_SUBST(DBUS_DAEMONDIR)
1694 AC_SUBST(dbus_daemondir)
1695 AC_DEFINE_UNQUOTED(DBUS_DAEMONDIR,"$DBUS_DAEMONDIR", [Directory for installing the DBUS daemon])
1696
1697 #### Directory to install the other binaries
1698 DBUS_BINDIR="$EXPANDED_BINDIR"
1699 AC_SUBST(DBUS_BINDIR)
1700 AC_DEFINE_UNQUOTED(DBUS_BINDIR,"$DBUS_BINDIR", [Directory for installing the binaries])
1701
1702 #### Directory to install the libexec binaries
1703 DBUS_LIBEXECDIR="$EXPANDED_LIBEXECDIR"
1704 AC_SUBST(DBUS_LIBEXECDIR)
1705 AC_DEFINE_UNQUOTED(DBUS_LIBEXECDIR,"$DBUS_LIBEXECDIR", [Directory for installing the libexec binaries])
1706
1707 #### Directory to source sysconfdir configuration from
1708
1709 # On Windows this is relative to where we put the bus setup, in
1710 # ${datadir}/dbus-1. For simplicity, we only do this if
1711 # ${sysconfdir} = ${prefix}/etc and ${datadir} = ${prefix}/share.
1712 #
1713 # On Unix, or on Windows with weird install layouts, it's the absolute path.
1714 AS_IF([test "${dbus_win}" = yes && \
1715        test "$EXPANDED_SYSCONFDIR" = "$EXPANDED_PREFIX/etc" && \
1716        test "$EXPANDED_DATADIR" = "$EXPANDED_PREFIX/share"],
1717       [SYSCONFDIR_FROM_PKGDATADIR="../../etc"
1718        DATADIR_FROM_PKGSYSCONFDIR="../../share"],
1719       [SYSCONFDIR_FROM_PKGDATADIR="$EXPANDED_SYSCONFDIR"
1720        DATADIR_FROM_PKGSYSCONFDIR="$EXPANDED_DATADIR"])
1721 AC_SUBST([SYSCONFDIR_FROM_PKGDATADIR])
1722 AC_SUBST([DATADIR_FROM_PKGSYSCONFDIR])
1723
1724 #### Tell tests where to find certain stuff in builddir
1725
1726 DBUS_PWD=`pwd`
1727 # Useful in a cross-compilation environment, where the tests are run on the host system.
1728 AC_ARG_WITH(dbus-test-dir, AS_HELP_STRING([--with-dbus-test-dir=[dirname]],[path where the tests tools are available]),
1729                            DBUS_PWD=$withval)
1730
1731 DBUS_TEST_EXEC="$DBUS_PWD/test"
1732 DBUS_TEST_DATA="$DBUS_PWD/test/data"
1733
1734 AC_SUBST([DBUS_TEST_DATA])
1735 AC_SUBST([DBUS_TEST_EXEC])
1736
1737 AC_DEFINE_UNQUOTED([DBUS_TEST_EXEC], ["$DBUS_TEST_EXEC"],
1738                    [Full path to the daemon in the builddir])
1739 AC_DEFINE_UNQUOTED([DBUS_EXEEXT], ["$EXEEXT"],
1740                    [Extension for executables, typically empty or .exe])
1741
1742 AC_DEFINE_UNQUOTED(TEST_BUS_LAUNCH_BINARY, ["$DBUS_PWD/tools/dbus-launch$EXEEXT"],
1743                    [Full path to the dbus-launch in the builddir])
1744
1745 ## Export the non-setuid external helper
1746 TEST_LAUNCH_HELPER_BINARY="$DBUS_PWD/bus/dbus-daemon-launch-helper-test$EXEEXT"
1747 AC_SUBST(TEST_LAUNCH_HELPER_BINARY)
1748 AC_DEFINE_UNQUOTED(DBUS_TEST_LAUNCH_HELPER_BINARY, "$TEST_LAUNCH_HELPER_BINARY",
1749                    [Full path to the launch helper test program in the builddir])
1750
1751 #### Find socket directories
1752 if ! test -z "$TMPDIR" ; then
1753    DEFAULT_SOCKET_DIR=$TMPDIR
1754 elif ! test -z "$TEMP" ; then
1755    DEFAULT_SOCKET_DIR=$TEMP
1756 elif ! test -z "$TMP" ; then
1757    DEFAULT_SOCKET_DIR=$TMP
1758 else
1759    DEFAULT_SOCKET_DIR=/tmp
1760 fi
1761
1762 DEFAULT_SOCKET_DIR=`echo $DEFAULT_SOCKET_DIR | sed 's/+/%2B/g'`
1763
1764 if ! test -z "$with_test_socket_dir" ; then
1765    TEST_SOCKET_DIR="$with_test_socket_dir"
1766 else
1767    TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1768 fi
1769 AC_SUBST(TEST_SOCKET_DIR)
1770 AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
1771
1772 if test "x$dbus_unix" = xyes; then
1773   TEST_LISTEN="unix:tmpdir=$TEST_SOCKET_DIR"
1774 else
1775   TEST_LISTEN="tcp:host=localhost"
1776 fi
1777 AC_SUBST([TEST_LISTEN])
1778 AC_DEFINE_UNQUOTED([TEST_LISTEN], ["$TEST_LISTEN"],
1779   [Listening address for regression tests])
1780
1781 if ! test -z "$with_session_socket_dir" ; then
1782    DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
1783 else
1784    DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
1785 fi
1786 AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
1787 AC_SUBST(DBUS_SESSION_SOCKET_DIR)
1788
1789 # This must be a listening address. It doesn't necessarily need to be an
1790 # address you can connect to - it can be something vague like
1791 # "nonce-tcp:".
1792 #
1793 # The default varies by platform.
1794 AC_ARG_WITH([dbus_session_bus_listen_address],
1795             AS_HELP_STRING([--with-dbus-session-bus-listen-address=[ADDRESS]],
1796                            [default address for a session bus to listen on (see configure.ac)]),
1797             [with_dbus_session_bus_listen_address=$withval],
1798             [with_dbus_session_bus_listen_address=])
1799
1800 if test "x$with_dbus_session_bus_listen_address" != "x"; then
1801         # the user specified something, trust them
1802         DBUS_SESSION_BUS_LISTEN_ADDRESS="$with_dbus_session_bus_listen_address"
1803 elif test x$dbus_win = xyes; then
1804         # On Windows, you can (and should) listen on autolaunch addresses,
1805         # because autolaunching is different.
1806         # See https://bugs.freedesktop.org/show_bug.cgi?id=38201
1807         DBUS_SESSION_BUS_LISTEN_ADDRESS="autolaunch:"
1808 elif test x$have_launchd = xyes; then
1809         # Mac OS X default is to use launchd
1810         DBUS_SESSION_BUS_LISTEN_ADDRESS="launchd:env=DBUS_LAUNCHD_SESSION_BUS_SOCKET"
1811 else
1812         # The default on all other Unix platforms (notably Linux)
1813         # is to create a randomly named socket in /tmp or similar
1814         DBUS_SESSION_BUS_LISTEN_ADDRESS="unix:tmpdir=$DBUS_SESSION_SOCKET_DIR"
1815 fi
1816 AC_SUBST([DBUS_SESSION_BUS_LISTEN_ADDRESS])
1817
1818 # This must be an address you can connect to. It doesn't necessarily
1819 # need to be an address you can listen on - it can be "autolaunch:",
1820 # even on Unix.
1821 #
1822 # The default varies by platform.
1823 AC_ARG_WITH([dbus_session_bus_connect_address],
1824             AS_HELP_STRING([--with-dbus-session-bus-connect-address=[ADDRESS]],
1825                            [fallback address for a session bus client to connect to (see configure.ac)]),
1826             [with_dbus_session_bus_connect_address=$withval],
1827             [with_dbus_session_bus_connect_address=])
1828
1829 if test "x$with_dbus_session_bus_connect_address" != "x"; then
1830         # the user specified something, trust them
1831         DBUS_SESSION_BUS_CONNECT_ADDRESS="$with_dbus_session_bus_connect_address"
1832 elif test x$dbus_win = xyes; then
1833         # Windows autolaunching is a bit different; leaving it in its own
1834         # branch of the conditional because the default might conceivably
1835         # change (see #38201)
1836         DBUS_SESSION_BUS_CONNECT_ADDRESS="autolaunch:"
1837 else
1838         # The default on all other Unix platforms (notably Linux)
1839         # is to use auto-launching - this works a bit differently on Mac OS X
1840         # but comes out basically the same in the end
1841         DBUS_SESSION_BUS_CONNECT_ADDRESS="autolaunch:"
1842 fi
1843 AC_SUBST([DBUS_SESSION_BUS_CONNECT_ADDRESS])
1844 AC_DEFINE_UNQUOTED([DBUS_SESSION_BUS_CONNECT_ADDRESS],
1845   ["$DBUS_SESSION_BUS_CONNECT_ADDRESS"],
1846   [Fallback address for session bus clients])
1847
1848 # darwin needs this to initialize the environment
1849 AC_CHECK_HEADERS(crt_externs.h)
1850 AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
1851 AH_VERBATIM(_DARWIN_ENVIRON,
1852 [
1853 #if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
1854 # include <sys/time.h>
1855 # include <crt_externs.h>
1856 # define environ (*_NSGetEnviron())
1857 #endif
1858 ])
1859
1860 AC_ARG_ENABLE([stats],
1861   [AS_HELP_STRING([--disable-stats],
1862     [disable bus daemon usage statistics])],
1863   [], [enable_stats=yes])
1864 if test "x$enable_stats" = xyes; then
1865   AC_DEFINE([DBUS_ENABLE_STATS], [1],
1866     [Define to enable bus daemon usage statistics])
1867 fi
1868
1869 AC_ARG_ENABLE([user-session],
1870   [AS_HELP_STRING([--enable-user-session],
1871     [enable user-session semantics for session bus under systemd])],
1872   [], [enable_user_session=no])
1873 AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION],
1874   [test "x$enable_user_session" = xyes])
1875
1876 AC_CONFIG_FILES([
1877 Doxyfile
1878 dbus/Version
1879 dbus/versioninfo.rc
1880 dbus/dbus-arch-deps.h
1881 bus/system.conf
1882 bus/session.conf
1883 bus/legacy-config/system.conf
1884 bus/legacy-config/session.conf
1885 bus/example-system-enable-stats.conf
1886 bus/example-session-disable-stats.conf
1887 bus/messagebus
1888 bus/messagebus-config
1889 bus/org.freedesktop.dbus-session.plist
1890 bus/rc.messagebus
1891 bus/dbus.service
1892 bus/dbus.socket
1893 bus/systemd-user/dbus.service
1894 bus/systemd-user/dbus.socket
1895 Makefile
1896 dbus/Makefile
1897 bus/Makefile
1898 tools/Makefile
1899 test/Makefile
1900 test/name-test/Makefile
1901 doc/Makefile
1902 doc/dbus-cleanup-sockets.1.xml
1903 doc/dbus-daemon.1.xml
1904 doc/dbus-launch.1.xml
1905 doc/dbus-monitor.1.xml
1906 doc/dbus-run-session.1.xml
1907 doc/dbus-send.1.xml
1908 doc/dbus-test-tool.1.xml
1909 doc/dbus-update-activation-environment.1.xml
1910 doc/dbus-uuidgen.1.xml
1911 dbus-1.pc
1912 dbus-1-uninstalled.pc
1913 ])
1914 AC_OUTPUT
1915
1916 dnl ==========================================================================
1917 echo "
1918                     D-Bus $VERSION
1919                   ==============
1920
1921         prefix:                   ${EXPANDED_PREFIX}
1922         exec_prefix:              ${exec_prefix}
1923         libdir:                   ${EXPANDED_LIBDIR}
1924         libexecdir:               ${EXPANDED_LIBEXECDIR}
1925         bindir:                   ${EXPANDED_BINDIR}
1926         sysconfdir:               ${EXPANDED_SYSCONFDIR}
1927         localstatedir:            ${EXPANDED_LOCALSTATEDIR}
1928         datadir:                  ${EXPANDED_DATADIR}
1929         source code location:     ${srcdir}
1930         compiler:                 ${CC}
1931         cflags:                   ${CFLAGS}
1932         cppflags:                 ${CPPFLAGS}
1933         cxxflags:                 ${CXXFLAGS}
1934         64-bit int:               ${DBUS_INT64_TYPE}
1935         32-bit int:               ${DBUS_INT32_TYPE}
1936         16-bit int:               ${DBUS_INT16_TYPE}
1937         Doxygen:                  ${DOXYGEN:-not found}
1938         xmlto:                    ${XMLTO:-not found}
1939         ducktype:                 ${DUCKTYPE:-not found}
1940         yelp-build:               ${YELP_BUILD:-not found}"
1941
1942 echo "
1943         Rebuilding generated files: ${USE_MAINTAINER_MODE}
1944         gcc coverage profiling:   ${enable_compiler_coverage}
1945         Building embedded tests:  ${enable_embedded_tests}
1946         Building modular tests:   ${enable_modular_tests}
1947             - with GLib:          ${with_glib}
1948         Installing tests:         ${enable_installed_tests}
1949         Building verbose mode:    ${enable_verbose_mode}
1950         Building assertions:      ${enable_asserts}
1951         Building checks:          ${enable_checks}
1952         Building bus stats API:   ${enable_stats}
1953         Building SELinux support: ${have_selinux}
1954         Building AppArmor support: ${have_apparmor}
1955         Building inotify support: ${have_inotify}
1956         Building kqueue support:  ${have_kqueue}
1957         Building systemd support: ${have_systemd}
1958         Building X11 code:        ${have_x11}
1959         Building Doxygen docs:    ${enable_doxygen_docs}
1960         Building Ducktype docs:   ${enable_ducktype_docs}
1961         Building XML docs:        ${enable_xml_docs}
1962         Building launchd support: ${have_launchd}
1963         Init scripts style:       ${with_init_scripts}
1964         Abstract socket names:    ${ac_cv_have_abstract_sockets}
1965         System bus socket:        ${DBUS_SYSTEM_SOCKET}
1966         System bus address:       ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
1967         System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
1968         Session bus listens on:   ${DBUS_SESSION_BUS_LISTEN_ADDRESS}
1969         Session clients connect to: ${DBUS_SESSION_BUS_CONNECT_ADDRESS}
1970         Console auth dir:         ${DBUS_CONSOLE_AUTH_DIR}
1971         Console owner file:       ${have_console_owner_file}
1972         Console owner file path:  ${DBUS_CONSOLE_OWNER_FILE}
1973         System bus user:          ${DBUS_USER}
1974         Session bus services dir: ${EXPANDED_DATADIR}/dbus-1/services
1975         'make check' socket dir:  ${TEST_SOCKET_DIR}
1976 "
1977 if test x$have_launchd = xyes; then
1978         echo "        launchd agent dir:        ${LAUNCHD_AGENT_DIR}"
1979 fi
1980 echo
1981
1982 if test x$enable_embedded_tests = xyes; then
1983         echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
1984 fi
1985 if test x$enable_embedded_tests = xyes -a x$enable_asserts = xno; then
1986         echo "NOTE: building with embedded tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)"
1987 fi
1988 if test x$enable_compiler_coverage = xyes; then
1989         echo "NOTE: building with coverage profiling is definitely for developers only."
1990 fi
1991 if test x$enable_verbose_mode = xyes; then
1992         echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
1993 fi
1994 if test x$enable_asserts = xyes; then
1995         echo "NOTE: building with assertions increases library size and decreases performance."
1996 fi
1997 if test x$enable_checks = xno; then
1998         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."
1999 fi