Add files found in SYSTEMD_SERVICE and add service files found at 'Also=' recursively. In case a file set in SYSTEMD_SERVICE build is aborted with an error message. For recipes with one *-systemd package and one service additional files are packed:
* all *@.service * some recipes add links to /dev/null. These are found by parsing also for 'Conflicts=' Signed-off-by: Andreas Müller <schnitzelt...@googlemail.com> --- meta-oe/classes/systemd.bbclass | 64 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-) diff --git a/meta-oe/classes/systemd.bbclass b/meta-oe/classes/systemd.bbclass index b2cf775..1e0f3e0 100644 --- a/meta-oe/classes/systemd.bbclass +++ b/meta-oe/classes/systemd.bbclass @@ -124,7 +124,71 @@ python populate_packages_prepend () { rdepends.append("systemd") bb.data.setVar('RDEPENDS_' + pkg, " " + " ".join(rdepends), d) + # add files to FILES_*-systemd if not already done + def systemd_append_file(pkg_systemd, file_append): + if os.path.exists(d.getVar('D', 1) + file_append): + var_name = "FILES_" + pkg_systemd + files = d.getVar(var_name, 0) or "" + d.setVar(var_name, "%s %s" % (files, file_append)) + else: + bb.debug(1, '%s is not appended to package %s' % (file_append, pkg_systemd)) + + # add systemd files to FILES_*-systemd, parse for Also= and follow recursive + def systemd_add_files_and_parse(pkg_systemd, path, service, keys): + systemd_append_file(pkg_systemd, path + service) + fullpath = d.getVar('D', 1) + path + service + for key in keys.split(): + # recurse all 'also' dependencies and add to files + cmd = "grep %s %s | sed 's,%s=,,g' | tr ',' '\\n'" % (key, fullpath, key) + pipe = os.popen(cmd, 'r') + line = pipe.readline() + while line: + line = line.replace('\n', '') + systemd_add_files_and_parse(pkg_systemd, path, line, keys) + line = pipe.readline() + pipe.close() + + # check service-files and call systemd_add_files_and_parse for each entry + def systemd_check_services(): + root = d.getVar('D', 1) + searchpaths = '/etc/systemd/system/ /lib/systemd/system/ /usr/lib/systemd/system/' + systemd_packages = d.getVar('SYSTEMD_PACKAGES', 1) + has_exactly_one_service = len(systemd_packages.split()) == 1 + if has_exactly_one_service: + systemd_services = d.getVar('SYSTEMD_SERVICE' + "_" + systemd_packages, 1) or d.getVar('SYSTEMD_SERVICE', 1) + has_exactly_one_service = len(systemd_services.split()) == 1 + + keys = 'Also' # Conflicts?? + # to match more cases, single service get's more + if has_exactly_one_service: + # single service gets also the /dev/null dummies + keys = 'Also Conflicts' + # parse *@.service files for recipes with one service + for path in searchpaths.split(): + cmd = "find ${D}/%s -maxdepth 1 -name '*@.service'" % path + pipe = os.popen(cmd, 'r') + line = pipe.readline() + while line: + line = os.path.basename(line.replace('\n', '')) + systemd_add_files_and_parse(systemd_packages, path, line, keys) + line = pipe.readline() + pipe.close() + # scan for all in SYSTEMD_SERVICE[] + for pkg_systemd in systemd_packages.split(): + systemd_services = d.getVar('SYSTEMD_SERVICE' + "_" + pkg_systemd, 1) or d.getVar('SYSTEMD_SERVICE', 1) + for service in systemd_services.split(): + path_found = '' + for path in searchpaths.split(): + if os.path.exists(root + path + service): + path_found = path + if path_found != '': + systemd_add_files_and_parse(pkg_systemd, path_found, service, keys) + else: + raise bb.build.FuncFailed, "\n\nFor package %s SYSTEMD_SERVICE-entry %s does not exist" % \ + (pkg_systemd, service) + for pkg_systemd in d.getVar('SYSTEMD_PACKAGES', 1).split(): systemd_generate_package_scripts(pkg_systemd) + systemd_check_services() } -- 1.7.4.4 _______________________________________________ Openembedded-devel mailing list Openembedded-devel@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel