-AS_IF( [test -f /proc/self/cgroup],
- [with_cgroupctrl=`grep "^1:" /proc/self/cgroup | cut -d ':' -f 2`])
-AS_IF( [test -z "$with_cgroupctrl"],
- AC_MSG_ERROR([No running cgroup controller found]))
+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=""
+ ])
+])