]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
staging: Handle overlapping files for build-sysroot
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 26 Jan 2017 10:06:35 +0000 (10:06 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 26 Jan 2017 10:41:09 +0000 (10:41 +0000)
The use of bb.fatal means build-sysroots fails as soon as multiple gdb's are
built with overlapping files, or multiple recipes with overlapping headers
exist.

Change the fatal call into an exception which we can then trap. Also
avoid trying to call readlink on something with isn't a symlink.

This allows build-sysroots to work better under various scenarios.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/staging.bbclass

index b97f26127ff56251c4352bc25fba5d8f0eebba44..1fe60ac2cb4a16c6eb2156b9635349010501a79b 100644 (file)
@@ -260,9 +260,11 @@ def staging_copyfile(c, target, fixme, postinsts, stagingdir):
     if os.path.islink(c):
         linkto = os.readlink(c)
         if os.path.lexists(dest):
+            if not os.path.islink(dest):
+                raise OSError(errno.EEXIST, "Link %s already exists as a file" % dest, dest)
             if os.readlink(dest) == linkto:
                 return dest
-            bb.fatal("Link %s already exists to a different location?" % dest)
+            raise OSError(errno.EEXIST, "Link %s already exists to a different location? (%s vs %s)" % (dest, os.readlink(dest), linkto), dest)
         os.symlink(linkto, dest)
         #bb.warn(c)
     else:
@@ -331,7 +333,10 @@ def staging_populate_sysroot_dir(targetsysroot, nativesysroot, native, d):
                     if l.endswith("/"):
                         staging_copydir(l, targetdir, stagingdir)
                         continue
-                    staging_copyfile(l, targetdir, fixme, postinsts, stagingdir)
+                    try:
+                        staging_copyfile(l, targetdir, fixme, postinsts, stagingdir)
+                    except FileExistsError:
+                        continue
 
     staging_processfixme(fixme, targetdir, targetsysroot, nativesysroot, d)
     for p in postinsts: