chiark / gitweb /
2f0eb62f1a950c5e446fc3ccc36829a419f3edeb
[elogind.git] / configure.ac
1 #
2 #  This file is part of elogind.
3 #
4 #  Copyright 2010-2012 Lennart Poettering
5 #  Copyright 2010-2012 Kay Sievers
6 #
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.
11 #
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.
16 #
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/>.
19
20 AC_PREREQ([2.64])
21
22 AC_INIT([elogind],
23         [233],
24         [https://github.com/elogind/elogind/issues],
25         [elogind],
26         [https://github.com/elogind/elogind])
27
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])
32
33 AC_USE_SYSTEM_EXTENSIONS
34 AC_SYS_LARGEFILE
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])
39 AC_CANONICAL_HOST
40 AC_DEFINE_UNQUOTED([CANONICAL_HOST], "$host", [Canonical host string.])
41
42 AC_PROG_CC_C99
43
44 AX_COMPILER_VENDOR
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], [:])
49 ])
50
51 LT_PREREQ(2.2)
52 LT_INIT([disable-static])
53
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])])
56
57 SET_ARCH(X86_64, x86_64*)
58 SET_ARCH(IA32, i*86*)
59 SET_ARCH(MIPS, mips*)
60 SET_ARCH(AARCH64, aarch64*)
61
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])
69                      enable_nls=no])
70              ])
71       ])
72
73 AM_NLS
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])
77 ])
78
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)
83 ])
84
85 GETTEXT_PACKAGE=elogind
86 AC_SUBST(GETTEXT_PACKAGE)
87 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [elogind])
88
89 AC_PROG_MKDIR_P
90 AC_PROG_LN_S
91 AC_PROG_SED
92 AC_PROG_GREP
93 AC_PROG_AWK
94
95 AC_PATH_PROG([M4], [m4])
96 AC_PATH_PROG([XSLTPROC], [xsltproc])
97
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])
101
102 AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])])
103
104 M4_DEFINES=
105
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])
110 fi
111
112
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
119 with_cgroupctrl=
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])
130
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"
142                         ])
143         ], [
144                 # 'auto' but no cgroup fs is a problem.
145                 with_cgroupctrl=""
146         ])
147 ])
148
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])
152
153 # If this was not possible, /proc/self/cgroup not mounted yet, and 'auto'
154 # chosen, error out.
155 AS_IF(  [test -z "$with_cgroupctrl"],
156         AC_MSG_ERROR([No running cgroup controller found]))
157
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"
170       ])
171
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"
183       ])
184
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"
188
189 CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
190         -pipe \
191         -Wall \
192         -Wextra \
193         -Wundef \
194         -Wlogical-op \
195         -Wmissing-include-dirs \
196         -Wold-style-definition \
197         -Wpointer-arith \
198         -Winit-self \
199         -Wdeclaration-after-statement \
200         -Wfloat-equal \
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 \
207         -Werror=format=2 \
208         -Wstrict-prototypes \
209         -Wredundant-decls \
210         -Wmissing-noreturn \
211         -Wshadow \
212         -Wendif-labels \
213         -Wstrict-aliasing=2 \
214         -Wwrite-strings \
215         -Wno-unused-parameter \
216         -Wno-missing-field-initializers \
217         -Wno-unused-result \
218         -Wno-format-signedness \
219         -Werror=overflow \
220         -Wdate-time \
221         -Wnested-externs \
222         -ffast-math \
223         -fno-common \
224         -fdiagnostics-show-option \
225         -fno-strict-aliasing \
226         -fvisibility=hidden \
227         -fstack-protector \
228         -fstack-protector-strong \
229         -fPIE \
230         --param=ssp-buffer-size=4])
231
232 CC_CHECK_FLAG_APPEND([with_cflags], [CFLAGS], [-Werror=shadow], [
233 #include <time.h>
234 #include <inttypes.h>
235 typedef uint64_t usec_t;
236 usec_t now(clockid_t clock);
237 int main(void) {
238         struct timespec now;
239         return 0;
240 }
241 ])
242
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 \
247         ])])
248
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])])
257
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])])
263
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])])
269
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])])
275
276 # ------------------------------------------------------------------------------
277 CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
278         -Wl,--as-needed \
279         -Wl,--no-undefined \
280         -Wl,-z,relro \
281         -Wl,-z,now \
282         -pie \
283         -Wl,-fuse-ld=gold])
284
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")
289
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>
300 ])
301
302 GPERF_TEST="$(echo foo,bar | ${GPERF} -L ANSI-C)"
303 save_CFLAGS="$CFLAGS"
304 CFLAGS="$CFLAGS -Wno-error"
305 AC_COMPILE_IFELSE(
306         [AC_LANG_PROGRAM([
307                 #include <string.h>
308                 const char * in_word_set(const char *, size_t);
309                 $GPERF_TEST]
310         )],
311         [GPERF_LEN_TYPE=size_t],
312         [AC_COMPILE_IFELSE(
313                 [AC_LANG_PROGRAM([
314                         #include <string.h>
315                         const char * in_word_set(const char *, unsigned);
316                         $GPERF_TEST]
317                 )],
318                 [GPERF_LEN_TYPE=unsigned],
319                 [AC_MSG_ERROR([** unable to determine gperf len type])]
320         )]
321 )
322 CFLAGS="$save_CFLAGS"
323
324 AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type])
325
326 # ------------------------------------------------------------------------------
327 # we use python to build the man page index
328 have_python=no
329 AC_ARG_WITH([python],
330         [AS_HELP_STRING([--without-python], [disable building the man page index and systemd-python (default: test)])])
331
332 have_lxml=no
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])])
341         ])
342 ])
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])])
348 ])
349 AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = "xyes"])
350
351 # ------------------------------------------------------------------------------
352
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>])
356
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])
360 ])
361
362
363
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], [], [])
367
368 save_LIBS="$LIBS"
369 LIBS=
370 AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
371 CAP_LIBS="$LIBS"
372 AC_SUBST(CAP_LIBS)
373
374 AC_CHECK_FUNCS([__secure_getenv secure_getenv])
375 AC_CHECK_DECLS([
376         memfd_create,
377         gettid,
378         pivot_root,
379         name_to_handle_at,
380         setns,
381         getrandom,
382         renameat2,
383         kcmp,
384         keyctl,
385         LO_FLAGS_PARTSCAN,
386         copy_file_range,
387         explicit_bzero],
388                 [], [], [[
389 #include <sys/types.h>
390 #include <unistd.h>
391 #include <sys/mount.h>
392 #include <fcntl.h>
393 #include <sched.h>
394 #include <string.h>
395 #include <linux/loop.h>
396 #include <linux/random.h>
397 ]])
398
399 AC_CHECK_TYPES([char16_t, char32_t, key_serial_t, struct ethtool_link_settings],
400                [], [], [[
401 #include <uchar.h>
402 #include <linux/ethtool.h>
403 ]])
404
405 AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE,
406                 IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
407                 IFLA_VRF_TABLE,
408                 IFLA_MACVLAN_FLAGS,
409                 IFLA_IPVLAN_MODE,
410                 IFLA_VTI_REMOTE,
411                 IFLA_PHYS_PORT_ID,
412                 IFLA_BOND_AD_INFO,
413                 IFLA_VLAN_PROTOCOL,
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,
421                 NDA_IFINDEX,
422                 IFA_FLAGS],
423 [], [], [[
424 #include <inttypes.h>
425 #include <netinet/in.h>
426 #include <netinet/ether.h>
427 #include <linux/rtnetlink.h>
428 #include <net/if.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>
435 ]])
436
437 # This makes sure pkg.m4 is available.
438 m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
439
440
441 # ------------------------------------------------------------------------------
442 PKG_CHECK_MODULES(UDEV, [libudev])
443 dnl
444 AC_ARG_WITH([udevrulesdir],
445             AS_HELP_STRING([--with-udevrulesdir=DIR], [Directory for udev rules files]),
446             [],
447             [with_udevrulesdir=$($PKG_CONFIG --variable=udevdir udev)/rules.d])
448 AC_SUBST([udevrulesdir], [$with_udevrulesdir])
449
450 AC_ARG_WITH([udevbindir],
451             AS_HELP_STRING([--with-udevbindir=DIR], [Directory for udev binary files]),
452             [],
453             [with_udevbindir=$($PKG_CONFIG --variable=udevdir udev)])
454 AC_SUBST([udevbindir], [$with_udevbindir])
455
456 # ------------------------------------------------------------------------------
457 have_utmp=yes
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"])
465
466 # ------------------------------------------------------------------------------
467 have_coverage=no
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])
473         else
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])
478                 else
479                         have_coverage=yes
480                         CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
481                         -fprofile-arcs \
482                         -ftest-coverage])
483                         AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
484                 fi
485         fi
486 fi
487 AM_CONDITIONAL(ENABLE_COVERAGE, [test "$have_coverage" = "yes"])
488
489 # ------------------------------------------------------------------------------
490 have_selinux=no
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])
495                  have_selinux=yes
496                  M4_DEFINES="$M4_DEFINES -DHAVE_SELINUX"],
497                 [have_selinux=no])
498         if test "x$have_selinux" = xno -a "x$enable_selinux" = xyes; then
499                 AC_MSG_ERROR([*** SELinux support requested but libraries not found])
500         fi
501 fi
502 AM_CONDITIONAL(HAVE_SELINUX, [test "$have_selinux" = "yes"])
503
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)
514
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
524
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])
533
534 # ------------------------------------------------------------------------------
535 AC_ARG_ENABLE([pam],
536         AS_HELP_STRING([--disable-pam],[disable optional PAM support]),
537                 [case "${enableval}" in
538                         yes) have_pam=yes ;;
539                         no) have_pam=no ;;
540                         *) AC_MSG_ERROR(bad value ${enableval} for --disable-pam) ;;
541                 esac],
542                 [have_pam=auto])
543
544 if test "x${have_pam}" != xno ; then
545         AC_CHECK_HEADERS(
546                 [security/pam_modules.h security/pam_modutil.h security/pam_ext.h],
547                 [have_pam=yes],
548                 [if test "x$have_pam" = xyes ; then
549                         AC_MSG_ERROR([*** PAM headers not found.])
550                 fi])
551
552         AC_CHECK_LIB(
553                 [pam],
554                 [pam_syslog],
555                 [have_pam=yes],
556                 [if test "x$have_pam" = xyes ; then
557                         AC_MSG_ERROR([*** libpam not found.])
558                 fi])
559
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"
564         else
565                 have_pam=no
566         fi
567 else
568         PAM_LIBS=
569 fi
570 AC_SUBST(PAM_LIBS)
571 AM_CONDITIONAL([HAVE_PAM], [test "x$have_pam" != xno])
572
573 # ------------------------------------------------------------------------------
574 AC_ARG_ENABLE([acl],
575         AS_HELP_STRING([--disable-acl],[disable optional ACL support]),
576                 [case "${enableval}" in
577                         yes) have_acl=yes ;;
578                         no) have_acl=no ;;
579                         *) AC_MSG_ERROR(bad value ${enableval} for --disable-acl) ;;
580                 esac],
581                 [have_acl=auto])
582
583 if test "x${have_acl}" != xno ; then
584         AC_CHECK_HEADERS(
585                 [sys/acl.h acl/libacl.h],
586                 [have_acl=yes],
587                 [if test "x$have_acl" = xyes ; then
588                         AC_MSG_ERROR([*** ACL headers not found.])
589                 fi])
590
591         AC_CHECK_LIB(
592                 [acl],
593                 [acl_get_file],
594                 [have_acl=yes],
595                 [if test "x$have_acl" = xyes ; then
596                         AC_MSG_ERROR([*** libacl not found.])
597                 fi])
598
599         if test "x$have_acl" = xyes ; then
600                 ACL_LIBS="-lacl"
601                 AC_DEFINE(HAVE_ACL, 1, [ACL available])
602                 M4_DEFINES="$M4_DEFINES -DHAVE_ACL"
603         else
604                 have_acl=no
605         fi
606 else
607         ACL_LIBS=
608 fi
609 AC_SUBST(ACL_LIBS)
610 AM_CONDITIONAL([HAVE_ACL], [test "x$have_acl" != xno])
611
612 # ------------------------------------------------------------------------------
613 AC_ARG_ENABLE([smack], AS_HELP_STRING([--disable-smack],[disable optional SMACK support]),
614                 [case "${enableval}" in
615                         yes) have_smack=yes ;;
616                         no) have_smack=no ;;
617                         *) AC_MSG_ERROR(bad value ${enableval} for --disable-smack) ;;
618                 esac],
619                 [have_smack=auto])
620
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"
624         have_smack=yes
625 fi
626
627 AM_CONDITIONAL([HAVE_SMACK], [test "x$have_smack" = "xyes"])
628
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],
634         [])
635
636 if test "x${have_smack_run_label}" = xyes; then
637         M4_DEFINES="$M4_DEFINES -DHAVE_SMACK_RUN_LABEL"
638 fi
639
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])],
644         [])
645
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`"])
652
653 AC_DEFINE_UNQUOTED(SYSTEM_UID_MAX, [$SYSTEM_UID_MAX], [Maximum System UID])
654 AC_SUBST(SYSTEM_UID_MAX)
655
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`"])
662
663 AC_DEFINE_UNQUOTED(SYSTEM_GID_MAX, [$SYSTEM_GID_MAX], [Maximum System GID])
664 AC_SUBST(SYSTEM_GID_MAX)
665
666 # ------------------------------------------------------------------------------
667 have_polkit=no
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])
671         have_polkit=yes
672 fi
673 AM_CONDITIONAL(ENABLE_POLKIT, [test "x$have_polkit" = "xyes"])
674
675 # ------------------------------------------------------------------------------
676 AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h valgrind/valgrind.h])
677
678 # ------------------------------------------------------------------------------
679 have_manpages=no
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"])
684
685 # ------------------------------------------------------------------------------
686 AC_SUBST(M4_DEFINES)
687
688 AC_ARG_WITH([dbuspolicydir],
689         AS_HELP_STRING([--with-dbuspolicydir=DIR], [D-Bus policy directory]),
690         [],
691         [with_dbuspolicydir=${datadir}/dbus-1/system.d])
692 AX_NORMALIZE_PATH([with_dbuspolicydir])
693
694 AC_ARG_WITH([dbussystemservicedir],
695         AS_HELP_STRING([--with-dbussystemservicedir=DIR], [D-Bus system service directory]),
696         [],
697         [with_dbussystemservicedir=${datadir}/dbus-1/system-services])
698 AX_NORMALIZE_PATH([with_dbussystemservicedir])
699
700 AC_ARG_WITH([bashcompletiondir],
701         AS_HELP_STRING([--with-bashcompletiondir=DIR], [bash completions directory]),
702         [],
703         [AS_IF([$($PKG_CONFIG --exists bash-completion)], [
704                 with_bashcompletiondir=$($PKG_CONFIG --variable=completionsdir bash-completion)
705         ] , [
706                 with_bashcompletiondir=${datadir}/bash-completion/completions
707         ])])
708 AM_CONDITIONAL(ENABLE_BASH_COMPLETION, [test "$with_bashcompletiondir" != "no"])
709 AX_NORMALIZE_PATH([with_bashcompletiondir])
710
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])
716
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
725         with_rootprefix="/"
726 fi
727 AX_NORMALIZE_PATH([with_rootprefix])
728
729 AC_ARG_WITH([rootlibdir],
730         AS_HELP_STRING([--with-rootlibdir=DIR], [root directory for libraries necessary for boot]),
731         [],
732         [with_rootlibdir=${libdir}])
733 AX_NORMALIZE_PATH([with_rootlibdir])
734
735 AC_ARG_WITH([pamlibdir],
736         AS_HELP_STRING([--with-pamlibdir=DIR], [directory for PAM modules]),
737         [],
738         [with_pamlibdir=${with_rootlibdir}/security])
739 AX_NORMALIZE_PATH([with_pamlibdir])
740
741 AC_ARG_WITH([pamconfdir],
742         AS_HELP_STRING([--with-pamconfdir=DIR], [directory for PAM configuration (pass no to disable installing)]),
743         [],
744         [with_pamconfdir=${sysconfdir}/pam.d])
745 AM_CONDITIONAL(ENABLE_PAM_CONFIG, [test "$with_pamconfdir" != "no"])
746 AX_NORMALIZE_PATH([with_pamconfdir])
747
748 AC_ARG_ENABLE([split-usr],
749         AS_HELP_STRING([--enable-split-usr], [assume that /bin, /sbin aren\'t symlinks into /usr]),
750         [],
751         [AS_IF([test "x${ac_default_prefix}" != "x${with_rootprefix}"], [
752                 enable_split_usr=yes
753         ], [
754                 enable_split_usr=no
755         ])])
756
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])
759 ])
760 AM_CONDITIONAL(ENABLE_SPLIT_USR, [test "x${enable_split_usr}" = "xyes"])
761
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])
765 ])
766
767 AC_ARG_ENABLE(tests,
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])
771
772 AC_ARG_ENABLE(debug,
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"
776         fi
777         saved_ifs="$IFS"
778         IFS="$IFS$PATH_SEPARATOR,"
779         for name in $enableval; do
780                 case $name in
781                 elogind)
782                         enable_debug_elogind=yes
783                         ;;
784                 hashmap)
785                         enable_debug_hashmap=yes
786                         ;;
787                 mmap-cache)
788                         enable_debug_mmap_cache=yes
789                         ;;
790                 esac
791         done
792         IFS="$saved_ifs"],[])
793
794 enable_debug=""
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"
798 ])
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"
802 ])
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"
806 ])
807 test -z "$enable_debug" && enable_debug="none"
808
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])
818
819 AC_CONFIG_FILES([
820         Makefile
821         po/Makefile.in
822 ])
823
824 AC_OUTPUT
825 AC_MSG_RESULT([
826         $PACKAGE_NAME $VERSION
827
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}
842
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}
858
859         CFLAGS: . . . . . . . . . . . . .  ${OUR_CFLAGS} ${CFLAGS}
860         CPPFLAGS: . . . . . . . . . . . .  ${OUR_CPPFLAGS} ${CPPFLAGS}
861         LDFLAGS: . . . . . . . . . . . . . ${OUR_LDFLAGS} ${LDFLAGS}
862 ])