configure.ac 55.7 KB
Newer Older
1
dnl -*- mode: m4 -*-
2
AC_PREREQ([2.63])
3

4
m4_define([dbus_major_version], [1])
Simon McVittie's avatar
Simon McVittie committed
5
m4_define([dbus_minor_version], [5])
Simon McVittie's avatar
Simon McVittie committed
6
m4_define([dbus_micro_version], [8])
7 8
m4_define([dbus_version],
          [dbus_major_version.dbus_minor_version.dbus_micro_version])
9
AC_INIT([dbus],[dbus_version],[https://bugs.freedesktop.org/enter_bug.cgi?product=dbus],[dbus])
10

11
AC_CANONICAL_HOST
12

13
AC_CONFIG_HEADERS([config.h])
14 15
AC_CONFIG_MACRO_DIR([m4])

16
AM_INIT_AUTOMAKE([1.10 tar-ustar -Wno-portability])
17

18 19
GETTEXT_PACKAGE=dbus-1
AC_SUBST(GETTEXT_PACKAGE)
20
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
21

22
 ## must come before we use the $USE_MAINTAINER_MODE variable later
23 24
AM_MAINTAINER_MODE

25 26
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])

27 28
AC_DEFINE_UNQUOTED(DBUS_DAEMON_NAME,"dbus-daemon",[Name of executable])

29
# libtool versioning - this applies to libdbus
John Palmieri's avatar
John Palmieri committed
30 31 32
#
# See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
#
33 34

## increment if the interface has additions, changes, removals.
Simon McVittie's avatar
Simon McVittie committed
35
LT_CURRENT=9
36 37 38

## increment any time the source changes; set to
##  0 if you increment CURRENT
Simon McVittie's avatar
Simon McVittie committed
39
LT_REVISION=4
40 41 42 43

## increment if any interfaces have been added; set to 0
## if any interfaces have been changed or removed. removal has
## precedence over adding, so set to 0 if both happened.
Simon McVittie's avatar
Simon McVittie committed
44
LT_AGE=6
45

John Palmieri's avatar
John Palmieri committed
46 47 48 49
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)

50 51 52 53 54 55 56 57 58
DBUS_MAJOR_VERSION=dbus_major_version
DBUS_MINOR_VERSION=dbus_minor_version
DBUS_MICRO_VERSION=dbus_micro_version
DBUS_VERSION=dbus_major_version.dbus_minor_version.dbus_micro_version

AC_SUBST(DBUS_MAJOR_VERSION)
AC_SUBST(DBUS_MINOR_VERSION)
AC_SUBST(DBUS_MICRO_VERSION)
AC_SUBST(DBUS_VERSION)
John Palmieri's avatar
John Palmieri committed
59

60
AC_PROG_CC
61
AM_PROG_CC_C_O
62
AC_PROG_CXX
63
AC_USE_SYSTEM_EXTENSIONS
64 65
AC_ISC_POSIX
AC_HEADER_STDC
66
AC_C_INLINE
67
AM_PROG_LIBTOOL
68
AC_PROG_MKDIR_P
69 70
COMPILER_COVERAGE
COMPILER_OPTIMISATIONS
71

72 73 74 75
# Initialize libtool
LT_INIT([win32-dll])
LT_LANG([Windows Resource])

76 77
# Set some internal variables depending on the platform for later use.
dbus_win=no
78
dbus_cygwin=no
79 80
dbus_unix=no
case "${host}" in
81 82 83 84
    *-mingw32ce*)
        dbus_win=yes
        dbus_wince=yes
        ;;
85 86 87
    *-mingw32*)
        dbus_win=yes
        ;;
88 89 90 91
    *-cygwin*)
        dbus_cygwin=yes
        dbus_unix=yes
        ;;
92 93 94 95 96 97 98 99 100 101
    *)
        dbus_unix=yes
       ;;
esac

# Special defines for certain platforms
if test "$dbus_win" = yes; then
    AC_DEFINE(DBUS_WIN,1,[Defined if we run on a W32 API based system])
    BUILD_TIMESTAMP=`date --iso-8601=minutes`
    AC_SUBST(BUILD_TIMESTAMP)
102 103 104
    # Assume DBUS_VERSION is always three numbers
    BUILD_FILEVERSION=`echo "$DBUS_VERSION" | sed -e 's/\./,/g'`,0
    AC_SUBST(BUILD_FILEVERSION)
105 106 107 108
    AC_CHECK_TOOL(WINDRES, windres, no)
    if test "$WINDRES" = no; then
      AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
    fi
109 110
    if test "$dbus_wince" = yes; then
      AC_DEFINE(DBUS_WINCE,1,[Defined if we run on a W32 CE API based system])
111
      AC_DEFINE(_WIN32_WCE, 0x0502, [Defined to get newer W32 CE APIs])
112
    fi
113 114 115
else
    AC_DEFINE(DBUS_UNIX,1,[Defined if we run on a Unix-based system])
fi
116 117 118
if test "$dbus_cygwin" = yes; then
    AC_DEFINE(DBUS_CYGWIN,1,[Defined if we run on a cygwin API based system])
fi
119

120
AM_CONDITIONAL(DBUS_WIN, test "$dbus_win" = yes)
121
AM_CONDITIONAL(DBUS_WINCE, test "$dbus_wince" = yes)
122
AM_CONDITIONAL(DBUS_UNIX, test "$dbus_unix" = yes)
123
AM_CONDITIONAL(DBUS_CYGWIN, test "$dbus_cygwin" = yes)
124

125 126 127 128 129 130 131 132
AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no)
AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes)
AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto)
AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto)
AC_ARG_ENABLE(abstract-sockets, AS_HELP_STRING([--enable-abstract-sockets],[use abstract socket namespace (linux only)]),enable_abstract_sockets=$enableval,enable_abstract_sockets=auto)
AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto)
133
AC_ARG_ENABLE(libaudit,AS_HELP_STRING([--enable-libaudit],[build audit daemon support for SELinux]),enable_libaudit=$enableval,enable_libaudit=auto)
134
AC_ARG_ENABLE(dnotify, AS_HELP_STRING([--enable-dnotify],[build with dnotify support (linux only)]),enable_dnotify=$enableval,enable_dnotify=auto)
135
AC_ARG_ENABLE(inotify, AS_HELP_STRING([--enable-inotify],[build with inotify support (linux only)]),enable_inotify=$enableval,enable_inotify=auto)
136
AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support]),enable_kqueue=$enableval,enable_kqueue=auto)
John Palmieri's avatar
John Palmieri committed
137
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)
138
AC_ARG_ENABLE(userdb-cache, AS_HELP_STRING([--enable-userdb-cache],[build with userdb-cache support]),enable_userdb_cache=$enableval,enable_userdb_cache=yes)
Benjamin Reed's avatar
Benjamin Reed committed
139
AC_ARG_ENABLE(launchd, AS_HELP_STRING([--enable-launchd],[build with launchd auto-launch support]),enable_launchd=$enableval,enable_launchd=auto)
140

