2 # This file is part of elogind.
4 # Copyright 2010-2012 Lennart Poettering
5 # Copyright 2010-2012 Kay Sievers
7 # elogind is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU Lesser General Public License as published by
9 # the Free Software Foundation; either version 2.1 of the License, or
10 # (at your option) any later version.
12 # elogind is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public License
18 # along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 [https://github.com/elogind/elogind/issues],
26 [https://github.com/elogind/elogind])
28 AC_CONFIG_SRCDIR([src/login/logind.c])
29 AC_CONFIG_MACRO_DIR([m4])
30 AC_CONFIG_HEADERS([config.h])
31 AC_CONFIG_AUX_DIR([build-aux])
33 AC_USE_SYSTEM_EXTENSIONS
35 AC_PREFIX_DEFAULT([/usr])
36 AM_MAINTAINER_MODE([enable])
37 AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax no-dist-gzip dist-xz subdir-objects parallel-tests])
38 AM_SILENT_RULES([yes])
40 AC_DEFINE_UNQUOTED([CANONICAL_HOST], "$host", [Canonical host string.])
45 AS_IF([test "x$ax_cv_c_compiler_vendor" = "xgnu"], [
46 AC_CHECK_TOOLS([AR], [gcc-ar ar], [:])
47 AC_CHECK_TOOLS([NM], [gcc-nm nm], [:])
48 AC_CHECK_TOOLS([RANLIB], [gcc-ranlib ranlib], [:])
52 LT_INIT([disable-static])
54 AS_IF([test "x$enable_static" = "xyes"], [AC_MSG_ERROR([--enable-static is not supported by elogind])])
55 AS_IF([test "x$enable_largefile" = "xno"], [AC_MSG_ERROR([--disable-largefile is not supported by elogind])])
57 SET_ARCH(X86_64, x86_64*)
60 SET_ARCH(AARCH64, aarch64*)
62 # i18n stuff for the PolicyKit policy files, check whether intltool can be found, disable NLS otherwise
63 AC_CHECK_PROG(intltool_found, [intltool-merge], [yes], [no])
64 AS_IF([test x"$intltool_found" != xyes],
65 [AS_IF([test x"$enable_nls" = xyes],
66 [AC_MSG_ERROR([--enable-nls requested but intltool not found])],
67 [AS_IF([test x"$enable_nls" != xno],
68 [AC_MSG_WARN([*** Disabling NLS support because intltool was not found])
74 AS_IF([test x"$enable_nls" != xno -o "x$enable_polkit" != xno], [
75 # intltoolize greps for '^(AC|IT)_PROG_INTLTOOL', so it needs to be on its own line
76 IT_PROG_INTLTOOL([0.40.0])
79 AS_IF([test -z "$INTLTOOL_POLICY_RULE"], [
80 # If intltool is not available, provide a dummy rule to fail generation of %.policy files with a meaningful error message
81 INTLTOOL_POLICY_RULE='%.policy: %.policy.in ; @echo " ITMRG " $@ && echo "*** intltool support required to build target $@" && false'
82 AC_SUBST(INTLTOOL_POLICY_RULE)
85 GETTEXT_PACKAGE=elogind
86 AC_SUBST(GETTEXT_PACKAGE)
87 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [elogind])
95 AC_PATH_PROG([M4], [m4])
96 AC_PATH_PROG([XSLTPROC], [xsltproc])
98 AC_PATH_PROG([HALT], [halt], [halt])
99 AC_PATH_PROG([REBOOT], [reboot], [reboot])
100 AC_PATH_PROG([KEXEC], [kexec], [/usr/sbin/kexec], [$PATH:/usr/sbin:/sbin])
102 AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])])
106 AC_CHECK_TOOL(OBJCOPY, objcopy)
107 AC_CHECK_TOOL(GPERF, gperf)
108 if test -z "$GPERF" ; then
109 AC_MSG_ERROR([*** gperf not found])
113 # ------------------------------------------------------------------------------
114 # Let users set the cgroup controller to use, in case the target controller
115 # isn't currently running the show.
116 # Example: Gentoo Linux, user wants to switch from systemd to openrc+elogind,
117 # and emerges elogind before having booted the machine with openrc.
118 # See: https://github.com/elogind/elogind/issues/18
120 AC_ARG_WITH([cgroup-controller],
121 AS_HELP_STRING([--with-cgroup-controller=name],
122 [Set the name of the cgroup controller to use.
123 Use this when the autodetection fails, or you plan to use your system with a different controller than the one in place now.
124 The value 'auto' (default) detects the running controller.
125 The values 'none' and 'elogind' will cause elogind to be its own (very limited) controller.
126 When elogind shall be its own controller, there *MUST NOT* be any other controller running!
127 Another popular controller would be 'openrc'.]),
128 [with_cgroupctrl=$withval],
129 [with_cgroupctrl=auto])
131 # ------------------------------------------------------------------------------
132 # Find running cgroup controller, if none was set
133 AS_IF( [test "x$with_cgroupctrl" = "xauto"], [
134 AS_IF([test -f /proc/self/cgroup], [
135 # If the init system is a cgroup controler, it will be position 1.
136 # Secondary controllers, like cgmanager, do not work.
137 with_cgroupctrl=`grep "^1:name=" /proc/self/cgroup | \
138 sed -n 's/.*=//p' | sed -e 's/:.*$//'`
139 AS_IF( [test -z "$with_cgroupctrl"], [
140 # Try to be our own cgroup controller
141 with_cgroupctrl="elogind"
144 # 'auto' but no cgroup fs is a problem.
149 # If the user specified 'none', switch to 'elogind'.
150 # 'none' is allowed, as this means "there is no controller now"
151 AS_IF( [test "x$with_cgroupctrl" = "xnone"], [with_cgroupctrl=elogind])
153 # If this was not possible, /proc/self/cgroup not mounted yet, and 'auto'
155 AS_IF( [test -z "$with_cgroupctrl"],
156 AC_MSG_ERROR([No running cgroup controller found]))
158 # ------------------------------------------------------------------------------
159 address_sanitizer_cflags=
160 address_sanitizer_cppflags=
161 address_sanitizer_ldflags=
162 AC_ARG_ENABLE(address-sanitizer, AS_HELP_STRING([--enable-address-sanitizer], [enable -fsanitize=address]))
163 AS_IF([test "x$enable_address_sanitizer" = "xyes"], [
164 CC_CHECK_FLAG_APPEND([with_as_cflags], [CFLAGS], [-fsanitize=address])
165 AS_IF([test -z "$with_as_cflags"],
166 [AC_MSG_ERROR([*** -fsanitize=address is not supported])])
167 address_sanitizer_cflags="$with_as_cflags -fno-omit-frame-pointer -DVALGRIND=1"
168 address_sanitizer_cppflags="-DVALGRIND=1"
169 address_sanitizer_ldflags="-Wc,-fsanitize=address"
172 undefined_sanitizer_cflags=
173 undefined_sanitizer_cppflags=
174 undefined_sanitizer_ldflags=
175 AC_ARG_ENABLE(undefined-sanitizer, AS_HELP_STRING([--enable-undefined-sanitizer], [enable -fsanitize=undefined]))
176 AS_IF([test "x$enable_undefined_sanitizer" = "xyes"], [
177 CC_CHECK_FLAG_APPEND([with_us_cflags], [CFLAGS], [-fsanitize=undefined])
178 AS_IF([test -z "$with_us_cflags"],
179 [AC_MSG_ERROR([*** -fsanitize=undefined is not supported])])
180 undefined_sanitizer_cflags="$with_us_cflags -fno-omit-frame-pointer -DVALGRIND=1"
181 undefined_sanitizer_cppflags="-DVALGRIND=1"
182 undefined_sanitizer_ldflags="-Wc,-fsanitize=undefined"
185 sanitizer_cflags="$address_sanitizer_cflags $undefined_sanitizer_cflags"
186 sanitizer_cppflags="$address_sanitizer_cppflags $undefined_sanitizer_cppflags"
187 sanitizer_ldflags="$address_sanitizer_ldflags $undefined_sanitizer_ldflags"
189 CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
195 -Wmissing-include-dirs \
196 -Wold-style-definition \
199 -Wdeclaration-after-statement \
201 -Wsuggest-attribute=noreturn \
202 -Werror=missing-prototypes \
203 -Werror=implicit-function-declaration \
204 -Werror=missing-declarations \
205 -Werror=return-type \
206 -Werror=incompatible-pointer-types \
208 -Wstrict-prototypes \
213 -Wstrict-aliasing=2 \
215 -Wno-unused-parameter \
216 -Wno-missing-field-initializers \
218 -Wno-format-signedness \
224 -fdiagnostics-show-option \
225 -fno-strict-aliasing \
226 -fvisibility=hidden \
228 -fstack-protector-strong \
230 --param=ssp-buffer-size=4])
232 CC_CHECK_FLAG_APPEND([with_cflags], [CFLAGS], [-Werror=shadow], [
234 #include <inttypes.h>
235 typedef uint64_t usec_t;
236 usec_t now(clockid_t clock);
243 AS_CASE([$CC], [*clang*],
244 [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
245 -Wno-typedef-redefinition \
246 -Wno-gnu-variable-sized-type-not-at-end \
249 # ------------------------------------------------------------------------------
251 AC_ARG_ENABLE([lto], [AS_HELP_STRING([--disable-lto], [disable -flto])],
252 [], [enable_lto=yes])
253 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
254 [AS_IF([test "x$enable_lto" = "xyes"], [have_lto=yes],
255 [AC_MSG_RESULT([disabling -flto as requested])])],
256 [AC_MSG_RESULT([skipping -flto, optimization not enabled])])
258 AS_IF([test "x$have_lto" = "xyes"],
259 [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS],
260 [-flto -fuse-linker-plugin])])
262 AS_CASE([$with_cflags], [*-flto*], [], [have_lto=no])
264 # ------------------------------------------------------------------------------
265 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
266 [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
267 -Wp,-D_FORTIFY_SOURCE=2])],
268 [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
270 # ------------------------------------------------------------------------------
271 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
272 [CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
273 -Wl,--gc-sections])],
274 [AC_MSG_RESULT([skipping --gc-sections, optimization not enabled])])
276 # ------------------------------------------------------------------------------
277 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
278 [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
279 -ffunction-sections -fdata-sections])],
280 [AC_MSG_RESULT([skipping -ffunction/data-section, optimization not enabled])])
282 # ------------------------------------------------------------------------------
283 CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
289 AS_IF([test "x$have_lto" = "xyes"],
290 [CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [-Wl,-fuse-ld=gold])])
292 # ------------------------------------------------------------------------------
293 AC_SUBST([OUR_CPPFLAGS], "$with_cppflags $sanitizer_cppflags")
294 AC_SUBST([OUR_CFLAGS], "-D__SANE_USERSPACE_TYPES__ $with_cflags $sanitizer_cflags")
295 AC_SUBST([OUR_LDFLAGS], "$with_ldflags $sanitizer_ldflags")
297 # ------------------------------------------------------------------------------
298 AC_CHECK_SIZEOF(pid_t)
299 AC_CHECK_SIZEOF(uid_t)
300 AC_CHECK_SIZEOF(gid_t)
301 AC_CHECK_SIZEOF(time_t)
302 AC_CHECK_SIZEOF(dev_t)
303 AC_CHECK_SIZEOF(ino_t)
304 AC_CHECK_SIZEOF(rlim_t,,[
305 #include <sys/time.h>
306 #include <sys/resource.h>
309 GPERF_TEST="$(echo foo,bar | ${GPERF} -L ANSI-C)"
310 save_CFLAGS="$CFLAGS"
311 CFLAGS="$CFLAGS -Wno-error"
315 const char * in_word_set(const char *, size_t);
318 [GPERF_LEN_TYPE=size_t],
322 const char * in_word_set(const char *, unsigned);
325 [GPERF_LEN_TYPE=unsigned],
326 [AC_MSG_ERROR([** unable to determine gperf len type])]
329 CFLAGS="$save_CFLAGS"
331 AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type])
333 # ------------------------------------------------------------------------------
334 # we use python to build the man page index
336 AC_ARG_WITH([python],
337 [AS_HELP_STRING([--without-python], [disable building the man page index and systemd-python (default: test)])])
340 AS_IF([test "x$with_python" != "xno"], [
341 AM_PATH_PYTHON([3],, [:])
342 AS_IF([test "x$PYTHON" != "x:"], [
343 AC_MSG_CHECKING([for python lxml module])
344 AS_IF(["$PYTHON" -c 'import lxml' 2>/dev/null], [have_lxml=yes])
345 AC_MSG_RESULT([$have_lxml])
346 AS_IF([test "x$have_lxml" = "xyes"], [have_python=yes],
347 [AC_MSG_WARN([*** python support requires python-lxml module installed])])
350 AS_IF([test "$have_python" != "yes"], [
351 AS_IF([test "$with_python" = "yes"],
352 [AC_MSG_ERROR([*** python support requested but python support not found])])
353 AS_IF([test "$with_python" != "no"],
354 [AC_MSG_WARN([*** python support not found, some documentation cannot be built])])
356 AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = "xyes"])
358 # ------------------------------------------------------------------------------
360 AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
361 AC_CHECK_HEADERS([linux/memfd.h], [], [])
362 AC_CHECK_HEADERS([linux/vm_sockets.h], [], [], [#include <sys/socket.h>])
364 AC_CHECK_HEADERS([printf.h], [have_printf_h=yes], [have_printf_h=no])
365 AS_IF([test x$have_printf_h = xyes], [
366 AC_DEFINE(HAVE_PRINTF_H, 1, [Define if printf.h was found])
371 # unconditionally pull-in librt with old glibc versions
372 dnl AC_SEARCH_LIBS([clock_gettime], [rt], [], [])
373 dnl AC_SEARCH_LIBS([mq_unlink], [rt], [], [])
377 AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
381 AC_CHECK_FUNCS([__secure_getenv secure_getenv])
395 #include <sys/types.h>
397 #include <sys/mount.h>
401 #include <linux/loop.h>
404 AC_CHECK_DECLS([getrandom],
405 [AC_DEFINE([USE_SYS_RANDOM_H], [], [sys/random.h is usable])],
406 [AC_CHECK_DECLS([getrandom], [], [], [[
407 #include <sys/random.h>
409 #include <linux/random.h>
412 AC_CHECK_TYPES([char16_t, char32_t, key_serial_t],
417 AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE,
418 IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
428 IFLA_IPTUN_ENCAP_DPORT,
429 IFLA_GRE_ENCAP_DPORT,
430 IFLA_BRIDGE_VLAN_INFO,
431 IFLA_BRPORT_PROXYARP,
432 IFLA_BRPORT_LEARNING_SYNC,
433 IFLA_BR_VLAN_DEFAULT_PVID,
437 #include <inttypes.h>
438 #include <netinet/in.h>
439 #include <netinet/ether.h>
440 #include <linux/rtnetlink.h>
442 #include <linux/ip.h>
443 #include <linux/if_tunnel.h>
444 #include <linux/if_link.h>
445 #include <linux/if_bridge.h>
446 #include <linux/if_addr.h>
447 #include <linux/neighbour.h>
450 # This makes sure pkg.m4 is available.
451 m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
454 # ------------------------------------------------------------------------------
455 PKG_CHECK_MODULES(UDEV, [libudev])
457 AC_ARG_WITH([udevrulesdir],
458 AS_HELP_STRING([--with-udevrulesdir=DIR], [Directory for udev rules files]),
460 [with_udevrulesdir=$($PKG_CONFIG --variable=udevdir udev)/rules.d])
461 AC_SUBST([udevrulesdir], [$with_udevrulesdir])
463 AC_ARG_WITH([udevbindir],
464 AS_HELP_STRING([--with-udevbindir=DIR], [Directory for udev binary files]),
466 [with_udevbindir=$($PKG_CONFIG --variable=udevdir udev)])
467 AC_SUBST([udevbindir], [$with_udevbindir])
469 # ------------------------------------------------------------------------------
471 AC_ARG_ENABLE(glib, AS_HELP_STRING([--disable-glib], [disable usage of glib,gobject,gio in tests]))
472 AS_IF([test "x$enable_glib" != "xno"], [
473 PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0 gio-2.0],
474 [AC_DEFINE(HAVE_GLIB, 1, [Define if glib,gobject,gio are available]) have_glib=yes],
476 AS_IF([test "x$have_glib" = "xno" -a "x$enable_glib" = "xyes"],
477 [AC_MSG_ERROR([*** glib support requested but libraries not found])])])
479 # ------------------------------------------------------------------------------
481 AC_ARG_ENABLE([utmp], AS_HELP_STRING([--disable-utmp], [disable utmp/wtmp log handling]),
482 AS_CASE("x${enableval}",
483 [xyes], [have_utmp=yes],
484 [xno], [have_utmp=no],
485 AC_MSG_ERROR(bad value ${enableval} for --enable-utmp)))
486 AS_IF([test "x$have_utmp" = "xyes"], [
487 AC_DEFINE(HAVE_UTMP, 1, [Define if utmp/wtmp support is enabled])
489 M4_DEFINES="$M4_DEFINES -DHAVE_UTMP"],
491 AM_CONDITIONAL([HAVE_UTMP], [test "x$have_utmp" = "xyes"])
493 # ------------------------------------------------------------------------------
495 AC_ARG_ENABLE(coverage, AS_HELP_STRING([--enable-coverage], [enable test coverage]))
496 if test "x$enable_coverage" = "xyes" ; then
497 AC_CHECK_PROG(lcov_found, [lcov], [yes], [no])
498 if test "x$lcov_found" = xno ; then
499 AC_MSG_ERROR([*** lcov support requested but the program was not found])
501 lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
502 lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
503 if test "$lcov_version_major" -eq 1 -a "$lcov_version_minor" -lt 10; then
504 AC_MSG_ERROR([*** lcov version is too old. 1.10 required])
507 CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
510 AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
514 AM_CONDITIONAL(ENABLE_COVERAGE, [test "$have_coverage" = "yes"])
516 # ------------------------------------------------------------------------------
518 AC_ARG_ENABLE(selinux, AS_HELP_STRING([--disable-selinux], [disable optional SELINUX support]))
519 if test "x$enable_selinux" != "xno"; then
520 PKG_CHECK_MODULES([SELINUX], [libselinux >= 2.1.9],
521 [AC_DEFINE(HAVE_SELINUX, 1, [Define if SELinux is available])
523 M4_DEFINES="$M4_DEFINES -DHAVE_SELINUX"],
525 if test "x$have_selinux" = xno -a "x$enable_selinux" = xyes; then
526 AC_MSG_ERROR([*** SELinux support requested but libraries not found])
529 AM_CONDITIONAL(HAVE_SELINUX, [test "$have_selinux" = "yes"])
531 # ------------------------------------------------------------------------------
532 AC_ARG_WITH([kill-user-processes],
533 [AS_HELP_STRING([--without-kill-user-processes], [Set elogind's KillUserProcesses=no by default])])
534 AS_IF([test "$with_kill_user_processes" != "no"],
535 [kill_user_processes=true
536 KILL_USER_PROCESSES=yes],
537 [kill_user_processes=false
538 KILL_USER_PROCESSES=no])
539 AC_DEFINE_UNQUOTED(KILL_USER_PROCESSES, [$kill_user_processes], [Default KillUserProcesses setting])
540 AC_SUBST(KILL_USER_PROCESSES)
542 # ------------------------------------------------------------------------------
543 # We do not really support systemd hybrid or unified mode, but set the default
544 # to 'legacy' here. That is currently the only cgroup mode supported by elogind.
545 #AC_ARG_WITH(default-hierarchy,
546 # AS_HELP_STRING([--with-default-hierarchy=MODE],
547 # [default cgroup hierarchy, defaults to "hybrid"]),
548 # [DEFAULT_HIERARCHY="$withval"],
549 # [DEFAULT_HIERARCHY="hybrid"])
550 DEFAULT_HIERARCHY=legacy
552 AS_CASE("$DEFAULT_HIERARCHY",
553 [legacy], [mode=CGROUP_UNIFIED_NONE],
554 [hybrid], [mode=CGROUP_UNIFIED_SYSTEMD],
555 [unified], [mode=CGROUP_UNIFIED_ALL],
556 AC_MSG_ERROR(Bad default hierarchy mode ${DEFAULT_HIERARCHY}))
557 AC_DEFINE_UNQUOTED(DEFAULT_HIERARCHY, [$mode], [Default cgroup hierarchy])
558 AC_DEFINE_UNQUOTED(DEFAULT_HIERARCHY_NAME, ["$DEFAULT_HIERARCHY"],
559 [Default cgroup hierarchy as string])
561 # ------------------------------------------------------------------------------
563 AS_HELP_STRING([--disable-pam],[disable optional PAM support]),
564 [case "${enableval}" in
567 *) AC_MSG_ERROR(bad value ${enableval} for --disable-pam) ;;
571 if test "x${have_pam}" != xno ; then
573 [security/pam_modules.h security/pam_modutil.h security/pam_ext.h],
575 [if test "x$have_pam" = xyes ; then
576 AC_MSG_ERROR([*** PAM headers not found.])
583 [if test "x$have_pam" = xyes ; then
584 AC_MSG_ERROR([*** libpam not found.])
587 if test "x$have_pam" = xyes ; then
588 PAM_LIBS="-lpam -lpam_misc"
589 AC_DEFINE(HAVE_PAM, 1, [PAM available])
590 M4_DEFINES="$M4_DEFINES -DHAVE_PAM"
598 AM_CONDITIONAL([HAVE_PAM], [test "x$have_pam" != xno])
600 # ------------------------------------------------------------------------------
602 AS_HELP_STRING([--disable-acl],[disable optional ACL support]),
603 [case "${enableval}" in
606 *) AC_MSG_ERROR(bad value ${enableval} for --disable-acl) ;;
610 if test "x${have_acl}" != xno ; then
612 [sys/acl.h acl/libacl.h],
614 [if test "x$have_acl" = xyes ; then
615 AC_MSG_ERROR([*** ACL headers not found.])
622 [if test "x$have_acl" = xyes ; then
623 AC_MSG_ERROR([*** libacl not found.])
626 if test "x$have_acl" = xyes ; then
628 AC_DEFINE(HAVE_ACL, 1, [ACL available])
629 M4_DEFINES="$M4_DEFINES -DHAVE_ACL"
637 AM_CONDITIONAL([HAVE_ACL], [test "x$have_acl" != xno])
639 # ------------------------------------------------------------------------------
640 AC_ARG_ENABLE([smack], AS_HELP_STRING([--disable-smack],[disable optional SMACK support]),
641 [case "${enableval}" in
642 yes) have_smack=yes ;;
644 *) AC_MSG_ERROR(bad value ${enableval} for --disable-smack) ;;
648 if test "x${have_smack}" != xno; then
649 AC_DEFINE(HAVE_SMACK, 1, [Define if SMACK is available])
650 M4_DEFINES="$M4_DEFINES -DHAVE_SMACK"
654 AM_CONDITIONAL([HAVE_SMACK], [test "x$have_smack" = "xyes"])
656 have_smack_run_label=no
657 AC_ARG_WITH(smack-run-label,
658 AS_HELP_STRING([--with-smack-run-label=STRING],
659 [run systemd --system itself with a specific SMACK label]),
660 [AC_DEFINE_UNQUOTED(SMACK_RUN_LABEL, ["$withval"], [Run systemd itself with SMACK label]) have_smack_run_label=yes],
663 if test "x${have_smack_run_label}" = xyes; then
664 M4_DEFINES="$M4_DEFINES -DHAVE_SMACK_RUN_LABEL"
667 AC_ARG_WITH(smack-default-process-label,
668 AS_HELP_STRING([--with-smack-default-process-label=STRING],
669 [default SMACK label for executed processes]),
670 [AC_DEFINE_UNQUOTED(SMACK_DEFAULT_PROCESS_LABEL, ["$withval"], [Default SMACK label for executed processes])],
673 # ------------------------------------------------------------------------------
674 AC_ARG_WITH(system-uid-max,
675 AS_HELP_STRING([--with-system-uid-max=UID]
676 [Maximum UID for system users]),
677 [SYSTEM_UID_MAX="$withval"],
678 [SYSTEM_UID_MAX="`awk 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }' /etc/login.defs 2>/dev/null || echo 999`"])
680 AC_DEFINE_UNQUOTED(SYSTEM_UID_MAX, [$SYSTEM_UID_MAX], [Maximum System UID])
681 AC_SUBST(SYSTEM_UID_MAX)
683 # ------------------------------------------------------------------------------
684 AC_ARG_WITH(system-gid-max,
685 AS_HELP_STRING([--with-system-gid-max=GID]
686 [Maximum GID for system groups]),
687 [SYSTEM_GID_MAX="$withval"],
688 [SYSTEM_GID_MAX="`awk 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }' /etc/login.defs 2>/dev/null || echo 999`"])
690 AC_DEFINE_UNQUOTED(SYSTEM_GID_MAX, [$SYSTEM_GID_MAX], [Maximum System GID])
691 AC_SUBST(SYSTEM_GID_MAX)
693 # ------------------------------------------------------------------------------
695 AC_ARG_ENABLE(polkit, AS_HELP_STRING([--disable-polkit], [disable PolicyKit support]))
696 if test "x$enable_polkit" != "xno"; then
697 AC_DEFINE(ENABLE_POLKIT, 1, [Define if PolicyKit support is to be enabled])
700 # also enable support for *.pkla files on old polkit
701 PKG_CHECK_MODULES(POLKIT, [ polkit-gobject-1 < 0.106 ],
705 AM_CONDITIONAL(ENABLE_POLKIT, [test "x$have_polkit" = "xyes"])
706 AM_CONDITIONAL(ENABLE_POLKIT_PKLA, [test "x$polkit_pkla" = "xyes"])
708 # ------------------------------------------------------------------------------
709 AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h valgrind/valgrind.h])
711 # ------------------------------------------------------------------------------
713 AC_ARG_ENABLE(manpages, AS_HELP_STRING([--disable-manpages], [disable manpages]))
714 AC_PATH_PROG([XSLTPROC], [xsltproc])
715 AS_IF([test "x$enable_manpages" != xno], [have_manpages=yes])
716 AM_CONDITIONAL(ENABLE_MANPAGES, [test "x$have_manpages" = "xyes"])
718 # ------------------------------------------------------------------------------
721 AC_ARG_WITH([dbuspolicydir],
722 AS_HELP_STRING([--with-dbuspolicydir=DIR], [D-Bus policy directory]),
724 [with_dbuspolicydir=${datadir}/dbus-1/system.d])
725 AX_NORMALIZE_PATH([with_dbuspolicydir])
727 AC_ARG_WITH([dbussystemservicedir],
728 AS_HELP_STRING([--with-dbussystemservicedir=DIR], [D-Bus system service directory]),
730 [with_dbussystemservicedir=${datadir}/dbus-1/system-services])
731 AX_NORMALIZE_PATH([with_dbussystemservicedir])
733 AC_ARG_WITH([bashcompletiondir],
734 AS_HELP_STRING([--with-bashcompletiondir=DIR], [bash completions directory]),
736 [AS_IF([$($PKG_CONFIG --exists bash-completion)], [
737 with_bashcompletiondir=$($PKG_CONFIG --variable=completionsdir bash-completion)
739 with_bashcompletiondir=${datadir}/bash-completion/completions
741 AM_CONDITIONAL(ENABLE_BASH_COMPLETION, [test "$with_bashcompletiondir" != "no"])
742 AX_NORMALIZE_PATH([with_bashcompletiondir])
744 AC_ARG_WITH([zshcompletiondir],
745 AS_HELP_STRING([--with-zshcompletiondir=DIR], [zsh completions directory]),
746 [], [with_zshcompletiondir=${datadir}/zsh/site-functions])
747 AM_CONDITIONAL(ENABLE_ZSH_COMPLETION, [test "$with_zshcompletiondir" != "no"])
748 AX_NORMALIZE_PATH([with_zshcompletiondir])
750 AC_ARG_WITH([rootprefix],
751 AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]),
752 [], [with_rootprefix=${ac_default_prefix}])
753 # --with-rootprefix= (empty) should default to "/" but AX_NORMALIZE_PATH
754 # defaults those to ".", solve that here for now until we can find a suitable
755 # fix for AX_NORMALIZE_PATH upstream at autoconf-archive.
756 # See: https://github.com/systemd/systemd/issues/54
757 if test "x${with_rootprefix}" = "x"; then
760 AX_NORMALIZE_PATH([with_rootprefix])
762 AC_ARG_WITH([rootlibdir],
763 AS_HELP_STRING([--with-rootlibdir=DIR], [root directory for libraries necessary for boot]),
765 [with_rootlibdir=${libdir}])
766 AX_NORMALIZE_PATH([with_rootlibdir])
768 AC_ARG_WITH([rootlibexecdir],
769 AS_HELP_STRING([--with-rootlibexecdir=DIR], [Root directory for executables necessary for boot]),
771 [with_rootlibexecdir=${with_rootprefix}/lib/elogind])
772 AX_NORMALIZE_PATH([with_rootlibexecdir])
774 AC_ARG_WITH([pamlibdir],
775 AS_HELP_STRING([--with-pamlibdir=DIR], [directory for PAM modules]),
777 [with_pamlibdir=${with_rootlibdir}/security])
778 AX_NORMALIZE_PATH([with_pamlibdir])
780 AC_ARG_WITH([pamconfdir],
781 AS_HELP_STRING([--with-pamconfdir=DIR], [directory for PAM configuration (pass no to disable installing)]),
783 [with_pamconfdir=${sysconfdir}/pam.d])
784 AM_CONDITIONAL(ENABLE_PAM_CONFIG, [test "$with_pamconfdir" != "no"])
785 AX_NORMALIZE_PATH([with_pamconfdir])
787 AC_ARG_ENABLE([split-usr],
788 AS_HELP_STRING([--enable-split-usr], [assume that /bin, /sbin aren\'t symlinks into /usr]),
790 [AS_IF([test "x${ac_default_prefix}" != "x${with_rootprefix}"], [
796 AS_IF([test "x${enable_split_usr}" = "xyes"], [
797 AC_DEFINE(HAVE_SPLIT_USR, 1, [Define if /bin, /sbin aren't symlinks into /usr])
799 AM_CONDITIONAL(ENABLE_SPLIT_USR, [test "x${enable_split_usr}" = "xyes"])
801 # work around intltool-update issues during 'make distcheck'
802 AS_IF([test "x$0" != "x./configure"], [
803 AC_SUBST([INTLTOOL_UPDATE], [/usr/bin/env true])
807 [AC_HELP_STRING([--disable-tests], [disable tests, or enable extra tests with =unsafe])],
808 enable_tests=$enableval, enable_tests=yes)
809 AM_CONDITIONAL(ENABLE_TESTS, [test x$enable_tests = xyes -o x$enable_tests = xunsafe])
810 AM_CONDITIONAL(ENABLE_UNSAFE_TESTS, [test x$enable_tests = xunsafe])
813 [AC_HELP_STRING([--enable-debug@<:@=LIST@:>@], [enable extra debugging (elogind,hashmap,mmap-cache)])],
814 [if test "x$enableval" = "xyes"; then
815 enableval="elogind,hashmap,mmap-cache"
818 IFS="$IFS$PATH_SEPARATOR,"
819 for name in $enableval; do
822 enable_debug_elogind=yes
825 enable_debug_hashmap=yes
828 enable_debug_mmap_cache=yes
832 IFS="$saved_ifs"],[])
835 AS_IF([test x$enable_debug_elogind = xyes], [
836 AC_DEFINE(ENABLE_DEBUG_ELOGIND, 1, [Define if elogind debugging is to be enabled])
837 enable_debug="elogind $enable_debug"
839 AS_IF([test x$enable_debug_hashmap = xyes], [
840 AC_DEFINE(ENABLE_DEBUG_HASHMAP, 1, [Define if hashmap debugging is to be enabled])
841 enable_debug="hashmap $enable_debug"
843 AS_IF([test x$enable_debug_mmap_cache = xyes], [
844 AC_DEFINE(ENABLE_DEBUG_MMAP_CACHE, 1, [Define if mmap cache debugging is to be enabled])
845 enable_debug="mmap-cache $enable_debug"
847 test -z "$enable_debug" && enable_debug="none"
849 AC_SUBST([dbuspolicydir], [$with_dbuspolicydir])
850 AC_SUBST([dbussystemservicedir], [$with_dbussystemservicedir])
851 AC_SUBST([bashcompletiondir], [$with_bashcompletiondir])
852 AC_SUBST([zshcompletiondir], [$with_zshcompletiondir])
853 AC_SUBST([pamlibdir], [$with_pamlibdir])
854 AC_SUBST([pamconfdir], [$with_pamconfdir])
855 AC_SUBST([rootprefix], [$with_rootprefix])
856 AC_SUBST([rootlibdir], [$with_rootlibdir])
857 AC_SUBST([rootlibexecdir], [$with_rootlibexecdir])
858 AC_SUBST([cgroup_controller], [$with_cgroupctrl])
867 $PACKAGE_NAME $PACKAGE_VERSION
869 PAM: . . . . . . . . . . . . . . . ${have_pam}
870 SELinux: . . . . . . . . . . . . . ${have_selinux}
871 SMACK: . . . . . . . . . . . . . . ${have_smack}
872 ACL: . . . . . . . . . . . . . . . ${have_acl}
873 default cgroup hierarchy: . . . . ${DEFAULT_HIERARCHY}
874 default KillUserProcesses setting: ${KILL_USER_PROCESSES}
875 polkit: . . . . . . . . . . . . . ${have_polkit} (legacy pkla support: ${polkit_pkla})
876 glib: . . . . . . . . . . . . . . ${have_glib}
877 Python: . . . . . . . . . . . . . ${have_python}
878 man pages: . . . . . . . . . . . . ${have_manpages}
879 test coverage: . . . . . . . . . . ${have_coverage}
880 Split /usr: . . . . . . . . . . . ${enable_split_usr}
881 utmp/wtmp support: . . . . . . . . ${have_utmp}
882 Link time optimization: . . . . . ${have_lto}
883 extra debugging: . . . . . . . . . ${enable_debug}
884 cgroup controller: . . . . . . . . ${with_cgroupctrl}
886 prefix: . . . . . . . . . . . . . ${prefix}
887 rootprefix: . . . . . . . . . . . ${with_rootprefix}
888 sysconf dir: . . . . . . . . . . . ${sysconfdir}
889 datarootdir: . . . . . . . . . . . ${datarootdir}
890 includedir: . . . . . . . . . . . ${includedir}
891 lib dir: . . . . . . . . . . . . . ${libdir}
892 rootlib dir: . . . . . . . . . . . ${with_rootlibdir}
893 rootlibexec dir: . . . . . . . . . ${with_rootlibexecdir}
894 PAM modules dir: . . . . . . . . . ${with_pamlibdir}
895 PAM configuration dir: . . . . . . ${with_pamconfdir}
896 D-Bus policy dir: . . . . . . . . ${with_dbuspolicydir}
897 D-Bus system dir: . . . . . . . . ${with_dbussystemservicedir}
898 bash completions dir: . . . . . . ${with_bashcompletiondir}
899 zsh completions dir: . . . . . . . ${with_zshcompletiondir}
900 maximum system UID: . . . . . . . ${SYSTEM_UID_MAX}
901 maximum system GID: . . . . . . . ${SYSTEM_GID_MAX}
903 CFLAGS: . . . . . . . . . . . . . ${OUR_CFLAGS} ${CFLAGS}
904 CPPFLAGS: . . . . . . . . . . . . ${OUR_CPPFLAGS} ${CPPFLAGS}
905 LDFLAGS: . . . . . . . . . . . . . ${OUR_LDFLAGS} ${LDFLAGS}