/[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.29
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.29 2013/09/11 08:53:18 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 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# "$(systemd_with_unitdir)"
21# ) 22# )
22# 23#
23# systemd_to_myeconfargs 24# econf "${myeconfargs[@]}"
24# autotools-utils_src_configure
25# } 25# }
26# @CODE 26# @CODE
27 27
28inherit eutils 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: <unit>...
45# @DESCRIPTION: 110# @DESCRIPTION:
46# Install systemd unit(s). Uses doins, thus it is fatal in EAPI 4 111# Install systemd unit(s). Uses doins, thus it is fatal in EAPI 4
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 "${@}"
54 ) 119 )
55} 120}
56 121
122# @FUNCTION: systemd_newunit
123# @USAGE: <old-name> <new-name>
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: <tmpfilesd>...
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: <old-name> <new-name>.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 "${@}"
169 )
170}
171
57# @FUNCTION: systemd_enable_service 172# @FUNCTION: systemd_enable_service
58# @USAGE: target service 173# @USAGE: <target> <service>
59# @DESCRIPTION: 174# @DESCRIPTION:
60# Enable service in desired target, e.g. install a symlink for it. 175# Enable service in desired target, e.g. install a symlink for it.
61# Uses dosym, thus it is fatal in EAPI 4 and non-fatal in earlier 176# Uses dosym, thus it is fatal in EAPI 4 and non-fatal in earlier
62# EAPIs. 177# EAPIs.
63systemd_enable_service() { 178systemd_enable_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-name>]
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
91# scripts to the myeconfargs variable used by autotools-utils eclass. Handles 225# scripts to the myeconfargs variable used by autotools-utils eclass. Handles
92# quoting automatically. 226# quoting automatically.
93systemd_to_myeconfargs() { 227systemd_to_myeconfargs() {
94 debug-print-function ${FUNCNAME} "${@}" 228 debug-print-function ${FUNCNAME} "${@}"
95 229
230 eqawarn 'systemd_to_myeconfargs() is deprecated and will be removed on 2013-10-11.'
231 eqawarn 'Please use $(systemd_with_unitdir) instead.'
232
96 myeconfargs=( 233 myeconfargs=(
97 "${myeconfargs[@]}" 234 "${myeconfargs[@]}"
98 --with-systemdsystemunitdir="$(systemd_get_unitdir)" 235 --with-systemdsystemunitdir="$(systemd_get_unitdir)"
99 ) 236 )
100} 237}
238
239# @FUNCTION: systemd_update_catalog
240# @DESCRIPTION:
241# Update the journald catalog. This needs to be called after installing
242# or removing catalog files.
243#
244# If systemd is not installed, no operation will be done. The catalog
245# will be (re)built once systemd is installed.
246#
247# See: http://www.freedesktop.org/wiki/Software/systemd/catalog
248systemd_update_catalog() {
249 debug-print-function ${FUNCNAME} "${@}"
250
251 # Make sure to work on the correct system.
252
253 local journalctl=${EPREFIX}/usr/bin/journalctl
254 if [[ -x ${journalctl} ]]; then
255 ebegin "Updating systemd journal catalogs"
256 journalctl --update-catalog
257 eend $?
258 else
259 debug-print "${FUNCNAME}: journalctl not found."
260 fi
261}
262
263# @FUNCTION: systemd_is_booted
264# @DESCRIPTION:
265# Check whether the system was booted using systemd.
266#
267# This should be used purely for informational purposes, e.g. warning
268# user that he needs to use systemd. Installed files or application
269# behavior *must not* rely on this. Please remember to check MERGE_TYPE
270# to not trigger the check on binary package build hosts!
271#
272# Returns 0 if systemd is used to boot the system, 1 otherwise.
273#
274# See: man sd_booted
275systemd_is_booted() {
276 debug-print-function ${FUNCNAME} "${@}"
277
278 [[ -d /run/systemd/system ]]
279 local ret=${?}
280
281 debug-print "${FUNCNAME}: [[ -d /run/systemd/system ]] -> ${ret}"
282 return ${ret}
283}

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

  ViewVC Help
Powered by ViewVC 1.1.20