141
AC_ARG_WITH(xml, AS_HELP_STRING([--with-xml=[libxml/expat]],[XML library to use (libxml may be named libxml2 on some systems)]))
142 143 144 145 146 147
AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
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]))
AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check]))
AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon]))
AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon]))
AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip]))
John Palmieri's avatar
John Palmieri committed
148
AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
Benjamin Reed's avatar
Benjamin Reed committed
149
AC_ARG_WITH(launchd-agent-dir, AS_HELP_STRING([--with-launchd-agent-dir=[dirname]],[directory to put the launchd agent (default: /Library/LaunchAgents)]))
150
AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
John Palmieri's avatar
John Palmieri committed
151
AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
152

153 154 155 156 157 158 159 160 161 162 163 164 165
AC_ARG_ENABLE([embedded-tests],
  AS_HELP_STRING([--enable-embedded-tests],
    [enable unit test code in the library and binaries]),
  [], [enable_embedded_tests=$USE_MAINTAINER_MODE])
AC_ARG_ENABLE([modular-tests],
  AS_HELP_STRING([--enable-modular-tests],
    [enable modular regression tests (requires GLib)]),
  [], [enable_modular_tests=auto])
# --enable-tests overrides both --enable-embedded-tests and
# --enable-modular-tests
AC_ARG_ENABLE([tests],
  AS_HELP_STRING([--enable-tests],
    [enable/disable all tests, overriding embedded-tests/modular-tests]),
166 167 168 169 170 171 172 173
  [
  if test "x$enableval" = xyes; then
    AC_MSG_NOTICE([Full test coverage was requested with --enable-tests=yes])
    AC_MSG_NOTICE([This has many dependencies (GLib, dbus-glib, Python)])
  fi
  enable_embedded_tests=$enableval
  enable_modular_tests=$enableval
  ],
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
  [])

# DBUS_ENABLE_EMBEDDED_TESTS controls unit tests built in to .c files
# and also some stuff in the test/ subdir. DBUS_BUILD_TESTS was an older
# name for this.
AM_CONDITIONAL([DBUS_BUILD_TESTS], [test "x$enable_embedded_tests" = xyes])
AM_CONDITIONAL([DBUS_ENABLE_EMBEDDED_TESTS],
  [test "x$enable_embedded_tests" = xyes])
if test "x$enable_embedded_tests" = xyes; then
    AC_DEFINE([DBUS_ENABLE_EMBEDDED_TESTS], [1],
      [Define to build test code into the library and binaries])
    AC_DEFINE([DBUS_BUILD_TESTS], [1],
      [Define to build test code into the library and binaries])
fi

# DBUS_ENABLE_MODULAR_TESTS controls tests that work based on public API.
# These use GTest, from GLib, because life's too short. They're enabled by
# default (unless you don't have GLib), because they don't bloat the library
# or binaries.
if test "x$enable_modular_tests" != xno; then
194
  PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22, gio-2.0 >= 2.22],
195 196
    [],
    [if test "x$enable_modular_tests" = xyes; then
197 198
      AC_MSG_NOTICE([Full test coverage (--enable-modular-tests=yes or --enable-tests=yes) requires GLib])
      AC_MSG_ERROR([$GLIB_ERRORS])
199 200 201 202 203 204 205
    else # assumed to be "auto"
      enable_modular_tests=no
    fi])
  # If dbus-gmain.[ch] returned to libdbus then we wouldn't need this
  PKG_CHECK_MODULES([DBUS_GLIB], [dbus-glib-1],
    [],
    [if test "x$enable_modular_tests" = xyes; then
206 207
      AC_MSG_NOTICE([Full test coverage (--enable-modular-tests=yes or --enable-tests=yes) requires dbus-glib])
      AC_MSG_ERROR([$DBUS_GLIB_ERRORS])
208 209 210 211 212 213 214 215 216 217 218
    else # assumed to be "auto"
      enable_modular_tests=no
    fi])
  if test "x$enable_modular_tests" != xno; then
    # dependencies checked, switch from auto to yes
    enable_modular_tests=yes
  fi
fi
if test "x$enable_modular_tests" = xyes; then
  AC_DEFINE([DBUS_ENABLE_MODULAR_TESTS], [1],
    [Define to build independent test binaries (requires GLib)])
219
fi
220 221
AM_CONDITIONAL([DBUS_ENABLE_MODULAR_TESTS],
  [test "x$enable_modular_tests" = xyes])
222

223 224 225 226 227 228
AC_ARG_ENABLE([installed-tests],
  AS_HELP_STRING([--enable-installed-tests],
    [enable unit test code in the library and binaries]),
  [], [enable_installed_tests=no])
AM_CONDITIONAL([DBUS_ENABLE_INSTALLED_TESTS],
  [test "x$enable_installed_tests" = xyes])
229

230 231
if test "x$enable_tests" = xyes; then
  # full test coverage is required, Python is a hard dependency
232
  AC_MSG_NOTICE([Full test coverage (--enable-tests=yes) requires Python, dbus-python, pygobject])
233
  AM_PATH_PYTHON([2.6])
234 235 236 237 238 239 240
  AC_MSG_CHECKING([for Python modules for full test coverage])
  if "$PYTHON" -c "import dbus, gobject, dbus.mainloop.glib"; then
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
    AC_MSG_ERROR([cannot import dbus, gobject, dbus.mainloop.glib Python modules])
  fi
241 242 243 244 245
else
  # --enable-tests not given: do not abort if Python is missing
  AM_PATH_PYTHON([2.6], [], [:])
fi

246 247 248
if test x$enable_verbose_mode = xyes; then
    AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
fi
249

250 251
if test x$enable_asserts = xno; then
    AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
252
    DISABLE_UNUSED_WARNINGS="unused-label"
253 254 255
    R_DYNAMIC_LDFLAG=""
else
    # -rdynamic is needed for glibc's backtrace_symbols to work.
256
    # No clue how much overhead this adds, but it's useful
257 258 259 260 261 262 263
    # to do this on any assertion failure,
    # so for now it's enabled anytime asserts are (currently not
    # in production builds).

    # To get -rdynamic you pass -export-dynamic to libtool.
    AC_DEFINE(DBUS_BUILT_R_DYNAMIC,1,[whether -export-dynamic was passed to libtool])
    R_DYNAMIC_LDFLAG=-export-dynamic
264
fi
265 266
AC_SUBST(R_DYNAMIC_LDFLAG)

