summaryrefslogtreecommitdiffstats
path: root/meta-oe/classes/systemd.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/classes/systemd.bbclass')
-rw-r--r--meta-oe/classes/systemd.bbclass78
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-oe/classes/systemd.bbclass b/meta-oe/classes/systemd.bbclass
new file mode 100644
index 000000000..83833db6c
--- /dev/null
+++ b/meta-oe/classes/systemd.bbclass
@@ -0,0 +1,78 @@
1SYSTEMDPN ?= "${PN}"
2
3DEPENDS_append = " systemd-systemctl-native"
4RDEPENDS_${SYSTEMDPN}_append = " systemd"
5
6systemd_postinst() {
7OPTS=""
8
9if [ -n "$D" ]; then
10 OPTS="--root=$D"
11fi
12
13systemctl $OPTS enable ${SYSTEMD_SERVICE}
14
15if [ -z "$D" ]; then
16 systemctl start ${SYSTEMD_SERVICE}
17fi
18}
19
20systemd_prerm() {
21if [ -z "$D" ]; then
22 systemctl stop ${SYSTEMD_SERVICE}
23fi
24}
25
26systemd_postrm() {
27systemctl disable ${SYSTEMD_SERVICE}
28}
29
30def systemd_after_parse(d):
31 if bb.data.getVar('SYSTEMD_PACKAGES', d) == None:
32 if bb.data.getVar('SYSTEMD_SERVICE', d) == None:
33 raise bb.build.FuncFailed, "%s inherits systemd but doesn't set SYSTEMD_SERVICE" % bb.data.getVar('FILE', d)
34
35python __anonymous() {
36 systemd_after_parse(d)
37}
38
39python populate_packages_prepend () {
40 def systemd_package(pkg):
41 bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg)
42 localdata = bb.data.createCopy(d)
43 overrides = bb.data.getVar("OVERRIDES", localdata, 1)
44 bb.data.setVar("OVERRIDES", "%s:%s" % (pkg, overrides), localdata)
45 bb.data.update_data(localdata)
46
47 """
48 systemd postinst is appended here because pkg_postinst may require to
49 execute on the target. Not doing so may cause systemd postinst invoked
50 twice to cause unwanted warnings.
51 """
52 postinst = bb.data.getVar('pkg_postinst', localdata, 1)
53 if not postinst:
54 postinst = '#!/bin/sh\n'
55 postinst += bb.data.getVar('systemd_postinst', localdata, 1)
56 bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d)
57
58 prerm = bb.data.getVar('pkg_prerm', localdata, 1)
59 if not prerm:
60 prerm = '#!/bin/sh\n'
61 prerm += bb.data.getVar('systemd_prerm', localdata, 1)
62 bb.data.setVar('pkg_prerm_%s' % pkg, prerm, d)
63
64 postrm = bb.data.getVar('pkg_postrm', localdata, 1)
65 if not postrm:
66 postrm = '#!/bin/sh\n'
67 postrm += bb.data.getVar('systemd_postrm', localdata, 1)
68 bb.data.setVar('pkg_postrm_%s' % pkg, postrm, d)
69
70 pkgs = bb.data.getVar('SYSTEMD_PACKAGES', d, 1)
71 if pkgs == None:
72 pkgs = bb.data.getVar('SYSTEMDPN', d, 1)
73 packages = (bb.data.getVar('PACKAGES', d, 1) or "").split()
74 if not pkgs in packages and packages != []:
75 pkgs = packages[0]
76 for pkg in pkgs.split():
77 systemd_package(pkg)
78}