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