267 268
if test x$enable_checks = xno; then
    AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
269
    AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
270
    DISABLE_UNUSED_WARNINGS="unused-label"
271
fi
272

273 274 275 276
if test x$enable_userdb_cache = xyes; then
    AC_DEFINE(DBUS_ENABLE_USERDB_CACHE,1,[Build with caching of user data])
fi

277
if test x$enable_compiler_coverage = xyes; then
278 279 280 281
     ## so that config.h changes when you toggle gcov support
     AC_DEFINE_UNQUOTED(DBUS_GCOV_ENABLED, 1, [Defined if gcov is enabled to force a rebuild due to config.h changing])
fi

282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
# glibc21.m4 serial 3
dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

# Test for the GNU C Library, version 2.1 or newer.
# From Bruno Haible.

AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
  ac_cv_gnu_library_2_1,
  [AC_EGREP_CPP([Lucky GNU user],
    [
#include <features.h>
#ifdef __GNU_LIBRARY__
 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
  Lucky GNU user
 #endif
#endif
    ],
    ac_cv_gnu_library_2_1=yes,
    ac_cv_gnu_library_2_1=no)
  ]
)

307
#### Integer sizes
308

309 310 311 312 313 314 315 316
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64)

317 318 319 320 321 322
AC_ARG_WITH([64-bit],
  [AS_HELP_STRING([--without-64-bit],
    [If you have to use this option, please report it as a bug])],
  [],
  [with_64_bit=yes])

323 324 325
### See what our 64 bit type is called
AC_MSG_CHECKING([64-bit integer type])

326 327 328
case 8 in
$ac_cv_sizeof_int)
  dbusint64=int
329 330
  dbusint64_constant='(val)'
  dbusuint64_constant='(val)'
331
  dbusint64_printf_modifier='""'
332 333 334
  ;;
$ac_cv_sizeof_long)
  dbusint64=long
335 336
  dbusint64_constant='(val##L)'
  dbusuint64_constant='(val##UL)'
337
  dbusint64_printf_modifier='"l"'
338 339 340
  ;;
$ac_cv_sizeof_long_long)
  dbusint64='long long'
341 342
  dbusint64_constant='(val##LL)'
  dbusuint64_constant='(val##ULL)'
343 344 345 346 347
  # Ideally we discover what the format is, but this is
  # only used in verbose mode, so eh...
  if test x"$ac_cv_gnu_library_2_1" = xyes; then
    dbusint64_printf_modifier='"ll"'
  fi
348 349 350
  ;;
$ac_cv_sizeof___int64)
  dbusint64=__int64
351 352
  dbusint64_constant='(val##i64)'
  dbusuint64_constant='(val##ui64)'
353 354 355 356
  # See above case
  if test x"$ac_cv_gnu_library_2_1" = xyes; then
    dbusint64_printf_modifier='"ll"'
  fi
357 358 359
  ;;
esac

360 361 362
AS_IF(
  [test "x$with_64_bit" = xno],
  [
363 364 365 366
        DBUS_INT64_TYPE="no_int64_type_detected"
        DBUS_HAVE_INT64=0
        DBUS_INT64_CONSTANT=
        DBUS_UINT64_CONSTANT=
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
        AC_MSG_RESULT([disabled via --without-64-bit])
  ],
  dnl else if
  [test -z "$dbusint64"],
  [AC_MSG_RESULT([not found])
  AC_MSG_ERROR([Could not find a 64-bit integer type.

Please report a bug here with details of your platform and compiler:

    http://bugs.freedesktop.org/enter_bug.cgi?product=DBus&component=core

To compile D-Bus with all 64-bit integer types removed (not recommended), use
the option "--without-64-bit".

This option is likely to be removed in future, unless you report that your
platform needs it.])
  ],
  dnl else
  [
386 387 388 389
        DBUS_INT64_TYPE="$dbusint64"
        DBUS_HAVE_INT64=1
        DBUS_INT64_CONSTANT="$dbusint64_constant"
        DBUS_UINT64_CONSTANT="$dbusuint64_constant"
390 391 392
	if test x"$dbusint64_printf_modifier" != x; then
		AC_DEFINE_UNQUOTED(DBUS_INT64_PRINTF_MODIFIER, [$dbusint64_printf_modifier], [Define to printf modifier for 64 bit integer type])
	fi
393
        AC_MSG_RESULT($DBUS_INT64_TYPE)
394
  ])
395 396 397 398 399

AC_SUBST(DBUS_INT64_TYPE)
AC_SUBST(DBUS_INT64_CONSTANT)
AC_SUBST(DBUS_UINT64_CONSTANT)
AC_SUBST(DBUS_HAVE_INT64)
400

401 402 403 404 405
### see what 32-bit int is called
AC_MSG_CHECKING([32-bit integer type])

case 4 in
$ac_cv_sizeof_short)
406
  dbusint32=short
407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
  ;;
$ac_cv_sizeof_int)
  dbusint32=int
  ;;
$ac_cv_sizeof_long)
  dbusint32=long
  ;;
esac

if test -z "$dbusint32" ; then
        DBUS_INT32_TYPE="no_int32_type_detected"
        AC_MSG_ERROR([No 32-bit integer type found])
else
        DBUS_INT32_TYPE="$dbusint32"
        AC_MSG_RESULT($DBUS_INT32_TYPE)
fi

AC_SUBST(DBUS_INT32_TYPE)

### see what 16-bit int is called
AC_MSG_CHECKING([16-bit integer type])

case 2 in
$ac_cv_sizeof_short)
  dbusint16=short
  ;;
$ac_cv_sizeof_int)
  dbusint16=int
  ;;
esac

if test -z "$dbusint16" ; then
        DBUS_INT16_TYPE="no_int16_type_detected"
        AC_MSG_ERROR([No 16-bit integer type found])
else
        DBUS_INT16_TYPE="$dbusint16"
        AC_MSG_RESULT($DBUS_INT16_TYPE)
fi

AC_SUBST(DBUS_INT16_TYPE)

448
## byte order
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
case $host_os in
	darwin*)
		# check at compile-time, so that it is possible to build universal
		# (with multiple architectures at once on the compile line)
		AH_VERBATIM([WORDS_BIGENDIAN_DARWIN], [
			/* Use the compiler-provided endianness defines to allow universal compiling. */
			#if defined(__BIG_ENDIAN__)
			#define WORDS_BIGENDIAN 1
			#endif
		])
		;;
	*)
		AC_C_BIGENDIAN
		;;
esac
464 465 466 467 468 469 470

