mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
package_rpm.bbclass: Replace shell provides/requires script with python version
The existing shell script is a fork bomb and forks off hundreds of grep/cur/wc calls as it reads from its input stream and iterates over the file data table for each line of input. This patch replaces the shell code with python code which doesn't exec anything and hence runs much faster without the exec() overhead. This speeds up rpm packaging considerably, as can be measured simply by timing it, or watching the processor utilisation. (From OE-Core rev: 2fb5f72b47840ed7f540df181595878e3f5ba4c6) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -1004,8 +1004,9 @@ python do_package_rpm () {
|
|||||||
|
|
||||||
# Construct per file dependencies file
|
# Construct per file dependencies file
|
||||||
def dump_filerdeps(varname, outfile, d):
|
def dump_filerdeps(varname, outfile, d):
|
||||||
outfile.write("#!/bin/sh\n")
|
outfile.write("#!/usr/bin/env python\n\n")
|
||||||
outfile.write("\n# Dependency table\n")
|
outfile.write("# Dependency table\n")
|
||||||
|
outfile.write('deps = {\n')
|
||||||
for pkg in packages.split():
|
for pkg in packages.split():
|
||||||
dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
|
dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
|
||||||
dependsflist = (d.getVar(dependsflist_key, True) or "")
|
dependsflist = (d.getVar(dependsflist_key, True) or "")
|
||||||
@@ -1018,7 +1019,7 @@ python do_package_rpm () {
|
|||||||
file = file.replace("@tab@", "\t")
|
file = file.replace("@tab@", "\t")
|
||||||
file = file.replace("@space@", " ")
|
file = file.replace("@space@", " ")
|
||||||
file = file.replace("@at@", "@")
|
file = file.replace("@at@", "@")
|
||||||
outfile.write("#" + pkgd + file + "\t")
|
outfile.write('"' + pkgd + file + '" : "')
|
||||||
for dep in depends_dict:
|
for dep in depends_dict:
|
||||||
ver = depends_dict[dep]
|
ver = depends_dict[dep]
|
||||||
if dep and ver:
|
if dep and ver:
|
||||||
@@ -1027,12 +1028,15 @@ python do_package_rpm () {
|
|||||||
outfile.write(dep + " " + ver + " ")
|
outfile.write(dep + " " + ver + " ")
|
||||||
else:
|
else:
|
||||||
outfile.write(dep + " ")
|
outfile.write(dep + " ")
|
||||||
outfile.write("\n")
|
outfile.write('",\n')
|
||||||
outfile.write("\n\nwhile read file_name ; do\n")
|
outfile.write('}\n\n')
|
||||||
outfile.write("\tlength=$(echo \"#${file_name}\t\" | wc -c )\n")
|
outfile.write("import sys\n")
|
||||||
outfile.write("\tline=$(grep \"^#${file_name}\t\" $0 | cut -c ${length}- )\n")
|
outfile.write("while 1:\n")
|
||||||
outfile.write("\tprintf \"%s\\n\" ${line}\n")
|
outfile.write("\tline = sys.stdin.readline().strip()\n")
|
||||||
outfile.write("done\n")
|
outfile.write("\tif not line:\n")
|
||||||
|
outfile.write("\t\tsys.exit(0)\n")
|
||||||
|
outfile.write("\tif line in deps:\n")
|
||||||
|
outfile.write("\t\tprint(deps[line] + '\\n')\n")
|
||||||
|
|
||||||
# OE-core dependencies a.k.a. RPM requires
|
# OE-core dependencies a.k.a. RPM requires
|
||||||
outdepends = workdir + "/" + srcname + ".requires"
|
outdepends = workdir + "/" + srcname + ".requires"
|
||||||
|
|||||||
Reference in New Issue
Block a user