summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorSven Eden <yamakuzure@gmx.net>2017-06-29 11:14:20 +0200
committerSven Eden <yamakuzure@gmx.net>2017-06-29 11:24:50 +0200
commitdaa9b80cd2a7d07c174ba5ee952bb6a995131260 (patch)
tree262deda8ad23eb8ee776bcfade331d2c3288193d /configure.ac
parent55d5b3b81648d8e0470b01b48d7a568f6792014f (diff)
Prep v231.3: Add --with-cgroup-controller=name to configure
This option can be used, if elogind is built while a different cgroup controller than planned is active. A valid scenario could be a gentoo user switching from systemd to openrc+elogind.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac52
1 files changed, 42 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index 563340653..2848827d0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -111,20 +111,52 @@ fi
# ------------------------------------------------------------------------------
-# Find running cgroup controller
+# Let users set the cgroup controller to use, in case the target controller
+# isn't currently running the show.
+# Example: Gentoo Linux, user wants to switch from systemd to openrc+elogind,
+# and emerges elogind before having booted the machine with openrc.
+# See: https://github.com/elogind/elogind/issues/18
with_cgroupctrl=
-AS_IF( [test -f /proc/self/cgroup], [
- # If the init system is a cgroup controler, it will be position 1.
- # Secondary controllers, like cgmanager, do not work.
- with_cgroupctrl=`grep "^1:name=" /proc/self/cgroup | cut -d ':' -f 2`
- AS_IF( [test -z "$with_cgroupctrl"], [
- # Try to be our own cgroup controller
- with_cgroupctrl="name=elogind"
+AC_ARG_WITH([cgroup-controller],
+ AS_HELP_STRING([--with-cgroup-controller=name],
+ [Set the name of the cgroup controller to use.
+ Use this when the autodetection fails, or you plan to use your system with a different controller than the one in place now.
+ The value 'auto' (default) detects the running controller.
+ The values 'none' and 'elogind' will cause elogind to be its own (very limited) controller.
+ When elogind shall be its own controller, there *MUST NOT* be any other controller running!
+ Another popular controller would be 'openrc'.]),
+ [with_cgroupctrl=$withval],
+ [with_cgroupctrl=auto])
+
+# ------------------------------------------------------------------------------
+# Find running cgroup controller, if none was set
+AS_IF( [test "x$with_cgroupctrl" = "xauto"], [
+ AS_IF([test -f /proc/self/cgroup], [
+ # If the init system is a cgroup controler, it will be position 1.
+ # Secondary controllers, like cgmanager, do not work.
+ with_cgroupctrl=`grep "^1:name=" /proc/self/cgroup | \
+ sed -n 's/.*=//p' | sed -e 's/:.*$//'`
+ AS_IF( [test -z "$with_cgroupctrl"], [
+ # Try to be our own cgroup controller
+ with_cgroupctrl="elogind"
+ ])
+ ], [
+ # 'auto' but no cgroup fs is a problem.
+ with_cgroupctrl=""
])
])
-AS_IF( [test -z "$with_cgroupctrl"],
- AC_MSG_ERROR([No running cgroup controller found]))
+# If the user specified 'none', switch to 'elogind'.
+# 'none' is allowed, as this means "there is no controller now"
+AS_IF( [test "x$with_cgroupctrl" = "xnone"], [with_cgroupctrl=elogind])
+
+# If this was not possible, /proc/self/cgroup not mounted yet, and 'auto'
+# chosen, error out.
+AS_IF( [test -z "$with_cgroupctrl"],
+ AC_MSG_ERROR([No running cgroup controller found]), [
+ # Otherwise add the 'name=' prefix
+ with_cgroupctrl="name=$with_cgroupctrl"
+])
# ------------------------------------------------------------------------------
address_sanitizer_cflags=