dnl **********************************
dnl *** va_copy checks (from GLib) ***
dnl **********************************
dnl we currently check for all three va_copy possibilities, so we get
dnl all results in config.log for bug reports.
AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[
471
	AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
472 473
#include <stdlib.h>
	static void f (int i, ...) {
474 475 476 477 478 479 480 481 482 483
	va_list args1, args2;
	va_start (args1, i);
	va_copy (args2, args1);
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
484
	}])],
485 486 487 488
	[dbus_cv_va_copy=yes],
	[dbus_cv_va_copy=no])
])
AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[
489
	AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
490 491
#include <stdlib.h>
	static void f (int i, ...) {
492 493 494 495 496 497 498 499 500 501
	va_list args1, args2;
	va_start (args1, i);
	__va_copy (args2, args1);
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
502
	}])],
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517
	[dbus_cv___va_copy=yes],
	[dbus_cv___va_copy=no])
])

if test "x$dbus_cv_va_copy" = "xyes"; then
  dbus_va_copy_func=va_copy
else if test "x$dbus_cv___va_copy" = "xyes"; then
  dbus_va_copy_func=__va_copy
fi
fi

if test -n "$dbus_va_copy_func"; then
  AC_DEFINE_UNQUOTED(DBUS_VA_COPY,$dbus_va_copy_func,[A 'va_copy' style function])
fi

518 519 520 521 522 523
AC_LANG_PUSH(C)
AC_CACHE_CHECK([whether va_lists can be copied by value],
	dbus_cv_va_val_copy,
	[AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[
	#include <stdarg.h>
524
	#include <stdlib.h>
525 526
]],
[[
527
	static void f (int i, ...) {
528 529 530 531 532 533 534 535 536 537
	va_list args1, args2;
	va_start (args1, i);
	args2 = args1;
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
538 539
	}
]])],
540 541 542 543
	[dbus_cv_va_val_copy=yes],
	[dbus_cv_va_val_copy=no],
	[dbus_cv_va_val_copy=yes])
])
544
AC_LANG_POP(C)
545 546 547 548 549 550

if test "x$dbus_cv_va_val_copy" = "xno"; then
  AC_DEFINE(DBUS_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
fi


551 552 553 554
#### Atomic integers

AC_CACHE_CHECK([whether $CC knows __sync_sub_and_fetch()],
  dbus_cv_sync_sub_and_fetch,
555 556
  [AC_LINK_IFELSE([
     AC_LANG_PROGRAM([[]], [[int a = 4; int b = __sync_sub_and_fetch(&a, 4); exit(b); ]])],
557 558 559 560 561 562 563 564
     [dbus_cv_sync_sub_and_fetch=yes],
     [dbus_cv_sync_sub_and_fetch=no])
  ])

if test "x$dbus_cv_sync_sub_and_fetch" = "xyes" ; then
   have_sync=1
else
   have_sync=0
565
fi
566 567

AC_DEFINE_UNQUOTED([DBUS_USE_SYNC], [$have_sync], [Use the gcc __sync extension])
568

569
#### Various functions
570
AC_SEARCH_LIBS(socket,[socket network])
571
AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
572

573
AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull)
574

575 576 577 578 579
AC_CHECK_HEADERS([syslog.h])
if test "x$ac_cv_header_syslog_h" = "xyes"; then
  AC_CHECK_DECLS([LOG_PERROR], [], [], [[#include <syslog.h>]])
fi

580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606
#### Check for broken poll; taken from Glib's configure

AC_MSG_CHECKING([for broken poll])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
    #include <stdlib.h>
    #include <fcntl.h>
    #include <poll.h>
    #ifdef HAVE_SYS_POLL_H
    #include <sys/poll.h>
    #endif
    int main(void) {
      struct pollfd fds[1];
      int fd;
      fd = open("/dev/null", 1);
      fds[0].fd = fd;
      fds[0].events = POLLIN;
      fds[0].revents = 0;
      if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
            exit(1);  /* Does not work for devices -- fail */
      }
      exit(0);
    }]])],
  [broken_poll=no],
  [broken_poll=yes
   AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
  [broken_poll="no (cross compiling)"])
AC_MSG_RESULT($broken_poll)
607

John Palmieri's avatar
 
John Palmieri committed
608
AC_MSG_CHECKING(for dirfd)
609
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
610 611
#include <sys/types.h>
#include <dirent.h>
612
]], [[
John Palmieri's avatar
 
John Palmieri committed
613 614 615 616
DIR *dirp;
dirp = opendir(".");
dirfd(dirp);
closedir(dirp);
617 618 619
]])],
[dbus_have_dirfd=yes],
[dbus_have_dirfd=no])
John Palmieri's avatar
 
John Palmieri committed
620 621
AC_MSG_RESULT($dbus_have_dirfd)
if test "$dbus_have_dirfd" = yes; then
622
	AC_DEFINE(HAVE_DIRFD,1,[Have dirfd function])
623
else
624
	AC_MSG_CHECKING(for DIR *dirp->dd_fd)
625
	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
626 627
#include <sys/types.h>
#include <dirent.h>
628
	]], [[
629 630 631 632 633
DIR *dirp;
int fd;
dirp = opendir(".");
fd = dirp->dd_fd;
closedir(dirp);
634 635 636
        ]])],
        [dbus_have_ddfd=yes],
        [dbus_have_ddfd=no])
637 638 639 640
	AC_MSG_RESULT($dbus_have_ddfd)
	if test "$dbus_have_ddfd" = yes; then
		AC_DEFINE(HAVE_DDFD,1,[Have the ddfd member of DIR])
	fi
641
fi
642

643 644
AC_CHECK_HEADERS(sys/resource.h)

Tor Lillqvist's avatar
Tor Lillqvist committed
645 646
AC_CHECK_HEADERS(dirent.h)

647 648
AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])

649 650
AC_CHECK_HEADERS(errno.h)

651 652 653 654
AC_CHECK_HEADERS(signal.h)

AC_CHECK_HEADERS(locale.h)

655 656
AC_CHECK_HEADERS(byteswap.h)

657 658
AC_CHECK_HEADERS(unistd.h)

659 660
AC_CHECK_HEADERS(ws2tcpip.h)

661 662
AC_CHECK_HEADERS(wspiapi.h)

663 664 665 666 667 668
# Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
#
case $host_os in
    solaris*)
       CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
esac
669

670 671 672 673 674
# checking for a posix version of getpwnam_r
# if we are cross compiling and can not run the test
# assume getpwnam_r is the posix version
# it is up to the person cross compiling to change
# this behavior if desired
675
AC_LANG_PUSH(C)
676 677
AC_CACHE_CHECK([for posix getpwnam_r],
		ac_cv_func_posix_getpwnam_r,
678 679
		[AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[
680 681
#include <errno.h>
#include <pwd.h>
682 683
]],
[[
684 685 686 687
    char buffer[10000];
    struct passwd pwd, *pwptr = &pwd;
    int error;
    errno = 0;
688
    error = getpwnam_r ("", &pwd, buffer,
689
                        sizeof (buffer), &pwptr);
690 691
   return (error < 0 && errno == ENOSYS)
	   || error == ENOSYS;
692
]])],
693
	[ac_cv_func_posix_getpwnam_r=yes],
