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