summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-26 20:54:23 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-26 22:07:54 +0100
commit2fb5f72b47840ed7f540df181595878e3f5ba4c6 (patch)
tree7649e021b455be5251f7fd675ae3ab351c58c151
parent288b7a9d0e6093f85e4a1d3e34d4332b9c43b47b (diff)
downloadopenembedded-core-2fb5f72b47840ed7f540df181595878e3f5ba4c6.tar.gz
openembedded-core-2fb5f72b47840ed7f540df181595878e3f5ba4c6.tar.bz2
openembedded-core-2fb5f72b47840ed7f540df181595878e3f5ba4c6.tar.xz
openembedded-core-2fb5f72b47840ed7f540df181595878e3f5ba4c6.zip
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. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/package_rpm.bbclass22
1 files changed, 13 insertions, 9 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index ffe3b312f..d90976b65 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -1004,8 +1004,9 @@ python do_package_rpm () {
# Construct per file dependencies file
def dump_filerdeps(varname, outfile, d):
- outfile.write("#!/bin/sh\n")
- outfile.write("\n# Dependency table\n")
+ outfile.write("#!/usr/bin/env python\n\n")
+ outfile.write("# Dependency table\n")
+ outfile.write('deps = {\n')
for pkg in packages.split():
dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
dependsflist = (d.getVar(dependsflist_key, True) or "")
@@ -1018,7 +1019,7 @@ python do_package_rpm () {
file = file.replace("@tab@", "\t")
file = file.replace("@space@", " ")
file = file.replace("@at@", "@")
- outfile.write("#" + pkgd + file + "\t")
+ outfile.write('"' + pkgd + file + '" : "')
for dep in depends_dict:
ver = depends_dict[dep]
if dep and ver:
@@ -1027,12 +1028,15 @@ python do_package_rpm () {
outfile.write(dep + " " + ver + " ")
else:
outfile.write(dep + " ")
- outfile.write("\n")
- outfile.write("\n\nwhile read file_name ; do\n")
- outfile.write("\tlength=$(echo \"#${file_name}\t\" | wc -c )\n")
- outfile.write("\tline=$(grep \"^#${file_name}\t\" $0 | cut -c ${length}- )\n")
- outfile.write("\tprintf \"%s\\n\" ${line}\n")
- outfile.write("done\n")
+ outfile.write('",\n')
+ outfile.write('}\n\n')
+ outfile.write("import sys\n")
+ outfile.write("while 1:\n")
+ outfile.write("\tline = sys.stdin.readline().strip()\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
outdepends = workdir + "/" + srcname + ".requires"