694
	[ac_cv_func_posix_getpwnam_r=no],
695 696 697 698
        [ac_cv_func_posix_getpwnam_r=yes]
)])
AC_LANG_POP(C)

699
if test "$ac_cv_func_posix_getpwnam_r" = yes; then
700 701
        AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
                [Have POSIX function getpwnam_r])
702
else
703 704
        AC_CACHE_CHECK([for nonposix getpwnam_r],
                ac_cv_func_nonposix_getpwnam_r,
705
                [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pwd.h>]], [[char buffer[10000];
706 707
                        struct passwd pwd;
                        getpwnam_r ("", &pwd, buffer,
708
                                        sizeof (buffer));]])],
709 710 711 712 713 714
                        [ac_cv_func_nonposix_getpwnam_r=yes],
                        [ac_cv_func_nonposix_getpwnam_r=no])])
                if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
                AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
                        [Have non-POSIX function getpwnam_r])
        fi
715
fi
716

717 718
dnl check for socklen_t
AC_MSG_CHECKING(whether socklen_t is defined)
719
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
720 721 722
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
723
]], [[
724 725
socklen_t foo;
foo = 1;
726 727 728
]])],
[dbus_have_socklen_t=yes],
[dbus_have_socklen_t=no])
729 730 731 732 733 734
AC_MSG_RESULT($dbus_have_socklen_t)

if test "x$dbus_have_socklen_t" = "xyes"; then
    AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
fi

735
dnl check for writev header and writev function so we're
736 737 738
dnl good to go if HAVE_WRITEV gets defined.
AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])

739 740 741
dnl needed on darwin for NAME_MAX
AC_CHECK_HEADERS(sys/syslimits.h)

742 743 744
dnl Make it easy to check if we have MSG_NOSIGNAL without actually having to include sys/socket.h
AC_CHECK_DECLS([MSG_NOSIGNAL], [], [], [[ #include <sys/socket.h> ]])

745 746
dnl check for flavours of varargs macros (test from GLib)
AC_MSG_CHECKING(for ISO C99 varargs macros in C)
747
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
748 749 750
int a(int p1, int p2, int p3);
#define call_a(...) a(1,__VA_ARGS__)
call_a(2,3);
751 752 753
]])],
[dbus_have_iso_c_varargs=yes],
[dbus_have_iso_c_varargs=no])
754 755 756
AC_MSG_RESULT($dbus_have_iso_c_varargs)

AC_MSG_CHECKING(for GNUC varargs macros)
757
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
758 759 760
int a(int p1, int p2, int p3);
#define call_a(params...) a(1,params)
call_a(2,3);
761 762 763
]])],
[dbus_have_gnuc_varargs=yes],
[dbus_have_gnuc_varargs=no])
764 765 766 767 768 769 770 771 772 773
AC_MSG_RESULT($dbus_have_gnuc_varargs)

dnl Output varargs tests
if test x$dbus_have_iso_c_varargs = xyes; then
    AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
fi
if test x$dbus_have_gnuc_varargs = xyes; then
    AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
fi

774 775
dnl Check for various credentials.
AC_MSG_CHECKING(for struct cmsgcred)
Simon McVittie's avatar
Simon McVittie committed
776
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
777 778
#include <sys/types.h>
#include <sys/socket.h>
Simon McVittie's avatar
Simon McVittie committed
779
]], [[
780 781 782
struct cmsgcred cred;

cred.cmcred_pid = 0;
Simon McVittie's avatar
Simon McVittie committed
783 784 785
]])],
[dbus_have_struct_cmsgcred=yes],
[dbus_have_struct_cmsgcred=no])
786 787 788 789 790
AC_MSG_RESULT($dbus_have_struct_cmsgcred)

if test x$dbus_have_struct_cmsgcred = xyes; then
    AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
fi
791

792
AC_CHECK_FUNCS(getpeerucred getpeereid)
793

794
AC_CHECK_FUNCS(pipe2 accept4)
795

796 797
#### Abstract sockets

798
if test x$enable_abstract_sockets = xauto; then
799
AC_LANG_PUSH(C)
800
warn_on_xcompile=no
801 802 803
AC_CACHE_CHECK([abstract socket namespace],
		ac_cv_have_abstract_sockets,
		[AC_RUN_IFELSE([AC_LANG_PROGRAM(
804 805 806 807 808 809 810 811 812 813
[[
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
]],
[[
814
  size_t slen;
815 816
  int listen_fd;
  struct sockaddr_un addr;
817

818
  listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
819

820 821 822 823 824 825 826 827 828
  if (listen_fd < 0)
    {
      fprintf (stderr, "socket() failed: %s\n", strerror (errno));
      exit (1);
    }

  memset (&addr, '\0', sizeof (addr));
  addr.sun_family = AF_UNIX;
  strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
829 830 831 832
  /* SUN_LEN uses strlen() so need to calculate it before adding \0 at the
   * beginning.
   */
  slen = SUN_LEN(&addr);
833
  addr.sun_path[0] = '\0'; /* this is what makes it abstract */
834

835
  if (bind (listen_fd, (struct sockaddr*) &addr, slen) < 0)
836
    {
837
       fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
838 839 840
                strerror (errno));
       exit (1);
    }
841
  else
842 843
    exit (0);
]])],
844
              [ac_cv_have_abstract_sockets=yes],
845 846 847 848 849
              [ac_cv_have_abstract_sockets=no],
              [
                ac_cv_have_abstract_sockets=no
                warn_on_xcompile=yes
              ]
850
)])
851 852 853
if test x$warn_on_xcompile = xyes ; then
  AC_MSG_WARN([Cannot check for abstract sockets when cross-compiling, please use --enable-abstract-sockets])
fi
854
AC_LANG_POP(C)
855
fi
856 857

if test x$enable_abstract_sockets = xyes; then
858
    if test x$ac_cv_have_abstract_sockets = xno; then
859 860 861 862 863
	AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
    fi
fi

if test x$enable_abstract_sockets = xno; then
864
   ac_cv_have_abstract_sockets=no;
865 866
fi

867
if test x$ac_cv_have_abstract_sockets = xyes ; then
868
   DBUS_PATH_OR_ABSTRACT=abstract
869
   AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
870 871 872 873
else
   DBUS_PATH_OR_ABSTRACT=path
fi

