/[gentoo-x86]/eclass/systemd.eclass
Gentoo

Diff of /eclass/systemd.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 Revision 1.27
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2013 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/systemd.eclass,v 1.2 2011/05/04 16:02:10 mgorny Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/systemd.eclass,v 1.27 2013/09/11 07:58:00 mgorny Exp $
4 4
5# @ECLASS: systemd.eclass 5# @ECLASS: systemd.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# mgorny@gentoo.org 7# systemd@gentoo.org
8# @BLURB: helper functions to install systemd units 8# @BLURB: helper functions to install systemd units
9# @DESCRIPTION: 9# @DESCRIPTION:
10# This eclass provides a set of functions to install unit files for 10# This eclass provides a set of functions to install unit files for
11# sys-apps/systemd within ebuilds. 11# sys-apps/systemd within ebuilds.
12# @EXAMPLE: 12# @EXAMPLE:
13# 13#
14# @CODE 14# @CODE
15# inherit autotools-utils systemd 15# inherit autotools-utils systemd
16# 16#
17# src_configure() { 17# src_configure() {
18# local myeconfargs=( 18# local myeconfargs=(
19# --enable-foo 19# --enable-foo
20# --disable-bar 20# --disable-bar
21# ) 21# )
23# systemd_to_myeconfargs 23# systemd_to_myeconfargs
24# autotools-utils_src_configure 24# autotools-utils_src_configure
25# } 25# }
26# @CODE 26# @CODE
27 27
28inherit toolchain-funcs
29
28case ${EAPI:-0} in 30case ${EAPI:-0} in
29 0|1|2|3|4) ;; 31 0|1|2|3|4|5) ;;
30 *) die "${ECLASS}.eclass API in EAPI ${EAPI} not yet established." 32 *) die "${ECLASS}.eclass API in EAPI ${EAPI} not yet established."
31esac 33esac
34
35DEPEND="virtual/pkgconfig"
36
37# @FUNCTION: _systemd_get_unitdir
38# @INTERNAL
39# @DESCRIPTION:
40# Get unprefixed unitdir.
41_systemd_get_unitdir() {
42 if $(tc-getPKG_CONFIG) --exists systemd; then
43 echo "$($(tc-getPKG_CONFIG) --variable=systemdsystemunitdir systemd)"
44 else
45 echo /usr/lib/systemd/system
46 fi
47}
32 48
33# @FUNCTION: systemd_get_unitdir 49# @FUNCTION: systemd_get_unitdir
34# @DESCRIPTION: 50# @DESCRIPTION:
35# Output the path for the systemd unit directory (not including ${D}). 51# Output the path for the systemd unit directory (not including ${D}).
36# This function always succeeds, even if systemd is not installed. 52# This function always succeeds, even if systemd is not installed.
37systemd_get_unitdir() { 53systemd_get_unitdir() {
54 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
38 debug-print-function ${FUNCNAME} "${@}" 55 debug-print-function ${FUNCNAME} "${@}"
39 56
57 echo "${EPREFIX}$(_systemd_get_unitdir)"
58}
59
60# @FUNCTION: _systemd_get_userunitdir
61# @INTERNAL
62# @DESCRIPTION:
63# Get unprefixed userunitdir.
64_systemd_get_userunitdir() {
65 if $(tc-getPKG_CONFIG) --exists systemd; then
66 echo "$($(tc-getPKG_CONFIG) --variable=systemduserunitdir systemd)"
67 else
40 echo -n /lib/systemd/system 68 echo /usr/lib/systemd/user
69 fi
70}
71
72# @FUNCTION: systemd_get_userunitdir
73# @DESCRIPTION:
74# Output the path for the systemd user unit directory (not including
75# ${D}). This function always succeeds, even if systemd is not
76# installed.
77systemd_get_userunitdir() {
78 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
79 debug-print-function ${FUNCNAME} "${@}"
80
81 echo "${EPREFIX}$(_systemd_get_userunitdir)"
82}
83
84# @FUNCTION: _systemd_get_utildir
85# @INTERNAL
86# @DESCRIPTION:
87# Get unprefixed utildir.
88_systemd_get_utildir() {
89 if $(tc-getPKG_CONFIG) --exists systemd; then
90 echo "$($(tc-getPKG_CONFIG) --variable=systemdutildir systemd)"
91 else
92 echo /usr/lib/systemd
93 fi
94}
95
96# @FUNCTION: systemd_get_utildir
97# @DESCRIPTION:
98# Output the path for the systemd utility directory (not including
99# ${D}). This function always succeeds, even if systemd is not
100# installed.
101systemd_get_utildir() {
102 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
103 debug-print-function ${FUNCNAME} "${@}"
104
105 echo "${EPREFIX}$(_systemd_get_utildir)"
41} 106}
42 107
43# @FUNCTION: systemd_dounit 108# @FUNCTION: systemd_dounit
44# @USAGE: unit1 [...] 109# @USAGE: unit1 [...]
45# @DESCRIPTION: 110# @DESCRIPTION:
47# and non-fatal in earlier EAPIs. 112# and non-fatal in earlier EAPIs.
48systemd_dounit() { 113systemd_dounit() {
49 debug-print-function ${FUNCNAME} "${@}" 114 debug-print-function ${FUNCNAME} "${@}"
50 115
51 ( 116 (
52 insinto "$(systemd_get_unitdir)" 117 insinto "$(_systemd_get_unitdir)"
53 doins "${@}" 118 doins "${@}"
119 )
120}
121
122# @FUNCTION: systemd_newunit
123# @USAGE: oldname newname
124# @DESCRIPTION:
125# Install systemd unit with a new name. Uses newins, thus it is fatal
126# in EAPI 4 and non-fatal in earlier EAPIs.
127systemd_newunit() {
128 debug-print-function ${FUNCNAME} "${@}"
129
130 (
131 insinto "$(_systemd_get_unitdir)"
132 newins "${@}"
133 )
134}
135
136# @FUNCTION: systemd_dotmpfilesd
137# @USAGE: tmpfilesd1 [...]
138# @DESCRIPTION:
139# Install systemd tmpfiles.d files. Uses doins, thus it is fatal
140# in EAPI 4 and non-fatal in earlier EAPIs.
141systemd_dotmpfilesd() {
142 debug-print-function ${FUNCNAME} "${@}"
143
144 for f; do
145 [[ ${f} == *.conf ]] \
146 || die 'tmpfiles.d files need to have .conf suffix.'
147 done
148
149 (
150 insinto /usr/lib/tmpfiles.d/
151 doins "${@}"
152 )
153}
154
155# @FUNCTION: systemd_newtmpfilesd
156# @USAGE: oldname newname.conf
157# @DESCRIPTION:
158# Install systemd tmpfiles.d file under a new name. Uses newins, thus it
159# is fatal in EAPI 4 and non-fatal in earlier EAPIs.
160systemd_newtmpfilesd() {
161 debug-print-function ${FUNCNAME} "${@}"
162
163 [[ ${2} == *.conf ]] \
164 || die 'tmpfiles.d files need to have .conf suffix.'
165
166 (
167 insinto /usr/lib/tmpfiles.d/
168 newins "${@}"
54 ) 169 )
55} 170}
56 171
57# @FUNCTION: systemd_enable_service 172# @FUNCTION: systemd_enable_service
58# @USAGE: target service 173# @USAGE: target service
65 180
66 [[ ${#} -eq 2 ]] || die "Synopsis: systemd_enable_service target service" 181 [[ ${#} -eq 2 ]] || die "Synopsis: systemd_enable_service target service"
67 182
68 local target=${1} 183 local target=${1}
69 local service=${2} 184 local service=${2}
70 local ud=$(systemd_get_unitdir) 185 local ud=$(_systemd_get_unitdir)
186 local destname=${service##*/}
71 187
72 dodir "${ud}"/"${target}".wants && \ 188 dodir "${ud}"/"${target}".wants && \
73 dosym ../"${service}" "${ud}"/"${target}".wants 189 dosym ../"${service}" "${ud}"/"${target}".wants/"${destname}"
74} 190}
75 191
76# @FUNCTION: systemd_with_unitdir 192# @FUNCTION: systemd_with_unitdir
193# @USAGE: [configure option]
77# @DESCRIPTION: 194# @DESCRIPTION:
78# Output '--with-systemdsystemunitdir' as expected by systemd-aware configure 195# Output '--with-systemdsystemunitdir' as expected by systemd-aware configure
79# scripts. This function always succeeds. Its output may be quoted in order 196# scripts. This function always succeeds. Its output may be quoted in order
80# to preserve whitespace in paths. systemd_to_myeconfargs() is preferred over 197# to preserve whitespace in paths. systemd_to_myeconfargs() is preferred over
81# this function. 198# this function.
199#
200# If upstream does use invalid configure option to handle installing systemd
201# units (e.g. `--with-systemdunitdir'), you can pass the 'suffix' as an optional
202# argument to this function (`$(systemd_with_unitdir systemdunitdir)'). Please
203# remember to report a bug upstream as well.
82systemd_with_unitdir() { 204systemd_with_unitdir() {
83 debug-print-function ${FUNCNAME} "${@}" 205 debug-print-function ${FUNCNAME} "${@}"
206 local optname=${1:-systemdsystemunitdir}
84 207
208 echo --with-${optname}="$(systemd_get_unitdir)"
209}
210
211# @FUNCTION: systemd_with_utildir
212# @DESCRIPTION:
213# Output '--with-systemdsystemutildir' as used by some packages to install
214# systemd helpers. This function always succeeds. Its output may be quoted
215# in order to preserve whitespace in paths.
216systemd_with_utildir() {
217 debug-print-function ${FUNCNAME} "${@}"
218
85 echo -n --with-systemdsystemunitdir="$(systemd_get_unitdir)" 219 echo --with-systemdutildir="$(systemd_get_utildir)"
86} 220}
87 221
88# @FUNCTION: systemd_to_myeconfargs 222# @FUNCTION: systemd_to_myeconfargs
89# @DESCRIPTION: 223# @DESCRIPTION:
90# Add '--with-systemdsystemunitdir' as expected by systemd-aware configure 224# Add '--with-systemdsystemunitdir' as expected by systemd-aware configure
96 myeconfargs=( 230 myeconfargs=(
97 "${myeconfargs[@]}" 231 "${myeconfargs[@]}"
98 --with-systemdsystemunitdir="$(systemd_get_unitdir)" 232 --with-systemdsystemunitdir="$(systemd_get_unitdir)"
99 ) 233 )
100} 234}
235
236# @FUNCTION: systemd_update_catalog
237# @DESCRIPTION:
238# Update the journald catalog. This needs to be called after installing
239# or removing catalog files.
240#
241# If systemd is not installed, no operation will be done. The catalog
242# will be (re)built once systemd is installed.
243#
244# See: http://www.freedesktop.org/wiki/Software/systemd/catalog
245systemd_update_catalog() {
246 debug-print-function ${FUNCNAME} "${@}"
247
248 # Make sure to work on the correct system.
249
250 local journalctl=${EPREFIX}/usr/bin/journalctl
251 if [[ -x ${journalctl} ]]; then
252 ebegin "Updating systemd journal catalogs"
253 journalctl --update-catalog
254 eend $?
255 else
256 debug-print "${FUNCNAME}: journalctl not found."
257 fi
258}
259
260# @FUNCTION: systemd_is_booted
261# @DESCRIPTION:
262# Check whether the system was booted using systemd.
263#
264# This should be used purely for informational purposes, e.g. warning
265# user that he needs to use systemd. Installed files or application
266# behavior *must not* rely on this. Please remember to check MERGE_TYPE
267# to not trigger the check on binary package build hosts!
268#
269# Returns 0 if systemd is used to boot the system, 1 otherwise.
270#
271# See: man sd_booted
272systemd_is_booted() {
273 debug-print-function ${FUNCNAME} "${@}"
274
275 [[ -d /run/systemd/system ]]
276 local ret=${?}
277
278 debug-print "${FUNCNAME}: [[ -d /run/systemd/system ]] -> ${ret}"
279 return ${ret}
280}

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.27

  ViewVC Help
Powered by ViewVC 1.1.20