]> code.ossystems Code Review - openembedded-core.git/commitdiff
sstate.bbclass: Turn absolute symbolic links into relative ones for sstate packages
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 18 Mar 2011 23:04:26 +0000 (23:04 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 18 Mar 2011 23:04:26 +0000 (23:04 +0000)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/sstate.bbclass

index b4873f0f3d841016139df689dd8c208a1eb33135..47d05689b6a88d3b33f78f47b3061cdd217c7a82 100644 (file)
@@ -301,18 +301,45 @@ def sstate_hardcode_path(d):
 def sstate_package(ss, d):
     import oe.path
 
+    def make_relative_symlink(path, outputpath, d):
+        # Replace out absolute TMPDIR paths in symlinks with relative ones
+        if not os.path.islink(path):
+            return
+        link = os.readlink(path)
+        if not os.path.isabs(link):
+            return
+        if not link.startswith(tmpdir):
+            return
+
+        depth = link.rpartition(tmpdir)[2].count('/')
+        base = link.partition(tmpdir)[2].strip()
+        while depth > 1:
+            base = "../" + base
+            depth -= 1
+
+        bb.debug(2, "Replacing absolute path %s with relative path %s" % (link, base))
+        os.remove(path)
+        os.symlink(base, path)
+
+    tmpdir = bb.data.getVar('TMPDIR', d, True)
+
     sstatebuild = bb.data.expand("${WORKDIR}/sstate-build-%s/" % ss['name'], d)
     sstatepkg = bb.data.getVar('SSTATE_PKG', d, True) + '_'+ ss['name'] + ".tgz"
     bb.mkdirhier(sstatebuild)
     bb.mkdirhier(os.path.dirname(sstatepkg))
     for state in ss['dirs']:
         srcbase = state[0].rstrip("/").rsplit('/', 1)[0]
-        oe.path.copytree(state[1], sstatebuild + state[0])
         for walkroot, dirs, files in os.walk(state[1]):
             for file in files:
                 srcpath = os.path.join(walkroot, file)
                 dstpath = srcpath.replace(state[1], sstatebuild + state[0])
                 bb.debug(2, "Preparing %s for packaging at %s" % (srcpath, dstpath))
+                make_relative_symlink(srcpath, dstpath, d)
+            for dir in dirs:
+                srcpath = os.path.join(walkroot, dir)
+                dstpath = srcpath.replace(state[1], sstatebuild + state[0])
+                make_relative_symlink(srcpath, dstpath, d)
+        oe.path.copytree(state[1], sstatebuild + state[0])
 
     workdir = bb.data.getVar('WORKDIR', d, True)
     for plain in ss['plaindirs']: