]> code.ossystems Code Review - openembedded-core.git/commitdiff
sstate.bbclass: Optimise sstate_hardcode_path
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 10 Feb 2012 00:07:05 +0000 (00:07 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 10 Feb 2012 13:36:57 +0000 (13:36 +0000)
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>
meta/classes/sstate.bbclass

index 4bd3712e57dc406f57667d3798db68097fe7f86f..d4f95c1d9f765a91fea236d558c9a465c8890729 100644 (file)
@@ -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):