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 # ------------------------------------------------------------------------------
250 AC_ARG_ENABLE([lto], [AS_HELP_STRING([--disable-lto], [disable -flto])],
251 [], [enable_lto=yes])
252 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
253 [AS_IF([test "x$enable_lto" = "xyes"],
254 [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-flto])],
255 [AC_MSG_RESULT([disabling -flto as requested])])],
256 [AC_MSG_RESULT([skipping -flto, optimization not enabled])])
258 # ------------------------------------------------------------------------------
259 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
260 [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
261 -Wp,-D_FORTIFY_SOURCE=2])],
262 [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
264 # ------------------------------------------------------------------------------
265 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
266 [CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
267 -Wl,--gc-sections])],
268 [AC_MSG_RESULT([skipping --gc-sections, optimization not enabled])])
270 # ------------------------------------------------------------------------------
271 AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
272 [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
273 -ffunction-sections -fdata-sections])],
274 [AC_MSG_RESULT([skipping -ffunction/data-section, optimization not enabled])])
276 # ------------------------------------------------------------------------------
277 CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
285 # ------------------------------------------------------------------------------
286 AC_SUBST([OUR_CPPFLAGS], "$with_cppflags $sanitizer_cppflags")
287 AC_SUBST([OUR_CFLAGS], "-D__SANE_USERSPACE_TYPES__ $with_cflags $sanitizer_cflags")
288 AC_SUBST([OUR_LDFLAGS], "$with_ldflags $sanitizer_ldflags")
290 # ------------------------------------------------------------------------------
291 AC_CHECK_SIZEOF(pid_t)
292 AC_CHECK_SIZEOF(uid_t)
293 AC_CHECK_SIZEOF(gid_t)
294 AC_CHECK_SIZEOF(time_t)
295 AC_CHECK_SIZEOF(dev_t)
296 AC_CHECK_SIZEOF(ino_t)
297 AC_CHECK_SIZEOF(rlim_t,,[
298 #include <sys/time.h>
299 #include <sys/resource.h>
302 GPERF_TEST="$(echo foo,bar | ${GPERF} -L ANSI-C)"
303 save_CFLAGS="$CFLAGS"
304 CFLAGS="$CFLAGS -Wno-error"
308 const char * in_word_set(const char *, size_t);
311 [GPERF_LEN_TYPE=size_t],
315 const char * in_word_set(const char *, unsigned);
318 [GPERF_LEN_TYPE=unsigned],
319 [AC_MSG_ERROR([** unable to determine gperf len type])]
322 CFLAGS="$save_CFLAGS"
324 AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type])
326 # ------------------------------------------------------------------------------
327 # we use python to build the man page index
329 AC_ARG_WITH([python],
330 [AS_HELP_STRING([--without-python], [disable building the man page index and systemd-python (default: test)])])
333 AS_IF([test "x$with_python" != "xno"], [
334 AM_PATH_PYTHON([3],, [:])
335 AS_IF([test "x$PYTHON" != "x:"], [
336 AC_MSG_CHECKING([for python lxml module])
337 AS_IF(["$PYTHON" -c 'import lxml' 2>/dev/null], [have_lxml=yes])
338 AC_MSG_RESULT([$have_lxml])
339 AS_IF([test "x$have_lxml" = "xyes"], [have_python=yes],
340 [AC_MSG_WARN([*** python support requires python-lxml module installed])])
343 AS_IF([test "$have_python" != "yes"], [
344 AS_IF([test "$with_python" = "yes"],
345 [AC_MSG_ERROR([*** python support requested but python support not found])])
346 AS_IF([test "$with_python" != "no"],
347 [AC_MSG_WARN([*** python support not found, some documentation cannot be built])])
349 AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = "xyes"])
351 # ------------------------------------------------------------------------------
353 AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
354 AC_CHECK_HEADERS([linux/memfd.h], [], [])
355 AC_CHECK_HEADERS([linux/vm_sockets.h], [], [], [#include <sys/socket.h>])
357 AC_CHECK_HEADERS([printf.h], [have_printf_h=yes], [have_printf_h=no])
358 AS_IF([test x$have_printf_h = xyes], [
359 AC_DEFINE(HAVE_PRINTF_H, 1, [Define if printf.h was found])
364 # unconditionally pull-in librt with old glibc versions
365 dnl AC_SEARCH_LIBS([clock_gettime], [rt], [], [])
366 dnl AC_SEARCH_LIBS([mq_unlink], [rt], [], [])
370 AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
374 AC_CHECK_FUNCS([__secure_getenv secure_getenv])
389 #include <sys/types.h>
391 #include <sys/mount.h>
395 #include <linux/loop.h>
396 #include <linux/random.h>
399 AC_CHECK_TYPES([char16_t, char32_t, key_serial_t, struct ethtool_link_settings],
402 #include <linux/ethtool.h>
405 AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE,
406 IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
414 IFLA_VXLAN_REMCSUM_NOPARTIAL,
415 IFLA_IPTUN_ENCAP_DPORT,
416 IFLA_GRE_ENCAP_DPORT,
417 IFLA_BRIDGE_VLAN_INFO,
418 IFLA_BRPORT_PROXYARP,
419 IFLA_BRPORT_LEARNING_SYNC,
420 IFLA_BR_VLAN_DEFAULT_PVID,
424 #include <inttypes.h>
425 #include <netinet/in.h>
426 #include <netinet/ether.h>
427 #include <linux/rtnetlink.h>
429 #include <linux/ip.h>
430 #include <linux/if_tunnel.h>
431 #include <linux/if_link.h>
432 #include <linux/if_bridge.h>
433 #include <linux/if_addr.h>
434 #include <linux/neighbour.h>
437 # This makes sure pkg.m4 is available.
438 m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
441 # ------------------------------------------------------------------------------
442 PKG_CHECK_MODULES(UDEV, [libudev])
444 AC_ARG_WITH([udevrulesdir],
445 AS_HELP_STRING([--with-udevrulesdir=DIR], [Directory for udev rules files]),
447 [with_udevrulesdir=$($PKG_CONFIG --variable=udevdir udev)/rules.d])
448 AC_SUBST([udevrulesdir], [$with_udevrulesdir])
450 AC_ARG_WITH([udevbindir],
451 AS_HELP_STRING([--with-udevbindir=DIR], [Directory for udev binary files]),
453 [with_udevbindir=$($PKG_CONFIG --variable=udevdir udev)])
454 AC_SUBST([udevbindir], [$with_udevbindir])
456 # ------------------------------------------------------------------------------
458 AC_ARG_ENABLE([utmp], AS_HELP_STRING([--disable-utmp], [disable utmp/wtmp log handling]),
459 AS_CASE("x${enableval}",
460 [xyes], [have_utmp=yes],
461 [xno], [have_utmp=no],
462 AC_MSG_ERROR(bad value ${enableval} for --enable-utmp)))
463 AS_IF([test "x$have_utmp" = "xyes"], [AC_DEFINE(HAVE_UTMP, 1, [Define if utmp/wtmp support is enabled])])
464 AM_CONDITIONAL([HAVE_UTMP], [test "x$have_utmp" = "xyes"])
466 # ------------------------------------------------------------------------------
468 AC_ARG_ENABLE(coverage, AS_HELP_STRING([--enable-coverage], [enable test coverage]))
469 if test "x$enable_coverage" = "xyes" ; then
470 AC_CHECK_PROG(lcov_found, [lcov], [yes], [no])
471 if test "x$lcov_found" = xno ; then
472 AC_MSG_ERROR([*** lcov support requested but the program was not found])
474 lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
475 lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
476 if test "$lcov_version_major" -eq 1 -a "$lcov_version_minor" -lt 10; then
477 AC_MSG_ERROR([*** lcov version is too old. 1.10 required])
480 CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
483 AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
487 AM_CONDITIONAL(ENABLE_COVERAGE, [test "$have_coverage" = "yes"])
489 # ------------------------------------------------------------------------------
491 AC_ARG_ENABLE(selinux, AS_HELP_STRING([--disable-selinux], [disable optional SELINUX support]))
492 if test "x$enable_selinux" != "xno"; then
493 PKG_CHECK_MODULES([SELINUX], [libselinux >= 2.1.9],
494 [AC_DEFINE(HAVE_SELINUX, 1, [Define if SELinux is available])
496 M4_DEFINES="$M4_DEFINES -DHAVE_SELINUX"],
498 if test "x$have_selinux" = xno -a "x$enable_selinux" = xyes; then
499 AC_MSG_ERROR([*** SELinux support requested but libraries not found])
502 AM_CONDITIONAL(HAVE_SELINUX, [test "$have_selinux" = "yes"])
504 # ------------------------------------------------------------------------------
505 AC_ARG_WITH([kill-user-processes],
506 [AS_HELP_STRING([--without-kill-user-processes], [Set elogind's KillUserProcesses=no by default])])
507 AS_IF([test "$with_kill_user_processes" != "no"],
508 [kill_user_processes=true
509 KILL_USER_PROCESSES=yes],
510 [kill_user_processes=false
511 KILL_USER_PROCESSES=no])
512 AC_DEFINE_UNQUOTED(KILL_USER_PROCESSES, [$kill_user_processes], [Default KillUserProcesses setting])
513 AC_SUBST(KILL_USER_PROCESSES)
515 # ------------------------------------------------------------------------------
516 # We do not really support systemd hybrid or unified mode, but set the default
517 # to 'legacy' here. That is currently the only cgroup mode supported by elogind.
518 #AC_ARG_WITH(default-hierarchy,
519 # AS_HELP_STRING([--with-default-hierarchy=MODE],
520 # [default cgroup hierarchy, defaults to "hybrid"]),
521 # [DEFAULT_HIERARCHY="$withval"],
522 # [DEFAULT_HIERARCHY="hybrid"])
523 DEFAULT_HIERARCHY=legacy
525 AS_CASE("$DEFAULT_HIERARCHY",
526 [legacy], [mode=CGROUP_UNIFIED_NONE],
527 [hybrid], [mode=CGROUP_UNIFIED_SYSTEMD],
528 [unified], [mode=CGROUP_UNIFIED_ALL],
529 AC_MSG_ERROR(Bad default hierarchy mode ${DEFAULT_HIERARCHY}))
530 AC_DEFINE_UNQUOTED(DEFAULT_HIERARCHY, [$mode], [Default cgroup hierarchy])
531 AC_DEFINE_UNQUOTED(DEFAULT_HIERARCHY_NAME, ["$DEFAULT_HIERARCHY"],
532 [Default cgroup hierarchy as string])
534 # ------------------------------------------------------------------------------
536 AS_HELP_STRING([--disable-pam],[disable optional PAM support]),
537 [case "${enableval}" in
540 *) AC_MSG_ERROR(bad value ${enableval} for --disable-pam) ;;
544 if test "x${have_pam}" != xno ; then
546 [security/pam_modules.h security/pam_modutil.h security/pam_ext.h],
548 [if test "x$have_pam" = xyes ; then
549 AC_MSG_ERROR([*** PAM headers not found.])
556 [if test "x$have_pam" = xyes ; then
557 AC_MSG_ERROR([*** libpam not found.])
560 if test "x$have_pam" = xyes ; then
561 PAM_LIBS="-lpam -lpam_misc"
562 AC_DEFINE(HAVE_PAM, 1, [PAM available])
563 M4_DEFINES="$M4_DEFINES -DHAVE_PAM"
571 AM_CONDITIONAL([HAVE_PAM], [test "x$have_pam" != xno])
573 # ------------------------------------------------------------------------------
575 AS_HELP_STRING([--disable-acl],[disable optional ACL support]),
576 [case "${enableval}" in
579 *) AC_MSG_ERROR(bad value ${enableval} for --disable-acl) ;;
583 if test "x${have_acl}" != xno ; then
585 [sys/acl.h acl/libacl.h],
587 [if test "x$have_acl" = xyes ; then
588 AC_MSG_ERROR([*** ACL headers not found.])
595 [if test "x$have_acl" = xyes ; then
596 AC_MSG_ERROR([*** libacl not found.])
599 if test "x$have_acl" = xyes ; then
601 AC_DEFINE(HAVE_ACL, 1, [ACL available])
602 M4_DEFINES="$M4_DEFINES -DHAVE_ACL"
610 AM_CONDITIONAL([HAVE_ACL], [test "x$have_acl" != xno])
612 # ------------------------------------------------------------------------------
613 AC_ARG_ENABLE([smack], AS_HELP_STRING([--disable-smack],[disable optional SMACK support]),
614 [case "${enableval}" in
615 yes) have_smack=yes ;;
617 *) AC_MSG_ERROR(bad value ${enableval} for --disable-smack) ;;
621 if test "x${have_smack}" != xno; then
622 AC_DEFINE(HAVE_SMACK, 1, [Define if SMACK is available])
623 M4_DEFINES="$M4_DEFINES -DHAVE_SMACK"
627 AM_CONDITIONAL([HAVE_SMACK], [test "x$have_smack" = "xyes"])
629 have_smack_run_label=no
630 AC_ARG_WITH(smack-run-label,
631 AS_HELP_STRING([--with-smack-run-label=STRING],
632 [run systemd --system itself with a specific SMACK label]),
633 [AC_DEFINE_UNQUOTED(SMACK_RUN_LABEL, ["$withval"], [Run systemd itself with SMACK label]) have_smack_run_label=yes],
636 if test "x${have_smack_run_label}" = xyes; then
637 M4_DEFINES="$M4_DEFINES -DHAVE_SMACK_RUN_LABEL"
640 AC_ARG_WITH(smack-default-process-label,
641 AS_HELP_STRING([--with-smack-default-process-label=STRING],
642 [default SMACK label for executed processes]),
643 [AC_DEFINE_UNQUOTED(SMACK_DEFAULT_PROCESS_LABEL, ["$withval"], [Default SMACK label for executed processes])],
646 # ------------------------------------------------------------------------------
647 AC_ARG_WITH(system-uid-max,
648 AS_HELP_STRING([--with-system-uid-max=UID]
649 [Maximum UID for system users]),
650 [SYSTEM_UID_MAX="$withval"],
651 [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`"])
653 AC_DEFINE_UNQUOTED(SYSTEM_UID_MAX, [$SYSTEM_UID_MAX], [Maximum System UID])
654 AC_SUBST(SYSTEM_UID_MAX)
656 # ------------------------------------------------------------------------------
657 AC_ARG_WITH(system-gid-max,
658 AS_HELP_STRING([--with-system-gid-max=GID]
659 [Maximum GID for system groups]),
660 [SYSTEM_GID_MAX="$withval"],
661 [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`"])
663 AC_DEFINE_UNQUOTED(SYSTEM_GID_MAX, [$SYSTEM_GID_MAX], [Maximum System GID])
664 AC_SUBST(SYSTEM_GID_MAX)
666 # ------------------------------------------------------------------------------
668 AC_ARG_ENABLE(polkit, AS_HELP_STRING([--disable-polkit], [disable PolicyKit support]))
669 if test "x$enable_polkit" != "xno"; then
670 AC_DEFINE(ENABLE_POLKIT, 1, [Define if PolicyKit support is to be enabled])
673 AM_CONDITIONAL(ENABLE_POLKIT, [test "x$have_polkit" = "xyes"])
675 # ------------------------------------------------------------------------------
676 AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h valgrind/valgrind.h])
678 # ------------------------------------------------------------------------------
680 AC_ARG_ENABLE(manpages, AS_HELP_STRING([--disable-manpages], [disable manpages]))
681 AC_PATH_PROG([XSLTPROC], [xsltproc])
682 AS_IF([test "x$enable_manpages" != xno], [have_manpages=yes])
683 AM_CONDITIONAL(ENABLE_MANPAGES, [test "x$have_manpages" = "xyes"])
685 # ------------------------------------------------------------------------------
688 AC_ARG_WITH([dbuspolicydir],
689 AS_HELP_STRING([--with-dbuspolicydir=DIR], [D-Bus policy directory]),
691 [with_dbuspolicydir=${datadir}/dbus-1/system.d])
692 AX_NORMALIZE_PATH([with_dbuspolicydir])
694 AC_ARG_WITH([dbussystemservicedir],
695 AS_HELP_STRING([--with-dbussystemservicedir=DIR], [D-Bus system service directory]),
697 [with_dbussystemservicedir=${datadir}/dbus-1/system-services])
698 AX_NORMALIZE_PATH([with_dbussystemservicedir])
700 AC_ARG_WITH([bashcompletiondir],
701 AS_HELP_STRING([--with-bashcompletiondir=DIR], [bash completions directory]),
703 [AS_IF([$($PKG_CONFIG --exists bash-completion)], [
704 with_bashcompletiondir=$($PKG_CONFIG --variable=completionsdir bash-completion)
706 with_bashcompletiondir=${datadir}/bash-completion/completions
708 AM_CONDITIONAL(ENABLE_BASH_COMPLETION, [test "$with_bashcompletiondir" != "no"])
709 AX_NORMALIZE_PATH([with_bashcompletiondir])
711 AC_ARG_WITH([zshcompletiondir],
712 AS_HELP_STRING([--with-zshcompletiondir=DIR], [zsh completions directory]),
713 [], [with_zshcompletiondir=${datadir}/zsh/site-functions])
714 AM_CONDITIONAL(ENABLE_ZSH_COMPLETION, [test "$with_zshcompletiondir" != "no"])
715 AX_NORMALIZE_PATH([with_zshcompletiondir])
717 AC_ARG_WITH([rootprefix],
718 AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]),
719 [], [with_rootprefix=${ac_default_prefix}])
720 # --with-rootprefix= (empty) should default to "/" but AX_NORMALIZE_PATH
721 # defaults those to ".", solve that here for now until we can find a suitable
722 # fix for AX_NORMALIZE_PATH upstream at autoconf-archive.
723 # See: https://github.com/systemd/systemd/issues/54
724 if test "x${with_rootprefix}" = "x"; then
727 AX_NORMALIZE_PATH([with_rootprefix])
729 AC_ARG_WITH([rootlibdir],
730 AS_HELP_STRING([--with-rootlibdir=DIR], [root directory for libraries necessary for boot]),
732 [with_rootlibdir=${libdir}])
733 AX_NORMALIZE_PATH([with_rootlibdir])
735 AC_ARG_WITH([pamlibdir],
736 AS_HELP_STRING([--with-pamlibdir=DIR], [directory for PAM modules]),
738 [with_pamlibdir=${with_rootlibdir}/security])
739 AX_NORMALIZE_PATH([with_pamlibdir])
741 AC_ARG_WITH([pamconfdir],
742 AS_HELP_STRING([--with-pamconfdir=DIR], [directory for PAM configuration (pass no to disable installing)]),
744 [with_pamconfdir=${sysconfdir}/pam.d])
745 AM_CONDITIONAL(ENABLE_PAM_CONFIG, [test "$with_pamconfdir" != "no"])
746 AX_NORMALIZE_PATH([with_pamconfdir])
748 AC_ARG_ENABLE([split-usr],
749 AS_HELP_STRING([--enable-split-usr], [assume that /bin, /sbin aren\'t symlinks into /usr]),
751 [AS_IF([test "x${ac_default_prefix}" != "x${with_rootprefix}"], [
757 AS_IF([test "x${enable_split_usr}" = "xyes"], [
758 AC_DEFINE(HAVE_SPLIT_USR, 1, [Define if /bin, /sbin aren't symlinks into /usr])
760 AM_CONDITIONAL(ENABLE_SPLIT_USR, [test "x${enable_split_usr}" = "xyes"])
762 # work around intltool-update issues during 'make distcheck'
763 AS_IF([test "x$0" != "x./configure"], [
764 AC_SUBST([INTLTOOL_UPDATE], [/usr/bin/env true])
768 [AS_HELP_STRING([--disable-tests], [disable tests, or enable extra tests with =unsafe])],
769 enable_tests=$enableval, enable_tests=yes)
770 AM_CONDITIONAL(ENABLE_TESTS, [test x$enable_tests = xyes])
773 [AC_HELP_STRING([--enable-debug@<:@=LIST@:>@], [enable extra debugging (elogind,hashmap,mmap-cache)])],
774 [if test "x$enableval" = "xyes"; then
775 enableval="elogind,hashmap,mmap-cache"
778 IFS="$IFS$PATH_SEPARATOR,"
779 for name in $enableval; do
782 enable_debug_elogind=yes
785 enable_debug_hashmap=yes
788 enable_debug_mmap_cache=yes
792 IFS="$saved_ifs"],[])
795 AS_IF([test x$enable_debug_elogind = xyes], [
796 AC_DEFINE(ENABLE_DEBUG_ELOGIND, 1, [Define if elogind debugging is to be enabled])
797 enable_debug="elogind $enable_debug"
799 AS_IF([test x$enable_debug_hashmap = xyes], [
800 AC_DEFINE(ENABLE_DEBUG_HASHMAP, 1, [Define if hashmap debugging is to be enabled])
801 enable_debug="hashmap $enable_debug"
803 AS_IF([test x$enable_debug_mmap_cache = xyes], [
804 AC_DEFINE(ENABLE_DEBUG_MMAP_CACHE, 1, [Define if mmap cache debugging is to be enabled])
805 enable_debug="mmap-cache $enable_debug"
807 test -z "$enable_debug" && enable_debug="none"
809 AC_SUBST([dbuspolicydir], [$with_dbuspolicydir])
810 AC_SUBST([dbussystemservicedir], [$with_dbussystemservicedir])
811 AC_SUBST([bashcompletiondir], [$with_bashcompletiondir])
812 AC_SUBST([zshcompletiondir], [$with_zshcompletiondir])
813 AC_SUBST([pamlibdir], [$with_pamlibdir])
814 AC_SUBST([pamconfdir], [$with_pamconfdir])
815 AC_SUBST([rootprefix], [$with_rootprefix])
816 AC_SUBST([rootlibdir], [$with_rootlibdir])
817 AC_SUBST([cgroup_controller], [$with_cgroupctrl])
826 $PACKAGE_NAME $VERSION
828 PAM: . . . . . . . . . . . . . . . ${have_pam}
829 SELinux: . . . . . . . . . . . . . ${have_selinux}
830 SMACK: . . . . . . . . . . . . . . ${have_smack}
831 ACL: . . . . . . . . . . . . . . . ${have_acl}
832 default cgroup hierarchy: . . . . ${DEFAULT_HIERARCHY}
833 default KillUserProcesses setting: ${KILL_USER_PROCESSES}
834 polkit: . . . . . . . . . . . . . ${have_polkit}
835 Python: . . . . . . . . . . . . . ${have_python}
836 man pages: . . . . . . . . . . . . ${have_manpages}
837 test coverage: . . . . . . . . . . ${have_coverage}
838 Split /usr: . . . . . . . . . . . ${enable_split_usr}
839 utmp/wtmp support: . . . . . . . . ${have_utmp}
840 extra debugging: . . . . . . . . . ${enable_debug}
841 cgroup controller: . . . . . . . . ${with_cgroupctrl}
843 prefix: . . . . . . . . . . . . . ${prefix}
844 rootprefix: . . . . . . . . . . . ${with_rootprefix}
845 sysconf dir: . . . . . . . . . . . ${sysconfdir}
846 datarootdir: . . . . . . . . . . . ${datarootdir}
847 includedir: . . . . . . . . . . . ${includedir}
848 lib dir: . . . . . . . . . . . . . ${libdir}
849 rootlib dir: . . . . . . . . . . . ${with_rootlibdir}
850 PAM modules dir: . . . . . . . . . ${with_pamlibdir}
851 PAM configuration dir: . . . . . . ${with_pamconfdir}
852 D-Bus policy dir: . . . . . . . . ${with_dbuspolicydir}
853 D-Bus system dir: . . . . . . . . ${with_dbussystemservicedir}
854 bash completions dir: . . . . . . ${with_bashcompletiondir}
855 zsh completions dir: . . . . . . . ${with_zshcompletiondir}
856 maximum system UID: . . . . . . . ${SYSTEM_UID_MAX}
857 maximum system GID: . . . . . . . ${SYSTEM_GID_MAX}
859 CFLAGS: . . . . . . . . . . . . . ${OUR_CFLAGS} ${CFLAGS}
860 CPPFLAGS: . . . . . . . . . . . . ${OUR_CPPFLAGS} ${CPPFLAGS}
861 LDFLAGS: . . . . . . . . . . . . . ${OUR_LDFLAGS} ${LDFLAGS}