874 875
# this is used in addresses to prefer abstract, e.g.
# unix:path=/foo or unix:abstract=/foo
876 877
AC_SUBST(DBUS_PATH_OR_ABSTRACT)

878 879
PKG_PROG_PKG_CONFIG

880 881 882
#### Sort out XML library

# see what we have
883
AC_CHECK_LIB(expat, XML_ParserCreate_MM,
884 885 886 887 888 889 890 891 892 893
             [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
             have_expat=false)

# see what we want to use
dbus_use_libxml=false
dbus_use_expat=false
if test x$with_xml = xexpat; then
        if ! $have_expat ; then
           AC_MSG_ERROR([Explicitly requested expat but expat not found])
        fi
894
        dbus_use_expat=true
895
elif test x$with_xml = xlibxml; then
John Palmieri's avatar
John Palmieri committed
896
        PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.6.0, have_libxml=true, have_libxml=false)
897
        if ! $have_libxml ; then
898
           AC_MSG_ERROR([Explicitly requested libxml but libxml not found])
899
        fi
900
        dbus_use_libxml=true
901
else
902
        ### expat is the default because libxml can't currently survive
903 904
        ### our brutal OOM-handling unit test setup.
        ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
905 906
        if test x$have_expat = xfalse; then
                AC_MSG_ERROR([Could not find expat.h, check config.log for failed attempts])
907
        fi
908 909 910 911
	### By default, only use Expat since it's tested and known to work.  If you're a
	### general-purpose OS vendor, please don't enable libxml.  For embedded use
	### if your OS is built around libxml, that's another case.
	dbus_use_expat=true
912 913 914 915 916 917 918 919 920 921 922 923 924
fi

AM_CONDITIONAL(DBUS_USE_EXPAT, $dbus_use_expat)
AM_CONDITIONAL(DBUS_USE_LIBXML, $dbus_use_libxml)

if $dbus_use_expat; then
   XML_LIBS=-lexpat
   XML_CFLAGS=
fi
if $dbus_use_libxml; then
   XML_LIBS=$LIBXML_LIBS
   XML_CFLAGS=$LIBXML_CFLAGS
fi
925 926
AC_SUBST([XML_CFLAGS])
AC_SUBST([XML_LIBS])
927

928
# Thread lib detection
929
AC_CHECK_FUNC(pthread_cond_timedwait,[AC_CHECK_LIB(pthread,pthread_cond_timedwait,
930
                                                    [THREAD_LIBS="-lpthread"])])
931 932 933 934 935 936
save_libs="$LIBS"
LIBS="$LIBS $THREAD_LIBS"
AC_CHECK_FUNC(pthread_condattr_setclock,have_pthread_condattr_setclock=true,have_pthread_condattr_setclock=false)
if test x$have_pthread_condattr_setclock = xtrue; then
    AC_SEARCH_LIBS([clock_getres],[rt],[THREAD_LIBS="$THREAD_LIBS -lrt"])
    AC_MSG_CHECKING([for CLOCK_MONOTONIC])
937
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>
938
#include <pthread.h>
939
]], [[
940 941 942 943 944
struct timespec monotonic_timer;
pthread_condattr_t attr;
pthread_condattr_init (&attr);
pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
clock_getres (CLOCK_MONOTONIC,&monotonic_timer);
945 946 947
]])],
[have_clock_monotonic=true],
[have_clock_monotonic=false])
948 949 950 951 952 953 954 955
if test x$have_clock_monotonic = xtrue; then
    AC_MSG_RESULT([found])
    AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1, [Define if we have CLOCK_MONOTONIC])
else
    AC_MSG_RESULT([not found])
fi
fi
LIBS="$save_libs"
956

957 958
AC_SUBST([THREAD_LIBS])

959 960 961 962 963
# SELinux detection
if test x$enable_selinux = xno ; then
    have_selinux=no;
else
    # See if we have SELinux library
964
    AC_CHECK_LIB(selinux, is_selinux_enabled,
965 966
                 have_selinux=yes, have_selinux=no)

John Palmieri's avatar
John Palmieri committed
967
    # see if we have the SELinux header with the new D-Bus stuff in it
968
    if test x$have_selinux = xyes ; then
969
        AC_MSG_CHECKING([for DBUS Flask permissions in selinux/av_permissions.h])
970 971 972 973 974 975 976
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <selinux/av_permissions.h>]],
                          [[#ifdef DBUS__ACQUIRE_SVC return 0;
			    #else
			    #error DBUS__ACQUIRE_SVC not defined
			    #endif]])],
                          [have_selinux=yes],
                          [have_selinux=no])
977
	AC_MSG_RESULT($have_selinux)
978 979 980 981 982 983
    fi

    if test x$enable_selinux = xauto ; then
        if test x$have_selinux = xno ; then
                AC_MSG_WARN([Sufficiently new SELinux library not found])
        fi
984
    else
985 986 987 988 989 990 991 992 993
        if test x$have_selinux = xno ; then
                AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
        fi
    fi
fi

AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)

if test x$have_selinux = xyes ; then
994 995 996 997 998 999
    # the selinux code creates threads
    # which requires libpthread even on linux
    AC_CHECK_FUNC(pthread_create,,[AC_CHECK_LIB(pthread,pthread_create,
                                                [SELINUX_THREAD_LIBS="-lpthread"])])

    SELINUX_LIBS="-lselinux $SELINUX_THREAD_LIBS"
1000 1001 1002 1003 1004
    AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
else
    SELINUX_LIBS=
fi

1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
# inotify checks
if test x$enable_inotify = xno ; then
    have_inotify=no;
else
    AC_CHECK_HEADERS(sys/inotify.h, have_inotify=yes, have_inotify=no)
fi

dnl check if inotify backend is enabled
if test x$have_inotify = xyes; then
   AC_DEFINE(DBUS_BUS_ENABLE_INOTIFY,1,[Use inotify])
1015
   AC_CHECK_FUNCS(inotify_init1)
1016 1017 1018 1019
fi

AM_CONDITIONAL(DBUS_BUS_ENABLE_INOTIFY, test x$have_inotify = xyes)

1020
# dnotify checks
1021 1022 1023
if test x$enable_dnotify = xno ; then
    have_dnotify=no;
else
1024
    if test x$have_inotify = xno -a x$host_os = xlinux-gnu -o x$host_os = xlinux; then
1025
        have_dnotify=yes;
1026 1027 1028
    else
        have_dnotify=no;
    fi
1029
fi
1030

1031
dnl check if dnotify backend is enabled
1032
if test x$have_dnotify = xyes; then
1033 1034 1035
   AC_DEFINE(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX,1,[Use dnotify on Linux])
fi

