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