aboutsummaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-02-10 00:07:05 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-02-10 13:36:57 +0000
commit4159ff761cf29a03aeb56c7686a4e7af02b52219 (patch)
treeda1ddd6b68704b8ec1f1571f5a0903d5a8ddde8e /meta
parentbb672b1591197966b79fbcf7753f995b8e829e65 (diff)
downloadopenembedded-core-contrib-4159ff761cf29a03aeb56c7686a4e7af02b52219.tar.gz
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>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/sstate.bbclass27
1 files changed, 16 insertions, 11 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 4bd3712e57..d4f95c1d9f 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):