John Palmieri's avatar
John Palmieri committed
1036 1037 1038 1039
AM_CONDITIONAL(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX, test x$have_dnotify = xyes)

# kqueue checks
if test x$enable_kqueue = xno ; then
1040
    have_kqueue=no
John Palmieri's avatar
John Palmieri committed
1041
else
1042 1043 1044 1045 1046 1047 1048
    have_kqueue=yes
    AC_CHECK_HEADER(sys/event.h, , have_kqueue=no)
    AC_CHECK_FUNC(kqueue, , have_kqueue=no)

    if test x$enable_kqueue = xyes -a x$have_kqueue = xno; then
        AC_MSG_ERROR(kqueue support explicitly enabled but not available)
    fi
John Palmieri's avatar
John Palmieri committed
1049 1050 1051 1052
fi

dnl check if kqueue backend is enabled
if test x$have_kqueue = xyes; then
1053
   AC_DEFINE(DBUS_BUS_ENABLE_KQUEUE,1,[Use kqueue])
John Palmieri's avatar
John Palmieri committed
1054 1055
fi

1056
AM_CONDITIONAL(DBUS_BUS_ENABLE_KQUEUE, test x$have_kqueue = xyes)
John Palmieri's avatar
John Palmieri committed
1057

Benjamin Reed's avatar
Benjamin Reed committed
1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089
# launchd checks
if test x$enable_launchd = xno ; then
    have_launchd=no
else
    have_launchd=yes
    AC_CHECK_HEADER([launch.h], , have_launchd=no)
    AC_PATH_PROG([LAUNCHCTL], [launchctl])
    if test "x$LAUNCHCTL" = "x"; then
        have_launchd=no
    fi

    if test x$enable_launchd = xyes && test x$have_launchd = xno ; then
        AC_MSG_ERROR([launchd support explicitly enabled but not available])
    fi
fi

dnl check if launchd is enabled
if test x$have_launchd = xyes; then
    AC_DEFINE(DBUS_ENABLE_LAUNCHD,1,[Use launchd autolaunch])
fi

AM_CONDITIONAL(DBUS_ENABLE_LAUNCHD, test x$have_launchd = xyes)

#### Directory to place launchd agent file
if test "x$with_launchd_agent_dir" = "x"; then
   LAUNCHD_AGENT_DIR="/Library/LaunchAgents"
else
   LAUNCHD_AGENT_DIR="$with_launchd_agent_dir"
fi

AC_SUBST(LAUNCHD_AGENT_DIR)

John Palmieri's avatar
John Palmieri committed
1090 1091 1092 1093
dnl console owner file
if test x$enable_console_owner_file = xno ; then
    have_console_owner_file=no;
else
1094
    case $host_os in
John Palmieri's avatar
John Palmieri committed
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
    solaris*)
        have_console_owner_file=yes;
        AC_DEFINE(HAVE_CONSOLE_OWNER_FILE,1,[Have console owner file])
        ;;
    *)
        have_console_owner_file=no;;
    esac
fi

AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)

1106 1107 1108 1109 1110
# libaudit detection
if test x$enable_libaudit = xno ; then
    have_libaudit=no;
else
    # See if we have audit daemon & capabilities library
1111
    AC_CHECK_LIB(audit, audit_log_user_avc_message,
1112 1113
                 have_libaudit=yes, have_libaudit=no)
    if test x$have_libaudit = xyes ; then
1114
        AC_CHECK_LIB(cap-ng, capng_clear,
1115 1116 1117 1118 1119 1120 1121
                 have_libaudit=yes, have_libaudit=no)
    fi
fi

AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes)

if test x$have_libaudit = xyes ; then
1122
    SELINUX_LIBS="$SELINUX_LIBS -laudit -lcap-ng"
1123 1124 1125
    AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
fi

1126 1127 1128
AC_SUBST([SELINUX_LIBS])

# Check for ADT API (Solaris Basic Security Mode auditing)
1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143
AC_MSG_CHECKING(for ADT API)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <bsm/adt.h>
adt_user_context = ADT_USER;
]], [[]])], [ check_adt_audit=yes ], [ check_adt_audit=no ])

if test ${check_adt_audit} = yes
then
   AC_DEFINE([HAVE_ADT], [], [Adt audit API])
   ADT_LIBS="-lbsm"
   LIBS="-lbsm $LIBS"
   AC_MSG_RESULT(yes)
else
   AC_MSG_RESULT(no)
fi
1144
AC_SUBST([ADT_LIBS])
1145

1146 1147 1148 1149 1150 1151 1152 1153 1154 1155
# Check for SCM_RIGHTS
AC_MSG_CHECKING([for SCM_RIGHTS])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <sys/socket.h>
#include <sys/un.h>
static int x = SCM_RIGHTS;
]], [[]])],
[ AC_MSG_RESULT([supported])
  AC_DEFINE([HAVE_UNIX_FD_PASSING], [1], [Supports sending UNIX file descriptors]) ],
[ AC_MSG_RESULT([not supported]) ])
1156

1157 1158
NETWORK_libs=
if test x$dbus_win = xyes ; then
1159 1160 1161 1162 1163
  if test x$dbus_wince = xyes ; then
    NETWORK_libs="-lws2"
  else
    NETWORK_libs="-lws2_32"
  fi
1164 1165
fi

1166 1167
AC_SUBST([NETWORK_libs])

1168
#### Set up final flags
1169 1170
LIBDBUS_LIBS="$THREAD_LIBS $NETWORK_libs"
AC_SUBST([LIBDBUS_LIBS])
1171

1172
### X11 detection
1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
DBUS_X_LIBS=
DBUS_X_CFLAGS=

AC_ARG_ENABLE([x11-autolaunch],
  AS_HELP_STRING([--enable-x11-autolaunch], [build with X11 auto-launch support]),
  [], [enable_x11_autolaunch=auto])

if test "x$dbus_win" = xyes; then
    if test "x$enable_x11_autolaunch" = xyes; then
        AC_MSG_ERROR([X11 auto-launch is not supported on Windows])
    fi
1184

1185 1186
    enable_x11_autolaunch=no
    have_x11=no
1187
else
1188 1189 1190 1191 1192 1193 1194 1195 1196
    AC_PATH_XTRA

    if test "x$no_x" = xyes; then
        have_x11=no
    else
        have_x11=yes
        DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
        DBUS_X_CFLAGS="$X_CFLAGS"
    fi
1197 1198
fi

1199 1200
if test "x$enable_x11_autolaunch,$have_x11" = xyes,no; then
    AC_MSG_ERROR([X11 auto-launch requires X headers/libraries])
1201
else
1202
    # move from "auto" to "yes" or "no" if necessary
1203 1204 1205 1206 1207 1208 1209
    if test "x$enable_x11_autolaunch" != xno; then
        enable_x11_autolaunch="$have_x11"
    fi
