diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-02-10 00:07:05 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-02-10 13:36:57 +0000 |
commit | 4159ff761cf29a03aeb56c7686a4e7af02b52219 (patch) | |
tree | da1ddd6b68704b8ec1f1571f5a0903d5a8ddde8e | |
parent | bb672b1591197966b79fbcf7753f995b8e829e65 (diff) | |
download | openembedded-core-4159ff761cf29a03aeb56c7686a4e7af02b52219.tar.gz openembedded-core-4159ff761cf29a03aeb56c7686a4e7af02b52219.tar.bz2 openembedded-core-4159ff761cf29a03aeb56c7686a4e7af02b52219.tar.xz openembedded-core-4159ff761cf29a03aeb56c7686a4e7af02b52219.zip |
sstate.bbclass: Optimise sstate_hardcode_path
The sstate_hardcode_path() function triggered large numbers of exec()
calls when processing packages with large numbers of file relocations
(e.g. perl). This patch optimises those calls into longer single commands
which make the code significantly more efficient.
This reduced the do_package time for perl by 2 minutes (from 4.75 minutes)
for me.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/sstate.bbclass | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index 4bd3712e5..d4f95c1d9 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass @@ -317,19 +317,24 @@ def sstate_hardcode_path(d): staging_host = d.getVar('STAGING_DIR_HOST', True) sstate_builddir = d.getVar('SSTATE_BUILDDIR', True) - for i in file_list.split('\n'): - if not i: - continue - if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d): - cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, i) - elif bb.data.inherits_class('cross', d): - cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \ - sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, i, staging, i) - else: - cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, i) + files = " ".join(file_list.split('\n')) + if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d): + cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, files) + elif bb.data.inherits_class('cross', d): + cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \ + sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, files, staging, files) + else: + cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, files) + + if files: os.system(cmd) - os.system("echo %s | sed -e 's:%s::' >> %sfixmepath" % (i, sstate_builddir, sstate_builddir)) + fix = open("%sfixmepath" % (sstate_builddir), "w") + fixme = [] + for f in file_list.split('\n'): + fixme.append(f.replace(sstate_builddir, "")) + fix.write("\n".join(fixme)) + fix.close() p.close() def sstate_package(ss, d): |