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