fi

if test "x$have_x11" = xyes ; then
   AC_DEFINE([DBUS_BUILD_X11], [1], [Define to build X11 functionality])
1210 1211
fi

1212
if test "x$enable_x11_autolaunch" = xyes ; then
1213
   AC_DEFINE([DBUS_ENABLE_X11_AUTOLAUNCH], [1], [Define to enable X11 auto-launch])
1214
fi
1215

1216 1217
AC_SUBST([DBUS_X_CFLAGS])
AC_SUBST([DBUS_X_LIBS])
1218 1219 1220 1221

#### gcc warning flags

cc_supports_flag() {
1222 1223 1224 1225 1226 1227 1228
  AC_MSG_CHECKING(whether $CC supports "$*")
  save_CFLAGS="$CFLAGS"
  CFLAGS="$*"
  AC_TRY_COMPILE([], [], [rc=yes], [rc=no])
  CFLAGS="$save_CFLAGS"
  AC_MSG_RESULT([$rc])
  test "x$rc" = xyes
1229 1230
}

1231 1232 1233 1234 1235 1236 1237
TP_COMPILER_WARNINGS([WARNING_CFLAGS],
  dnl Use -Werror by default if:
  dnl - we're not on Windows (too many warnings), and
  dnl - we're in maintainer mode (a D-Bus developer, not a distro or end-user)
  dnl Override with --enable-Werror or --disable-Werror
  [test x$dbus_win != xyes -a x$dbus_cygwin != xyes -a x$USE_MAINTAINER_MODE = xyes],

1238
  dnl Enable these warnings if possible:
1239
  [all \
1240
   extra \
1241 1242 1243 1244 1245 1246 1247 1248 1249 1250
   char-subscripts \
   missing-declarations \
   missing-prototypes \
   nested-externs \
   pointer-arith \
   cast-align \
   no-address \
   float-equal \
   declaration-after-statement \
  ],
1251

1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267
  dnl Disable these warnings if possible, make them non-fatal if possible,
  dnl and don't enable -Werror unless we succeeded.
  dnl
  dnl Intentional:
  dnl - $DISABLE_UNUSED_WARNINGS disables unused-label warnings if not
  dnl   checking or not asserting
  dnl - missing field initializers being 0 is a C feature, not a bug
  dnl - unused-parameter is to make writing callbacks less annoying
  dnl
  dnl To be fixed one day:
  dnl - sign-compare and pointer-sign are workarounds for fd.o #17433
  dnl - type-limits is probably a bug too, but having the rest of -Wextra
  dnl   is better than nothing
  [$DISABLE_UNUSED_WARNINGS \
   missing-field-initializers \
   unused-parameter \
1268 1269
   sign-compare \
   pointer-sign \
1270
   type-limits \
1271
  ])
1272

1273 1274 1275 1276
if test "x$GCC" = "xyes"; then
  # We're treating -fno-common like a warning: it makes the linker more
  # strict, because on some systems the linker is *always* this strict
  TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-common])
1277

1278 1279
  # http://bugs.freedesktop.org/show_bug.cgi?id=10599
  TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-strict-aliasing])
1280

1281 1282 1283
  if test "x$enable_ansi" = "xyes"; then
    TP_ADD_COMPILER_FLAG([WARNING_CFLAGS],
      [-ansi -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -pedantic])
1284
  fi
1285 1286
fi

1287 1288 1289 1290 1291
dnl In principle we should put WARNING_CFLAGS in each Makefile.am like
dnl telepathy-glib does, since CFLAGS is meant to be reserved for the user...
dnl but prepending to CFLAGS (so the user can override it with later CFLAGS)
dnl is the next best thing
CFLAGS="$WARNING_CFLAGS $CFLAGS"
1292 1293 1294

case $host_os in
    solaris*)
1295 1296
        # Solaris' C library apparently needs these runes to be threadsafe...
        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT"
1297 1298 1299
        # ... and this opt-in to get file descriptor passing support
        CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500"
        ;;
1300
esac
1301

1302
### Doxygen Documentation
1303 1304 1305

AC_PATH_PROG(DOXYGEN, doxygen, no)

1306
AC_MSG_CHECKING([whether to build Doxygen documentation])
1307

1308 1309
if test x$DOXYGEN = xno ; then
    have_doxygen=no
1310
else
1311
    have_doxygen=yes
1312 1313
fi

1314 1315 1316
if test x$enable_doxygen_docs = xauto ; then
    if test x$have_doxygen = xno ; then
        enable_doxygen_docs=no
1317
    else
1318
        enable_doxygen_docs=yes
1319 1320 1321
    fi
fi

1322 1323 1324
if test x$enable_doxygen_docs = xyes; then
    if test x$have_doxygen = xno; then
	AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
1325 1326 1327
    fi
fi

1328
AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
1329
AC_MSG_RESULT($enable_doxygen_docs)
1330

1331
AC_CHECK_PROGS([XSLTPROC], [xsltproc])
1332
AM_CONDITIONAL([DBUS_HAVE_XSLTPROC], [test "x$XSLTPROC" != "x"])
1333

1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360
### XML Documentation

AC_PATH_PROG(XMLTO, xmlto, no)

AC_MSG_CHECKING([whether to build XML documentation])

if test x$XMLTO = xno ; then
    have_xmlto=no
else
    have_xmlto=yes
fi

if test x$enable_xml_docs = xauto ; then
    if test x$have_xmlto = xno ; then
        enable_xml_docs=no
    else
        enable_xml_docs=yes
    fi
fi

if test x$enable_xml_docs = xyes; then
    if test x$have_xmlto = xno; then
	AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
    fi
fi

AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
1361
AC_MSG_RESULT($enable_xml_docs)
1362

1363 1364 1365 1366
AC_PATH_PROG([MAN2HTML], [man2html])
AC_ARG_VAR([MAN2HTML], [Path to man2html (optional)])
AM_CONDITIONAL(DBUS_HAVE_MAN2HTML, test x$MAN2HTML != x)

1367 1368 1369 1370
AM_CONDITIONAL(DBUS_CAN_UPLOAD_DOCS,
    test x$enable_doxygen_docs = xyes -a x$enable_xml_docs = xyes -a \
         x$MAN2HTML != x)

1371
#### Have to go $localstatedir->$prefix/var->/usr/local/var
1372

1373
#### find the actual value for $prefix that we'll end up with
1374 1375
##   (I know this is broken and should be done in the Makefile, but
##    that's a major pain and almost nobody actually seems to care)
1376
AS_AC_EXPAND(EXPANDED_PREFIX, "$prefix")
1377 1378 1379 1380
AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
1381
AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
1382
AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
1383